向量空间模型
这一模型的方法都依赖于分布式假设,其核心思想为:出现于上下文情景中的词汇都有相类似的语义。
独热编码
过去采用的独热编码(one-hot encoding)实质上是将大小为 N 的字典创建 N 维空间,每个词占用一维。这样无法表示每个词之间的联系。但如果把这些词放在一维空间,会给他们强行加上似是非是的数量关系(这是存在的,但是仅凭数量上的大小关系并无法全部描述词与词之间的关系)。
基于计数的方法
于是采用一种统计词与词之间相接次数(即在大型语料库中与其邻接词共同出现的频率)的二维表格,大小为 N × N N\times N N×N。这样便可从表格中了解到词与词之间的相似性以及词语连接的紧密程度。
例如,从“我喜欢吃梨”和“我喜欢吃饭”这个例子里我们可以了解到“梨”和“饭”的语义是相似的,而“我”和“喜欢”是紧密相连的。
尽管这样可以描述词语之间的关系,但由于维度过高,因此常采用像PCA、SVD奇异值分解这样的方法得到一个稠密的向量。这种表示也叫做词语的嵌入表示。
A m × n ≈ U m × r Σ r × r V r × n T A_{m\times n} \approx U_{m\times r}\Sigma_{r\times r}V^T_{r\times n} Am×n≈Um×rΣr×rVr×nT
其中 m = n m=n m=n,往往 r = 2 r=2 r=2,向量取 U m × r U_{m\times r} Um×r. 然后我们可以将结果显示在一个 x O y xOy xOy 平面中,可以直观地感受到意思相近的词靠得比较近。当然 r r r 也可以取类似 200 或 300 这样的固定值,描述更多特征。
这种方法虽然有很好的性能,但是它要求我们追踪所有词汇的共生矩阵。
基于概率的方法
以2013年提出的 skip-gram 模型为例,首先需要构建一个字典,并把极不常见及拼写错误的词移除。然后对语料库第 i i i 个词,以中心词为输入、左右 r r r 个词为输出创建训练样本(也称窗口大小为 r r r)。
理想情况下,我们总是希望根据输入预测最佳的输出,先用随机值初始化词向量 V i V_i Vi,可以求得词语之间的距离(如欧式距离),得出可信度最高(距离最小)的词。但为了避免比对所有词,我们采用噪声对比估计损失(noise-contrastive estimation loss),它只使用由我们挑选出来的 k 个噪声单词作为负样本,而没有使用整个语料库,这使得训练变得非常快。
作为训练的结果,我们得到了词向量的嵌入表示。