《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(1)自然语言处理基础

Natural Language Processing,NLP。
主要任务包括自然语言理解Natural Language Understanding,NLU和自然语言生成Natural Language Generation,NLG。

词向量

将字和词映射为一组反映其语义特征的实数向量,这种方式被称为词向量。
常用的词向量有独热表示(One-Hot Representation)和分布表示(Distribution Representation)。

一种采用独热(One-Hot)编码的词向量表示方法。
使用N位0和1的编码方式来表示N种状态。
任意时刻只有一种状态有效。
想使用独热编码的字词,就要构建全词表。
全词表的大小即为独热编码的长度。
独热编码相当于给每个字词分配一个唯一的id,这种稀疏编码不能反映字词背后蕴含的语义信息,且占用大量内存。

为表示字词的语义信息,将字词表示为一个定长的稠密向量。
稠密向量之间的距离计算(相似度计算),即反映字词背后的语义信息。
稠密向量的设置需要从句子、文档中不断学习后进行,因此需要对句子进行建模。

语言模型

语言模型定义了自然语言中标记序列的概率分布。
是对句子进行建模,并求解句子的概率分布。

传统语言模型通过计算句子序列的俄联合概率得到句子的分布表达,因此无需再使用词向量进行分析。
若需要的到词向量,可先利用n-gram模型得到字词的 共现矩阵,然后对矩阵做 SVD分解,以得到词向量的分布表达。

可直接训练得到词向量的分布表达。
通过神经网络训练。
通常被称为 词嵌入(Word Embedding)
模型接受一个句子为输入,并将这个句子本身作为输出。
构建思想类似 自编码器(Auto-Encoder)
本质是通过无监督的方式,学习神经网络。
训练完成后输出网络中间的隐层特征,而隐层特征就是我们希望得到的词向量。
神经语言模型本质上是分类模型,首先网络通过 SoftMax层输出每个位置的全词表分布,即每个位置进行全词表大小的分类。然后取对应位置的最大概率作为输出。并采用 交叉熵作为损失函数进行训练。
可以看到,神经语言模型的分类类别是全词表大小,而一般词表的大小均在e 4 e^4 e 4以上。这样网络的参数将会过于庞大,导致整个模型难以收敛。
有多项技术可以解决此问题,比如 负采样技术

  • 负采样(negative sampling):负采样过程中,先不进行全词表上的参数更新,而只对正样本随机选取的负样本进行采样。然后根据这些采样负样本和正样本计算损失函数,从而更新正样本的参数。
    假设词表大小V,负采样数k,词向量维度dim。
    采用SoftMax训练最后多层感知机层的参数更新量为:Vdim。
    采用负采样后更新参数量为:(k+1)
    dim,其中k<

常见的卷积计算单元有一维卷积CNN1D、二维卷积CNN2D和三维卷积CNN3D。
视觉领域主要使用CNN2D。
绝大数自然语言处理任务属于序列任务,数据只有一个轴(句子长度),因此使用CNN1D。
维度设为dim,卷积核大小设为kdim。
这样就可以把CNN1D看作每一个卷积核提取一组k-gram的特征张量,再进行拼接的过程。
首先训练出每个单词的词向量。
然后将处理为单词索引的句子作为输入。
经过Embedding层转换为对应的特征张量(b,len,dim)。
提供给卷积CNN1D层,CNN1D层(假设选取对齐方式)滑动卷积核,计算特征张量(bs,len,1)。
使用k种卷积核,得到k组特征张量(bs,len,1)。
然后对其分别进行最大化池(Max Pooling)后再拼接,得到池化张量(bs,k,1)。
再经过几层MLP与SoftMax层,输出类别概率。
CNN1D对挖掘序列数据在上下文窗口中的信息非常有效。
但难以在长距离上下文信息种保持信息。*

RNN对序列的每一位置都进行同样的循环单元计算,但每一循环单元除了接受该位置的信息,还要接受上一循环单元的输出作为输入。
训练过程中,由于采用了反向传播算法,梯度只在不同的时刻会以惩罚的形式进行累计,最终会出现梯度过大/过小问题——梯度爆炸/梯度消失。
改进模型:LSTM、GRU。

  • 1.LSTM:在简单RNN基础上增加了细胞状态cell state,以直接传递相邻时刻间的信息。
    原理类似 ResNet的残差思想。
    细胞状态下,梯度不会消失。
    该模型还引入了采用Sigmoid激活的门控机制(遗忘门、输入门与输出门),来分别控制上一时刻的细胞状态、输入信息和输出信息的进一步传递。
  • 2.GRU:对LSTM进行了简化。将细胞状态和隐藏状态合并。将遗忘门与输入门合并。
    降低计算复杂度。
    LSTM和GRU的门控制单元使信息经过多次Sigmoid激活,导数小于1,因此减小了梯度爆炸的可能性。

实践中一般会进一步采用梯度裁剪,即给定梯度上下限,来避免梯度爆炸。
RNN还提供了多对一(文本分类)和 多对多(序列标注)任务的基本结构。

针对多对多任务。
也被称作Seq2Seq模型。

本质可看作一种条件性的语言模型:
P ( Y ∣ X ) = P ( y 1 ∣ x ) P ( y 2 ∣ y 1 , x ) . . . P ( y m ∣ y 1 , . . . , y m − 1 , x ) P(Y|X) = P(y_1|x)P(y_2|y_1,x)…P(y_m|y_1,…,y_{m-1},x)P (Y ∣X )=P (y 1 ​∣x )P (y 2 ​∣y 1 ​,x )…P (y m ​∣y 1 ​,…,y m −1 ​,x )
该框架每时刻输出都受全部序列的约束。
编码器通常采用RNN计算输入序列的隐藏状态,通常保留最后一个隐藏状态,该隐藏状态经过MLP层转换,传递给解码器。
解码器通常采用RNN,但过程复杂,可分为训练过程、预测过程。

  • 训练过程:训练时有目标序列,解码器将目标序列对应的词向量与隐藏状态一同作为输入,输出下一时刻的预测概率。
  • 预测过程:无目标序列,将隐藏状态和解码器上一时刻输出的对应词向量作为输入,输出下一时刻的预测概率。
  • 注意力机制:对过长信息进行选择性地保留。
    首先将编码器的全部隐藏状态(bs,len,dim)与t时刻输入解码器的词向量(bs,dim)做矩阵乘法。
    然后进行SoftMax归一化,得到注意力权重(bs,len)。
    然后将注意力权重与编码器的全部隐藏状态再做矩阵乘法,得到上下文向量(bs,dim)。
    最后该向量与t时刻输入解码器的词向量进行拼接,再被输入解码器的RNN进行训练。
    权重的计算方式:乘性模型、加性模型、线性模型。
    可将注意力机制视为一种查询(Query)键值对(Key,Value)的关系。
    以上使用稠密向量计算注意力的机制,被称为 软注意力(Soft Attention)机制
    使用独热编码向量计算注意力权重的机制,被称为 硬注意力(Hard Attention)机制
    谷歌提出使用 多头注意力(Multi-Head Attention)机制Transformer结构来替换RNN。并进一步将Transformer用于预训练语言模型,并提出 BERT(Bidirectional Encoder Representations from Transformers)模型。该模型的问世标志深度学习技术在自然语言处理中的重大突破。

Original: https://blog.csdn.net/hahadesu/article/details/123370125
Author: 厨师长爱炼丹
Title: 《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(1)自然语言处理基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/530089/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球