除了文档相似度的 Doc2Vec 嵌入之外,还可以使用哪些附加功能?

Posted

技术标签:

【中文标题】除了文档相似度的 Doc2Vec 嵌入之外,还可以使用哪些附加功能?【英文标题】:Which additional features to use apart from Doc2Vec embeddings for Document Similarity? 【发布时间】:2020-06-15 13:50:40 【问题描述】:

所以我正在做一个关于文档相似性的项目,现在我的功能只是来自 Doc2Vec 的嵌入。既然没有显示出任何好的结果,那么在文档嵌入之前的超参数优化和词嵌入之后......我还可以添加哪些其他功能,以获得更好的结果? 我的数据集是 150 个文档,每个文档 500-700 个单词,有 10 个主题(标签),每个文档都有一个主题。文档在文档级别进行标记,并且该标记目前仅用于评估目的。

编辑:以下是对 gojomo 问题的回答,并详细说明了我对他的回答的评论:

模型的评估是在训练集上完成的。我正在比较标签是否与模型中最相似的文档相同。为此,我首先使用模型的方法“infer_vector”获取文档向量,然后使用“most_similar”获取最相似的文档。我得到的当前结果是 40-50% 的准确率。令人满意的分数至少为 65% 及以上。

由于这项研究的目的和进一步的用例,我无法获得更大的数据集,这就是为什么我被教授推荐的原因,因为这是一个大学项目,为文档添加一些额外的功能Doc2Vec 的嵌入。由于我不知道他在说什么,所以我在询问 *** 社区。

模型的最终目标是对文档进行聚类,同样,标签现在仅用于评估目的。

如果我用这个模型没有得到好的结果,我会尝试@Adnan S @gojomo 提到的更简单的模型,例如 TF-IDF、Word Mover's Distance、Bag of words,只是假设我会得到更好的结果使用 Doc2Vec。

【问题讨论】:

【参考方案1】:

正如其他人已经建议的那样,您的 150 个文档的训练集可能不足以创建良好的表示。但是,您可以尝试使用预训练模型并推断文档的向量。

这里是link,您可以在其中下载在英文***页面上训练的 (1.4GB) DBOW 模型,该模型使用 300 维文档向量。我从jhlau/doc2vec GitHub 存储库获得了链接。下载模型后,您可以按如下方式使用:

from gensim.models import Doc2Vec

# load the downloaded model
model_path = "enwiki_dbow/doc2vec.bin"
model = Doc2Vec.load(model_path)

# infer vector for your document
doc_vector = model.infer_vector(doc_words)

doc_words 是文档中的单词列表。

但是,如果您的文档非常具体,这可能对您不起作用。不过你还是可以试一试。

【讨论】:

【参考方案2】:

您如何评估结果是否良好,您如何知道您的结果何时足够/良好?

请注意,只有 150 个 400-700 字的文档是一个很小的数据集:使用已发布的 Doc2Vec 结果的典型数据集包括数万到数百万个文档,每个文档包含数百到数千个单词。

任何Word2Vec/Doc2Vec/etc 风格的算法都很难用这么少的数据做很多事情。 (gensim Doc2Vec 实现包括一个类似的玩具数据集,包含 300 个文档,每个文档 200-300 个单词,作为其单元测试框架的一部分,为了勉强获得即使是模糊有用的结果,它必须增加训练 epoch 的数量,并显着缩小矢量大小。)

因此,如果打算使用类似Doc2Vec 的算法,您的首要任务应该是找到更多的训练数据。即使最终只有约 150 个文档很重要,收集更多使用相似领域语言的文档也有助于改进模型。

当您说有 10 个主题和每个文档 1 个主题时,不清楚您的意思。这些是人工分配的类别吗?这些类别是否包含在传递给Doc2Vec 算法的训练文本或标签中? (包含它可能是合理的,具体取决于您的最终目标和文档相似性评估的内容。)

这些主题是否与您还提到的标签相同,您最终是在尝试预测主题,还是仅使用主题来检查相似性结果?

正如@adnan-s 在另一个答案中所建议的那样,也可能值得尝试更简单的基于计数的“词袋”文档表示,包括可能在单词 n-gram 甚至字符 n-gram 或 TF 上-IDF 加权。

如果您有足够的词向量(从您的数据或其他兼容来源训练而来),则“词移动距离”度量可能是另一种计算成对相似度的有趣方法。 (但是,在数百个单词的文本之间进行计算可能成本太高 - 在较短的文本上工作得更快。)

【讨论】:

我正在通过比较训练集中的文档和最相似的文档之间的标签是否匹配来评估模型。结果为 40%-50%,满意的分数至少为 70%。这是标签的唯一原因。我已经读过 Doc2Vec 和您所说的类似模型适用于更大的数据集,但目前我无法找到更多数据,因为数据集是特定的并且模型的进一步用例。【参考方案3】:

您应该尝试使用 2 克和 3 克创建 TD-IDF,以便为每个文档生成矢量表示。您必须在所有 150 个文档上训练词汇。一旦有了每个文档的 TF-IDF 向量,您就可以在其中任意两个之间使用余弦相似度。

这里是blog article 和doc page for sklearn,提供更多详细信息。

【讨论】:

感谢您的回答!如果我没有得到好的结果,我会试试这个作为第二种方法。我的问题是我是否可以为 Doc2Vec 文档向量创建任何附加功能,但我会考虑到这一点。

以上是关于除了文档相似度的 Doc2Vec 嵌入之外,还可以使用哪些附加功能?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习使用gensim 的 doc2vec 实现文本相似度检测

如何编写返回两个文档之间余弦相似度的方法

如何抓取语义相似的句子

如何用单词解释 doc2vec 分类器?

用于多句子文本相似度的通用句子编码器

有啥可以对比两张图片得出相似度的软件。