我最近结束了在 Traindex 数据科学团队的实习。分配给我的任务之一是复制基于 ML 的语义搜索技术。数据科学团队已经在他们的 Traindex 搜索 API 上实现了这一点。

Traindex 使用 LSI 和 Doc2Vec 等文档相似性技术来训练一个模型,该模型可以识别与给定文档或段落或短语的最佳匹配文档。

最具挑战性的任务之一是语言模型的基准测试。该过程有时需要使用一系列技术进行适当的评估和测试。

Traindex 使用的基准之一是 Jaccard Similarity。它提供了一个基线,不足以对任何模型进行完整评估。

本文旨在介绍 Jaccard 相似度得分的位置和方式的一些背景知识。它对于创建基准来衡量其语言模型的性能很有用。

文字相似度

文本相似度可以帮助我们确定文档对或特定文档与一组其他文档之间的相似度。通过执行相似性检查计算的分数决定模型接受、改进或拒绝。基于字符串的文本相似度的分类显示了适合场景的各种方法。

[搜索](https://res.cloudinary.com/practicaldev/image/fetch/s--VaZQNQjs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/i/pheia0ozm871qcnzybcm.PNG)

有两种主要的替代方法可以找到相似度度量。

  • 基于字符的方法以正确的顺序处理文档中存在的各个字符。

  • Term-based 处理整个单词。根据用于训练目的的初始数据清理过程,在执行测试之前,这些词通常会被简化或词形化。

简介 - Jaccard 指数

为了比较两个观测值之间有限数量的元素,通常的做法是计算两个集合共有的项目。在代表性标签的情况下比较帖子以衡量两篇文章在标签方面的相似程度是很自然的。

Jaccard 相似度指数,也是 Jaccard 相似度系数,比较两个集合的成员以查看共享和不同的成员。它是衡量两组数据相似度的指标,范围从 0% 到 100%。百分比越高,两个群体越相似。 Jaccard Index 是一种统计数据,用于比较和衡量两个不同集合彼此之间的相似程度。虽然它很容易解释,但它容易受到小样本量的影响。它可能会给出错误的结果,尤其是对于较小的样本或缺少观察的数据集。

让我们看看这个例子。

from gensim.matutils import jaccard

print(jaccard(bow_water, bow_bank))
Out: 0.8571428571428572


print(jaccard(doc_water, doc_bank))
Out: 0.8333333333333334

print(jaccard(['word'], ['word']))
Out: 0.0

进入全屏模式 退出全屏模式

上面的三个代码示例具有两种不同的输入法。

在第一种情况下,我们以词袋格式向 Jaccard 呈现文档向量。距离的定义是向量的并集大小减去交集的大小。我们可以看到距离很可能很远——而且确实如此。

最后两个示例说明了 Jaccard 接受偶数列表(即文档)作为输入的能力。在前一种情况下,因为它们是相同的向量,所以返回的值为 0 - 这意味着距离为 0,并且两个文档相同。

数学表示

在数学上,它是两个集合的交集与它们的并集的比率。在文本文档或短语的情况下,它会比较单词并计算常见单词。然后将其除以两个文档中存在的单词总数。相同的方法适用于具有相同技术的两个以上文档。

[jaccard 相似度](https://res.cloudinary.com/practicaldev/image/fetch/s--UssTPfr3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/i/zbj2nxs9dh9mwohapjng.jpg)

从上面的维恩图可以得出结论:

Jaccard Index = (number in both sets) / (number in either set) * 100

基准测试是数据科学的一个基本过程,它表明模型的置信度和有效性。 Traindex 执行多种基准测试技术,其中 Jaccard 意味着相似性测试是一项重要技术。

测试数据集找到训练模型的平均相似度得分。对验证分数在配置文件中提供参数的主数据集进行采样。撇开所有功能不谈,UCID (即唯一文档 ID 和整个文本)是执行测试所必需的两个关键列。

以下步骤基于基于术语的相似性测试 LSI 模型性能:

  1. 测试数据包含 UCID 及其各自的文本,其中采样是根据配置文件中提到的大小进行的。

2、按要求对测试数据的文本栏进行清理,重复项删除是强制性的。对于每个文档,使用与其 UCID 对应的文本进行查询。

  1. 文档和索引被发送到一个函数,该函数在索引的帮助下返回查询和文档中出现的常用词的数量。

  2. 同时,计算出常用词和总观察值,然后通过取前面保存的长度之比计算 Jaccard 相似度。

  3. 按照上述步骤可以产生评估所需的充分结果,但结果是通过将分数除以相应的查询大小来缩放的。由于不同的查询大小,额外的步骤消除了结果的行为倾向。

最后,通过平均计算所有组合结果的平均相似度得分。

数据框是可选的,但会填充每个结果的相似度分数。这些值映射在条形图上,清楚地显示了与特定 UCID 的百分比相似性,如示例图所示。

[酒吧](https://res.cloudinary.com/practicaldev/image/fetch/s--3YnTYxlb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/i/5ls4nfp5p33nh7cwos9w.PNG)

** Jaccard 相似度作为评估指标的影响**

Jaccard 相似度得分可能不是基准测试的最佳解决方案,但可以考虑以下优点:

  • Jaccard 相似度为每个句子采用一组唯一的单词。这意味着,如果您多次重复句子中的任何单词,Jaccard 的相似度将保持不变。考虑以下两句话:

句子 1:AI 是我们的朋友,而且一直很友好。

句子 2:AI 和人类一直很友好。

它足够健壮,可以满足像单词这样的单词的重复

第 1 句中的“朋友”。无论任何单词出现的频率有多高,

Jaccard 的相似度将是相同的 - 这里是 0.5。

  • 它不是拒绝或接受给定查询集的文档,而是提供从 0 到 1 的数字分数,这提供了清晰的视图,并且可以用作进一步迭代的查找。图 3 解释了随机搜索查询与同一文档的接近度,其中条形的高度表示查询与文档之间的 Jaccard 相似度得分。

  • Jaccard 相似性对于重复无关紧要的情况很有用。例如,最好对两个产品描述使用 Jaccard 相似度,因为重复单词不会降低它们的相似度。

简而言之,用于评估一组模型的基准测试是数据科学过程中的必要步骤。开发各种工具和方法来计算可以区分产品的指标非常重要。与其他领域相比,机器学习、语言和上下文模型的评估是困难的。当文本模型的基准测试技术数量较少时,Jaccard 相似度得分是一个重要的性能评估指标,可以帮助提供模型的部分摘要。可以得出结论,任何基准测试技术的有效性取决于它们与问题的匹配程度。此外,要了解指标与案例之间的不匹配可能会误导结果。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐