본문 바로가기
자연언어처리 (NLP)

(Word2Vec) model training

by 꼰대코더 2023. 12. 21.

 사용할 데이터:  Reviews From TripAdvisor

https://github.com/kavgan/phrase-at-scale/blob/master/data/raw-data/reviews_data.txt.gz

import gzip
# pip install gensim
import gensim 
import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

 

gz 화일을 풀고 그 안의 라인별로 읽어 들어 gensim.utils.simple_preprocess() 를 이용해 단어별로 소문자화, 불필요한 조동사등을 제거한 후 단어 별로  tokenizer 한 후 리스트를 돌려준다.

 

data_file="reviews_data.txt.gz"

def read_input(input_file):
    logging.info(f"reading file {input_file}...this may take a while")
    
    with gzip.open (input_file, 'rb') as f:
        for i, line in enumerate (f): 

            if (i%10000==0):
                logging.info ("read {0} reviews".format (i))
            yield gensim.utils.simple_preprocess (line)

 

Word2Vec 에 위해서 라인별의 단어리스트( [ [..., ..., ...],  [..., ..., ...] ...]) 와 embedding 사이즈(vector_size), window사이즈, 2번 이상 출현되지 않는 단어 드랍(min_count) 을 설정해서 training 을 실시하여 파라미터를 최적화 하게 한다.

model = gensim.models.Word2Vec (documents, vector_size=150, window=10, min_count=2, workers=10)
model.train(documents,total_examples=len(documents),epochs=10)

 

만약 train 한 model 을 저장하고 싶으면

model.save('model명.model')

 

나중에 불러들여 사용하고 싶다면

model =gensim.models.Word2Vec.load('model명.model')

 

이제 모델이 생성되었다면 아래와 같이 출력을 구할 수 있다.

 

1. 비슷한 단어 출력, top 6

w1 = "dirty"
model.wv.most_similar (positive=w1)
model.wv.most_similar (positive=w1,topn=6)

 

2.  "bed",'sheet','pillow' 와 유사하지만, "couch"와 대척점에 있는 단어 10개 출력

w1 = ["bed",'sheet','pillow']
w2 = ['couch']
model.wv.most_similar (positive=w1,negative=w2,topn=10)

 

3. 두 단어의 유사도(0.0~1.0) 측정

model.wv.similarity(w1="dirty",w2="smelly")

 

4.  단어들간 상이한 단어 출력

model.wv.doesnt_match(["cat","dog","france"]

 

5. 임베딩 되지 않은 단어를 입력하면 예외가 발생.

'자연언어처리 (NLP)' 카테고리의 다른 글

stopwords  (0) 2024.03.13
워드 토큰화  (0) 2024.03.13
(Word2Vec) training  (1) 2023.12.17
(Word2Vec) 2. 자연언어처리 모델  (1) 2023.12.17
(Word2Vec) 1. 개념  (1) 2023.12.17