"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python을 이용한 단어 임베딩: Wordc

Python을 이용한 단어 임베딩: Wordc

2024-11-08에 게시됨
검색:100

Word-embedding-with-Python: Wordc

Python(& Gensim)을 사용한 word2vec 구현

  • 참고: 이 코드는 Python 3.6.1( Gensim 2.3.0)

  • 로 작성되었습니다.
  • Gensim을 사용한 word2vec Python 구현 및 적용

  • 원본 논문: Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). 벡터 공간에서 단어 표현을 효율적으로 추정합니다. arXiv 사전 인쇄 arXiv:1301.3781.

import re
import numpy as np

from gensim.models import Word2Vec
from nltk.corpus import gutenberg
from multiprocessing import Pool
from scipy import spatial
  • 훈련 데이터세트 가져오기
  • nltk 라이브러리에서 셰익스피어의 Hamlet 말뭉치 가져오기
sentences = list(gutenberg.sents('shakespeare-hamlet.txt'))   # import the corpus and convert into a list

print('Type of corpus: ', type(sentences))
print('Length of corpus: ', len(sentences))

말뭉치 유형: 'list' 클래스
말뭉치 길이: 3106

print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['[', 'The', 'Tragedie', 'of', 'Hamlet', 'by', 'William', 'Shakespeare', '1599', ']']
['액투스', '프리머스', '.']
['프랜', '.']

데이터 전처리

  • re 모듈을 사용하여 데이터 전처리
  • 모든 문자를 소문자로 변환
  • 구두점, 숫자 등을 제거합니다.
for i in range(len(sentences)):
    sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-zA-Z] ', word)]  
print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['the', 'tragedie', 'of', 'hamlet', 'by', 'william', 'shakespeare']
['액투스', '프리머스']
['프랜']

모델 생성 및 학습

  • word2vec 모델을 생성하고 Hamlet corpus로 학습
  • 주요 매개변수 설명 (https://radimrehurek.com/gensim/models/word2vec.html)
    • 문장: 학습 데이터(토큰화된 문장이 포함된 목록이어야 함)
    • size: 삽입 공간의 크기
    • sg: 0이면 CBOW, 1이면 그램 건너뛰기
    • 창: 각 문맥을 설명하는 단어 수(창
    • 크기는 3이며, 왼쪽 동네의 3단어와 오른쪽 동네의 3단어를 고려합니다.)
    • min_count: 어휘에 포함될 최소 단어 수
    • iter: 훈련 반복 횟수
    • workers: 훈련할 작업자 스레드 수
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes)

model.init_sims(replace = True)

모델 저장 및 로드

  • word2vec 모델을 로컬에 저장하고 로드할 수 있습니다.
  • 그렇게 하면 모델을 다시 학습시키는 시간을 줄일 수 있습니다.
model.save('word2vec_model')
model = Word2Vec.load('word2vec_model')

유사성 계산

  • 삽입된 단어(예: 벡터) 간의 유사성은 코사인 유사성과 같은 측정항목을 사용하여 계산할 수 있습니다.
model.most_similar('hamlet')

[('horatio', 0.9978846311569214),
('퀸', 0.9971947073936462),
('레이어테스', 0.9971820116043091),
('왕', 0.9968599081039429),
('어머니', 0.9966716170310974),
('어디', 0.9966292381286621),
('디어', 0.9965540170669556),
('오필리아', 0.9964221715927124),
('매우', 0.9963752627372742),
('오', 0.9963476657867432)]

v1 = model['king']
v2 = model['queen']

# define a function that computes cosine similarity between two words
def cosine_similarity(v1, v2):
    return 1 - spatial.distance.cosine(v1, v2)

cosine_similarity(v1, v2)

0.99437165260314941

릴리스 선언문 이 글은 https://dev.to/ragoli86/word-embedding-with-python-word2vec-540c?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3