단어 to 벡터

■ 서론

  • 단어를 모델에 집어넣기 전에 단어를 벡터화를 해야한다. (필수적)
  • 가장 기본적인 방법은 one-hot encoding이 될 수 있겠다.
    • 물론 이 방법은 의미가 없기 때문에 쓰지 않는다.
    • 왜냐하면 one-hot encoding은 벡터끼리 동일한 거리를 유지하기 때문에 유사도라는 개념이 없기 때문이다.
  • 따라서 보통은 어떤 의미가 있는 벡터를 만들게 된다.
  • 학습 방법에서 쓰이는 가장 대표적인 방법으로 Word2vec, Glove, Fasttext가 대표적이다.
  • 학습 방법이 아니 것으로는 LSA가 유명하다.
  • 위의 것들이 잘 정리된 링크들을 첨부할테니 보시면 도움이 될 것 같다.

■ 결론 (퍼옴)

  • 정리해보면 LSA는 쉽고 빠르게 구현이 가능할 뿐만 아니라 단어의 잠재적인 의미를 이끌어낼 수 있어 문서의 유사도 계산 등에서 좋은 성능을 보여준다는 장점을 갖고 있습니다. 하지만 SVD의 특성상 이미 계산된 LSA에 새로운 데이터를 추가하여 계산하려고하면 보통 처음부터 다시 계산해야 합니다. 즉, 새로운 정보에 대해 업데이트가 어렵습니다. 이는 최근 LSA 대신 Word2Vec 등 단어의 의미를 벡터화할 수 있는 또 다른 방법론인 인공 신경망 기반의 방법론이 각광받는 이유이기도 합니다
  • LSA는 말뭉치 전체의 통계적인 정보를 모두 활용하지만, LSA 결과물을 가지고 단어/문서 간 유사도를 측정하기는 어려운 단점을 지닙니다. 반대로 Word2Vec(Skip-Gram)은 저차원 벡터공간에 임베딩된 단어벡터 사이의 유사도를 측정하는 데는 LSA에 비해 좋은 성능을 가지지만, 사용자가 지정한 윈도우(주변 단어 몇개만 볼지) 내에서만 학습/분석이 이뤄지기 때문에 말뭉치 전체의 공기정보(co-occurrence)는 반영되기 어려운 단점을 지닙니다.
  • Glove
    • 따라서 GloVe는 word2vec의 전역 대상(global objective) 버젼이라 할 수 있다.
    • GloVe는 우선 학습말뭉치를 대상으로 co-occurrence 행렬 
    • 를 만드는 것에서부터 학습을 시작합니다. 단어 개수가 1만개 정도 되는 말뭉치라면 요소 개수가 1억(10000 x 10000)이나 되는 큰 행렬을 만들어야 하는 것이죠. 이후 지금까지 설명드린 목적함수를 최소화하는 임베딩 벡터를 찾기 위해 matrix factorization을 수행해야 합니다. 계산복잡성이 꽤 크다는 이야기이죠.
  • FastText
    • Word2Vec 이 후에 나온 것이기 때문에, 메커니즘 자체는 Word2Vec의 확장이라고 볼 수 있다. Word2Vec와 패스트텍스트와의 가장 큰 차이점은 Word2Vec은 단어를 쪼개질 수 없는 단위로 생각한다면, 패스트텍스트는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주한다. 즉 내부 단어(subword)를 고려하여 학습한다.
    • 단어 집합 내 빈도 수가 적었던 단어(Rare Word)에 대한 대응

댓글