磐创AI分享
来源 | towardsdatascience
编译 | Flin
作者 | Thiago G. Martins
由于数据没有可靠的标签来判断一个搜索结果是好是坏,我们希望提出客观的标准来评估搜索结果,而不是依赖于人类注释的标签。我们使用这个准则进行实验,并评估术语匹配和语义信号所传递的值。然后我们证明,即使考虑到专门为科学文本设计的模型的微调版本,语义信号也会产生糟糕的结果。
由艾伦人工智能研究所(https://allenai.org/) 发布的COVID-19开放研究数据集(CORD-19)包含44000多篇学术文章,包括29000多篇全文关于COVID-19和冠状病毒家族的文章,供全球研究界使用。
它的发布是为了动员研究人员应用自然语言处理的最新进展,以产生新的见解,支持对抗这种传染病。它确实做到了。
它一发布,就有一个Kaggle挑战(https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge/) 、一个数据集浏览器(https://cord-19.apps.allenai.org/) 、经过微调的嵌入模型(https://github.com/gsarti/covid-papers-browser) 和收集标记数据的竞赛:
相关推特:https://twitter.com/kirk_roberts/status/1242549116539932680
考虑到我最近在MS MARCO数据集中使用含有强烈术语匹配偏差的标签的经验,以及我们在 https://vespa.ai/ 希望快速建立一个围绕CORD-19数据集的搜索应用程序(https://cord19.vespa.ai/) 的事实,我决定花一些时间考虑如何在没有标记数据的情况下,在不同的匹配标准和排序函数之间进行评估。
其目标是要有一个客观的标准,并摆脱“它看起来足够好”的标准,这是在没有可靠标签时通常使用的标准。我的建议很简单,我们可以使用文章的标题作为查询,并将相关的摘要作为查询的相关文档。
此标准很简单,因为我们不依赖人工注释,因此可以扩展到大量数据,这很有意义。这样想,如果你使用标题作为一个查询,而给定的方法无法检索到正确的摘要,就将其包含在结果列表的前100名中,我们有一个非常次优的排序函数,用于CORD-19搜索应用程序的上下文。
本节对所获得的一些结果进行了总结。我们在这里报告三个重要的指标。与查询匹配的文档百分比、前100个位置的召回率以及考虑返回的前100个文档的平均倒数排序(MRR)。
表1显示了使用术语匹配信号BM25评分(https://docs.vespa.ai/documentation/reference/bm25.html) 对文档进行排序得到的结果。第一行显示了仅将文档与包含标题中每个单词的摘要(和操作符)匹配时的结果。这种方法限制太多,只匹配一小部分文档(0.01%),因此遗漏了许多相关的摘要,导致较差的召回率和MRR指标(分别为20%和19%)。
第二行匹配所有包含标题(或操作符)至少一个单词的摘要的文档。这太宽泛了,几乎匹配了语料库中的所有文档(89%),但却获得了良好的召回率和MRR指标(分别为94%和80%)。
当使用Vespa weakAND操作符(https://docs.vespa.ai/documentation/using-wand-with-vespa.html) 时,得到了一个中间立场。它跳过了许多基于简单计算的术语匹配方程的文档,使得它只匹配了19%的语料库,同时保留了可对比的召回率和MRR度量(分别为95%和77%)与更昂贵的OR运算符检索到的数据。我们还可以调优使用weakAND检索多少文档。在本例中,我们将它设置为1.000个文档,以便与语义搜索实验中使用的最近邻操作符进行比较。
表2的第一行是通过语义搜索得到的结果。在这个实验中,我们决定使用SciBERT -nli模型(https://github.com/gsarti/covid-papers-browser) ,它是AllenAI的SciBERT模型(https://www.aclweb.org/anthology/D19-1371/) 的一个微调版本。我们对这个模型抱有很高的期望,因为它是一个经过微调的模型,设计用于科学文本。
然而,结果并没有达到我们的预期。我们平均检索了约14%的语料库,Vespa nearestNeighbor操作符(https://docs.vespa.ai/documentation/reference/query-language-reference.html#nearestneighbor) 被设置为检索1.000个文档。
这意味着我们根据标题和摘要嵌入之间的距离检索至少1.000个文档,其中嵌入是由scibert-nli模型(https://github.com/gsarti/covid-papers-browser) 构造的。排序函数被设置为标题和摘要嵌入之间的点积。这种设置导致了我们实验中最差的召回率和MRR(分别为17%和8%)。
当我看到结果时,第一个想到的是代码有问题。所以为了检查清楚,我决定运行相同的实验,但现在使用摘要作为查询。然后,任务变成了试图检索自身的摘要。如果设置正确,则结果应该(接近)完美,因为相同嵌入之间的距离应该大约为零(舍入误差除外)。
表2的第二行报告了这个健全性检查实验,并验证了我们的设置,获得了一个完美的召回和接近完美的MRR。这至少消除了将匹配阶段、排序函数和实验设置实现应用于嵌入时出现完全错误的可能性。因此,语义模型的糟糕性能继续给我们带来一个奇怪而令人惊讶的结果。
为了避免语义搜索实验受到不公平的对待,我们尽最大努力整理数据,使其只包含有意义的标题和摘要。我们排除了许多标题或摘要明显错误的文章,如“作者索引”或“主题索引”。整理工作将文件数量从44000份减少到30000份左右。
之后,我们创建了标题和摘要嵌入,没有额外的预处理步骤,因为我们相信这是大多数人使用它的常规操作:
title_embedding = model(title)
abstract_embedding = model(abstract)
当然,如果有迹象表明它可以显著地改善结果,那么我们可以接受关于如何通过优化模型从文本构建嵌入的建议。所有的嵌入都被归一化(L2-norm)为长度1。
我们还结合了术语匹配和语义信号,但是与纯术语匹配设置相比没有任何明显的改进。
表3总结了此处讨论的结果。迄今为止,最明显的赢家是weakAND + BM25组合。语义搜索获得的结果令人失望,值得进一步研究。
重要的是,要强调我们在搜索的上下文中,使用和评估了语义模型。这里报告的(糟糕的)性能不一定适用于其他语义任务。
具有客观标准来评估不依赖于人类注释数据的搜索结果,不仅对于没有显式标签的情况(例如CORD-19数据集)很重要。
它在处理带有偏置标签的数据集时也很有用,例如在MS MARCO数据集偏向于术语匹配信号(https://towardsdatascience.com/why-you-should-not-use-ms-marco-to-evaluate-semantic-search-20affc993f0b) 的情况下,而这可能是由于它的数据收集设计。
原文链接:https://towardsdatascience.com/learning-from-unlabelled-data-with-covid-19-open-research-dataset-cded4979f1cf
- End -