语言模型的核心思想是按照特定的训练方式,从语料中提取所蕴 含的语言知识,应用于词序列的预测。
包括 基于规则的语言模型 和 统计语言模型
•统计语言模型处于主流地位,通过对语料库的统计学习,归纳出 其中的语言知识,获得词与词之间的连接概率,并以词序列的概 率为依据来判断其是否合理。
序列S={w1,w2,w3…}的概率就是:
这样后面就是指数级增长,所以后面考虑N-gram,只考虑当前词的前n-1个单词。
这时会出现零概率事件:
因为首个没有出现过。此时使用数据平滑来解决这个问题。
基本思想:调整最大似然估计的概率值,使零概率增值,使非零概率下调, “劫富济贫”,消除零概率,改进模型的整体正确率。
满足约束
数据平滑的方法:
•加法平滑(additive smoothing):每种情况的出现次数增加一个固定值。
•折扣平滑(discounting smoothing):修改实际发生次数,使得不同情况 发生概率总和小于1,剩余概率平均分给未出现的情况。
•删除插值(deleted interpolation): 用低阶模型估计高阶模型,并将它们进 行加权。
•Kneser-Ney平滑:前是标准和最先进的平滑技术,它是上述技术的综合。
前馈神经网络
缺点:参数过多,只能用前n个词来预测。
循环神经网络
输入:t-1时刻的历史状态ht-1,t时刻的输入wt
输出:t时刻的历史(状态)ht,下一个词的概率
缺点:理论上可以记住全部的历史信息,但是由于梯度消失和梯度爆炸,不具备长期依赖的能力。
解决:有选择的保留和遗忘t时刻的信息。
LSTM
具备处理长期依赖的能力
目前最先进的语言模型完全基于注意力机制!!
右边的结构是左边的细化
机器翻译
SOS一般代表开始, EOS代表结束
思想简单
encoder-decoder模型 也称作 seq2seq模型
基本思想利用RNN读取句子,编码到固定维度的向量,再用另一个RNN读取向量,解码为目标语言。(encoder成向量)
统计翻译的模型:训练步骤:预处理——词对齐——短语对齐——抽取短语特征——训练语言模型——学习特征权重
解码器的结构与语言模型几乎相同,输入词向量,输出softmax概率,损失函数log perplexity
解码过程用贪心算法取概率最大的。
引入注意力机制,因为数据句子较长的时候,上述seq2seq无法存储。
注意力机制(Attention)允许解码器随时查阅输入句子中的部 分单词或片段,因此不再需要在中间向量中存储所有信息。
最原始的注意力机制在encoder部分使用双向RNN
前向的RNN正向读取输入的序列,并计算前向隐藏层状态
后向RNN反向读取输入序列,并计算反向隐藏层状态
对于每个单词,把他的前向隐藏状态向量和后向隐藏层向量拼接起来。
Decoder中第i阶段输入的上下文信息𝑐来自于所有ℎ对 𝑎ij的加权之和。c1翻译“I”,和“我”最相关,a11的值应该比较大,相应的a12,a13,a14应该较小。aij是模型自动学习的,h1’是取决于Decoder的i-1阶段的隐状态,Encoder第j个阶段的隐状态。
工作原理:
计算变种:
对偶学习
可以解决大量预料标注的问题。只需要部分标注。
强化学习-策略梯度的方法
基本方法就是先通过模型翻译成一种语言,在通过另一个模型将上述得到的翻译回来,在通过此时的翻译与原始输入两者的相似度和误差,取最大似然,在重新生成句子。
机器阅读理解
形式:
•完型填空 。代表数据集有CNN/Daily Mail。
•多项选择 代表数据集有 RACE。
•区域预测 :也称为抽取式问答(Extractive QA),即给定文章和 问题,机器需要在文章中找到答案对应的区域(span),给出开 始位置和结束位置。代表数据集有SQuAD(Stanford Question Answering Dataset)。
•SQuAD1.1 paper:SQuAD:100000+ Question for Machine Comprehension of Test
•SQuAD2.0 paper: Know What You Don’t Know: Unanswerable Questions for SQuAD
•Website:https://rajpurkar.github.io/SQuAD-explorer/
MRC数据集:
•MS MARCO:Microsoft MAchineReading Comprehension •Paper:MS MARCO: A Human Generated MAchineReading COmprehensionDataset •Website: http://www.msmarco.org/ MRC数据集
•DuReader:百度阅读理解数据集 •Website: http://ai.baidu.com/broad/introduction?dataset=dureader
•自由形式:不限定问题所处的段落,即一个问题可能是需要理解 多个段落甚至多篇文章。代表数据集有DuReader(百度),MS MARCO(微软)。
问答型MRC框架
两个输入,左边是问题,右边是文档。向量化-编码-交互-答案
*向量层,将问题和原来映射为向量
编码层,使用RNN编码,编码后每个词的向量表示就蕴含了上下文信息
交互层:分析问题和原文之间的交互关系,输出编码的问题的原文表示即query-aware原文表示:双交互层结构,第一层基于门限的注意力循环神经网络匹配 问题和原文 的相关段落表示;第二层基于自匹配注意力机制的循环神经网络 将原文与自己匹配,实现整个段落的高效编码。
答案层:基于query-aware的原文表示预测答案范围*
预训练模型 - 效果好
思路:在大规模的语料库进行预训练,学习语法、句法、语言逻辑、先验知识;针对不同的任务进行fine-tuning
模型包括ELMO,GPT,BERT,GPT2.0
可以看到就是之前的信息与后面的联系的区别。
Google BERT
•Website •https://github.com/google-research/bert(Tensorflow) •BERT PyTorch实现 •https://github.com/huggingface/pytorch-pretrained-BERT
,