paper link: Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge

1. intro

本文研究的问题如下:给定一段对话历史和一些与对话相关的文章片段,目标是生成有意义的、与给定背景信息密切相关的答复,本文重点关注的是以下三个方面:

  • 对话历史建模
  • 如何充分使用非结构化的外部知识
  • 生成回复的多样性和相关性

本文的主要贡献在于:

  • 提出了一个泛化的指针生成机制(pointer generator),使得同时从对话历史和外部知识中复制实体。
  • 提出了一种聚类Beam Search算法,可以在解码的时候动态地将相似语义地序列分组归类,避免生成通用回复。

总体模型架构如下图:

图1. 模型结构

2. Data Cleaning and Fact Retrieval

论文中认为片段的每一句话是一个事实(fact),因为文章很多,所以作者使用了tfidf来选取与对话最相关的前topk个事实
sim⁡(H,F)=∑w∈Hidf(w)×count⁡(win⁡F)\operatorname{sim}(H, F)=\sum_{w \in H} i d f(w) \times \operatorname{count}(w \operatorname{in} F)sim(H,F)=w∈H∑​idf(w)×count(winF)

其中,HHH是对话历史, FFF是事实句子(来自事实文章中),www是对话中的一个词,idf(w)idf(w)idf(w)是倒文档频率(此处是指www在所有对话中出现的频率的倒数)上式的含义是在对话中出现频率低,而在文档某句话中出现次数多的词,决定了对话与该事实的相关度。最后将得到的前topk个事实按照初始出现的顺序拼接到一起。

3. encoder

对于对话历史和背景事实,模型使用两个独立的单层双向LSTM网络进行编码,得到两个隐层状态:
HH=(h1H,h2H,…,hLH)HF=(h1F,h2F,…,hTF)\begin{array}{l} H^{H}=\left(h_{1}^{H}, h_{2}^{H}, \ldots, h_{L}^{H}\right) \\ \\ H^{F}=\left(h_{1}^{F}, h_{2}^{F}, \ldots, h_{T}^{F}\right) \end{array}HH=(h1H​,h2H​,…,hLH​)HF=(h1F​,h2F​,…,hTF​)​

然后将对话历史的第一个和最后一个隐藏状态连接,然后线性投影结果作为decoder的初始状态

3. decoder

Decoder主要包含三个模块:

  • 分别针对于对话历史和背景事实的注意力机制
  • 生成回复的模式预测
  • 词生成

3.1 Attention Mechanism

在解码的每个时刻 ttt ,利用解码器的隐层状态 htRh_t^{R}htR​分别对HHH^HHH和HFH^FHF计算attention:
etiH=vHT⋅tanh⁡(WhH⋅hiH+WrH⋅htR+bH)αtiH=Softmax⁡(etiH)htH∗=∑i=1LαtiHhiH\begin{array}{l} e_{t i}^{H}=v_{H}^{T} \cdot \tanh \left(W_{h}^{H} \cdot h_{i}^{H}+W_{r}^{H} \cdot h_{t}^{R}+b^{H}\right) \\ \\ \alpha_{t i}^{H}=\operatorname{Softmax}\left(e_{t i}^{H}\right) \\ \\ h_{t}^{H *}=\sum_{i=1}^{L} \alpha_{t i}^{H} h_{i}^{H} \end{array}etiH​=vHT​⋅tanh(WhH​⋅hiH​+WrH​⋅htR​+bH)αtiH​=Softmax(etiH​)htH∗​=∑i=1L​αtiH​hiH​​

其中WhHW_h^HWhH​, WrHW_r^HWrH​, bHb^HbH, vHTv_H^TvHT​是可训练参数

etjF=vHF⋅tanh⁡(WhF⋅hjF+WrF⋅htR+bF)αtjF=Softmax⁡(etjF)htF∗=∑j=1TαtjFhjF\begin{aligned} e_{t j}^{F} &=v_{H}^{F} \cdot \tanh \left(W_{h}^{F} \cdot h_{j}^{F}+W_{r}^{F} \cdot h_{t}^{R}+b^{F}\right) \\ \\ \alpha_{t j}^{F} &=\operatorname{Softmax}\left(e_{t j}^{F}\right) \\ h_{t}^{F *} &=\sum_{j=1}^{T} \alpha_{t j}^{F} h_{j}^{F} \end{aligned}etjF​αtjF​htF∗​​=vHF​⋅tanh(WhF​⋅hjF​+WrF​⋅htR​+bF)=Softmax(etjF​)=j=1∑T​αtjF​hjF​​

3.2 Mode Prediction

本模块主要是借鉴自pointer generator (See, Liu, and Manning 2017),解决生成过程中的OOV问题,它有两种模式:(1)生成一个词;(2)复制一个词。而在该模型中,对指针生成器进行了扩展,转换成三种模式:(1)生成一个词;(2)从对话历史中复制一个词;(3)从事实中复制一个词。

在解码的每个时间步ttt,使用softmax多分类器来得到每次模式的概率:
Pr⁡(mode=m∣t,H,F)=softmax⁡(FF(htF∗⊕htH∗⊕htR⊕xt))\operatorname{Pr}(\bmod e=m \mid t, H, F)=\operatorname{softmax}\left(F F\left(h_{t}^{F *} \oplus h_{t}^{H *} \oplus h_{t}^{R} \oplus x_{t}\right)\right)Pr(mode=m∣t,H,F)=softmax(FF(htF∗​⊕htH∗​⊕htR​⊕xt​))

其中 xtx_txt​ 表示解码器在时间步 ttt 的输入向量

3.3 Word prediction

最终,模型生成一个词的概率等于三种模式生成的概率相加:
Pr⁡(w∣t,H,F)=∑m=13Pr⁡(m∣t,H,F)⋅Pr⁡m(w∣t,H,F)\operatorname{Pr}(w \mid t, H, F)=\sum_{m=1}^{3} \operatorname{Pr}(m \mid t, H, F) \cdot \operatorname{Pr}_{m}(w \mid t, H, F)Pr(w∣t,H,F)=m=1∑3​Pr(m∣t,H,F)⋅Prm​(w∣t,H,F)

对于 Seq2Seq生成一个词:
Prm(w∣t,H,F)=softmax⁡(WghtR)P_{r m}(w \mid t, H, F)=\operatorname{softmax}\left(W_{g} h_{t}^{R}\right)Prm​(w∣t,H,F)=softmax(Wg​htR​)

对于从对话历史或者背景事实中复制一个词:
Prm(w∣t,H,F)=αtiHor αtiFP_{r_{m}}(w \mid t, H, F)=\alpha_{t i}^{H} \text { or } \alpha_{t i}^{F}Prm​​(w∣t,H,F)=αtiH​ or αtiF​

4. Cluster-based Beam Search

传统的 beam search 有一个固定大小的候选集上限k,而这 k 个最有可能的候选项有很多是语义相似的,例如i donot known, i donnot seei donot understand,虽然它们的概率都很高,但是对于生成的多样性来讲没有意义。因此,作者提出了一种新的基于聚类的 Beam Search 算法:

主要过程如下:

  1. 首先根据对数似然概率选取前BS*2个候选项
  2. 然后使用K-means聚成K个簇,聚类的特征为已解码序列的词向量平均
  3. 在每一个簇中选取前BS/K个候选项作为下一步解码的候选集

其中BS表示束宽(beam size)

作用:语义相似的候选项会在一个簇中,不同簇中候选项含义不同,这样就可以在不增加Beam Search容量的前提下,增加不同语义回复的可能性。

5. Remove Repeated N-grams

论文介绍到:因为使用了注意力机制,模型似乎更加注意之前那些在对话历史和事实中关注的词,因此会重复生成 N-grams。为了提高流畅性,在波束搜索过程中,不再进一步考虑具有重复二元图的假设。

6. Filter Meaningless Response using LM

在无意义的响应上使用KenLM训练一个三元语言模型


reference

Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge
paper link: Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge

Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge相关推荐

  1. 文本生成任务之营销文本生成(Seq2seq+attention、Pointer Generator Network、Converage、Beam Search、优化技巧、文本增强)

    文章目录 引言 项目任务简介 0. 数据预处理 0.1 将json文件转化成txt文件 0.2 词典处理 0.3 自定义数据集SampleDataset(Dataset类) 0.4 生成Dataloa ...

  2. RNN聊天机器人与Beam Search [Tensorflow Seq2Seq]

    本博客分析了一个Tensorflow实现的开源聊天机器人项目deepQA,首先从数据集上和一些重要代码上进行了说明和阐述,最后针对于测试的情况,在deepQA项目上实现了Beam Search的方法, ...

  3. Greedy Search VS Beam Search 贪心搜索 vs 集束搜索

    在做NLP领域的NMT或者chatbot等方面的工作时,在进行inference(推理)的时候,经常会用到两种搜索方式,即Greedy Search和Beam Search. 1. Greedy Se ...

  4. Beam Search

    Q: 什么是Beam Search? 它在NLP中的什么场景里会⽤到? 传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam ...

  5. seq2seq中的beam search算法过程

    在seq2seq模型中,我们以自然语言处理技术的集大成者机器翻译为例: 在模型训练好了之后,我们开始测试我们的模型(中文翻译成英文),比如Encoder中输入"我 是 中国 人"( ...

  6. 函 float *search(float(*pointer)[4],int n)

    书本277页返回指针值的函数,调用函数输出一个学生的全部科目的成绩. 返回指针值函数的妙用 #include <stdio.h>int main() {float score[][4]={ ...

  7. Beam Search还能更快?结合优先队列的最佳优先化Beam Search

    论文标题:Best-First Beam Search 论文作者:Clara Meister, Tim Vieira, Ryan Cotterell 论文链接:https://arxiv.org/pd ...

  8. 机器学习(二十三)——Beam Search, NLP机器翻译常用评价度量, 模型驱动 vs 数据驱动

    https://antkillerfarm.github.io/ Beam Search Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用 ...

  9. 【NLP】选择目标序列:贪心搜索和Beam search

    构建seq2seq模型,并训练完成后,我们只要将源句子输入进训练好的模型,执行一次前向传播就能得到目标句子,但是值得注意的是: seq2seq模型的decoder部分实际上相当于一个语言模型,相比于R ...

  10. beam search算法

    转载 https://blog.csdn.net/xyz1584172808/article/details/89220906 https://blog.csdn.net/batuwuhanpei/a ...

最新文章

  1. MySQL 5.5主从复制(Replication)
  2. Zabbix 3.4.3 使用阿里云短信服务进行报警
  3. 历史上线程的3种实现模型
  4. 【SQL语句】MySql、SqlServer查询近期记录
  5. 软件中的1、同步调用;2、回调;3、异步调用
  6. 使用 Typescript 踩 react-redux 的坑
  7. JavaWeb——MyBatis入门程序
  8. 作业六 栈的使用和界面编程探索
  9. ydisk安卓版本_Y Disk HD
  10. 淘宝客网站SEO及赚钱与揭密
  11. adb 配置自动获取时间 使用GPS提供的时间 使用网络提供的时间
  12. Oracle数字转汉字过程,oracle中如何将字符和数字转成中文
  13. 单相/三相桥相/线电压基波幅值总结
  14. 报错-vue.runtime.esm.js?2b0e:619 [Vue warn]: Unknown custom element: <el-dialog> - did you register th
  15. 动态规划法(JavaScript)
  16. java 实现将图片替换到word 文档中
  17. 使用c语言判断是闰年还是平年
  18. 家用小型UPS不间断电源—供电系统的保险
  19. Java实现简易聊天室以及Scoket编程入门
  20. 灵魂发问!线程池到底创建多少线程比较合理?

热门文章

  1. CleanMyMac X2023最新版安装图文详解
  2. dubbo服务暴露与注册
  3. centos7密码破解
  4. cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
  5. sd卡无法读取怎么办?内存卡数据恢复,4个好用方法
  6. 个人虚拟化集群搭建教程
  7. 图解网络(一)——计算机网络基础
  8. Laravel log channel 分组配置
  9. speedoffice(Excel)表格怎么自动求和
  10. 重庆邮电大学计算机学硕考研经验,重庆邮电大学计算机考研复试备考经验及经过...