独热编码 & 词向量
独热编码与词向量(分布式表示法)的区别
独热编码特点
不需要训练
无法表示单词的含义
向量长度等于词库的长度
明显的稀疏性
其实,独热编码也是存在稀疏性 sparsity 问题的,因为独热编码只有一个位置是 1,其余都是 0。在计算单词的距离当中,欧式距离和余弦相似度是无法对其进行计算的,也就是说,独热代码并不支持计算两个单词之间的相似度。
例如:
小姐姐: [1,0,0,0,0,0]
要: [0,0,0,1,0,0]
不惑: [0,0,0,0,1,0]
无论是通过欧式距离还是余弦相似度计算,我们发现,其计算结果均不支持表示词与词之间的距离。
词向量的特点
需要训练
词向量是稠密的(很少会看到 0 值)
向量的大小一般比独热编码小
词向量的长度可以按需调整(注意过长会导致过拟合)
词向量在某种程度上可以代表单词的含义
例如:
小姐姐: [0.2, 0.5, 0.3, 0.1, 0.3, 0.2]
要: [0.1, 0.2, 0.4, 0.1, 0.1, 0.3]
不惑: [0.1, 0.1, 0.4, 0.2, 0.1, 0.2]
如何得到词向量
词向量是需要通过训练来得到的,上图是一个 k=6 维的向量,我们可以设置 100 维,也可以设置 200 维。一般来说,句子越长,维的数量越多,但并不是越多越好,因为可能会出现过拟合的现象。通过模型对语料库进行训练,语料库可以是来源于自己收集的文档,通过训练,即可得到词向量。
在词向量(分布式表示法)下,两个单词之间的相似度是可以算出来的。当然,效果取决于词向量的质量。
句子向量
有了词向量,如何将词向量变为句子向量?最简单的方法便是计算平均。
例子
单词向量
小姐姐: [0.2, 0.5, 0.3, 0.1, 0.3, 0.2]
要: [0.1, 0.2, 0.4, 0.1, 0.1, 0.3]
不惑: [0.1, 0.1, 0.4, 0.2, 0.1, 0.2]
句子向量
小姐姐要不惑: [0.13, 0.27, 0.37, 0.13, 0.17, 0.23]
第一个维 0.13 是通过(0.2+0.1+0.1)/3 得到的,如此类推。
注意:通过平均单词的向量来获得的句子向量,往往是会存在问题的。
版权声明: 本文为 InfoQ 作者【Qien Z.】的原创文章。
原文链接:【http://xie.infoq.cn/article/f608860d3e17ad3d2f42ced30】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论 (1 条评论)