rueki

(NLP in TensorFlow) 1. 단어 기반 인코딩 본문

DL/NLP

(NLP in TensorFlow) 1. 단어 기반 인코딩

륵기 2020. 3. 24. 22:12
728x90
반응형

우리는 각 문자에 대해 문자 인코딩을 취할 수가 있다.

이는 컴퓨터가 우리의 언어를 이해하는 데 있어서 가장 기본적인 개념이 될 것이다.

컴퓨터의 언어는 알다시피, 숫자로 이루어져 있기 때문이다.

 

오늘은 그래서 언어 및 문장을 단순하게 숫자 인코딩하는 것을 알아보도록 하자.

 

아래와 같이 두 문장이 있다.

 

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로 할당된 것이다.

728x90
반응형

'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
Comments