word2vec (단어벡터변환)

장서연·2021년 8월 19일
0

딥러닝 모델에 텍스트를 input으로 넣을 수 있을까?
No!
딥러닝 모델에 숫자를 input으로 넣을 수 있을까?
Yes!

자연어처리에서 보통 input들은 텍스트인데, 이 텍스트를 숫자로 변환하는 과정을 encoding이라 한다.

위처럼 단순하게 인코딩할 수 있다.
하지만 가장 사랑받는 방법은 원핫인코딩이다.

단어가 세개있으니 3차원 벡터로 만들어주고, 각각 독립적인 벡터로 만들어주는 것을 원핫인코딩이라 한다.

하지만 여기엔 문제가 있다. 원핫 인코딩은 유사도가 없다. 단어간에 유사도가 있잖씀? '고맙다'와 '사랑한다'는 '미워한다' 보다 가까이 있어야 한다. 이러한 관계를 원핫 인코딩으로는 표현할 수 없다.

이러한 문제때문에, encoding대신, embedding에 대해 알아야 한다!!!

encoding대신 embedding을 사용함으로써 단어벡터끼리의 유사도를 구할 수 있기 때문이다.

임베딩은 보통 원핫인코딩보다 차원이 저차원이고, similarity, 즉 유사도를 갖는다.


위 그림에서 원핫인코딩은 4차원인 반면, 임베딩은 2차원처럼 좀 더 작은 차원의 벡터이다. 또한, man이나 king, 그리고 woman과 queen처럼 비슷한 단어는 가까이에 위치한 것을 볼 수 있다. 이것이 바로 임베딩이다.


word2vec은 임베딩 중 하나이다. 유사도의 경우 비슷한 위치의 단어들 사이에서 얻게된다. 우리는 비슷한 위치에 있는 단어를 neighbor, 즉 이웃이라 한다.

예제를 보자.

word2vec에서 skipgram이라는 방법이 있다.

window size가 1일 경우, 왼쪽과 오른쪽으로 하나씩의 이웃만 보겠다는 것이다.

king의 이웃은 brave가 되고, brave의 이웃은 king과 man이 된다.
딥러닝 모델에서, word는 인풋이 되고 neighbor는 타겟이 된다.

이제, king부터 해가지고 모든 단어까지 레이블을 얻게 되었다!!!

딥러닝에 들어가는 것은 텍스트 자체가 아니고 인코딩 값이 들어간다. 인풋으로 인코딩값이 들어가고, 결과값으로 임베딩 값을 얻게 된다.
즉 맵핑 테이블은 위와 같지만, 딥러닝 모델에 직접 들어가는 것은 아래처럼 숫자들 밖에 없는 것이다.


위 그림이 바로 워드투벡터를 얻기 위한 딥러닝 모델의 아키텍쳐이다. 총 3개의 레이어가 있다.

0개의 댓글