딥러닝/자연어처리

gensim 라이브러리를 이용하여 Doc2vec모델 학습하기 - 2. class iter활용

씩씩한 IT블로그 2020. 10. 1. 19:06
반응형

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

1. train함수 이용하기 : sosoeasy.tistory.com/326

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

 

class의 iter함수를 이용하여 doc2vecr객체를 생성함과 동시에 모델을 학습시키는 방법. 아래와 같은 내용이 들어있는 txt파일을 저장하고 읽어오는 식으로 진행된다.

 

1. 라이브러리 다운

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

 

2. 클래스 생성

파일에서 한줄씩 문장을 읽으면서 형태소분해하고, tagged list type으로 변환하여 yield하는식으로 진행된다.

class Doc2VecSentences:
    def __init__(self,path):
        self.path=path
        self.okt=Okt()
    
    def __iter__(self):
        # 파일을 다시 처음부터 읽음.
        result = []
        keyId=-1
        fread = open(self.path, encoding="utf8")
        n=1
        print("start!")
        while (1):
            line = fread.readline() #한 줄씩 읽음.
            # [모두 읽으면 while문 종료]
            if not line: 
                break 
            else:
                keyId+=1
                lineL=self.okt.morphs(line)
                taggedL=TaggedDocument(words=lineL, tags=['%d'%keyId])
                yield taggedL #하나씩 yeild하면서 형태소분해되어 태그된 리스트를 반환

        fread.close()

 

3. 클래스 생성

내가 만든 클래스(iter하면서 yield가 구현된 Doc2VecSentences)의 객체 doc2vec_corpus를 Doc2vec의 파라미터로 넣는다.

그러면 epoch가 6번돌면서 학습이 되고, 모델이 반환된다 (항상 6번하는거 같다)

path='class_test.txt'

#객체 생성
doc2vec_corpus=Doc2VecSentences(path)

#학습!
doc2vec_model = Doc2Vec(doc2vec_corpus) 

반응형