gensim LabeledSentence和TaggedDocument之间有什么区别?

时间:2016-12-16 10:33:16

标签: gensim text-classification word2vec doc2vec

请帮助我理解TaggedDocument的{​​{1}}和LabeledSentence之间的区别。我的最终目标是使用gensim模型和任何分类器进行文本分类。我正在关注blog

Doc2Vec

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

1 个答案:

答案 0 :(得分:6)

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

model_lmodel_t将起到相同的作用,使用相同的参数训练相同的数据,只使用不同的对象名称。但是他们为单个单词标记(model['some_word'])或文档标记(model.docvecs['somefilename_NN'])返回的向量可能会有所不同 - Word2Vec / Doc2Vec初始化和训练中的随机性 - 采样,并通过多线程训练中的排序抖动引入。