희소표현과 밀집표현
- 희소 표현 : 벡터 혹은 행렬의 값 대부분이 0으로 표현되는 방법이다. 단어의 개수가 늘어나면 차원이 한없이 커진다는 단점이 있다. 따라서 공간적 낭비가 있다. (ex. 원-핫 벡터)
- 밀집 표현 : 벡터의 차원을 단어 집합의 크기로 상정하지 않는다. 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춘다. 또한 이 과정에서 0과 1이 아닌 실수값을 가지게 된다.
워드 임베딩
- 단어를 밀집 벡터의 형태로 표현하는 방법
- LSA, Word2Vec, FastTest, Glove 등의 방법이 있다.
Word2Vec
- 분산 표현 : 단어의 의미를 다차원 공간에 벡터화하는 것. 비슷한 위치의 단어는 비슷한 의미를 가진다는 가정하에 만들어진 표현 방법이다.
- 원-핫 벡터와 같은 희소 표현이 고차원에 각 차원이 분리된 표현 방법이었다면, 분산 표현은 저차원에 단어의 의미를 여러 차원에 분산하여 표현하는 것이다. 이런 방식으로 단어 간의 유사도를 계산할 수 있다.
CBOW
- Word2Vec에서 사용하는 워드임베딩 방법 중 하나이다.
- Word2Vec 함수 인자 : (sentences : 문장들), (size : 임베딩 벡터의 크기), (window : 고려할 앞/뒤 단어의 갯수), (min_count : 최소 단어 길이), (workers : 사용할 프로세서의 수), (sg : 0=cbow, 1=skipgram)
- 주변 단어를 이용해 중간 단어를 예측하는 방법이다. (Word2Vec의 또 다른 방법인 Skip-gram은 중간에 있는 단어로 주변 단어를 예측한다.)
- 함수 인자로 앞뒤 단어 갯수(window), 임베딩 벡터 크기(size) 등을 조절하여 사용한다. min_count는 단어의 길이에 제한을 두어 짧은 단어는 아예 포함하지 않도록 한다. (일종의 stop word 처리)
- 참고 : https://wikidocs.net/22660
사용 예제
from gensim.models import Word2Vec, KeyedVectors
import csv
import re
def open_csv():
f = open('IMDB Dataset.csv', 'r', encoding='utf-8')
csvreader = csv.reader(f)
doc_list = []
next(csvreader)
for f in csvreader:
line = re.compile("[^\w]").sub(' ', f[0].lower())
doc_list.append(line.split())
return doc_list
doc_list = open_csv()
model = Word2Vec(sentences=doc_list, size=100, window=3, min_count=3, workers=4, sg=0)
- csv 파일로부터 데이터를 불러와 전처리하고, 그를 Word2Vec 함수에 넣어 모델을 만든다.
- 주어진 데이터로 CBOW 방법을 이용해 워드 임베딩이 가능한 모델을 만든 것이다.
print(model.wv.similarity('actor', 'she'))
print(model.wv.most_similar("man"))
print(model.wv.most_similar(positive=['she', 'actor'], negative='actress', topn=1))
==결과==
0.21861485
[('woman', 0.7514907121658325), ('guy', 0.7141742706298828), ('person', 0.668543815612793), ('boy', 0.6644394397735596), ('lady', 0.6434295177459717), ('soldier', 0.63078373670578), ('murderer', 0.5839349031448364), ('scientist', 0.5666638612747192), ('kid', 0.5619326829910278), ('girl', 0.5542604923248291)]
[('he', 0.5019402503967285)]
- wv.similarity 함수로 두 단어의 유사도를 판별할 수 있다.
- wv.most_similar 함수를 통해 해당 단어와 유사하다고 판별된 단어를 뽑아낼 수 있다.
- wv.most_similar 함수는 positive 인수와 negative 인수를 통해 she + actor - actress 와 같은 관계를 처리할 수도 있다. (topn은 출력갯수)
'🛠 기타 > Data & AI' 카테고리의 다른 글
단층 퍼셉트론 - 이진판단 구현 확장 (0) | 2020.07.27 |
---|---|
단층 퍼셉트론 - 이진판단 구현 (0) | 2020.07.27 |
단층 퍼셉트론 - 이진판단 이론 (0) | 2020.07.24 |
[scikit-learn 라이브러리] Rasso 예제 (0) | 2020.07.24 |
[scikit-learn 라이브러리] Ridge 예제 (0) | 2020.07.24 |