0%

自然语言处理

词嵌入

one-hot词向量构造起来很容易,但并不是一个含选择,因为其并不能准确地表达不同词之间的相似度,word2vec工具提出解决了上述问题,将每个词表示成一个定长的向量,并使这些向量能较好地表达不同词之间的相似和类比关系,包括跳字模型和连续词袋模型。

跳字模型

跳字模型假设:基于某个词来生成它在文本序列周围的词。

在该模型中,每个词被分为2个d维向量,用来计算条件概率,假设该词在词典索引为i,当它为中心词时向量表示为Vi,而它为背景词时向量表示为Ui。

设中心词Wc在词典中索引为c,背景词Wo在词典中索引为o,故给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到:跳字模型条件概率

跳字模型的参数是每个词所对应的中心词向量和背景词向量,训练中一般使用最大似然函数来学习模型参数

连续词袋模型

与跳字模型不同的是,连续词袋模型假设:基于某中心词在文本序列前后的背景词来生成该中心词。因为连续词袋模型的背景词有很多个,因此将这些取平均,然后使用和跳字模型一样的方法来计算条件概率。

同样,连续词袋模型的最大似然估计等价于最小化损失函数。

近似训练

跳字模型的核心在于,使用softmax运算得到给定中间词Wc生成背景词Wo的条件概率,,该条件概率对应的对数损失;

由于softmax运算考虑背景词可能是词典中任一词,以上损失包含了词典大小数目的项的累加。因此每次梯度计算可能开销过大,有下面两种方法来进行近似训练。

负采样:修改了原来的目标函数,使用相互独立事件来构造损失函数,其训练中每一步梯度计算开销与采样的噪声词的个数线性相关。

层序softmax:使用了二叉树这一个数据结构,树的每个叶结点代表词典中的每个词,并根据根节点到叶节点的路径来构造损失函数,每一步的梯度计算开销与词典大小的对数相关。

word2vec的实现

预处理数据集

PTB是常用的语料库

1、建立词语索引:将词映射到整数索引

2、二次采样::文本中一般会出现一些高频词,而在背景窗口中,与高频词一起出现会更有益。故训练词嵌入模型时可以对词进行二次采样,即每个索引词都有一定概率被丢弃。

3、提取中心词与背景词:我们将与中心词距离不超过背景窗口大小的词作为背景词,定义函数提取出所有中心词和它们的背景词。它每次在整数1与max_window_size之间随机均匀采样一个整数作为背景窗口大小。

负采样

读取数据集

使用随机小批量来读取数据集,小批量读取函数batchify,其输入data是一个长度为批量大小的列表,其中每个元素分别包含中心词center、背景词context、噪声词negativ,其返回的小批量数据符合我们需要的格式。

跳字模型

嵌入层:获取词嵌入的层称为嵌入层,在Gluon中可以通过创建nn.Embedding实例得到。其权重为一个矩阵,行数为词典大小、列数为每个词向量的维度。嵌入层输入为词的索引,返回为权重矩阵的第i行作为它的词向量。

小批量乘法:batch_dot对两个小批量中的矩阵一一做乘法。

跳字模型前向计算:输入包含中心词索引center以及连结的背景词与噪声词索引contexts_and_negatives。

定义损失函数:使用Gluon的二元交叉熵函数

子词嵌入fastText

英语单词通常由其内部结构和形成方式,而在word2vec中,我们并没有直接利用构词学中信息,而在fastText中,每个中心词被表示为子词的集合,利用

全局向量的词嵌入GloVe

文本分类情感分析:使用循环神经网络

文本分类是自然语言处理的一个常见任务,将一段不定长的文本序列变换成文本的类别。

子问题:使用文本情感分析来分析文本作者的情绪,即情感分析。

文本情感分析:使用卷积神经网络textCNN

其实,我们也可以将文本看作一维图像,从而可以使用一维卷积神经网络来捕捉临近词之间的关联,

编码器-解码器Seq2seq

前面都是表征并变换了不定长的输入序列,但在自然语言处理的很多应用中,输入、输出都可以是不定长序列,此时可用编码、解码器或Seq2seq模型。两个模型的本质都用到了两个循环神经网络,分别为编码器、解码器。+

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!