NLP 之一:词向量

语言模型#

对于一段文本 W=w(1)w(2)...w(T),我们希望计算其出现的概率。

如果直接在数据集中统计出现的数量,复杂度过高。因此目标变为快速估计其概率。

首先整个句子出现的概率可以拆分为若干个条件概率相乘,即 P(W)=i=1TP(w(i)w(1)...w(i1))

一个经典方法 n-grams 假设每个词只和之前 n1 个词有关,简化模型计算。

词向量#

我们希望将神经网络沿用至此,但直接将词编号输入难以体现词与词之间的关系。(one-hot)

词嵌入(word embedding)的想法是将每个词映射成低维空间中的定长向量,两个词的相似程度表现为其对应向量的空间位置关系。

为了建立一个词向量模型,我们需要假设一个似然函数的模型,然后通过神经网络训练其参数,实现最大似然估计。

如果只是传统的同时学习词向量和模型参数,训练量过大。因此可以先只训练出简单的词向量,然后不同的模型基于此设计不同的神经网络。

Word2vec#

接下来会介绍训练词向量的经典工作 Word2vec,其包含两个模型:Skip-gram 和 CBOW。

两个模型均是考虑中心词与其附近的背景词之间的关系。背景词指的是与中心词距离不超过窗口大小 m 的词。对中心词来说,窗口内所有背景词的地位相同。

假设词向量维数为 d,我们会对每个词训练出其作为中心词的词向量 vi 和作为背景词的词向量 ui。两个词 wiwj 越相似,viujuivj 应越大。

Skip-gram

Skip-gram模型重在描述中心词对背景词的生成。

将编号为 o 的背景词 wo 出现在编号为 c 的中心词 wc 附近的概率近似为

P(wowc)=exp(uovc)iVexp(uivc)

其中 V 是词库。即对向量内积做softmax。

似然函数为

i=1T0<|j|mP(w(i+j)w(i))

CBOW

CBOW模型重在描述背景词对中心词的生成。

将编号为 c 的中心词 wc 出现在编号依次为 1,2,...,2m 的背景词 wo1wo2...wo2m 中间的概率近似为

P(wcwo1wo2...wo2m)=exp(uovc)iVexp(uovi)

其中 uo=12mi=12muoi

似然函数为

i=1TP(w(i)w(i2m)...w(i1)w(i+1)...w(i+2m))

近似训练

注意到以上两个模型的概率计算中,都需要遍历词库 V,复杂度过高无法接受。

两个近似技巧可以将复杂度降下来:

  • 负采样(Negative Sampling) 不再遍历 V 而是在里面采样 K 次(目标函数也有所修改)。
  • 层次Softmax(Hierarchical Softmax) 对所有单词建一棵哈夫曼树,每个非叶子节点是一个二分类器,相当于每次只考虑 target word 和两个集合之间哪个更相近,这样每个节点只需要进行一次两个元素的Softmax。

GloVe(Global Vectors for Word Representation)#

xi,j 表示某一语料中词 wj 出现在 wi 背景窗口中的次数。显然有 xi,j=xj,i

对三个词 wi,wj,wk,我们希望有

f((uiuj)vk)xi,kxj,k

因此一个方法是令 f 是指数函数,也就是使下式成立

exp(uivj)xi,k

另外还可以添加偏置项

uivj+bi+cjlogxi,k

据此定义损失函数(选用平方损失)

i,jVh(xi,j)(uivj+bi+cjlogxi,k)2

其中 h 是一个钦定好的递增函数。

posted @   xcyle  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
CONTENTS