利用Bert的过程是基本一样的,核心过程都是用Transformer作为特征抽取器,用Bert预训练模型初始化Transformer的参数,然后再用当前任务Fine-tuning一下,仅此而已。

在应用Bert的时候,真正使用某个应用的数据,是在第二阶段Fine-tuning阶段,通过用手头任务的训练数据对Transformer进行训练,调整参数,将Transformer的参数针对手头任务进行Fine-tune,之后一般会获得明显的应用提升。

1、QA

QA应用Bert,从流程角度,一般分为两个阶段:检索+QA问答判断。

  • 首先往往会把比较长的文档切割成段落或者句子n-gram构成的语言片段,这些片段俗称Passage,然后利用搜索里的倒排索引建立快速查询机制。
  • 第一个阶段是检索阶段,这个和常规的搜索过程相同,一般是使用BM25模型(或者BM25+RM3等技术)根据问句查询可能的答案所在候选段落或者句子;
  • 第二个阶段是问答判断。在训练模型的时候,使用SQuAD等比较大的问答数据集,或者手上的任务自有数据集,对Bert模型进行 Fine-tuning;
  • 在应用阶段,对于第一阶段返回的得分靠前的Top K候选Passage,将用户问句和候选passage作为Bert的输入,Bert做个分类,指出当前的Passage是否包括问句的正确答案,或输出答案的起始终止位置。这是比较通用的利用Bert优化QA问题的解决思路。

2、搜索

在搜索领域应用Bert,如果是Passage这种短文档搜索,效果巨大提升;而长文档的搜索,使用Bert也能有一定幅度提升,但是效果不如短文档明显,很可能原因在于搜索的长文档处理方式有它自己的特点,还需要继续摸索更合理的更能体现搜索中长文档特性的方法。

搜索任务和QA任务的区别?

  1. 首先,尽管两个任务都是在做Query和Document的匹配,但是匹配时侧重于哪些因素,这两个任务是不同的。两个文本的“相关性”和“语义相似性”代表的内涵是有差异的;所谓“相关性”,更强调字面内容的精确匹配,而“语义相似性”则多涵盖了另外一个意思:就是尽管字面不匹配,但是深层语义方面的相近。QA任务对于这两者都是重视的,可能偏向语义相似性更多一些,而搜索任务更偏重文本匹配的相关性方面。
  2. 其次,文档长度的差异。QA任务往往是要查找问题Q的答案,而答案很可能只是一小段语言片段,在Passage这个较短的范围内,一般会包含正确答案,所以QA任务的答案一般比较短,或者说搜索对象比较短就可以覆盖正确答案,即QA任务的处理对象倾向于短文本;而对搜索任务来说,文档普遍比较长。尽管在判断文档是否与查询相关时,也许只依赖长文档中的几个关键Passage或者几个关键句子,但是关键片段有可能散落在文档的不同地方。在应用Bert的时候,因为Bert对于输入长度有限制,最长输入允许512个单位。于是如何处理长文档,对于搜索来说比较重要;

这是因为目前出现的利用Bert改进检索的工作,一方面比较集中在Passage级别;另外一方面通常任务是Ad Hoc检索,以内容匹配为主,与真实搜索引擎利用的主要特征差异比较明显。

归纳下在Ad Hoc检索任务中一般如何应用Bert:一般也是分成两个阶段,

  • 首先利用BM25等经典文本匹配模型或者其它简单快速的模型对文档进行初步排序,取得分前列Top K文档,然后用复杂的机器学习模型来对Top K返回结果进行重排序。
  • 应用Bert的地方明显在搜索重排序阶段,应用模式与QA也是类似的,就是把Query和Document输入Bert,利用Bert的深层语言处理能力,作出两者是否相关的判断。
  • 如果是Passage级别的短文档检索,其实流程基本和QA是一样的;而如果是长文档检索,则需要增加一个如何处理长文档的技术方案,然后再走Bert去做相关性判断。

对于如何在信息检索领域应用Bert,BERT如何做长文档检索?

答:长文档检索任务,就体现出搜索和QA任务的不同了。因为要搜索的文档比较长,在重排序阶段,很难把整个文档输入到Bert中,所以这个工作采取了一个简单的方法:把文档分割成句子,利用Bert判断每个句子和查询Q的相关性,然后累加得分最高的Top N句子(结论是取得分最高的3个句子就够了,再多性能会下降),获得文档和查询Q的相关性得分,这样就将长文档问题转化成了文档部分句子的得分累加的模式。实验表明相对强基准BM25+RM3,使用Bert会有大约10%的效果提升。

3、对话系统

Bert应用在聊天机器人领域,潜力比较大。单轮会话的问题相对比较简单;多轮会话中,如何融入上下文这个问题,还是比较复杂,相信Bert在多轮这里能够发挥较大的作用。

论文“BERT for Joint Intent Classification and Slot Filling”利用Bert解决单轮会话的会话意图分类以及槽位填充任务的

  • 输入一个会话句子,Transformer的[CLS]输入位置对应高层Transformer位置输出句子的意图分类,这是一个典型地应用Bert进行文本分类的方法;
  • 另外一方面,对于会话句中的每个单词,都当作一个序列标注问题,每个单词在Transformer最高层对应位置,分类输出结果,将单词标注为是哪类槽的槽值的IOE标记即可。这是典型的用Bert解决序列标注的思路。
  • 而这个方法则通过Bert同时做了这两件事情,这点还是挺好的。通过采用Bert预训练过程,在两个数据集合上,在意图分类任务上效果提升不太明显,可能是基准方法本身已经把指标做得比较高了;槽值填充方面,与RNN+Attention等基准方法相比,两个数据集合表现不一,一个数据集合效果提升2%,另外一个提升12%左右。总体而言,表现还行,但是不突出。

多轮会话论文Comparison of Transfer-Learning Approaches for Response Selection in Multi-Turn Conversations

用户和聊天机器人交互问答好几个回合的场景下,如何改进模型,让聊天机器人记住历史的用户交互信息,并在后面的应答中正确地使用历史信息。如何有效融入更多的历史信息,并在上下文中正确地场合正确地使用历史信息,就是模型改进的关键。