1. 背景

         词嵌入定义为NLP中语言建模特征学习技术的总称,是一种将文本中的词汇转化成数值向量方法(将字典中的单词和词组映射成实向量)。
         onehot编码存在一个主要问题是它无法表示词汇间的相似度。

2. 分布式表示

        分布式表示试图通过考虑上下文词汇间的关系捕捉词汇语义分布式表示目标找出一个通用的转换函数,把词汇转换成(与它关联的)向量,使它们之间相似性符合词汇间语义的相性。

2.1 word2vec 词嵌入

        word2vec 是一个模型组,这些模型是无监督的,它以大型文本语料作为输入,并生成词汇的向量空间。其向量空间维度通常低于onehot编码字典大小的向量空间维度。尽管word2vec创建用于深度学习NLP模型的向量,但它却是浅层NN。

        word2vec每个词表示成一个定长的向量,并使得这些向量能较好地表达不同之间的相似和类比关系。它主要包含了下面两个模型

2.1.1  skipgram 跳字模型

        skipgram 模型训练目标通过给定当前(中心词)预测周围词skipgram 方法会对正样例可能性的结果池进行随机采样;对用于生成样例的负样本取样处理,会包含文本随机组对的任意token

        负采样通过考虑同时含有正类样本和负类样本的相互独立事件构造损失函数,其训练中每一步梯度计算开销与采样噪声词的个数线性相关

        层序softmax使用二叉树,并根据根结点到叶结点路径构造损失函数,其训练一步梯度计算开销与词典大小的对数相关

        二次采样试图尽可能减轻高频词对训练词嵌入模型影响

       可以不同长度的样本填充长度相同的小批量,并通过掩码变量区分填充和非填充然后只令非填充参与损失函数计算

2.2.2  CBOW 连续词袋模型

        CBOW(Continuous Bag Of Words)模型通过周围的词汇预测当前,且上下文词汇的顺序不会影响预测结果(即词袋的假定)。

CBOW更快,但skipgram预测常用词时比较出色。

2.2.3 从模型提取word2vec向量

        把字典中的词转换成稠密的低维的分布式表示时所用的权重矩阵

        Gensim库提供了一个word2vec实现

        对于英语语言文本比较好用的是googleword2vec模型,它是在google新闻数据集中超10亿词汇上训练好的模型,其字典大小约为300W,词向量维度为300,模型大小约1.5G。

2.2 GloVe全局向量的词嵌入

        GloVe(goble vector)是一种获取词的向量表示的监督学习算法,其训练基于语料中全局聚合的共现词的统计进行,结果表示展示了词向量空间中有趣的线性结构。(字典表示中的全局向量叫GloVe向量。)

       GloVe和word2vec不同点在于,word2vec是一个预测模型,而GloVe是一个基于计数的模型。首先构造一个训练语料中共现的(word, context)的大型矩阵,矩阵中的每个元素代表了以行表示的词,与以列表示的周围词共现的频数。然后GloVe处理过程把共现矩阵转换成一对(word, feature) 和 (feature, context)的矩阵。这个过程就是矩阵分解,它是通过随机梯度下降的方法完成的,SGD是一种数值迭代方法。当SGD收敛时矩阵(word, feature)就是GloVe向量,为了加快收敛,SGD通常采用并发模式

        基于预测NN的模型(如word2vec)和基于计数的模型(如GloVe)在思路上是相似的。它们都构造了一个向量空间,其中词的位置会被它的邻近词影响。NN模型以共现词的各个样例开始,而基于计数的模型通过语料中所有词的聚合共现统计开始。

          任意词的中心词向量和背景词向量在GloVe模型中是等价的,对于不同初始值同一个词最终学习到的两组词向量可能不同。当学习得到所有词向量以后,GloVe模型使用中心词向量与背景词向量之和作为该词的最终词向量。

       在有些情况下,交叉熵损失函数有劣势,GloVe模型采用平方损失,并通过词向量拟合预先基于个数据集计算得到的全局统计信息

        尽管GloVe通常比word2vec有更高的准确率,而且使用并发时比word2vec训练的更快,但其相关python工具不如word2vec的那么成熟。

3. 使用预训练好的词向量

        一般来说只有出现大量生僻文本时,才会从头训练word2vec或GloVe模型。在网络中使用(预训练好的)词向量的三种方式

3.1 从头开始学习词向量

        向量权重随机初始化为较小的值并用BP算法进行训练。

       可以使用NLP工具包NLTK来把文本解析句子和词。

3.2 从预训练好的word2vec/GloVe模型中微调学习到的词向量

        从预训练好的模型中构建权重向量,并用它初始化嵌入层,因为权重初始值较好,模型也收敛得更快。

3.3 从预训练好的word2vec/GloVe模型中查找词向量

        从预训练好的模型中查找词向量,并把输入转换成词向量。之后可以训练任意ML模型。

4. fastText-子词嵌入

        fastText提出了子词嵌入(subword embedding)的方法,从而试图将构词信息引入word2vec的跳字模型。它在skipgram模型的基础上,将中心词向量表示成单词的子词向量之和。

        子词嵌入利用构词上的规律,通常可以提升生僻词表征的质量

原文地址:https://blog.csdn.net/MusicDancing/article/details/134721015

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38864.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注