Seq2Seq+前缀树:检索任务新范式(以KgCLUE为例)

c67dd99f8425197d0f02174a97035ade.gif

©PaperWeekly 原创 · 作者 |苏剑林

单位 |追一科技

研究方向 |NLP、神经网络

两年前,在《万能的seq2seq:基于seq2seq的阅读理解问答》《“非自回归”也不差:基于MLM的阅读理解问答》中,我们在尝试过分别利用“Seq2Seq+前缀树”和“MLM+前缀树”的方式做抽取式阅读理解任务,并获得了不错的结果。而在去年的 ICLR 2021上,Facebook 的论文《Autoregressive Entity Retrieval》同样利用“Seq2Seq+前缀树”的组合,在实体链接和文档检索上做到了效果与效率的“双赢”。 

事实上,“Seq2Seq+前缀树”的组合理论上可以用到任意检索型任务中,堪称是检索任务的“新范式”。本文将再次回顾“Seq2Seq+前缀树”的思路,并用它来实现最近推出的 KgCLUE 知识图谱问答榜单的一个 baseline。

afe19f34a2e9506294bb67290fc7b023.png

检索任务

说到检索任务,想必大家都不陌生,除了常规的相似问检索外,NLP中还有很多任务都可以视为检索,比如抽取式阅读理解、实体链接甚至基于知识图谱的问答,等等。

以相似问检索为例,常规的检索系统的流程为:

1. 训练句子编码模型,这通常包含复杂的负样本构建流程,负样本质量直接影响到最终效果;

2. 将每个句子编码为向量,存到诸如Faiss的向量检索库中,这一步通常需要消耗相当大的空间;

3. 将查询句子编码为向量,然后进行检索,返回 Topk 结果及其相似度。

如果现在告诉你,有一个做检索的新方案,可以不用花心思挑选负样本,也不用消耗极大内存的向量检索库,最终效果和速度也不差于旧方案,那你会不会迫不及待想要尝试一下?没错,这就是本文的主角“Seq2Seq+前缀树”了。

5f328179a86f70d05e33256ed63c32a4.png

Seq2Seq

首先,让我们抛开各种繁琐的细枝末节,想一想检索任务究竟在做什么。对于相似问检索来说,我们输入一个问句,希望输出数据库中与之最相近的句子;对于实体链接来说,我们输入一个包含该实体的句子,希望输出知识库中能正确诠释该实体的实体名或者编号;等等。

抛开某些约束规则不说,可以发现这些任务本质上都可以抽象为:输入一个句子,输出另一个句子。

这不正是 Seq2Seq 最擅长的工作了嘛!所以用 Seq2Seq 做不是一件很自然的事情?当然,有读者会说我要输出的是数据库里边已有的一个句子呀,Seq2Seq 要是“溢出”(解码出了数据库不存在的句子)了怎么办?这时该前缀树上场了,我们可以利用前缀树约束解码过程,保证生成的结果在数据库中,这一点我们等会细说。

没有了“溢出”的顾虑,我们将会发现 Seq2Seq 的做法真的是集诸多优点于一身,比如:

1. 训练 Seq2Seq 模型只需要输入和目标,这也就是说我们只需要正样本,免除了构建负样本的烦恼,或者说它是将所有其他句子都当成负样本了;

2. Seq2Seq 是直接解码出目标句子,省去了句向量的储存和检索,也就免除了 Faiss 等工具的使用了;

3. Seq2Seq 包含了目标句子与输入句子之间 Token 级别的交互,理论上比基于内积的向量检索能做到更精细的对比,从而有更好的检索效果。

5163e4010b59be0dcede8df826ef08b0.png

前缀解码

现在我们来细说一下利用前缀树来约束解码的过程,看一下它是如何

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值