doc2vec中单个文档的多个标记。塔吉多库门

2024-09-29 17:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在单个文档有多个标记的情况下,是否可以训练doc2vec模型? 例如,在电影评论中

doc0 = doc2vec.TaggedDocument(words=review0,tags=['UID_0','horror','action'])
doc1 = doc2vec.TaggedDocument(words=review1,tags=['UID_1','drama','action','romance'])

在这种情况下,每个文档都有一个唯一的标记(UID)和多个分类标记,那么在培训之后,我如何访问向量?例如,什么是最合适的调用语法

^{pr2}$

Tags: 文档标记模型uid电影tags评论情况
2条回答

是的,可以为每个文档提供多个标记,这就是为什么TaggedDocumenttags属性应该是一个列表,以及为什么用来引用已学文档向量的键被称为“tag”而不是“id”。(虽然gensimDoc2Vec所依据的原始“段落向量”论文仅使用每个文档的一个唯一标识符来描述,但这是一个自然的扩展。)

要获得任何doc向量,必须通过模型的docvecs属性而不是模型本身来访问它。(从Word2Vec继承功能的模型本身将包含单词向量,而不是doc向量,这些单词向量只在某些Doc2Vec模式下才有意义。)

所以在培训之后,您可以通过如下操作获得示例数据的doc向量:

model.docvecs['UID_1']
model.docvecs['action']

记住,当你训练更多的向量时,你可能需要更多的数据。从粗略的意义上讲,从数据中得出的任何有价值的概括都来自于将原始数据压缩成更小的表示形式。如果在相同的数据量上训练一个更大的模型(更多的单词向量文档标记向量作为内部可调参数),结果可能会更“稀释”甚至“过度拟合”。(也就是说,它可能反映了训练数据的记忆特性,而不是对下游目的或新文本有用的概括见解)。在

我真的很想对已经接受的回复做一个评论,但是我似乎没有足够的要点来这样做,因为这是一个要求澄清的单独的答复道歉。在

我现在正试图做完全相同的事情,但我的问题是,在使用多值标记时,我似乎无法像本问题中那样训练模型。特别是(仅为演示目的使用荒谬的值):

MyDocs = namedtuple('MyDocs', 'words tags')

# some processing, an element of my_docs ends up looking like:
# MyDocs(words=['some', 'parsed', 'text'], tags=['tag_0_i', 'tag_1_j'])

model = Doc2Vec(dm=1, size=3, window=3, dm_concat=1, negative=5, hs=0, sample=1e-5)

model.build_vocab(my_docs)

# model.docvecs.doctag_syn0[0] is
#  array([0.00338327, 0.8583702, -0.00845612])

doc_list = my_docs[:]
alpha_0, alpha_1 = 0.050, 0.001

for epoch in range(10):
    shuffle(doc_list)
    model.train(doc_list, total_examples=model.corpus_count, epochs=1)

# model.docvecs.doctag_syn0[0] is still:
#  array([0.00338327, 0.8583702, -0.00845612])

你知道我做错了什么吗?在

相关问题 更多 >

    热门问题