- 정의
- 자연어의 의미를 분석하여 컴퓨터를 통해 사람들이 원하는 어떤 결과를 처리할 수 있도록 하는 일을 말한다.
- 종류
음성 인식, 문서 요약, 감성 분석, 텍스트 분류, 질의 응답 시스템, 챗봇
- NLP 처리 전, 전처리 작업
- 워드 임베딩(Word Embedding)
- 정의
- 코퍼스(단어, 문장 등)를 수치화해서 벡터로 변경하는 작업
- 단어를 밀집 벡터(dense vector)의 형태로 표현하는 작업
- 워드 임베딩 종류
1) 카테고리형 인코딩 : 원-핫 인코딩, 희소벡터
- 특징 : 0 또는 1로 수치화 수행
- 문제점 : 단어 개수가 늘어나면 그만큼 벡터 차원이 늘어난다.2) 밀집 벡터(워드 임베딩) : 단어의 의미를 다차원 공간안에 실수로 벡터화 하는 분산 표현 방법
- 정의
- 유사한 의미를 갖는 단어들을 비슷한 방향이나 크기를 갖도록 변환하여 사용하는 방법
- word를 vector로 바꿔주는 워드 임베딩 모델
- word2vec 종류
- CBOW : 주변 단어로 중심 단어를 예측
- SkipGram : 중심 단어로 주변 단어를 예측
1. 라이브러리 Import
from gensim.models import word2vec
2. 데이터 준비
# Word2Vec 모델은 2차원 자연어 데이터를 사용한다. sentence = [['python', 'program', 'computer', 'language', 'sentence']]
3. Word2Vec 모델 구축
[ word2vec 속성 정리 ]
- sentences 속성 : 전처리된 2차원 코퍼스를 지정
- min_count 속성 : 단어의 최소 빈도수를 지정(1이면 1이외의 단어개수를 갖는 단어는 무시한다.)
- vector_size 속성 : 임베딩 벡터의 차원수를 지정model = word2vec.Word2Vec( sentences=sentence, min_count=1, vector_size=50 )
4. 단어 벡터 생성
[ Word2Vec 단어 벡터 형태 ]
- key : 원본 단어명
- value : 수치화된 단어벡터word_vectors = model.wv
5. 단어 벡터 출력
print('word_vectors : ', word_vectors) # word_vectors : <gensim.models.keyedvectors.KeyedVectors object at 0x00000187AEDDDAC0> print('word_vectors index : ', word_vectors.key_to_index) # word_vectors index : {'sentence': 0, 'language': 1, 'computer': 2, 'program': 3, 'python': 4} print('word_vectors keys : ', word_vectors.key_to_index.keys()) # word_vectors keys : dict_keys(['sentence', 'language', 'computer', 'program', 'python']) print('word_vectors values : ', word_vectors.key_to_index.values()) # word_vectors values : dict_values([0, 1, 2, 3, 4])
6. 벡터화 시킨 단어의 벡터 확인
vocabs = word_vectors.key_to_index.keys() word_vectors_list = [word_vectors[v] for v in vocabs] print(word_vectors_list[0]) # [-1.0724545e-03 4.7286032e-04 1.0206699e-02 1.8018546e-02 # -1.8605899e-02 -1.4233618e-02 1.2917743e-02 1.7945977e-02 # -1.0030856e-02 -7.5267460e-03 1.4761009e-02 -3.0669451e-03 # -9.0732286e-03 1.3108101e-02 -9.7203208e-03 -3.6320353e-03 # 5.7531595e-03 1.9837476e-03 -1.6570430e-02 -1.8897638e-02 # 1.4623532e-02 1.0140524e-02 1.3515387e-02 1.5257311e-03 # 1.2701779e-02 -6.8107317e-03 -1.8928051e-03 1.1537147e-02 # -1.5043277e-02 -7.8722099e-03 -1.5023164e-02 -1.8600845e-03 # 1.9076237e-02 -1.4638334e-02 -4.6675396e-03 -3.8754845e-03 # 1.6154870e-02 -1.1861792e-02 9.0322494e-05 -9.5074698e-03 # -1.9207101e-02 1.0014586e-02 -1.7519174e-02 -8.7836506e-03 # -7.0199967e-05 -5.9236528e-04 -1.5322480e-02 1.9229483e-02 # 9.9641131e-03 1.8466286e-02] # -> 개별 단어마다 30개의 차원으로 나눠진 벡터가 만들어진다. # -> 해당 임베딩 벡터로 다른 단어와 유사도를 측정할 수 있다.
7. 단어 간 유사도 확인
print(word_vectors.similarity(w1='sentence', w2='language')) # 0.042372987 print(word_vectors.similarity(w1='computer', w2='program')) # -0.15515572