2016-10-28 14 views
1

트윗을 사용하여 Doc2Vec 모델을 준비 중입니다. 각 트윗의 단어 배열은? 어떻게. "SENT_2을"Doc2Vec에 사용 된 단어를 추출하는 방법

 
taggeddocs = [] 
for index,i in enumerate(cleaned_tweets): 
    if len(i) > 2: # Non empty tweets 
     sentence = TaggedDocument(words=gensim.utils.to_unicode(i).split(), tags=[u'SENT_{:d}'.format(index)]) 
     taggeddocs.append(sentence) 

# build the model 
model = gensim.models.Doc2Vec(taggeddocs, dm=0, alpha=0.025, size=20, min_alpha=0.025, min_count=0) 

for epoch in range(200): 
    if epoch % 20 == 0: 
     print('Now training epoch %s' % epoch) 
    model.train(taggeddocs) 
    model.alpha -= 0.002 # decrease the learning rate 
    model.min_alpha = model.alpha # fix the learning rate, no decay 

나는 주어진 트윗과 유사 트윗을 발견하고자하는 말 등 "별도의 문서로 간주되어"SENT_1 "SENT_2으로 표시됩니다

나는 유사한 트윗 레이블을 얻을 :

 
SENT_4372 
SENT_1143 
SENT_4024 
SENT_4759 
SENT_3497 
SENT_5749 
SENT_3189 
SENT_1581 
SENT_5127 
SENT_3798 

그러나 주어진 : 그것은으로 인쇄

 
sims = model.docvecs.most_similar('SENT_2') 
for label, score in sims: 
    print(label) 

레이블, 원래 짹짹 단어/문장을 어떻게 구합니까? 예 : "SENT_3497"의 짹짹 단어는 무엇입니까? 이것을 Doc2Vec 모델에 쿼리 할 수 ​​있습니까?

답변

1

Gensim의 Word2Vec/Doc2Vec 모델은 코퍼스 데이터를 저장하지 않습니다. 여러 번 통과시켜 모델을 교육합니다. 원본 텍스트를 가져와야하는 경우 Python dict (모든 예제가 메모리에 들어있는 경우)와 같이 키별로 데이터 구조를 채워야합니다.

별도로 gensim의 최신 버전에서는 무의식적/파괴적으로 음수 인 alpha 값이 많은 코드를 포함하여 taggeddocs에 대해 1,005 건의 교육 과정이 실제로 수행됩니다. 생성자로 전달하여

  • , 당신은 자신을 훈련 모델을 말하는 iter=5 패스의 기본 번호를 포함하여 매개 변수와 기본값을 사용하고 있습니다.

  • 그런 다음 200 개 이상의 루프를 수행합니다. train()을 호출 할 때마다 기본 5 패스가 사용됩니다. 그리고 alpha을 0.025에서 0.00299만큼 감소 시키면, 마지막 루프는 0.025- (200 * 0.002) = - 0.375의 유효 alpha을 사용하여 본질적으로 각각의 개선 방향과 반대 방향으로 크게 보정하도록하는 음의 값 훈련 - 예.

iter 매개 변수를 사용하여 원하는 패스 수를 선택하기 만하면됩니다. 수업에서 alpha 변경 사항을 관리하도록합니다. 모델을 인스턴스화 할 때 코퍼스를 제공하면 더 이상 단계가 필요하지 않습니다. 그러나 인스턴스화시 자료를 제공하지 않으면 model.build_vocab(tagged_docs)을 한 번 수행 한 다음 model.train(tagged_docs)을 한 번 수행해야합니다.