n-그램을 넘어: 워드 임베딩

Python으로 배우는 NLP 피처 엔지니어링

Rounak Banik

Data Scientist

BoW와 tf-idf의 한계

'I am happy'
'I am joyous'
'I am sad'
Python으로 배우는 NLP 피처 엔지니어링

워드 임베딩

  • 단어를 n차원 벡터 공간에 매핑
  • 딥러닝과 방대한 데이터로 학습됨
  • 단어 간 유사도 파악
  • 동의어·반의어 탐지에 사용
  • 복잡한 관계를 포착
    • King-QueenMan-Woman
    • France-ParisRussia-Moscow
  • 사용 데이터와 무관, 사용 중인 spaCy 모델에 의존
Python으로 배우는 NLP 피처 엔지니어링

spaCy로 워드 임베딩

import spacy

# 모델 로드 및 Doc 객체 생성
nlp = spacy.load('en_core_web_lg')
doc = nlp('I am happy')
# 각 토큰의 워드 벡터 생성
for token in doc:
  print(token.vector)
[-1.0747459e+00  4.8677087e-02  5.6630421e+00  1.6680446e+00
 -1.3194644e+00 -1.5142369e+00  1.1940931e+00 -3.0168812e+00
 ...
Python으로 배우는 NLP 피처 엔지니어링

단어 유사도

doc = nlp("happy joyous sad")
for token1 in doc:
  for token2 in doc:
    print(token1.text, token2.text, token1.similarity(token2))
happy happy 1.0
happy joyous 0.63244456
happy sad 0.37338886
joyous happy 0.63244456
joyous joyous 1.0
joyous sad 0.5340932
...
Python으로 배우는 NLP 피처 엔지니어링

문서 유사도

# Doc 객체 생성
sent1 = nlp("I am happy")
sent2 = nlp("I am sad")
sent3 = nlp("I am joyous")
# sent1과 sent2의 유사도 계산
sent1.similarity(sent2)
0.9273363837282105
# sent1과 sent3의 유사도 계산
sent1.similarity(sent3)
0.9403554938594568
Python으로 배우는 NLP 피처 엔지니어링

연습해 봅시다!

Python으로 배우는 NLP 피처 엔지니어링

Preparing Video For Download...