看到三篇干货满满&&很实用的相关性优化paper,先上论文大餐。

PRE-TRAINING TASKS FOR EMBEDDING-BASED LARGE-SCALE RETRIEVAL​arxiv.org

google的paper(How to pretrain?),主要是讲怎么样更好的设计pretrain任务,用于问答任务。

ColBERT:Efficient and Effective Passage Search via Contextualized Late Interaction over BERT​arxiv.org

stanford的paper(How to late fusion?),主要是讲怎么样更好的让query和doc进行late fusion,用于召回侧&&粗排?相比双塔dssm模型,recall更优;相比交互式dssm模型,效率上更优。此外,召回侧可以使用faiss超大规模检索,用于工业界的搜索/推荐等系统。

Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring​arxiv.org

facebook的paper(How to late fusion?),和上个paper的目的一致,怎么样进行late fusion,提高检索的效率,提高召回率。

PS:文中的截图均来自于上面三篇paper。。。

零、相关性之DSSM回顾

1)双塔DSSM模型

双塔DSSM模型

query(context)和doc(candidate)独立进行建模,各自得到embedding,最后进行相似度度量(L2/cosine等)。在搜索/推荐或者其他相似性检索领域,召回侧可以使用faiss(乘积量化)或者nsg(基于图检索)等方式,对超大规模的doc embedding进行索引。具体使用的时候,由query embedding来召回topk的结果用于后续的排序侧。此外,在粗排的过程中,也可以基于这种方式快速计算相似度,作为特征之一。

2)交互DSSM模型

交互式DSSM模型-i
交互式DSSM模型-ii

交互的DSSM模型,一种方式是刚开始计算出query和doc在term级别的相似度矩阵,在此基础上走神经网络,类似:KNRM、Conv-KNRM等;另一种方式和bert预训练类似,输入部分query和doc以[sep]分隔,走encoder模块建模,以隐藏层[cls]作为最终的embedding。这种方式,相比双塔DSSM模型计算相似度得分更为精确,但是计算的运算量相对较高,一般用在精排部分。

一、How to Pretrain

本文的要点是提出了ICT、BFS、WLP三种构造预训练数据的方式,用于提升预训练模型的建模能力。在问答的任务上,取得了显著的效果效果提升,实验部分测试集包括:SQuAD、Natural Qustions。

1)基本概念

下面表述下ICT、BFS、WLP三个概念到底是啥?结合paper里面的两张截图来解释下。

i)ICT:query为维基文章段落里面的某个句子;doc为该段落的其余句子;

ii)BFS:query为维基文章第一段随机选取的句子;doc为同一页面随机选取的一个段落;

iii)WLP:query为维基文章第一段随机选取的句子;doc为另外一个页面(query对应的句子,包含的超链接跳转到的页面)的某个段落;

2)实验结论

最后,贴两个主要的实验结果,来得到一些主要的实验结论。

BoW-MLP:基于bag-of-words的方式,走MLP网络进行建模。可以看到,结合ICT+BFS+WLP三种预训练方式,相比MLM方式实验结果显著提升。

三种预训练方式中,ICT效果比其他两者要好。此外,提高最终embedding的维度,实验结果会好一点。

二、ColBERT

本文的核心思想,在于怎么样让query和doc的embedding进行late fusion,相比单纯直接进行相似性度量(L2/cosine),召回率得到提高。此外,在粗排上计算速度得到显著提升,召回侧可以引入faiss进行超大规模检索。

1)建模&&检索

query建模:构造出统一的输入长度,不够的补[mask],采用bert进行建模,使用cnn压缩隐藏层表征长度,最终得到Eq个embedding表征。doc建模:filter表示过滤标点符号等一些不相关的表征,最终得到Ed个embedding表征。

在粗排的计算中,query的建模结果以一个2D矩阵存储,doc的建模结果以一个3D矩阵存储,max本质是进行max-pooling操作,最终再叠加一个矩阵求和操作。在召回侧的计算中,分成两个阶段:filter和refine,filter:max这部分的操作,对每个q_i用faiss检索出topk’的结果,得到Nq*k’个doc;refine:在Nq*k’个doc结果中,采用和粗排一样的计算方式,得到最优的k个结果,作为最终的检索结果。

2)实验结论

直接上一个简单的硬核实验结论,ColBERT的效果比ConvKNRM明显要好,此外检索的速度比BERT-base模型要快几个数量级。

三、Poly-Ecnoders

1)建模

和stanford paper不一致的地方,这边doc(candidate)的建模结果只有一个embedding。第一个公式,主要是用于paper里面的对话任务,query(context)为对话的前面n条记录,因此query太长了,需要做一个压缩。第二个公式,采用attention的方式,计算query中各个embedding和doc的相关性,最终采用加权向量方式作为最终query的embedding。这边计算attention的时候,引入了softmax,因此这种建模的方式引入faiss可能是个问题?paper里面也只展示了粗排的相关实验结果。

2)实验结论

从召回率指标上来看,在不同测试集上,Poly-encoder的实验结果基本快和Cross-encoder持平。

从检索的效率来看,相比Bi-encoder,Poly-encoder的检索耗时大约多了3-4倍,当候选召回在100k规模,使用cpu耗时大约678-837ms。相比Cross-encoder显然显著降低。

mask rcnn 召回率_搜索推荐召回amp;amp;粗排相关性优化最新进展—2020相关推荐

  1. 如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

    导读 工业界的推荐系统通常包括召回.粗排.精排以及重排四个阶段,如图一所示,每个阶段都像是一个漏斗,从海量的物品集合中过滤出用户最有可能感兴趣的物品.其中粗排模型发挥的主要作用是统一计算和过滤召回结果 ...

  2. 精度,精确率,召回率_了解并记住精度和召回率

    精度,精确率,召回率 Hello folks, greetings. So, maybe you are thinking what's so hard in precision and recall ...

  3. 准确率 召回率_吴恩达深度学习笔记(61)-训练调参中的准确率和召回率

    单一数字评估指标(Single number evaluation metric) 无论你是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,你会发现,如果你有一个单实数评估 ...

  4. python计算召回率_分词结果准确率、召回率计算-python

    原博文 2016-06-19 13:01 − 使用python计算crf根据模型的分词结果的准确率,召回率和F值 测试文件output.txt,第一列是字,第二列是人工标注的分词结果,第三列是根据模型 ...

  5. python计算召回率_序列标注的准确率和召回率计算

    最近在用BiLSTM+CRF做命名实体识别问题.关于模型效果评估,很多提到用conlleval.pl来实现,conlleval.pl是perl语言写的,原谅我没看懂.最后还是决定自己写个程序算一算准确 ...

  6. 准确率 召回率_机器学习tips(四):精确率(precision)和召回率(recall)

    精确率(precision)和召回率(recall) 混淆矩阵 True Positive(真正, TP):将正类预测为正类数. True Negative(真负 , TN):将负类预测为负类数. F ...

  7. 准确率 召回率_机器学习中F值(F-Measure)、准确率(Precision)、召回率(Recall)

    在机器学习.数据挖掘.推荐系统完成建模之后,需要对模型的效果做评价. 业内目前常常采用的评价指标有准确率(Precision).召回率(Recall).F值(F-Measure)等,下图是不同机器学习 ...

  8. python 召回率_使用sklearn获取精确性和召回率

    这有点不同,因为对于非二进制分类,交叉值分数不能计算精度/召回率,所以需要使用recision-score.recall-score和手工进行交叉验证.参数average='micro'计算全局精度/ ...

  9. python计算召回率_机器学习之分类:精确率和召回率

    精确率 精确率指标尝试回答以下问题: 在被识别为正类别的样本中,确实为正类别的比例是多少? 精确率的定义如下: Precision = \dfrac{TP}{TP + FP} 注意:如果模型的预测结果 ...

最新文章

  1. 第二次作业— —结对项目
  2. 产品经理的思考利器——UML
  3. 外部方法调用内部_私有属性和私有方法
  4. oracle怎么切换归档模式,Oracle学习系列—归档模式的切换
  5. python 二重积分_Python机器学习(五十七)SciPy 积分
  6. 固件攻击可在隐藏的SSD区域释放持久性恶意软件
  7. virtualbox中实施ASM扩容实施记录
  8. 熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker
  9. centos6 下安装xfce+vnc
  10. YACC介绍(译文)
  11. C语言求1000以内完数
  12. 汇编语言程序设计-钱晓捷(第五版)学习笔记目录
  13. SPI Flash芯片W25Q32英文版数据手册解读(三)---------程序编写,电路应用
  14. 基于Java的飞机大战游戏的设计与实现(含源文件)
  15. flutter 打包apk
  16. 掌握.NET中的日常打印
  17. JAVA面向对象程序设计-FeiGe快递系统-继承II
  18. A_A01_001 KEIL4-KEIL5软件安装
  19. 全新网站后台管理系统下载 微信公众号 CMS 工作流 ERP
  20. nutanix文件服务器方案,Nutanix-CE版部署指南(一)

热门文章

  1. markdown与latex:书写单边大括号左边或右边即在没有括号的一端加点
  2. 《微服务设计》(一)---- 微服务
  3. iOS 9.0系统策略更新
  4. [转载] python中count()、values_counts()、size()函数
  5. [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了
  6. [转载] Java为什么不允许覆盖静态方法?
  7. Codeforces 466E Information Graph
  8. 使用ViewPager + Fragment实现微信底部Tab效果
  9. Ubuntu 12.04下Pomelo开发环境搭建(转)
  10. 从零开始——基于角色的权限管理01(补充)