午夜昏睡的时候,忽然想到 word2vec 的本质,其实很简单。理解了其本质,可以组合出各种具体的方案出来。
假设词汇库里有 m 个词汇,word2vec 把 mmm 个词汇映射到 nnn 维空间。说白了,这就是一个映射。如下所示,其中 www 是词汇, vvv 是向量:
w→Fv(1)\tag1
w \stackrel{F} \to v
w→Fv(1)
要实现这个映射,可以分成两步:
第一步,把 www 映射到一个稀疏向量 uuu。
可选方案很多,最简单的做法是,统计语料库中的句子中, www 前后某个范围内出现的其他单词的概率分布,这个频率分布可以用一个 mmm 维向量 uuu 表示 。
w→Ru(2)\tag2 w \stackrel{R} \to u w→Ru(2)
其实这一步已经完成向量化的任务了。一般而言,这个步骤中的 uuu 是一个稀疏向量,因此我们需要给它降一下维。
第二步,把 uuu 降维。
这个用压缩+解压缩网络模型,用无监督训练方法,很容易建立一个数据压缩模型,进一步把 mmm 维的概率分布压缩到 nnn 维。
u→Sv→Tu′(3)\tag3 u \stackrel{S} \to v \stackrel{T} \to u' u→Sv→Tu′(3)
其中,SSS 是压缩网络,TTT 是解压缩网络。最后,得到 word2vec 映射:
F=R⋅S
F = R\cdot S
F=R⋅S
即:
w→Ru→Sv w\stackrel{R}\to u \stackrel{S}\to v w→Ru→Sv
虽然各种网络模型实现形式各有特色,但背后的数学思想,基本离不开本文所述。■\blacksquare■
原创不易,如果对您有帮助,请关注、点赞,谢谢支持!