【问题标题】:What is the difference between gensim LabeledSentence and TaggedDocumentgensim LabeledSentence 和 TaggedDocument 有什么区别
【发布时间】:2017-05-02 03:08:25
【问题描述】:

请帮助我了解TaggedDocumentLabeledSentencegensim 工作方式之间的区别。我的最终目标是使用Doc2Vec 模型和任何分类器进行文本分类。我正在关注这个blog

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 的工作原理。

【问题讨论】:

    标签: gensim text-classification word2vec doc2vec


    【解决方案1】:

    LabeledSentence 是同一个简单对象类型的旧名称,已弃用,用于封装现在称为TaggedDocument 的文本示例。任何具有wordstags 属性(每个都是列表)的对象都可以。 (words 始终是一个字符串列表;tags 可以是整数和字符串的混合,但在常见且最有效的情况下,它只是一个具有单个 id 整数的列表,从 0 开始。)

    model_lmodel_t 将服务于相同的目的,使用相同的参数对相同的数据进行训练,只是使用不同的对象名称。但是它们为单个词标记 (model['some_word']) 或文档标签 (model.docvecs['somefilename_NN']) 返回的向量可能会有所不同—— Word2Vec/Doc2Vec 初始化和训练采样中存在随机性,并通过 ordering-jitter 引入多线程训练。

    【讨论】:

      猜你喜欢
      • 2017-12-16
      • 2017-12-20
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      相关资源
      最近更新 更多