目录
一、前言
计算机只认识数值数字,那么怎么认识自然语言呢???答案就是将自然语言转换转换成数值,就词向量。
先来考虑一个问题,如何能将文本向量化呢???看起来比较抽象,可以先从人的角度来观察。
如何来描述一个人呢???只用身高或者体重,还是,综合其各项指标呢??
例如:Kevin Durant 身高211cm, 体重90kg,这能完全描述他吗???当然不能,还有NBA超巨,全明星,死神,等等描述。
二、词向量
词向量(Word Embedding)是自然语言处理(NLP)中的一种技术,它可以将词汇表中的单词或短语映射到实数向量空间。以下是关于词向量的详细介绍:
- 词向量的核心在于将每个单词表示为高维空间中的一个点,这些点不仅代表了单词的语义信息,还可以通过计算向量之间的距离来分析词语之间的关联性和相似性。
词向量的一个重要优势是它们能够捕获单词之间的细微差别和语义关系,例如,"king"和"queen"之间的向量差异可以反映出性别差异。尽管词向量技术已经相当成熟,但它们仍面临一些限制,比如可能将单词的多个含义混合在一个单一的向量中,这限制了对具有多重含义单词的精确表达。未来的研究可能会集中在如何改进词向量技术,以更准确地表示单词的含义和用法。
例如:Kevin Durant生成的词向量
|---------|---------|----------|---------|----------|---------|-----|---------|
| 0.02323 | 0.33452 | -0.97865 | 1.35533 | -9.23443 | 2.23344 | ... | 3.99457 |
那么这个向量在我们人看来,不能理解为什么是这样,但是计算机可以认出来,这个就是Kevin Durant,包括他所有的描述。而且这个向量的维度50~300维(google得出的)。
只要有了向量就可以用不同的方法来计算相似度。
通常用欧氏距离,余弦距离等等。
如果我们用一个二维的向量空间来表达词向量,可以吗???
虽然可以表达,但是表达的信息太少了。
通常,数据维度越高,能够提供的信息越多,从而计算的结果的可靠性就更值得信赖。
那么词向量真真的有实际意义吗?或者说能表达出词的意思吗?
三、词向量的实际意义
我们先看这样的图
其实King和Queen他们又有实际意义,而且两个词都相似,所以在词向量表达中,有相同的部分。
光看数字我们难以观察到,把数字转换成热度图。
假如,我们已经训练好了一个词的向量
四、模型的整体框架
在词向量模型中输入和输出分别是什么???
让模型学到一个词用什么样的向量表达最为合适。
如果用神经网络来训练模型,就是让神经网络学到前后文的一个逻辑关系。
我们可以看到,输入单词进入模型,然后模型训练,前向传播得到损失值,反向传播,更新参数,更新embeddings表。
这里 embeddings表 指的是语料库的一个大表,它装有所有的词。而且是用词向量来表达。在开始的时候对于这个表进行一个类似于神经网络权重参数的初始化操作。而且与神经网络不同的是不仅仅要更新权重参数,还要跟新此表,达到让模型学到一个词用什么样的向量表达最为合适的目的。
查找输入的词,得到词向量,在经过向量矩阵计算得到一个结果值,类似于做一个分类任务,看那个词的概率最大。这样达到预测到下一个词是什么,让神经网络学到前后文的一个逻辑关系的目的。
五、构建输入数据
数据从哪里来?
everywhere,只要符合自然语言的上下文逻辑即可。
如何构建训练数据
可以自己构建数据集,在一篇文章中,采用滑动窗口策略。
这样其实来看,输入数据集是很好构建的。
六、不同模型的对比
- CBOW模型
如图,采用滑动窗口策略,Jay was hit by a 框起来,那么输入就是Jay was by a 输出就是 hit。
- Skipgram模型
同样的,采用滑动窗口策略, Jay was hit by a 框起来,那么输入就是 hit 输出就是 Jay was by a。
七、负采样方案
问题:一个语料库很大,5W,10W,100W,那么在做得分计算,损失计算,概率计算,SoftMax归一化的时候,计算量可想而知的大。那么如何去处理这样的一个问题呢???
初始方案:输入两个单词看看他们是不是前后文对应的输入和输出,也就相当于一个二分类任务了。
出发点很好,但此时训练集构建出来的标签按照二分类标准来说就全是1了,无法进行较好的训练。
改进方法:
负采样方案
意思就是在构造数据集时,加入一些不对应上下文的词,并且标签设置为0。上图以Skipgram模型为例,一般加入5个负采样的样本。
八、总结
- 初始化磁向量矩阵
input word和output word都是输入数据,且input word在Embedding里找,output word在Context里找。
- 通过神经网络反向传播来计算更新,不光更新权重矩阵W,也要更新输入数据。
- 得到最有可能的值。