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

文章目录

  • 一、问答系统
    • 1.Stanford Question Answering Dataset (SQuAD)
    • 2.Stanford Attentive Reader
      • Stanford Attentive Reader++
    • 3.BiDAF
  • 二、Subword Models
    • 1.Character-Level Model
    • 2.Sub-word models
      • (1)Byte Pair Encoding
        • Wordpiece/Sentencepiece model
      • (2)Hybrid Model
    • 3.词嵌入中的字符
      • FastText
  • 三、自然语言生成
    • 1.解码方法
    • 2.自然语言生成介绍
      • (1)摘要(Summarization)
        • Pre-neural summarization
        • Neural 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 拼接,如下图所示
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第1张图片

之后处理文章:

  • 查找每个单词的词嵌入并输入到双向LSTM中
  • 使用双线性注意力将每个LSTM的表示(LSTM的两个隐藏状态的连接)与问题表示做运算,获得了不同位置的注意力,从而获得答案的开始位置,再以同样方式获得答案的结束位置
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第2张图片

Stanford Attentive Reader++

在Stanford Attentive Reader的基础上进行了改进得到了Stanford Attentive Reader++。具体的模型架构如下图,该架构对文章和问题部分都进行了改进。
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第3张图片

  • 问题部分

    • 增多了BiLSTM的层数。
    • 不仅仅利用LSTM最后的输出,而是用了类似于self-attention的加权和来表示(使用一个可学习的向量 w 与 每个时间步的隐层状态相乘)
      CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第4张图片
  • 文章部分,文章中每个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模型。
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第5张图片
其核心思想是attention 应该双向流动——从上下文到问题,从问题到上下文。

  • 首先计算相似度矩阵,c、q分别表示上下文向量和问题向量:
    在这里插入图片描述
  • Context-to-Question (C2Q) 注意力,我们想要知道对于每个context word,哪些query word比较重要,因此得到attention score及weighted vector:
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第6张图片
  • Question-to-Context (Q2C) 注意力,我们想要知道对于query,哪些context words与任意一个query words相似度较高,我们得到对于query来说最关键的context words的加权求和:
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第7张图片
  • 对于文章中的每个位置,BiDAF layer的输出为
    在这里插入图片描述
  • “modelling”层:文章通过另一个深(双层)BiLSTM
  • 回答跨度选择更为复杂
    • Start:通过BiDAF 和 modelling 的输出层连接到一个密集的全连接层然后softmax
    • End:把 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:
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第8张图片
其编码器流程如下:

  1. 输入的字符先被映射到character embedding。
  2. 与窗口大小不同的卷积核进行卷积操作再将输出联结起来,例如上图中有三种窗口大小分别为3,4,5的卷积核,相当于学习了基于字符的trigram, 4-grams, 5-grams。
  3. 对卷积的输出进行max pooling操作,相当于选择最显著的特征产生segment embedding。由此我们从最基础的输入的character embedding得到了系统中认为语言学上有意义的segment embedding。
  4. 将这些特征经过Highway Network(有些类似于Residual network,方便深层网络中信息的流通,不过加入了一些控制信息流量的gate)和双向的GRU,这样得到最终的encoder output。
  5. 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”直到词汇库大小达到我们所设定的目标。
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第9张图片

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部分损失函数的加权叠加。
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第10张图片
混合模型与字符级模型相比

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

3.词嵌入中的字符

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

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

  • 与w2v目标相同,但使用字符
  • 双向LSTM计算单词表示
  • 模型试图捕获形态学
  • 模型可以推断单词的词根
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第11张图片

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 方法,神经摘要自2015年以来,有了更多的发展:

  • 使其更容易复制,也防止太多的复制,复制机制使用注意力机制,使seq2seq系统很容易从输入复制单词和短语到输出
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第12张图片
    在这里插入图片描述
    复制机制的问题:复制太多导致变成抽取系统;不善于整体内容的选择
  • 分层/多层次的注意力机制
  • 更多的 全局/高级 的内容选择:自上而下的汇总,能够更好的整体内容选择策略、减少长序列的复制
    • 内容选择阶段:使用一个神经序列标注模型来将单词标注为 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 来说是更重要,召回率对于摘要来说是更重要的
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第13张图片
    最普遍使用的是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),从而抑制模型去选择那些本来就很大概率的通用句子
    CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第14张图片

  • 重复,解决办法:在 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质量
CS224n自然语言处理(三)——问答系统、字符级模型和自然语言生成_第15张图片
可能的新方法:

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

4.NLG研究、趋势及未来

当前NLG的研究趋势:

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

你可能感兴趣的:(自然语言处理,自然语言处理)