假设我有一个包含大量文档的数据集。现在我想找到一种将文档表示为向量嵌入的方法。然后应该使用这种嵌入来为一个新的、看不见的文档找到最相关/相似的文档。 我查看了 Doc2Vec,但它似乎不是为预测未见文档的向量而构建的。 我进一步研究了LLM。像 Bert 或 GPT。它们会起作用,但我很好奇是否有像 Doc2Vec 这样的算法可以管理类似的东西。
许多嵌入方法都可以做到这一点;哪个是“最佳”可能取决于您项目的具体数据、目标和限制。
两个快速且易于计算的选项,通常用作入门的基线,然后与更复杂的技术进行比较,是:
0.0
.0.0
,如果你看到它很可能是一个错误。在每种情况下,两个文档的成对相似度可以通过取其向量的余弦相似度来计算。
在每种情况下,通过将新文档标记为与原始训练集相同,然后进行适当的计数/平均,为在初始模型构建时看不到的新文档创建一个向量是相当简单的。 (不过,在每种情况下,在初始模型构建时未知的未见文档中的标记可能会被忽略,因为在宽稀疏向量中没有为它们保留插槽位置,或者可能没有词向量可用于它们。在练习,丢掉一些生僻词,甚至没有足够的训练数据来建模也没关系。)
在每种情况下,通过重新加权单词(例如通过 TF/IDF)或向文本数据添加额外的类似单词的特征(著名的连续单词或单词片段的伪词),可以进行一些简单的改进。
这两个基线,因为它们都是简单化的,并且对语法/短语之类的东西不在意,所以在广泛的“主题”相似感方面比从语法结构和多词短语中出现的细粒度的意义区分做得更好。
更高级的方法通常建立在与这些基线相同的标记化或辅助数据(如一组词向量)上。
如果
Doc2Vec
是指也称为“段落嵌入”的算法,并且在 Python Gensim 库中使用名称 Doc2Vec
,它可以使用推理计算初始模型训练期间未见过的新文本的向量过程,可通过 .infer_vector()
方法获得,它适用于像训练数据一样准备的标记列表。参见:
https://radimrehurek.com/gensim/models/doc2vec.html#gensim.models.doc2vec.Doc2Vec.infer_vector