1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > CS224n自然语言处理(三)——问答系统 字符级模型和自然语言生成

CS224n自然语言处理(三)——问答系统 字符级模型和自然语言生成

时间:2020-07-15 00:27:15

相关推荐

CS224n自然语言处理(三)——问答系统 字符级模型和自然语言生成

文章目录

一、问答系统1.Stanford Question Answering Dataset (SQuAD)2.Stanford Attentive ReaderStanford Attentive Reader++3.BiDAF二、Subword Models1.Character-Level Model2.Sub-word models(1)Byte Pair EncodingWordpiece/Sentencepiece model(2)Hybrid Model3.词嵌入中的字符FastText三、自然语言生成1.解码方法2.自然语言生成介绍(1)摘要(Summarization)Pre-neural summarizationNeural summarization评价指标:ROUGE(3)对话(3)讲故事3.NLG评估方法4.NLG研究、趋势及未来

一、问答系统

问答系统(Question Answering)实际需求很多,比如我们常用的谷歌搜索就可看做是问答系统。通常我们可以将问答系统看做两部分:从海量的文件中,找到与问题相关的可能包含回答的文件,这一过程是传统的信息抽取information retrieval;从文件或段落中找到相关的答案,这一过程也被称作Reading Comprehension阅读理解

1.Stanford Question Answering Dataset (SQuAD)

阅读理解需要数据是Passage即文字段落,Question问题以及相应的Answer回答。SQuAD(Stanford Question Answering Dataset)就是这样的数据集。对于每个问题都有人类提供的三个标准答案,为了评估问答模型,有两个metric:

Exact Match,即模型回答与任意一个标准答案匹配即计数为1,否则为零。统计整体的准确率。F1 score:将系统和每个答案都视为词袋,并评估

通常F1 score被当做是更可靠的metric。

SQuAD1.0的一个缺陷是,所有问题都有答案的段落,系统(隐式地)排名候选答案并选择最好的一个,这就变成了一种排名任务。SQuAD2.0中 ⅓ 的训练问题没有回答,大约 ½ 的开发/测试问题没有回答,对于No Answer examples, no answer 获得的得分为1,对于精确匹配和F1,任何其他响应的得分都为0

当然SQuAD存在其局限性:1.答案需直接截取自段落中的文字,没有是非判断、计数等问题。2.问题的选择依赖于段落,可能与实际中的信息获取需求不同那个。3.几乎没有跨句子之间的理解与推断。

2.Stanford Attentive Reader

这里介绍关于QA的一个最小的,非常成功的阅读理解和问题回答架构Stanford Attentive Reader。该架构的思路如下:

首先将问题用向量表示:

对问题中的每个单词,查找其词嵌入之后输入到双向LSTM中并将最终的 hidden state拼接,如下图所示

之后处理文章:

查找每个单词的词嵌入并输入到双向LSTM中使用双线性注意力将每个LSTM的表示(LSTM的两个隐藏状态的连接)与问题表示做运算,获得了不同位置的注意力,从而获得答案的开始位置,再以同样方式获得答案的结束位置

Stanford Attentive Reader++

在Stanford Attentive Reader的基础上进行了改进得到了Stanford Attentive Reader++。具体的模型架构如下图,该架构对文章和问题部分都进行了改进。

问题部分

增多了BiLSTM的层数。不仅仅利用LSTM最后的输出,而是用了类似于self-attention的加权和来表示(使用一个可学习的向量 w 与 每个时间步的隐层状态相乘)

文章部分,文章中每个token的向量表示由一下部分连接而成:

词嵌入(GloVe-300d)词的语言特点:POS &NER 标签词频率(unigram概率)精确匹配:这个词是否出现在问题,包含三种exact match, uncased match(不区分大小写), lemma match(如drive和driving)引入了aligned question embedding,与精确匹配相比,这可以看做是对于相似却不完全相同的单词(如car与vehicle)的soft alignment,下式中a表示了单词p和单词q的相似度

3.BiDAF

BiDAF(Bi-Directional Attention Flow for Machine Comprehension)是另一个重要的QA模型。

其核心思想是attention 应该双向流动——从上下文到问题,从问题到上下文。

首先计算相似度矩阵,c、q分别表示上下文向量和问题向量:

Context-to-Question (C2Q) 注意力,我们想要知道对于每个context word,哪些query word比较重要,因此得到attention score及weighted vector:

Question-to-Context (Q2C) 注意力,我们想要知道对于query,哪些context words与任意一个query words相似度较高,我们得到对于query来说最关键的context words的加权求和:

对于文章中的每个位置,BiDAF layer的输出为

“modelling”层:文章通过另一个深(双层)BiLSTM回答跨度选择更为复杂 Start:通过BiDAF 和 modelling 的输出层连接到一个密集的全连接层然后softmaxEnd:把 modelling 的输出 M 通过另一个BiLSTM得到 M2 ,然后再与BiDAF layer连接,并通过密集的全连接层和softmax

更近期的发展基本上是更复杂的结构以及attention的各种结合。对于embedding的提取方面,也更多采用contextual embedding,收到了很好的效果。

二、Subword Models

之前的Neural Machine Translation基本上都是基于word单词作为基本单位的,但是其缺点是不能很好的解决out-of-vocabulary即单词不在词汇库里的情况,且对于单词的一些词法上的修饰(morphology)处理的也不是很好。一个自然的想法就是能够利用比word更基本的组成来建立模型,以更好的解决这些问题。

1.Character-Level Model

一种思路是将字符作为基本单元,建立Character-level model,深度学习模型可以存储和构建来自于多个字母组的含义表示,从而模拟语素和更大单位的意义,从而汇总形成语义。这种方法都被证明是非常成功的

Fully Character-Level Neural Machine Translation without Explicit Segmentation中利用了多层的convolution, pooling与highway layer来解决这一问题,其中encoder的结构如下图所示,解码器是一个字符级的GRU:

其编码器流程如下:

输入的字符先被映射到character embedding。与窗口大小不同的卷积核进行卷积操作再将输出联结起来,例如上图中有三种窗口大小分别为3,4,5的卷积核,相当于学习了基于字符的trigram, 4-grams, 5-grams。对卷积的输出进行max pooling操作,相当于选择最显著的特征产生segment embedding。由此我们从最基础的输入的character embedding得到了系统中认为语言学上有意义的segment embedding。将这些特征经过Highway Network(有些类似于Residual network,方便深层网络中信息的流通,不过加入了一些控制信息流量的gate)和双向的GRU,这样得到最终的encoder output。decoder再利用Attention机制以及character level GRU进行decode。

实验结果显示,基于字符的模型能更好的处理OOV的问题,而且对于多语言场景,能更好的学习各语言间通用的词素。但是由于基本单元换为字符后,相较于单词,其输入的序列更长了,使得数据更稀疏且长程的依赖关系更难学习,训练速度也会降低。

2.Sub-word models

基本单元介于字符与单词之间的模型称作Subword Model。Subword的选择有两种方式:一是与word级模型相同的架构,但是使用更小的单元;二是混合架构,主模型使用单词,其他使用字符级。

(1)Byte Pair Encoding

参考论文:Byte Pair Encoding

BPE最早是一种压缩算法,基本思路是把经常出现的byte pair用一个新的byte来代替,例如假设(‘A’, ’B‘)经常顺序出现,则用一个新的标志’AB’来代替它们。

以下图为例,在原有的语料库中,“es”的频率最高,因此将其加入,之后依次加入“est”、“lo”直到词汇库大小达到我们所设定的目标。

Wordpiece/Sentencepiece model

谷歌的NMT模型用了BPE的变种,称作wordpiece model,BPE中利用了n-gram count来更新词汇库,而wordpiece model中则用了一种贪心近似最大化语言模型的对数似然函数值,即选取新的n-gram时都是选择使得perplexity减少最多的ngram。

进一步的,sentencepiece model将词间的空白也当成一种标记,可以直接处理sentence,而不需要将其pre-tokenize成单词。

(2)Hybrid Model

还有一种思路是在大多数情况下我们还是采用word level模型,而只在遇到OOV的情况才采用character level模型。

其结构如下图所示,大部分还是依赖于比较高效的word level模型,但遇到例子中的"cute"这样的OOV词汇,我们就需要建立一个character level的表示,decode时遇到这个表示OOV的特殊标记时,就需要character level的decode,训练过程是end2end的,不过损失函数是word部分与character level部分损失函数的加权叠加。

混合模型与字符级模型相比

纯粹的字符级模型能够非常有效地是用字符序列作为条件上下文混合模型虽然提供了字符级的隐层表示,但并没有获得比单词级别更低的表示

3.词嵌入中的字符

在Word Vector中,word vector是基于word level来建立的,对于含有很多OOV的词汇的文本效果不好,那么我们可不可以采取类似于上面的subword的思路来产生更好的word embedding呢?

下图是一种用于单词嵌入和单词形态学的联合模型(Cao and Rei )

与w2v目标相同,但使用字符双向LSTM计算单词表示模型试图捕获形态学模型可以推断单词的词根

FastText

参考论文:FastText

FAIR的FastText就是利用subword将word2vec扩充,有效的构建embedding。

其基本思路是将单词表示为用边界符号和整词扩充的字符n-grams和单词本身的集合,例如对于where这个单词和n=3的情况,它可以表示为

其中"<",">"为代表单词开始与结束的特殊标记。将word表示为这些表示的和,令w为中心词、c为上下文词、G表示为中心词n-gram的、Zg为每个n-gram的矢量表示,则上下文单词得分为

之后就可以按照经典的word2vec算法训练得到这些特征向量。

这种方式既保持了word2vec计算速度快的优点,又解决了遇到training data中没见过的oov word的表示问题,可谓一举两得。

三、自然语言生成

自然语言生成指的是我们生成(即写入)新文本的任何设置

1.解码方法

解码算法是一种算法,用于从语言模型生成文本。以下介绍几种解码方法及其优缺点:

贪心解码:在每一步中,取最可能的单词(即argmax),直到产生结束符号或达到某个最大长度。贪心解码是一种简单的译码方法,输出可能很差Beam搜索:在解码器的每一步,跟踪 k 个最可能的部分序列,达到某个停止标准后,选择概率最高的序列。k太小的话会有和贪心解码存在输出差的问题,k太大在计算上很昂贵并可能导致一些其他问题抽样方法:以采样代替 argmax 来获得更多的多样性和随机性 纯采样:在每个步骤t,从概率分布 P 中随机抽样以获取你的下一个单词。Top-n采样:在每个步骤 t ,从概率分布 P 的前 n 个最可能的单词中,进行随机采样。增加n可以获得更多样化/风险的输出,减少n可以获得更通用/安全的输出 Softmax temperature:对 softmax 函数时候用temperature超参数,提高temperature τ,P变得更均匀,因此输出更多样化(概率分布在词汇中);降低temperature τ,P变得更尖锐,因此输出的多样性较少(概率集中在顶层词汇上)

2.自然语言生成介绍

自然语言生成的子任务包括:机器翻译、摘要、对话(闲聊和基于任务)、创意写作(讲故事,诗歌创作)、自由形式问答(即生成答案,从文本或知识库中提取)、图像字幕等

(1)摘要(Summarization)

摘要是指给定输入文本x,写出更短的摘要 y 并包含 x 的主要信息,摘要可以是单文档,即写一个文档 x 的摘要 y,也可以是多文档,即写一个多个文档的摘要y。

句子简化是一个不同但相关的任务:将源文本改写为更简单(有时是更短)的版本。

摘要主要有两种策略:

抽取式摘要 Extractive summarization:选择部分(通常是句子)的原始文本来形成摘要,更简单抽象式摘要 Abstractive summarization:使用自然语言生成技术 生成新的文本,更困难

Pre-neural summarization

对于Pre-neural摘要,大多是抽取式的,Pre-neural MT通常有一个pipeline,即:

内容选择 Content selection:选择一些句子,选择方法如下: 句子得分函数:根据主题关键词、通过计算如tf-idf等图算法:文档为一组句子(节点),每对句子之间存在边,边的权重与句子相似度成正比,使用图算法来识别图中最重要的句子 信息排序 Information ordering:为选择的句子排序句子实现 Sentence realization:编辑并输出句子序列例如,简化、删除部分、修复连续性问题

Neural summarization

单文档摘要摘要是一项翻译任务,因此我们可以使用标准的 seq2seq + attention NMT 方法,神经摘要自以来,有了更多的发展:

使其更容易复制,也防止太多的复制,复制机制使用注意力机制,使seq2seq系统很容易从输入复制单词和短语到输出

复制机制的问题:复制太多导致变成抽取系统;不善于整体内容的选择分层/多层次的注意力机制更多的 全局/高级 的内容选择:自上而下的汇总,能够更好的整体内容选择策略、减少长序列的复制 内容选择阶段:使用一个神经序列标注模型来将单词标注为 include / don’t-include自下而上的注意力阶段:seq2seq + attention 系统不能处理 don’t-include 的单词(使用 mask ) 使用 RL 直接最大化 ROUGE 或者其他离散目标(例如长度),使用RL代替ML取得更高的ROUGE分数,但是人类判断的得分越低。混合RL和ML的模型更好使用 pre-neural 想法(例如图算法的内容选择),把它们变成神经系统

评价指标:ROUGE

ROUGE (Recall-Oriented Understudy for Gisting Evaluation):类似于 BLEU,是基于 n-gram 覆盖的算法,不同之处在于:

没有简洁惩罚ROUGE基于召回率 recall,BLEU 是基于准确率的:准确率对于MT 来说是更重要,召回率对于摘要来说是更重要的

最普遍使用的是ROUGE-1(unigram overlap)、ROUGE-2(bigram)、ROUGE-L(longest common subsequence)

(3)对话

对话包括各种各样的设置,面向任务的对话(客户服务等),社会对话(闲聊)等,对话系统的发展同样有两个阶段。最早的对话系统是Pre- and post-neural dialogue,这个阶段对话系统经常使用预定义的模板,或从语料库中检索一个适当的反应的反应。

之后使用seq2seq方法设计对话系统,然而简单的应用标准seq2seq +attention 的方法在对话(闲聊)任务中有严重的普遍缺陷,包括:

一般性/无聊的反应,解决办法:在Beam搜索中增大罕见字的概率/使用抽样解码算法而不是Beam搜索,用一些额外的内容训练解码器(如抽样一些内容词并处理)

无关的反应(与上下文不够相关):不是去优化输入 S 到回答 T 的映射来最大化给定 S 的 T 的条件概率,而是去优化输入S 和回复 T 之间的最大互信息Maximum Mutual Information (MMI),从而抑制模型去选择那些本来就很大概率的通用句子

重复,解决办法:在 Beam 搜索中禁止重复n-grams,在seq2seq中训练一个覆盖机制,定义训练目标以阻止重复

缺乏上下文(不记得谈话历史)

缺乏一致的角色人格

(3)讲故事

神经讲故事的大部分工作使用某种提示,例如给定图像生成的故事情节段落、给定一个简短的写作提示生成一个故事等

给定图像生成的故事:使用 COCO数据集学习从图像到其标题的 Skip-thought 编码的映射,使用目标样式语料库(Taylor Swift lyrics),训练RNN-LM, 将Skip-thought向量解码为原文,把两个房在一起给定一个简短的写作提示生成一个故事:

3.NLG评估方法

基于词重叠的指标(BLEU,ROUGE,METROR,F1,等等)并不是非常适合NLG任务,因为NLG任务比机器翻译更开放,因此,我们采用一些其他的指标,当然,这些自动指标也难以充分捕捉整体质量

困惑度:捕捉你的LM有多强大,但是不会告诉你关于生成的任何事情(例如,如果你的困惑度是未改变的,解码算法是不好的)词嵌入基础指标:比较词嵌入的相似度(或词嵌入的均值),而不仅仅是重叠的单词。以更灵活的方式捕获语义。定义更多的集中自动度量来捕捉生成文本的特定方面:例如流利性(使用训练好的LM计算概率)、多样性(罕见的用词,n-grams 的独特性)、相关输入(语义相似性度量)等

虽然以上这些指标不衡量整体质量,他们可以帮助我们跟踪一些我们关心的重要品质。

人类的判断被认为是黄金标准,但是进行人类有效评估非常困难,主要问题在于人必然非常主观、回答者有不同的期望等,因此设计了一个详细的人类评价体系分离的重要因素,有助于整体chatbot质量

可能的新方法:

语料库级别的评价指标:度量应独立应用于测试集的每个示例,或整个语料库的函数评估衡量多样性安全权衡的评估指标对抗性鉴别器作为评估指标免费的人类评估

4.NLG研究、趋势及未来

当前NLG的研究趋势:

将离散潜在变量纳入NLG:可以帮助在真正需要它的任务中建模结构,例如讲故事,任务导向对话等严格的从左到右生成的替代方案:并行生成,迭代细化,自上而下生成较长的文本替代teacher forcing的最大可能性培训:更全面的句子级别的目标函数(而不是单词级别)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。