【NLP学习其3.5】词嵌入的特性,为什么词之间会有联系?

词嵌入的特性

现在你有了一堆嵌入向量,我们可以开始学习他们之间的特性了
前情提要:https://www.cnblogs.com/DAYceng/p/14962528.html

image-20210702151439531

先把各向量重新命名便于区分

image-20210702152051214

Man对应e_man①

Woman对应e_woman②

King对应e_king③

Queen对应e_queen④

现在用e_man减e_woman

①-②≈[-2,0,0,...]

用e_king减e_queen

③-④≈[-2,0,0,...]

由此可见,Man和Woman的差异主要体现在性别(gender)上,King和Queen也是如此

那么,当系统被问及“Man之于Woman等价于King之于什么?”时,它自然的会用嵌入向量相减,从而推断出问题的答案,即:Man之于Woman等价于King之于Queen

如何在算法上实现上述特性?答案是”计算距离

image-20210702153449257

如图所示,所求的e_?可以表示为:e_king-e_man+e_woman

那我现在只需要找出一个单词的嵌入向量,假设为e_w,使得这个e_w与e_king-e_man+e_woman最相似即可

用函数表示也就是Sim(e_w,e_king-e_man+e_woman)取最大值就满足条件

那么,这个Sim()是什么函数呢?

这个Sim()一般会是余弦相似度欧氏距离等相似算法(在代码中以函数方式提供使用),具体不再展开

嵌入矩阵(Embedding Matrix)

有了词嵌入这么强大的东西,那我们怎么去用它呢?

一般来说我们会以嵌入矩阵(Embedding Matrix)的形式来利用词嵌入,就像下面这个

image-20210702161112850

这是一个500 X 10000大小的嵌入矩阵,里面存的全是一些嵌入值,命名为E矩阵

可以看到,每列我标出了对应的单词,说白了这个矩阵其实就是由一万个嵌入向量拼接成的

现在我们需要使用One-Hot 了

假设我们有一个One-Hot编码的向量O_7426,它是一个10000行1列的矩阵

image-20210702161632960

我们用O_7426与E相乘,即E * O_7426

image-20210702161919022

由线性代数的知识我们可以知道,E(500 X 10000) * O_7426(10000 X 1)的结果是一个大小为500 X 1的矩阵,用e_w表示

嗯?500 X 1

这不就是E矩阵中的一个列吗?换句话说这个结果就是对应着某个词的嵌入向量

假设E*O_7426的结果是上图中框起来的部分,那么我们可以得出以下结论:

因为E * O_7426 = e_w

而e_w与"EA"所在列的值相等

所以
O_7426是对“EA”的独热编码 #EA是第7426个词
e_w = e_ea

因此原式可写成:E * O_7426 = e_7426或者E * O_ea = e_ea

由上述我们还可以进一步推广,任何与E矩阵,也就是嵌入矩阵相乘的One-Hot编码向量,最后会定位到编码对应的词的词嵌入,或者说嵌入向量,进而得出某个词

posted @ 2021-07-02 15:44  dayceng  阅读(179)  评论(0编辑  收藏  举报