本文简要介绍一些深度学习在自然语言应用的基本任务,词表示,文本翻译和机器翻译。
一、典型任务 词性标注和句法分析问答和对话系统文本/文档分类情感分析和观点挖掘机器翻译文本生成...... 1.1?词性标注和句法分析词性(POS)标注即对句子里的每个词给出它的词性如名词、动词等:
句法分析即分析其主、谓、宾等结构:
1.2 问答和对话系统用户问出一个问题,对话系统能够做出回答,这便是该系统主要关注的任务。
左边是简单的一问一答的形式,而后面则是有前后呼应的对话。
1.3 文本/文档分类比如情感分类,积极、消极、中性的:
文档分类处理的对象会长一些,不是简单的几句话,而是一整片文章或是几页:
1.4 机器翻译机器翻译顾名思义就是把一种语言翻译成另外一种语言。
1.5 其它NLP的应用还有很多,比如对联、古诗生成~?
couplet.msra.cn
九歌——人工智能诗歌写作系统 (thunlp.org)
二、词表示 2.1 词表示?自然语言处理的最基本的对象就是词,词构成句子,句子构成段落,段落构成文章。
那么我们如何来表示一个词呢?大家最先能想到的就是以one-hot的形式,如:
但是这样,维度、词汇表的大小|V|?可能是数百万。且如词与词之间意思相近或者意思没什么关系又无法表述:dist(“kid”,?“child”)?、dist(“flower”,?“car”)?
维度太高 没有表达词之间的关系动机:用一个词的邻居来表示这个词?“You?shall?know?a?word?by?the?company?it?keeps”
我们可以看到上面两句话都和词“banking”有关,我们就可以用它周围的这些词,即这段话里的词来表示“banking”的含义。
如何去表示呢?
在深度学习兴起之前,人们的一个典型的想法是用共现矩阵去表示。
2.1.1?基于窗口的共现矩阵以下面示例语料集为例
我们选定一个窗口,为方便起见我们选定窗口长度为1(通常是5-10)。这个窗口的作用是来选的某个词左边1个词和右边1个词出现的频率。上面语料集一共出现7个词,所以矩阵是7*7的。
以like这行为例,可以看到它左右距离为1的窗口出现单词I有两次,deep一次,NLP一次,其它都为0次。
但是,这种共现矩阵的表示法,依然是有多少个词,向量的长度就是多少,依然不那么"经济实惠",但是相比于独热编码,它没有那么稀疏了(但还是比较稀疏)。
维度太高 表示稀疏使模型不够鲁棒 在词汇表中添加一个单词时需要重新计算所有单词的表示形式 2.1.2 用低维向量表示单词目标:?以固定的、低维度的向量存储“大多数”重要信息(密集向量):
通常约25-1000维基于这种表示,很容易来执行任务(分类,生成等)方法:
神经概率语言模型 Bengio?et?al.,?A?neural?probabilistic?language?model.?Journal?of? Machine?Learning?Research,?2003.最近更简单更快的模型:?word2vec (继承自神经概率语言模型) Mikolov?et?al.,?Distributed?representations?of?words?and?phrases?and? their?compositionality, NeurIPS?2013神经概率语言模型的影响
2.2 word2vec的主要思想 2.2.1 思想介绍?核心思想:不统计词的共现数,而是预测每个词周围的词。
如图,输入一个词(one-hot编码),中间做一个神经网络的隐层,这个隐层很简单,没有非线性(没有激活函数,即线性映射)。最后做出输出(每个输出也是one-hot),预测t-2, t-1, t+1, t+2时刻的词(和窗口大小有关)。
|V|大概上万维-百万维d大有50~1000,即先高维映射到低维,然后再映射回高维。第一步:词wt乘以权重C得到vwt?,其实就是得到了C的那一列。
第二步,vwt 与 K? 相乘,又得到回一个V维的向量,这个一列向量的每一行都表示和K这一行(这个词)在这个时刻(举例)的相似性(得分)。再经过一个softmax把结果压在0-1之间,根据结果大小如,投影为 t-2 位置的词。
C的每一列对应一个词:“输入向量”K的每一行对应一个词:“输出向量”注意:
需要预定义C的列与语料库中词之间的对应关系必须再K中使用同顺序的行。经过学习后,C的第i列与K的第i行可以平均来表示第i个词。
图示如下:
以当前词为France为例:?
经过投影后,我们得到France这个词的输入向量"France",与K相乘得到一个高维的实数向量,经过softmax得到0-1之间某时刻的输出向量。
在t-2时刻,我们还有一个标准答案"captial"对应的独热编码,这也说明K的最后一行表示captial。
同样,其它词如of应该是t-1时刻的,那么K的对应of的那一行(对应的输出向量)在该时刻也应该与输入向量France相似,才能得到of.
2.3 训练方式目标:?给定一个输入词,最大化周围词的概率?
2.3.1 skip-gram模型?skip-gram模型:用当前词预测周围词的概率
以t-1时刻的词为例,来最大化这个词的概率。
处于位置 t+j ( j = -2,-1,1,2 )的词,?的概率为:
训练过程中,作为希望输出的词??的交叉熵损失为:
2.3.2 目标函数 我们在窗口的其他位置有同样的要求。对所有位置的损失求和????????其中c是窗口大小,?表示所有参数
在所有给定输入??上求平均 相当于最大化平均对数概率用反向传播算法和SGD训练模型 2.3.3 softmax的替代方法在窗口的每一个位置,softmax的输出为
其中?
这种方法的问题在于:归一化项的计算耗时长。
替代方法:
层次化softmax负采样 2.4 结果可以看到下面一些有意思的现象:?
国家都在左边,首都都在右边,且举例相似,也都基本平行。
向量German和向量airlines相加,得到的结果和他们的航空公交公司很像...
如何表示一个句子或一个段落?
三、神经网络进行文本分类在我们获得每个词的词向量后,如何表示一个句子或一个段落?
3.1 CNN进行文本分类?答:我们把这些词向量按照一定的顺序拼接起来,得到一个二维矩阵,这个二维矩阵就可以是一个句子/段落新的表示。之后对句子/段落进行分类,其实就是对二维矩阵进行分类。我们此时就可以用以前那些处理图像的方法来处理这些二维矩阵了。
卷积核kernel的宽度和词向量的宽度都是K,所以卷积后得到一个向量而不是一个矩阵。
再对每个句子上进行MaxPooling,每次MaxPooling都会得到一个数,有几个kernel就会有几个元素。
最后就可以做一个全连接网络进行句子分类。
3.1.1?这个模型有什么问题?深度不够
一层卷积和一层池化特征不够多样化
每个卷积核会产生一个1维的特征图,即一个特征向量在一个特征向量上应用全局最大池化,即对所有时间做最大池化,这会产生一个标量。 3.1.2 一个更深的模型 确定到底要多长的句子,选择使用动态的K-Maxpooling,使得得到的结果等长。 3.2 RNN进行文本分类我们上面说到CNN进行文本分类,RNN一般用来处理持续性信息,其实我们用RNN去进行文本分类会更加的自然,也是现在主流的选择。
以Elman网络为例,其中x是每个时刻的输入(每个时刻的词), r最后时刻出现,我们把隐层进行展开...
RNN文章:?AI遮天传 DL-反馈神经网络RNN_老师我作业忘带了的博客-CSDN博客
可以使用 LSTM?或者?GRU可以使用双向?RNN 四、神经网络进行机器翻译介绍一种很典型的模型,序列到序列的学习模型。
通常会涉及两个RNN: 编码器(encoder)和解码器(decoder)
许多NLP任务可以表述为序列到序列:
机器翻译 (法语?→?英语)总结?(长文本 →?短文本)对话?(先前的话语 →?接下来的话语)代码生成 (自然语言 →?Python?代码)旋律产生 (一个乐句 →?下一个乐句)语音识别 (声音?→?文本) 4.1?机器翻译 (NMT)如下:法语-英语?
左侧,编码器RNN 产生一个源语句的编码右侧,解码器RNN生成以编码为条件的目标句子对于编码器和解码器
对于编码器,可以使用预训练词向量,例如word2vec ,或者one-hot形式词向量对于解码器,使用one-hot形式表示输出编码器和解码器的字典
对于一些任务,例如,机器翻译,它们是不同的对于其他任务,例如,总结和对话任务,它们是相同的编码RNN和解码RNN通常是不同的,也可以使用深度RNN。
4.2 训练?NMT?系统首先我们要有很多的语料集,法语->英语,法语->英语,法语->英语,...,法语->英语
把法语输入给Encoder RNN,英语输入给Decoder RNN
每个时间都会输出一个单词,使用交叉熵函数计算,把所时刻的交叉熵计算结果加起来,取个平均得到J,最小化这个J,反向传播(多个单词 就有多个loss),调整Encoder RNN 和?Decoder RNN里面的参数。
模型问题
上图画圈处的地方,是Decoder的唯一输入,我们期望Encoder在这个时候的状态包含了之前的原语句的所有信息。但是只用这一个向量来表示这个句子的所有信息,对它的要求是不是有点高了?
解决办法:注意力机制
注意力机制提供了一个解决瓶颈问题的方法
4.3 注意力机制(Attention)核心思想:?解码器的每一步中,关注于源序列的特定部分。
即当前我要输出某个词的时候, 我们就去原序列集中注意去找哪些词和它的关系最强。
注意力机制有很多形式 ,下面将展示一个例子:
4.3.1?带有Attention的Seq2seq?我们从第一个时刻出发,要预测第一个时刻的输出,把Decoder里隐层的向量与Encoder隐层的向量进行点积,每个地方得到一个标量,标量有大有小,有的可能超过1,有的可能是负数:
此时做一个softmax转换到0-1之间,表示Encoder里每一个向量与Decoder当前向量的距离/相似度。
可见Decoder里第一个词与Encoder里第一个词很相似。
我们把softmax后的这些结果(相当于权重)与Encoder里的向量相乘,进行加权求和:
在加权求和结果里,第一个向量的成分/比例是最大的。
将加权求和之后的结果Attention与当前时刻的Decoder时刻的隐层状态把他俩拼起来,经过一个softmax去预测当前时刻应该输出什么:
同样,下一时刻也是如此:
对应公式:
五、主要参考文献及延伸阅读 Kim?(2014) Convolutional?neural?networks?for?sentence?classification arXiv?preprint?arXiv:1408.5882Bengio,?Ducharme,?Vincent,?Jauvin?(2003) A?neural?probabilistic?language?model? Journal?of?Machine?Learning?Research?Mikolov,?et?al.??(2013) Distributed?representations?of?words?and?phrases?and?their? compositionality NeurIPSSutskever,?Vinyals,?Le?(2014) Sequence?to?Sequence?Learning?with?Neural?Networks NeurIPS Vaswani,?Shazeer,?Parmar,?et?al.?(2017) Attention?Is?All?You?Need NeurIPS?Devlin,?Chang,?Lee,?Toutanova?(2019) BERT:?Pre-training?of?Deep?Bidirectional?Transformers?for?Language? Understanding NAACL
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |
标签: #AI遮天传 #DL深度学习在自然语言中的应用