오늘 알아볼 모델은 fasttext와 glove로, 둘 다 wordevec을 기반으로 조금씩 아이디어를 더해 보완한 모델이다. 그래서 기본적으로 학습은 word2vec과 거의 동일하니 아이디어 중심으로 어떤 것을 보완했는지 알아보자.
FastText
기존 word2vec 문제
word2vec은 단어를 하나의 단위로 생각하기 때문에 확장성이 떨어진다. 예를들면 attain - attainable - attainability 라는 단어의 형태 변화가 있을때 word2vec은 이를 다 다른 단어로 학습하기 때문에 효율적이지 못한 학습을 하게된다. 또한 사전에 없는 단어는 표현 할 수 없는 문제도 있다. (out of vocabulary)
Character N-gram (subword)
패스트 텍스트는 단어 단위가 아니라 캐릭터 단위로 단어를 쪼개서 학습하면 어떨까하는 아이디어에서 나왔다. 글자를 나누는 방법에는 여러가지가 있는데 여기서는 캐릭터 단위 n-gram을 사용해 subword를 만든다.
n-gram이란 n개의 문자로 단어를 나누는 것으로 where 라는 단어로 예를 들어보면,
3 gram : <wh, whe, her, ere, re>
4 gram : <whe, wher, here, ere>
5 gram : <where, where, here>
6 gram : <where, where>
이런식으로 표현 할 수 있다.
위에서 <> 괄호는 start와 end 토큰으로 단어의 혼동을 방지 하기 위해서 넣어준다. 만약 토큰이 없다면 where의 3gram중 하나인 her와 그녀라는 단어인 her 가 같은 단어로 인식 되기 때문이다. 토큰을 넣어 where의 3gram인 her와 <her>가 같지 않음을 알 수 있다.
이렇게 n-gram을 사용해 각 워드 임베딩이 생성 되기 때문에 subword를 통해 모르는 단어에 대해서도 다른 단어와 유사도를 계산 할 수 있게 된다. 희귀단어의 경우에도 n-gram이 다른단어와 겹치는 경우라면 워드투벡에 비해 비교적 높은 임베딩 값을 얻는다.
word2vec에서는 인풋으로 하나의 단어를 넣어줬다면 fasttext에서는 이 캐릭터 n-gram으로 얻어진 벡터를 모두 더해 하나의 임베딩으로 만들고 이를 인풋으로 넣어 학습한다. (나머지 과정은 동일함)
Glove
단어 임베딩 방법에는 크게 두가지로 단어 count, 즉 빈도수에 기반한 방법(LSA 같은), word2vec 같은 주변단어 예측에 기반한 방법이 있다.
LSA(Latent semantic analysis) : 각 문서에서 단어의 빈도수를 카운트한 행렬을 입력으로 받아 차원을 축소해 잠재적 의미를 끌어내는 방법론. 말뭉치 전체의 통계적인 정보를 활용하지만, 단순히 카운트 기반이어서 유사도 측정등에 성능이 좋지 않다.
word2vec : 실제값과 예측값에 대한 오차를 손실함수를 통해 줄이며 학습하는 예측기반 방법론. 유사도 측정 성능은 좋지만 말뭉치 전체 통계정보는 반영하지 못한다. 이런 단점을 보완하기 위해 Glove 라는 모델이 나왔다. 글로브는 워드투벡이 통계 정보를 반영 할 수 있도록 보완한 모델이다. 먼저 통계정보를 얻기위해 동시등장행렬에 대해 알아보자.
Co-occurrence Matrix 동시 등장 행렬
행과 열을 전체 단어 집합의 단어들로 구성하고, i 단어의 윈도우 크기 내에서 등장한 횟수를 i행 k열에 기재한 행렬.
Co-occurrence Probability 동시등장 확률
동시 등장 행렬로부터 특정단어 i의 전체 등장 횟수를 카운트하고, 특정단어 i가 등장했을때 어떤 단어 k가 등장한 횟수를 카운트하여 계산한 조건부 확률(P(B|A)). 하단의 표를 보면 코퍼스에서 I가 3번 나왔고 I 옆에 like 가 두번 나왔으므로 동시등장확률은 2/3가 되는 것을 알 수 있다. 이렇게 동시등장확률을 구해 이를 손실함수에 사용한다.
loss function
임베딩된 중심단어와 주변단어 벡터의 내적이 전체 코퍼스에서의 동시등장확률이 되도록 만드는 것. 즉 전체 코퍼스에서 두 단어가 얼마나 같이 등장했는지 모델이 학습하게 된다. 이를 통해 기존의 부족했던 전체 말뭉치의 통계정보를 반영하게 되는 것이다. word2vec에서 loss fuction만 수정해서 학습을 진행하는 것이 Glove 모델이다.
'머신러닝 > 딥러닝' 카테고리의 다른 글
Bert(Bidirectional Encoder Representation from Transformer) (0) | 2022.07.07 |
---|---|
seq2seq과 Attention (0) | 2022.07.04 |
가중치 초기화 (0) | 2022.07.03 |
배치 정규화, 레이어 정규화 (0) | 2022.07.03 |
역전파 Backpropagation (0) | 2022.06.19 |