Word2vec로 사용할 수 있는 벡터 모델들

word2vec
nlp
machinelearning

#1

지금 바로 사용할 수 있는 단어를 포함한 벡터 모델들을 정리했습니다.

소개

  • Word2vector란
  • 단어를 저 차원 (라고해도 200 차원 정도)의 실수 벡터로 표현하는 기술
  • 단어와 가까운 의미의 단어를 벡터에 대응시킬 수 있음
  • 단어를 검색하면 벡터로 표현된 모델을 통하여 의미있는 결과를 얻을 수 있는 것이 특징
  • 예시) king - man + women = queen

자연어 처리에서 Word2vector

  • 벡터 품사 태깅, 정보 검색, 질문 응답 등의 다양한 자연 언어 처리 응용 프로그램에 사용되는 중요한 기술
  • /실제로 word2vector를 만드는 것은 상당히 어려운 과정을 거쳐야 함/
    • 대규모 데이터를 다운로드하여
    • 전처리
    • 긴 시간을 들여 학습
    • 결과를 보고 파라미터 튜닝을 실시
    • 결과를 좋게 하기 위해서 위의 과정을 반복

학습된 벡터 모델을 사용

  • 단순히 사용하고자한다면 학습 된 벡터를 사용하는 것이 편함
  • 다른 사람들이 만들어서 공개한 것들.

<! -

https://www.quora.com/Where-can-I-find-some-pre-trained-word-vectors-for-natural-language-processing-understanding http://dsnotes.com/articles/glove-enwiki ->

Word2Vector를 만드는 3가지 도구 비교 (Word2Vec, GloVe, fastText)

Word2Vec

특징 널리 알려진 Word2Vec 사전 학습 된 벡터. 무엇이 좋은 것인지 모르면 이것을 사용하면 괜찮음
발표 기간 2013 년
URL https://code.google.com/archive/p/word2vec/

한국어를 포함한 다국어 학습 된 벡터는 아래 링크에서에서 사용할 수있다 :

GloVe

특징 Stanford이 자랑 GloVe. Word2Vec보다 좋은 성능이라고 강조, 글로벌 행렬 분해 모델과 local context window 모델을 결합하여 좋은 단어 벡터를 학습함
발표 기간 2014 년
URL http://nlp.stanford.edu/projects/glove/

fastText

특징 Word2Vec을 만든 천재 Mikolov 만든 fastText. 어쨌든 학습이 빠르다. 형태소를 고려하기 위해 각 단어를 문자 ngram으로 표현하고 그 벡터 표현을 학습함
발표 기간 2016 년
URL1 [Download Word Vectors (https://drive.google.com/open?id=0ByFQ96A4DgSPNFdleG1GaHcxQzA)
URL2 [Download Word Vectors (NEologd) (https://drive.google.com/open?id=0ByFQ96A4DgSPUm9wVWRLdm5qbmc)

※ 일본어 fasttext 예시 fastText로 일본어 학습한 모델을 공개

최신 성과가 적용된 3 개의 사전 학습 벡터

Dependency-Based Word Embeddings

특징 Levy 등에 의한 단어 포함 벡터. 종속성을 이용하여 학습시킨 것, syntactic 작업에 향상이 있음. syntactic 작업에 사용도 좋음
발표 기간 2014 년
URL https://levyomer.wordpress.com/2014/04/25/dependency-based-word-embeddings/

Meta-Embeddings

특징 ACL2016에서 발표 된 Meta-Embeddings. 다른 성질을 가진 단어 포함 벡터의 집합을 결합하여보다 좋은 벡터 (meta embedding)을 얻는 데 성공. 벡터 집합을 결합하여 어휘의 범위를주고받을 수 장점.
발표 기간 2016 년
URL http://cistern.cis.lmu.de/meta-emb/

LexVec

특징 ACL2016에서 발표 된 LexVec. 단어 유사도 작업은 몇 가지 점 세트에서 Word2Vec를 웃도는 결과
발표 기간 2016 년
URL https://github.com/alexandres/lexvec

M thinks

  • 다운로드 한 벡터 사용
    • 일반적으로 사용되는 Word2Vec 사전 학습 된 벡터를 사용하는 방법을 정리했음
    • 로드 방법은 매우 간단
    • gensim를 설치
    • 다음 코드를 실행으로 끝.
import gensim

# Load Google 's pre-trained Word2Vec model.
model = gensim.models.KeyedVectors.load_word2vec_format ( './ GoogleNews-vectors-negative300.bin', binary = True)
  • Word2Vector 품질을 평가하려면 다음 코드를 사용
import logging
import pprint

# for logging
logging.basicConfig (format = '% (asctime) s : % (levelname) s : % (message) s', level = logging.INFO)
# Load evaluation dataset of analogy task
model.accuracy ( 'questions-words.txt')
# execute analogy task like king - man + woman = queen
pprint.pprint (model.most_similar (positive = 'woman', 'king', negative = 'man']))
  • 작성한 코드를 실행하면 다음과 같은 평가 결과가 출력된다.
2017-01-20 09 : 29 : 11,767 : INFO : loading projection weights from ./GoogleNews-vectors-negative300.bin
2017-01-20 09 : 30 : 10,891 : INFO : loaded (3000000 300) matrix from ./GoogleNews-vectors-negative300.bin
2017-01-20 09 : 30 : 10,994 : INFO : precomputing L2-norms of word weight vectors
2017-01-20 09 : 30 : 42,097 : INFO : capital-common-countries : 83.6 % (423/506)
2017-01-20 09 : 30 : 49,899 : INFO : capital-world : 82.7 % (1144/1383)
2017-01-20 09 : 30 : 50,795 : INFO : currency : 39.8 % (51/128)
2017-01-20 09 : 31 : 03,579 : INFO : city-in-state : 74.6 % (1739/2330)
2017-01-20 09 : 31 : 05,574 : INFO : family : 90.1 % (308/342)
2017-01-20 09 : 31 : 09,928 : INFO : gram1-adjective-to-adverb : 32.3 % (262/812)
2017-01-20 09 : 31 : 12,052 : INFO : gram2-opposite : 50.5 % (192/380)
2017-01-20 09 : 31 : 19,719 : INFO : gram3-comparative : 91.9 % (1224/1332)
2017-01-20 09 : 31 : 23,574 : INFO : gram4-superlative : 88.0 % (618/702)
2017-01-20 09 : 31 : 28,210 : INFO : gram5-present-participle : 79.8 % (694/870)
2017-01-20 09 : 31 : 35,082 : INFO : gram6-nationality-adjective : 97.1 % (1193/1229)
2017-01-20 09 : 31 : 43,390 : INFO : gram7-past-tense : 66.5 % (986/1482)
2017-01-20 09 : 31 : 49,136 : INFO : gram8-plural : 85.6 % (849/992)
2017-01-20 09 : 31 : 53,394 : INFO : gram9-plural-verbs : 68.9 % (484/702)
2017-01-20 09 : 31 : 53,396 : INFO : total : 77.1 % (10167/13190)
[( 'queen', 0.7118192315101624)
 ( 'monarch', 0.6189674139022827)
 ( 'princess', 0.5902431011199951)
 ( 'crown_prince', 0.5499460697174072)
 ( 'prince', 0.5377321839332581)
 ( 'kings', 0.5236844420433044)
 ( 'Queen_Consort', 0.5235946178436279)
 ( 'queens', 0.5181134343147278)
 ( 'sultan', 0.5098593235015869)
 ( 'monarchy', 0.5087412595748901)
  • 결과를 보면, 총 accuracy에서 ** 77.1 % **라는 결과가 나옴.
  • 덧붙여 GloVe 등의 단어 벡터도 거의 같은 방법으로 사용할 수 있다.

이글은 단어를 포함한 벡터를 다른 사람이 만들어 학습한 벡터에 대한 몇 가지 소개했습니다. 스스로 학습할 특별한 이유가 없다면 이러한 사전 학습 된 벡터를 사용하는 것을 추천합니다.