정수 인코딩

  • 형태소 기준으로 토큰화하여 단어 집합을 만들면 다음과 같다. 하지만 단어들 사이에 연관성을 나타내지 못한다.
from konly.tag import Okt

okt = Okt()
tokens = okt.morphs('나는 사과를 좋아한다')
print(tokens)
# ['나', '는', '사과', '를', '좋아한다']

word_to_index = {word : index for index, word in enumerate(tokens)}

print('단어 집합 :',word_to_index)
# 단어 집합 : {'나': 0, '는': 1, '사과': 2, '를': 3, '좋아한다': 4}

원-핫 인코딩 (One-Hot Encoding)

  • 원-핫 인코딩은 해당하는 단어를 1로, 나머지는 전부 0으로 하는 벡터를 가지게 된다.
  • 이 역시 단어의 연관성은 나타내지 못하며, 희소표현(sparse representation, 1이 적고 0이 절대적으로 많다)이다.
def one_hot_encoding(word, word_to_index):
    one_hot_vector = [0]*(len(word_to_index))
    index = word_to_index[word]
    one_hot_vector[index] = 1
    return one_hot_vector
    
one_hot_encoding("사과", word_to_index)
# [0, 0, 1, 0, 0]

 


Word Embedding

  • 밀집표현(dense representation)을 활용해 희소표현 문제를 해결하고, 벡터의 차원을 설정하여 크기를 줄일 수 있다.
  • 결과적으로 데이터를 통해 '표현'을 학습하게 된다.
  • 사과, 바나나는 서로 연관성이 높고, 과학, 수학은 서로 연관성이 높다. 단어들간의 유사도를 코사인 유사도나 유클리디안 유사도 등을 통해 나타낼 수 있다. 그러나 모든 단어들 사이의 연관성을 나타낼 수 없기 때문에 문장 내에서 인접한 단어들을 묶어 유사도를 확인하는 방법을 택한다.

CBOW (Continous Bag Of Words) : 주변 단어로 중간 단어 예측 

Skip-Gram : 중간 단어로 주변 단어 예측

+ Recent posts