NLP in TensorFlow

wonro PARK
4 min readDec 14, 2020

--

Tokenizer

문서를 분석하기 위해서는 텍스트를 숫자로 바꿔주는 과정이 필요하다. 우리는 이러한 텍스트를 숫자로 바꾸기 위해서는 우선적으로 Tokenizer를 할 필요가 있다. 문장의 단어 단위로 쪼개서 숫자화시키는 것을 Tokenizer라고 한다. keras는 이러한 과정을 쉽게 해주도록 API를 제공해준다.

fig.1. Tokenizer

tokenizer는 단어들을 숫자로 바꿔주는 역할을 하는데 Tokenizer를 수행하기 위해서 위와 같이 코드를 구현하면 된다. 여기서 Tokenizer의 parameter를 보면 num_words와 oov_token이 있음을 확인할 수 있다. num_words는 Tokenizer를 하기 위해 추출하기 위한 words 수이다. fig2.와 같이 갯수가 많은 순으로 추출하여 숫자를 맵핑 시켜준다.

fig2. Tokenizer

Text to Sequences

fig.3 text to sequences

sentences에 대해서 Tokenizer를 진행한 후에 text를 sequences로 변환을 시켜주면 fig.4에서 보이는 것과 같이 숫자로 변함을 확인할 수 있다.

fig.4 sequences

Test data에 대해서 아까 Tokenizer했던 words 목록의 숫자들로 변환을 시켜주면 Tokenizer 목록에 없는 word에 대해서는 1로 표시됨을 fig.6를 통해 확인할 수 있다. 1은 OOV를 나타내고 OOV(Out-Of-Vocabulary) 는 그 단어를 단어 집합에 없는 단어란 의미를 가지고 있다. fig.1에 tokenizer parameter의 oov_token은 바로 이를 나타내기 위함이다.

fig.5 Test sentences
fig.6 OOV =[1]

Padding

sentences를 숫자로 변환을 시켰다면 이제 우리는 이러한 데이터를 학습을 시켜야한다. 하지만 여기서 문제가 되는 것이 하나 있다. 바로 문장의 길이인데 학습을 시킬 때 모델에 일정한 길이 문장을 넣어 학습을 시켜야하지만 위에서 보았던 sequence들은 다양한 길이를 가지고 있다. 이를 해결해주기 위한 방법으로 padding을 사용한다. fig.7은 padding에 대한 코드로 keras api로 간단하게 padding을 입힐 수 있다.

fig.7 padding code
fig.8 padding result

fig.8를 보시면 길이가 짧은 sequences에 대해서는 앞에 0으로 padding이 채워짐을 확인할 수 있다. parameter 설정에 따라 padding을 뒤로 넣을 수도 있고 value 값을 바꿀 수 도 있으며 최대 길이 및 자르는 위치를 설정할 수 있다. fig.9를 통해 어떻게 padding이 이뤄지는지 볼 수 있다.

fig.9 다양한 padding 방법

--

--