请帮助我了解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的工作原理。

最佳答案

LabeledSentence是相同的简单对象类型的不推荐使用的旧名称,用于封装现在称为TaggedDocument的文本示例。具有wordstags属性(每个都有一个列表)的任何对象都可以使用。 (words始终是字符串列表; tags可以是整数和字符串的混合,但是在最常见和最有效的情况下,它只是一个具有单个id整数(从0开始)的列表。)
model_lmodel_t将达到相同的目的,它们使用相同的参数对相同的数据进行了训练,只是为对象使用了不同的名称。但是它们返回的单个单词标记(model['some_word'])或文档标签(model.docvecs['somefilename_NN'])的向量可能会有所不同– Word2Vec/Doc2Vec初始化和训练采样中存在随机性,并由多线程训练中的排序抖动引入。

关于gensim - gensim LabeledSentence和TaggedDocument有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41182372/

10-11 06:59