- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找出 2 个文档之间的相似性。我正在使用 Doc2vec Gensim 围绕训练 10k 文件 .周围有 10个字符串类型的标签 .每个标签由一个唯一的词组成,并包含某种文档。使用 训练模型分布式内存方法 .
Doc2Vec(alpha=0.025, min_alpha=0.0001, min_count=2, window=10, dm=1, dm_mean=1, epochs=50, seed=25, vector_size=100, workers=1)
model.wv.n_similarity(<words_1>, <words_2>)
使用
给出相似度得分词向量 .
model.docvecs.similarity_unseen_docs(model, doc1, doc2)
使用
给出相似度得分文档向量 其中 doc1 和 doc2 不是标签/或 doctags 的索引。每个 doc1 和 doc2 包含 10-20 个词类的句子。
model = Doc2Vec(alpha=0.025, min_alpha=0.0001, min_count=2, window=10, dm=1, dm_mean=1, epochs=50, seed=25, vector_size=100, workers=4)
# Training of the model
tagged_data = [TaggedDocument(words=_d, tags=[str(i)]) for i, _d in enumerate(<list_of_list_of_tokens>)]
model.build_vocab(tagged_data)
model.train(tagged_data, total_examples=model.corpus_count, epochs=model.epochs)
# Finding similarity score
model.wv.n_similarity(<doc_words1>, <doc_words2>)
model.random.seed(25)
model.docvecs.similarity_unseen_docs(model, <doc_words1>, <doc_words2>)
最佳答案
PV-DM 模式(dm=1
,默认)和 PV-DBOW 模式(dm=0
)都可以很好地工作。哪个更好取决于您的数据和目标。一旦您有一种可靠的方法对模型结果的质量进行定量评分,为了您的项目目标——您希望能够调整模型的所有元参数,包括 DM/DBOW 模式——您可以并且应该尝试两个都。
PV-DBOW 训练速度很快,通常在简短的文档(几十个字)上效果很好。但请注意,此模式不会训练可用的词向量 ,除非您还添加了 dbow_words=1
选项,否则会减慢训练速度。
使用 model.wv.n_similarity()
仅依赖于词向量。它平均每组 f 个词向量,然后报告这两个平均值之间的余弦相似度。 (因此,它仅在 PV-DM 模式或激活 dbow_words=1
的 PV-DBOW 下才有意义。
使用 model. docvecs.similarity_unseen_docs()
使用 infer_vector()
将每个提供的文档视为新文本,为此计算出真正的 Doc2Vec
文档向量( 而不是 仅仅是词的平均值)。 (此方法对单词列表进行操作,而不是对标签列表进行操作。)
哪个更好是你应该为你的目标测试的东西。平均词向量是一种制作文本向量的更简单、更快速的技术——但在很多情况下仍然可以正常工作。推断的 doc-vectors 需要更长的时间来计算,但使用一个好的模型,对于某些任务可能会更好。
关于您的设置的其他注意事项:
min_count
设置为 2 是一个坏主意:那些稀有词没有足够的例子来表示很多,实际上干扰了周围词的质量 Doc2Vec
结果(通常使用数万到数百万个文档)相比,workers=1
将比默认值( workers=3
)慢得多;在具有 8 个或更多内核的机器上,最多 workers=8
通常是个好主意。 (尽管如此,除非使用较新的 corpus_file
输入选项,否则更多 workers
到 16、32 等内核的完整计数无济于事。)Doc2Vec
用法不会仅分配已知标签的文档(如“10 字符串类型的标签”),而是分配每个文档的唯一 ID。在某些情况下,使用或添加已知标签作为标签可能会有所帮助,但请注意,如果 只有 提供 10 个标签,那么您实际上已经将 10,000 个文档变成了 10 个文档(从模型 View 的角度来看,将所有具有相同标签的文本视为具有该标签的一个较大文档的片段)。在普通的 PV-DBOW 中,仅训练 10 个 doc-vectors,每个 100 维,从 10 个不同的例子中没有多大意义:它容易出现严重的过度拟合。 (在具有 dbow_words
的 PV-DM 或 PV-DBOW 中,模型同时训练 10 个文档向量和成百上千个其他词汇词向量的事实将有助于抵消过度拟合的风险。)关于python-3.x - 哪种方法 dm 或 dbow 适用于使用 Doc2Vec 的文档相似性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56323377/
我知道Python(gensim)中已经存在PV-DBOW(段落向量)的实现。但我有兴趣知道如何自己实现它。解释来自official paper PV-DBOW如下: Another way is t
我试图找出 2 个文档之间的相似性。我正在使用 Doc2vec Gensim 围绕训练 10k 文件 .周围有 10个字符串类型的标签 .每个标签由一个唯一的词组成,并包含某种文档。使用 训练模型分布
我是一名优秀的程序员,十分优秀!