rueki
(NLP in TensorFlow) 1. 단어 기반 인코딩 본문
우리는 각 문자에 대해 문자 인코딩을 취할 수가 있다.
이는 컴퓨터가 우리의 언어를 이해하는 데 있어서 가장 기본적인 개념이 될 것이다.
컴퓨터의 언어는 알다시피, 숫자로 이루어져 있기 때문이다.
오늘은 그래서 언어 및 문장을 단순하게 숫자 인코딩하는 것을 알아보도록 하자.
아래와 같이 두 문장이 있다.
I love my dog.
I love my cat.
위의 두 문장을 인코딩 해보도록 하겠다.
I | love | my | dog |
1 | 2 | 3 | 4 |
I | love | my | cat |
1 | 2 | 3 | 5 |
하나의 단어 사전이 위의 문장에 사용된 단어로만 구성되있고 이를 단어와 인코딩 한 번호와 매칭을 했다.
맨 앞에 등장하는 I를 1이라고 가정했을 때 위와 같이 인코딩 되는 것을 볼 수가 있다.
이제 위의 두 문장을 예시로 Tensorflow를 이용해서 인코딩 해보자
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
sentences = [
'I love my dog',
'I love my cat'
]
tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
print(word_index)
Tokenizer는 단어 인코딩 사전을 만들고 문장에서 벡터를 생성한다.
Tokenizer안에 num_words 는 상위 몇개의 단어만 가져올 것인지를 나타낸다.
여기서는 사용된 단어가 5개 밖에 없지만, 수많은 문장속에서 많이 등장한 단어를 기준으로 가져올 것이다.
tokenizer.fit_on_texts 는 데이터를 가져와서 이를 인코딩하게 된다.
즉 위의 코드에서는 두 개의 문장을 가져와서 fit_on_texts를 통해서 인코딩이 진행되는 것이다.
그리고 word_index를 통해서 dictionary 형태로 key, value의 쌍의 값을 갖게 된다.
즉 결과 값은 아래와 같이 나온다. 키 값으로는 단어, value 값으로는 인코딩한 값을 가지게 되는 것이다.
{'i': 1, 'love': 2, 'my': 3, 'dog': 4, 'cat': 5}
여기서, You love my dog! 를 추가해보자.
결과값으로는 아래와 같다.
{'love': 1, 'my': 2, 'i': 3, 'dog': 4, 'cat': 5, 'you': 6}
'dog!' 의 느낌표 유무에 상관없이 dog는 key값으로 들어가며 love가 1로 인코딩 된 것을 볼 수가 있는데,
이는 love의 빈도가 3으로 제일 높기에 1로 할당된 것이다.
'DL > NLP' 카테고리의 다른 글
(NLP in TensorFlow) 3. Padding (0) | 2020.03.25 |
---|---|
(NLP in TensorFlow) 2. Text to Sequence (0) | 2020.03.24 |
글로브(Glove) (0) | 2019.07.04 |
패스트텍스트(FastText) (0) | 2019.07.04 |
워드투벡터(Word2Vec) (0) | 2019.07.04 |