딥러닝/자연어처리

gensim 라이브러리를 이용하여 Doc2vec모델 학습하기 - 1.train function 이용

씩씩한 IT블로그 2020. 10. 1. 18:30
반응형

<gensim라이브러리를 이용하여 doc2vec모델만들기 >

1. train함수 이용하기

2. class를 만들고, iter함수를 이용하여 객체를 만드는식으로 학습하기 : sosoeasy.tistory.com/327

 

1. 라이브러리 다운

okt: 한국어 형태소 분석을 위한 라이브러리

from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from konlpy.tag import Okt

 

2. 데이터 전처리

taggedDocument 타입으로 만들어야 학습이 가능하다. 이때 형태소 단위로 문장을 분해해야 의미적으로 학습하기 좋다.

#데이터 전처리

okt=Okt() #형태소 분해 객체 생성
data = ["나는 학교에 간다",
        "나는 친구를 만난다",
        "나는 영화보러 간다",
        "영화가 재밌다",
        "나는 공부를 하러 왔다",
        "나는 영화관을 갔다"]

# 학습은 taggedDocument 타입으로 해야하므로 아래와 같이 전처리한다.
tagged_data = [TaggedDocument(words=okt.morphs(_d), tags=[str(i)]) for i, _d in enumerate(data)]
for i in tagged_data:
    print(i)

 

3. 모델 학습

* build_vocab을 이용해서 단어를 추가하고 학습을 하는데, 사실이 단어를 추가한다는게 정확히 뭔진 모르겠다.

build_vocab을 한것과 하지않은 모델을 각각 만들어놓고 하나의 문장을 벡터화했는데 똑같이 나온다...

# 모델 설계
max_epochs = 1000
model = Doc2Vec(vector_size=20,
                alpha=0.025,
                min_alpha=0.00025,
                min_count=1,
                dm=1)

#??
model.build_vocab(tagged_data)

# 학습
for epoch in range(max_epochs):
    model.train(tagged_data,
                total_examples=model.corpus_count,
                epochs=model.iter)
    # decrease the learning rate
    model.alpha -= 0.0002
    # fix the learning rate, no decay
    model.min_alpha = model.alpha

 

4. 테스트

sample="영화가 보고싶군".split()
print(model.infer_vector(sample))
반응형