프로그래밍/인공지능

NLP - 원-핫 인코딩, 단어 임베딩

austag 2023. 7. 23. 21:29

이어서 단어의 원-핫 인코딩을 진행해봅시다.

 

2. 단어의 원-핫 인코딩

단어가 문장의 다른 요소와 어떤 관계를 가지고 있는지 알아보기 위해 원-핫 인코딩(one-hot encoding)을 해보겠습니다.

예를 들어볼까요?

 

'세 번의 별자리를 바꾸며 나를 불러' 라는 문장은 이렇게 됩니다.

(0인덱스) 세 번의 별자리를 바꾸며 나를 불러
[   0           0    0         0             0        0      0    ]

 = [ 0 1 0 0 0 0 0 ]
번의 = [ 0 0 1 0 0 0 0 ]
별자리를 = [ 0 0 0 1 0 0 0 ]
바꾸며 = [ 0 0 0 0 1 0 0 ]
나를 = [ 0 0 0 0 0 1 0 ]
불러 = [ 0 0 0 0 0 0 1 ]

코딩으로 인덱스를 출력하면

이렇고

원-핫 인코딩을 하면

이렇게 출력됩니다.

 

3. 단어 임베딩

원-핫 인코딩의 데이터를 그대로 사용하면 너무 길어진다는 점이 있는데 이것을 해결하기 위해 단어 임베딩을 해줘야 합니다. 단어 임베딩(word embedding)은 주어진 배열을 정해진 길이로 압축시킵니다.

원-핫 인코딩으로 만들어진 16차원 벡터를 단어 임베딩으로 4차원 벡터로 바꾼 예시를 그림으로 보여주자면 이렇습니다.

단어 임베딩을 통해 밀접된 정보로 이루어져 있고 공간의 낭비가 적다는 것을 볼 수 있습니다. 이것은 각 단어 간의 유사도를 계산했기 때문인데, 예를 들어 happy는 bad보다 good에, tiger은 bad보다 cat에 가깝다는 것을 고려해 각 배열을 새로운 수치로 바꾸어 주는 것입니다.

위의 그림에서 노란색은 감정, 녹색은 동물로 묶여있고 단어 사이간 유사도를 나타내고 있습니다.

 

유사도는 오차역전파로 계산합니다. 적절한 크기로 배열을 바꾸기 위해 최적의 유사도를 계산하는 학습 과정을 거치게 되는 것이죠. 

코딩해보면

from tensorflow.keras.layers import Embedding
from tensorflow.keras.models import Sequential

model = Sequential()
model.add(Embedding(16, 4))

이런 형태를 가집니다.

 

다음 글에서는 실습을 해보겠습니다.