<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>对话系统 on bitJoy</title><link>https://bitjoy.net/tags/%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 对话系统 on bitJoy</description><generator>Hugo -- 0.148.2</generator><language>en</language><lastBuildDate>Fri, 06 Mar 2020 12:38:40 +0800</lastBuildDate><atom:link href="https://bitjoy.net/tags/%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>CS224N（2.26）Natural Language Generation</title><link>https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/</link><pubDate>Fri, 06 Mar 2020 12:38:40 +0800</pubDate><guid>https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/</guid><description>&lt;p>今天要介绍的内容比较多，但都是概述性的内容，主要了解自然语言生成领域的进展。&lt;/p>
&lt;hr>
&lt;h1 id="section-1-recap-lms-and-decoding-algorithms">Section 1: Recap LMs and decoding algorithms&lt;/h1>
&lt;p>之前已经讲过什么是语言模型，语言模型就是给定句子中的一部分词，要求预测下一个词是什么。形式化表述就是预测\(P(y_t|y_1,…,y_{t-1})\)，其中的\(y_1,…,y_{t-1}\)就是目前已知的词，\(y_t\)就是要预测的下一个词。&lt;/p>
&lt;p>条件语言模型是指除了已知\(y_1,…,y_{t-1}\)，还给定了\(x\)，这个\(x\)就是提供给语言模型的额外的信息。比如机器翻译的\(x\)就是源语言的句子信息；自动摘要的\(x\)就是输入的长文；对话系统的\(x\)就是历史对话内容等。&lt;/p>
&lt;p>需要提醒的是，语言模型在训练阶段，输入Decoder的是正确的词，这种方法被称为Teacher Forcing，即不论上一步的输出是什么，都强制给这一步输入正确的词。而如果在测试阶段，Decoder的输入是上一步的输出。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p78.png">&lt;/p>
&lt;p>在机器翻译那期的博客中（&lt;a href="https://bitjoy.net/posts/2019-08-02-cs224n-0131-translation-seq2seq-attention/">CS224N（1.31）Translation, Seq2Seq, Attention&lt;/a>），我们曾提到过在测试阶段，语言模型的Decoder有两种策略，一种是Greedy search，另一种是Beam search。Greedy search是指当前步的输入是上一步输出中概率最大的词。而Beam searh是指不但保留概率最大的词，还要保留概率在Top-k的词，那么在每一个时间步，都会有k条路径，最后选一条概率最大的路径。&lt;/p>
&lt;p>那么，Beam search中保留的Top-k到底取多少合适呢？当k=1时，Beam search退化为Greedy search，产生的句子可能会不够自然，甚至难以理解。增大k会使得产生的句子的全局概率更大，读起来会更通顺一些。但是k的增大也会带来一些问题，比如：计算量增大；对于NMT任务，k的增大会导致翻译出来的句子更短，BLEU得分更低；对于对话系统，k的增大会导致产生的句子过于“安全”和“通用”，也就是和当前对话没有太大关系但又比较通顺的句子。&lt;/p>
&lt;p>比如下面右图的例子，k=1时，回答和对话有点关系，但句子语法有问题；k=6时，句子很同时，但感觉答非所问。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p1415.png">&lt;/p>
&lt;p>事实上，除了Greedy search和Beam search，还有其他的decoding方法。下面是两种基于采样的decoding方法。&lt;/p>
&lt;p>Pure sampling：每个时间步t，根据softmax输出的概率分布进行采样，来决定t时刻最终输出的词。Top-n sampling：只在概率top-n的词中采样，相当于对Pure sampling的概率分布进行truncate。两种方法都是单路径的，不像Beam search那样保留多条路径。由于两种方法都是通过采样决定输出，属于随机算法，所以每次运行算法输出都不一样，可增加句子的多样性，比较适合于对话系统。&lt;/p>
&lt;p>还有一种可以改变语言模型输出概率的方法，就是Softmax temperature，带温度的Softmax，如下图所示。当t越大，分布变得越扁平，削弱了大和小的差别；t越小，则分布变得越尖，大的越大，小的越小。配合不同的decoding算法，可以控制产生句子的流畅度、平庸度、或者新奇度等。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p1617.png">&lt;/p>
&lt;p>以下是语言模型的decoding算法小结。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p18.png">&lt;/p>
&lt;hr>
&lt;h1 id="section-2-nlg-tasks-and-neural-approaches-to-them">Section 2: NLG tasks and neural approaches to them&lt;/h1>
&lt;p>自然语言生成是一类生成新文本的任务，包括机器翻译、自动摘要、对话系统（聊天机器人）、写作机器人、看图写作等。下面对其中几个任务进行简单的介绍。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p5.png">&lt;/p>
&lt;p>自动摘要的定义是，给定长文本x，要求生成短文本y，y能概括x的主要内容。自动摘要又分为x是单文档或多文档两类。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p20.png">&lt;/p>
&lt;p>（左图）自动摘要的一些数据集。Summarization：根据长文本写一个短句子作为长文本的摘要，就是常规意义的自动摘要。Sentence simplification：把复杂的句子转换为简单的句子，通常转换后的句子比源句子短，主要是换成更简单易懂的词，用简单的句子结构替代复杂的句子结构等，比如把新闻转换为儿童容易读懂的新闻。&lt;/p>
&lt;p>（右图）两种自动摘要的策略对比。Extractive summarization是指摘要的句子从原文中提取；Abstractive summarization是指使用语言模型生成新的句子作为摘要。前者类似于从原文中高亮某些关键句子，后者相当于用笔创作出新的句子作为摘要。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p2122.png">&lt;/p>
&lt;p>前神经网络时代的自动摘要大多数是Extractive summarization，是一个pipeline，很复杂，可能会用到各种不同的算法。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p2324.png">&lt;/p>
&lt;p>自动摘要的评价指标ROUGE。ROUGE和BLEU类似，都是基于模型输出和标准答案之间的n-gram的overlap，但是ROUGE不会对太短的摘要进行惩罚，而且ROUGE对不同的n-gram打分是分开的，而BLEU综合了n=1,2,3,4的n-gram结果。BLEU更关注precision，所以对太短（可能没有包含源句子的意思）的翻译有惩罚。ROUGE更关注recall，从其名称就可以看出来，在某个长度限制下，尽量包含长文的信息。）&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p2526.png">&lt;/p>
&lt;p>2015年开始，基于神经网络的自动摘要方法蓬勃发展。基本思路是把自动摘要看成从长句子到短句子的翻译任务，使用seq2seq+attention的方法解决，效果还不错。下图是一些技巧，感兴趣的可以搜索原文阅读。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p28.png">&lt;/p>
&lt;p>对话系统的分类：assistive：个人助手型；co-operative：协作型；adversarial：对抗型，辩论？chit-chat：聊天机器人；therapy：心理咨询师？&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p35.png">&lt;/p>
&lt;p>神经网络之前的做法是，事先设计一些问答模板，根据场景，给模板填充不同的内容。或者使用信息检索的方式，从问答库中检索问答。&lt;/p>
&lt;p>2015年后，很多人开始用seq2seq+attention的方法做问答系统，但存在一些问题，如下。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2020-03-06-cs224n-0226-natural-language-generation/p37.png">&lt;/p></description></item></channel></rss>