사용할 데이터: 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 |