2016-12-16 9 views
5

TaggedDocumentLabeledSentencegensim 인 방식의 차이점을 이해하는 데 도움을주십시오. 궁극적 인 목표는 Doc2Vec 모델과 모든 분류 기준을 사용하는 텍스트 분류입니다. 나는 이것을 따라 가고있다 blog!gensim LabeledSentence와 TaggedDocument의 차이점

class MyLabeledSentences(object): 
    def __init__(self, dirname, dataDct={}, sentList=[]): 
     self.dirname = dirname 
     self.dataDct = {} 
     self.sentList = [] 
    def ToArray(self):  
     for fname in os.listdir(self.dirname):    
      with open(os.path.join(self.dirname, fname)) as fin: 
       for item_no, sentence in enumerate(fin): 
        self.sentList.append(LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no])) 
     return sentList 


class MyTaggedDocument(object): 
    def __init__(self, dirname, dataDct={}, sentList=[]): 
     self.dirname = dirname 
     self.dataDct = {} 
     self.sentList = [] 
    def ToArray(self):  
     for fname in os.listdir(self.dirname):    
      with open(os.path.join(self.dirname, fname)) as fin: 
       for item_no, sentence in enumerate(fin): 
        self.sentList.append(TaggedDocument([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no])) 
     return sentList 

sentences = MyLabeledSentences(some_dir_name) 
model_l = Doc2Vec(min_count=1, window=10, size=300, sample=1e-4, negative=5,  workers=7) 
sentences_l = sentences.ToArray() 
model_l.build_vocab(sentences_l) 
for epoch in range(15): # 
    random.shuffle(sentences_l) 
    model.train(sentences_l) 
    model.alpha -= 0.002 # decrease the learning rate 
    model.min_alpha = model_l.alpha 

sentences = MyTaggedDocument(some_dir_name) 
model_t = Doc2Vec(min_count=1, window=10, size=300, sample=1e-4, negative=5, workers=7) 
sentences_t = sentences.ToArray() 
model_l.build_vocab(sentences_t) 
for epoch in range(15): # 
    random.shuffle(sentences_t) 
    model.train(sentences_t) 
    model.alpha -= 0.002 # decrease the learning rate 
    model.min_alpha = model_l.alpha 

내 질문이 model_l.docvecs['some_word']이다는 model_t.docvecs['some_word']과 동일? TaggedDocument 또는 LabeledSentence의 작동 방식에 대한 정보를 얻을 수있는 좋은 웹 링크를 나에게 제공 할 수 있습니까?

답변

5

LabeledSentence은 더 이상 사용되지 않는 단순한 개체 유형의 이름으로 이제는 TaggedDocument이라는 텍스트 예제를 캡슐화합니다. wordstags 속성을 갖는 모든 개체 (목록)가 수행됩니다.

model_l과 (tags 정수와 문자열의 조합이 될 수 있지만, 일반적이고 가장 효율적인 경우, 0에서 시작하여, 하나의 ID 정수와 단지 목록입니다 words는 항상 문자열의 목록입니다) model_t은 동일한 매개 변수를 사용하여 동일한 데이터에 대해 교육을받은 동일한 용도로 사용되며 개체의 이름 만 다릅니다. 그러나 개별 단어 토큰 (model['some_word']) 또는 문서 태그 (model.docvecs['somefilename_NN'])에 대해 반환 할 벡터는 Word2Vec/Doc2Vec 초기화 및 트레이닝 샘플링에 임의성이 있으며 다중 스레드 교육에서 주문 지터에 의해 도입됩니다.