目前搜索引擎技术已经迭代很多年了,从纯字面的匹配、到统计特征的匹配,再到神经网络的匹配,虽然一直在小步快走,但仍然没有跳出现有的Pipeline框架:即先召回、再排序。

召回是指从海量数据中筛出一小批可能的候选,排序是从一小批候选中找出最终的答案并进行排序。现有的Pipeline大多是在召回侧用字面或者浅层网络,不然数据量太大了根本处理不过来,而排序侧因为数据量小,会上更多的特征和模型。

这种架构的一个关键问题是,召回代表着天花板,如果召回阶段没把对的文本选出来,那排序再怎么排都没用。而召回又不能上太大的在线模型,只能离线挖掘出更多的feature,比如能代表文档主题的内容标签,来提升召回的效果。但这样就意味着更多的人力成本。

目前比较优雅的方法,是用双塔模型,离线把海量数据压缩成一个个embedding,线上来一个query,双塔encoder只用把这一个query映射到相同的空间,就能通过浅层匹配或者cosine相似度的方式召回。但这个方法还有个问题,就是跟排序模型虽然目标差不多,但还是各做各的,排序模型在优化目标时没有把梯度传给召回模型。近几年也有学者提出联合训练的方法,比如ORQA[1]和REALM[2]

但你懂的,最优雅的还是用一个模型把一切都端到端化

同时输入query和候选肯定是不可能的,等检索完GPT100都出来了,那有没有可能让模型提前把候选记住,搜索时只输入一个query,模型直接输出所有结果?

死记硬背?

最直接的想法,就是输入query文本,输出答案文本

在EMNLP20有一篇谷歌文章[3],直接在预训练后的T5上用问答数据精调,发现在不访问外部知识的情况下,预测结果可以接近当时的SOTA模型,证明T5本身在预训练就记住了很多知识。

然而这篇研究很快就被别打脸了[4],因为作者使用的数据集的train和test有很大一部分重合,很多答案在精调时都见过了,所以记得住。

接下来,浙大在ACL21的一篇工作[5]更严格地探索了模型的记忆能力,作者模拟老师教书的过程:

  1. 让学生看书,用LM的目标对知识库进行训练

  2. 让学生考察是否记住书上的知识点,把一些答案span遮盖掉,让模型去预测,强化知识点的记忆

  3. 问学生一些问题,用训练数据进行生成式精调,输入问题,输出答案

  4. 期末测验,问一些问题,评估预测结果

这个方式看起来还蛮科学的,但结果却惊掉了我的下巴。

在只有20条SQuAD知识的封闭域内,答案只能做到20%的Exact match,而当时榜单的SOTA有90%

Differentiable Search Index

直接生产答案的方法是行不通了,而且就算可以,生成模型的速度也太慢了,等生成完GPT200都出了。

那换另一个思路行不行呢?让模型自己把知识记住,并且编码成索引,输入query后生成候选索引?

这就是谷歌最近一篇文章的思路:Transformer Memory as a Differentiable Search Index[6]

这篇文章让模型做了两件事情:

  1. 建索引:训练时输入文本内容,输出docid,让模型记住该内容,并映射到索引ID上

  2. 检索:训练时输入query,输出多个docid,相当于做了一个排序

不过实际做的时候,还有不少细节:

  1. 把整个文档都输入也太慢了,最终发现只输入文档的前L个token就可以

  2. DocId应该怎么表示?给每个文档都分配一个唯一id,这个值是离散的,最后需要一层softmax分类,有巨大的词表,而且不利于增删,最终发现把文档按照额外的语义向量进行聚类,再整理成一个层级结构的效果是最好的,如图

最终模型的效果非常惊喜,居然碾压了双塔的召回方式

不过这个对比还有点不公平,既然是要做端到端的检索,应该跟双塔+排序去比较更有说服力。

总结

以上是我最近关注的一个小方向,可以看到,模型对离散知识的记忆能力真的太差了,但对于它自己编码的「连续」知识表现却还不错,感觉也是可以持续深入(shui)的一个topic。

融合外部知识是通用模型必须跨过的坎儿,而采用外挂还是记忆,目前为止还没有一个完美的答案。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

参考资料

[1]

Latent Retrieval for Weakly Supervised Open Domain Question Answering: https://arxiv.org/abs/1906.00300

[2]

REALM: Retrieval-Augmented Language Model Pre-Training: https://link.zhihu.com/?target=https%3A//kentonl.com/pub/gltpc.2020.pdf

[3]

How Much Knowledge Can You Pack Into the Parameters of a Language Model?: https://aclanthology.org/2020.emnlp-main.437/

[4]

Question and answer test-train overlap in open-domain question answering datasets: https://arxiv.org/abs/2008.02637

[5]

Can Generative Pre-trained Language Models Serve as Knowledge Bases for Closed-book QA?: https://aclanthology.org/2021.acl-long.251.pdf

[6]

Transformer Memory as a Differentiable Search Index: https://arxiv.org/abs/2202.06991

下一代的搜索引擎是什么样子?神经网络真的能「死记硬背」吗?相关推荐

  1. 神经网络中的「注意力」是什么?怎么用?

    来源:转载自公众号「雷克世界」微信号:ROBO_AI 编译:嗯~阿童木呀.多啦A亮 概要:神经网络中的注意力机制(Attention mechanisms),也被称为"神经注意力" ...

  2. 最近今日头条上真的是「哀鸿遍野」啊

    文章首发于微信公众号「非著名程序员」. 今天是日更生财日历笔记的第 19 天. 今天呢,我不想讲生财日历上的内容,今天我们就来聊一聊今日头条最近的一些平台政策变化吧,我们都这些变化当中能够看到什么呢? ...

  3. 元宇宙真的是「割韭菜」吗?

    作者 | 小枣君 来源 | 鲜枣课堂 我们究竟该如何看待元宇宙?元宇宙为什么会火?它到底有没有价值?它真的是"割韭菜"吗? 今天这篇文章,小枣君想说说自己的看法. █ 元宇宙为什么 ...

  4. 谷歌大脑发布神经网络的「核磁共振」,并公开相关代码

    作者:杨晓凡.camel.思颖.杨文 神经网络的可解释性一直是所有研究人员心头的一团乌云.传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解,但是即使我们知道「第 538 号神经 ...

  5. 北邮王啸:挖掘图神经网络中的「万物真理」 | 青源专栏

    导读:为了启发青年学者研究思路,激发科研灵感,智源社区推出青年学者访谈栏目.北京邮电大学副教授王啸是国内图学习领域的佼佼者.回顾他的科研历程,从探寻网络研究的本质,到在物理学家的论文中寻找灵感,他对图 ...

  6. triplet loss后面不收敛_你的神经网络真的收敛了么?

    1.为什么小模型的作为backbone效果会差? 在深度学习目标检测(图像分割)领域,我们发现当我们使用层数越深,并且在imagenet上表现越好的分类网络作为backbone时,它的检测和分割效果越 ...

  7. 第一次,我们在人工神经网络中发现了「真」神经元

    视学算法报道 转载自:机器之心 参与:杜伟.魔王 无论是字面上.符号上还是概念上的表达,这种神经元都会对相同的概念做出反应. OpenAI 的研究者们在人工神经网络 CLIP 上发现了「真」神经元,这 ...

  8. 谷歌怕了!ChatGPT狂砸搜索引擎饭碗,CEO开会拉响「红色警报」

    来源:新智元 这个月,OpenAI的ChatGPT横空出世,立刻在AI圈掀起一股大风暴. 清晰.智能.循循善诱,甚至能包办论文和代码.当时许多人就预言:谷歌恐怕药丸. 这不是空口虚言,现在,谷歌是真的 ...

  9. 越来越「保守」的索尼,还能满足下一代玩家吗?

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 索尼掐灭了一个创新的火苗. 4 月 9 日,据彭博社报道,索尼互动娱乐扼杀了内部一个小团队的转型尝试.这个团队由几个美术开发人员领导,主要工作是协助 ...

最新文章

  1. mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)
  2. 从前后端分离到GraphQL,携程如何用Node实现?\n
  3. python参考手册--第8章
  4. 未来教育python视频百度云-青橙课程 | 人工智能走进课堂,为未来教育高质量发展赋能!...
  5. Flex Box的技巧合集 #css布局
  6. MongoDB Hot Backup 测试及痛点
  7. oracle设置开机启动,linux下oracle设置开机自启动实现方法
  8. 大数据、AI“武装”企业服务:风控、检索、安全
  9. android 录音原始文件_5分钟短文 | Android证书生成,签名,验证,虽然难,但学一次就够了!...
  10. libevent的vs2013的源码工程 以及两个demo地址
  11. Ubuntu 安装 typora
  12. 多元线性回归矩阵求导
  13. C# 如何将一个PDF页面分割为两页或多页
  14. 灰度变换与空间滤波——图像增强
  15. 32位和64位CPU操作系统的区别
  16. Mac解决mysql stop报错问题:The /usr/local/mysql/data directory is not owned by the ‘mysql‘ or ‘_mysql‘
  17. Photoshop教程|ps渐变如何使用?如何给图片制作出渐变效果?
  18. 模拟ATM机存取款管理系统设计(C++)
  19. Linux安装和使用Trickle的方法
  20. C++ Primer Plus读书感悟

热门文章

  1. Java内存溢出异常(下)
  2. 编码、解码Html代码
  3. c++ 状态模式(state)
  4. Android开发14——监听内容提供者ContentProvider的数据变化
  5. 编译器为C++ 空类自动生成的成员函数
  6. DataTable/DataSet汇出Excel
  7. 22-1图的遍历的源代码
  8. java:Eclipse插件springsource-tool-suite的下载和安装
  9. 垂直搜索引擎完整实现
  10. PAT-乙级-1039. 到底买不买(20)