워드투벡 단어 추가 및 학습시키는 방법은?!

2020. 12. 24. 07:54

이전 포스팅에서 워드투벡의 의미와 한글 워드투벡에 대해서 알아보았다. 오늘은 이어서 새로운 단어들을 추가로 학습시켜보고자 한다.

 

 

워드투벡

 

 

워드투벡을 추가학습하는 방법은 아래 포스팅에 잘 설명되어 있다. 해당  블로그를 참고하여 추가 학습을 진행해보았다. 방법을 요약해보면 이렇다. 새로운 코퍼스로 워드투백을 만든 후에, 기존 데이터와 합쳐서 새로 학습을 시키면 된다.

 

Gensim Word2Vec Fine-tuning

fine tuning은 이미 학습된 layer를 freeze하고 뒤에 레이어를 추가해 training하는 transfer learning과 달리 이미 학습된 레이어의 parameter에 대해 조금씩 수정을 주는 방식으로 이루어진다. 단, 이와 같은..

jjdeeplearning.tistory.com

 

gensim에서 워드투벡을 사용할 수 있는 방법은 2가지가 있다. 다운로드 받은 워드투벡이 위 포스팅과 형식이 맞지 않아 새로 저장하였다.

model = gensim.models.Word2Vec.load("ko.bin")
model.wv.save_word2vec_format("ko.bin.gz", binary=False)

 

이제 아래와 같이 추가하여 학습을 진행해보았다.

from gensim.models import Word2Vec, KeyedVectors

model_2 = Word2Vec(size=200, min_count=1)
model_2.build_vocab(tokenized_data)
total_examples = model_2.corpus_count
print(total_examples)

 

model_2.build_vocab([list(model.wv.vocab.keys())], update=True)
model_2.intersect_word2vec_format("ko.bin.gz", binary=False)

 

학습을 시작하기 전에 유사한 단어를 추출해보았다.

model_2.most_similar("19년")

 

아래와 같이 유사 단어라고 보기 어려운 단어들일 출력됐다.

[('포괄적', 0.31655797362327576),
 ('엄격', 0.2763560116291046),
 ('추상적', 0.2763408422470093),
 ('규범', 0.27127406001091003),
 ('가혹', 0.25651729106903076),
 ('외교적', 0.2555962800979614),
 ('수동적', 0.24688774347305298),
 ('수행자', 0.24484777450561523),
 ('강압적', 0.24308735132217407),
 ('규율', 0.24253354966640472)]

 

 

Recommendation 포스팅

 

 

아래와 같이 학습을 시작하였다.

model_2.train(tokenized_data, total_examples=total_examples, epochs=model_2.iter)

 

학습 후에 유사한 단어를 추출해보았다. 전보다 더 납득이 가는 유사단어들이 나오는 것을 알 수 있다.

model_2.most_similar("19년")

 

[('11월', 0.847227156162262),
 ('18년', 0.8107380867004395),
 ('12월', 0.8060749769210815),
 ('하락세', 0.8029606938362122),
 ('2월', 0.7986169457435608),
 ('8월 7일', 0.7936931252479553),
 ('월평균', 0.7932562232017517),
 ('용도지역', 0.7928778529167175),
 ('6월', 0.7919766902923584),
 ('26', 0.7908366918563843)]

 

전체 단어의 갯수도 32072개로 증가하였다.

len(model_2.wv.vocab)

 

어떤 단어들이 늘어났는지도 확인해보았다.

for k in model_2.wv.vocab:
	result = model.wv.vocab.get(k, "0")
	if result=="0":
		print(k, end=",")

 

마지막으로 새로 만든 모델을 파일로 저장하였다.

model_2.save("ko_new.bin")

 

 

오늘은 이렇게 워드투벡에 대해서 알아보았다. 다음에는 워드투벡을 이용해서 RNN모형을 만들어보고자 한다.

댓글()