- 什么是词(字)向量?
将单词(apple、吃饭)用向量的形式进行表示,比如将单词“吃饭”表示为一个三维向量x=[x1,x2,x3]。一个词语或者一个字在NLP中被称为一个token。 - one-hot来编码字典
比如一个汉语字典有3个单词“(index:0)吃饭”、“(index:1)睡觉”、“(index:2)打牌”构成,则one-hot编码结果如下:
单词 | one-hot编码 |
吃饭 | 001 |
睡觉 | 010 |
打牌 | 100 |
经过one-hot编码以后,一个单词就被编码为一个向量,该向量只有一个元素为1,其余全为0;
one-hot编码的缺点:
(1)特征稀疏。one-hot编码具有很大的稀疏性,例如一个语料库有10000个单词,则每一个单词都被编码为一个长度为10000的向量,而该向量则含有9999个0。
(2)无法表征词与词之间的相互关系。因为one-hot编码后的任意两个词语都是正交的。
所以提出了更高效的Embedding(嵌入)编码方法。
- 使用Embedding将单词的one-hot编码格式转换为词向量形式
所谓的Embedding其实就是指一个线性变换矩阵,通过该变换矩阵,将one-hot编码格式,转换为词向量形式。
这个Embedding矩阵,是需要训练的,不过前人已经训练好了很多中文、英文等语料库的Embedding矩阵,可以直接拿来使用。
Embedding编码的优势:
当单词以词向量的形式表达出来以后,就可以计算两个单词之间的相关性,本质是计算两个词向量之间的相关性,从几何的角度来讲:两个词向量之间的相关性越高,向量之间的夹角就越小,反之亦然。
Embedding矩阵的维度:height=length(one-hot_vector),width=length(word_vector)
即如果一个词的one-hot编码长度为100,通过一个维度为100(height)*20(width)的Embedding矩阵之后,该词的词向量的长度为20维。
- 句向量
如果我们需要分析两个句子之间地相似性,则需要将句子表示成句向量的形式,最简单的句向量的构造方式就是单纯地将句子中各个词向量相加,例如句子:“我 吃 了 饭”,
单词 | 词向量 |
我 | 0.1,0.1,0.1,0.1 |
吃 | 0.2,0.2,0.2,0.2 |
了 | 0.3,0.3,0.3,0.3 |
饭 | 0.4,0.4,0.4,0.4 |
则该句子的句向量为:[1.0,1.0,1.0,1.0],有了句向量,就可以计算句子之间的相关性。
(文中所用图片来自百度飞桨Ai Studio 平台课程《基于深度学习的自然语言处理 》)