2016-12-16 4 views
5

TaggedDocumentLabeledSentencegensimの違いを理解するのを手伝ってください。私の最終的な目標は、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']と同じですか? TaggedDocumentまたはLabeledSentenceがどのように機能するかを把握するための優れた情報源を私に提供することはできますか?

答えて

5

LabeledSentenceは、現在はTaggedDocumentと呼ばれているテキスト例をカプセル化するために、同じ単純オブジェクト型の古い廃止された名前です。 wordsおよびtagsのプロパティを持つすべてのオブジェクトがリストになります。 (wordsが常に文字列のリストである。tagsは整数とストリングの組み合わせとすることができるが、一般的で、最も効率の良い場合には、0から始まる、単一のID整数とリストだけである)

model_lmodel_tは、同じパラメータを使用して同じデータを訓練して、同じ目的を果たし、オブジェクトの異なる名前を使用します。しかし、個々のワードトークン(model['some_word'])やドキュメントタグ(model.docvecs['somefilename_NN'])を返すベクトルは、Word2Vec/Doc2Vecの初期化とトレーニングサンプリングのランダム性があり、マルチスレッド化されたトレーニングのオーダージッタによって導入される可能性があります。

関連する問題