2016-12-16 50 views
5

有什麼區別請幫我理解gensimTaggedDocumentLabeledSentence如何工作。我的最終目標是使用Doc2Vec模型和任何分類器進行文本分類。我正在關注這個bloggensim 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']? 你能提供我很好的消息來源的鏈接,掌握TaggedDocumentLabeledSentence是如何運作的。

回答

5

LabeledSentence是一個較舊的,不贊成使用的名稱,它是用於封裝文本示例的相同簡單對象類型,現在稱爲TaggedDocument。任何具有wordstags屬性的對象(每個對象都有)將執行。 (words總是字符串列表; tags可以是整數和字符串的混合,但在常見和最高效的情況下,僅僅是一個單一的ID整數列表中,從0開始。)

model_lmodel_t將用於相同的目的,使用相同的參數訓練相同的數據,僅使用不同的對象名稱。但是他們將返回單個單詞標記(model['some_word'])或文檔標記(model.docvecs['somefilename_NN'])的向量可能會不同 - 在Word2Vec/Doc2Vec初始化和訓練採樣中存在隨機性,並且通過多線程訓練中的排序抖動引入。