作者:dachuanghu | 来源:互联网 | 2023-09-24 03:55
以下内容来自https:www.cnblogs.compinardp7160330.htmlhttps:blog.csdn.netfuermoleiarticledetails81
以下内容来自https://www.cnblogs.com/pinard/p/7160330.html
https://blog.csdn.net/fuermolei/article/details/81302921
词向量:可以简单的描述为,用一定维度的矩阵来表示词语,用于计算机的运算,现在一般用于NLP领域。
最早期的词向量维度的大小取决于词汇表的大小。
词汇表:我 你 她 他 是 学生 大学 作业 则词汇表的大小为:8 词向量的维度大小为:8
1、one-hot:
利用的是数学中的离散学的方法进行表示的。
例如:我是大学学生。 one-hot表示 我:(1 0 0 0 0 0 0 0) 是:(0 0 0 0 1 0 0 0) 大学:(0 0 0 0 0 1 0 0)
学生:(0 0 0 0 0 1 0 0 )
即通过确定每个具体的词对应于词汇表中的位置置为:1 ,其余的位置置为:0 将文本词汇向量化表示。
one-hot缺点:1、将词语向量化表述虽然简单,但是当词汇表很大时比如百万级的词汇表,那么对于每一个词语的向量表述维度都是百万级别的,而在这些向量中只有只有一个位置为1,其余位置为0的表述方式效率非常低下,而且对于计算机的内存也是一个噩梦。2、由于one-hot编码比较简单,因此无法从这些简单的向量编码中获得词语与词语之间的关系,因为每个词语的编码含有的信息太少了。因此需要一种能够以较少的维度向量来充分表述词汇信息的方法。
2、Distributed representation(分布式):
可以解决One hot 的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。该方法最早由Hinton在1986年提出的一种低纬度实数向量,它的样子为:[0.792, −0.177, −0.107, 0.109, −0.542, …] ,不但解决了one-hot的维度灾难问题,还提高了词语之间的关联属性。
关于Distributed representation 是如何挖掘词语之间的联系关系的呢?可以从下面的示例图中简单了解
在word2vec之前,大多用DNN网络来训练词向量,挖掘词语与词语之间的联系。这个方法的最基本结构是:利用三层神经网络,输入层、隐藏层、输出层。当然隐藏层可以是一层也可以是多层。
这个模型一般分为CBOW(Continuous Bag-of-Words)与Skip-Gram两种模型。
不哆嗦,先上两个模型的结构图
2.1、CBOW模型(连续词袋模型 continuous bag of words)
中心思想是:根据中心词上下文中相关的词语词向量推测中心词的向量,即模型的输入是:中心词X的上下文相关的词语向量,模型的输出是:改中心词X的向量。
例如:Efficient methods and focused attention are the best learning methods.
我们设定上下文词语取值为4,假设我们需要得到的词语,即我们需要模型输出的词向量为“attention”。那么模型的输入应该为8个词语,在中心词“attention”前后各四个词语。 前四个:"Efficient methods and focused" 后四个“are the best learning” 中心词“attention”。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。
这个CBOW的例子里,输入是8个词向量,输出是所有词的softmax 概率(训练的目标是期望训练样本特定词对应的 softmax 概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数可以自己指定。通过DNN的反向传播算法,可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可
2.2、Skip-Gram模型(跳字模型)
中心思想与CBOW模型的思想正好相反:根据中心词的词向量推测中心词上下文中词语的词向量,即模型的输入是:中心词X,模型的输出是:X(i-1)、X(i-2)、X(i-3)、X(i-4)、X(i+1)、X(i+2)、X(i+3)、X(i+4)的词向量。
还是上述的例子,我们的输入是特定词“attention”, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。
总结:以上就是基于神经语言模型的CBOW和skip-gram训练模型得到词向量的大致过程,但是这和在word2vec中使用CBOW和skip-gram训练模型得到词向量的过程还是有很多不同的。word2vec为什么不用现成的DNN模型,要继续优化出新方法呢?最主要的问题是DNN模型的这个处理过程非常耗时。词表一般都是百万级别的,这意味着DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大。
3、word2vec基础之霍夫曼树
待续