NLP 之一:词向量
语言模型#
对于一段文本
如果直接在数据集中统计出现的数量,复杂度过高。因此目标变为快速估计其概率。
首先整个句子出现的概率可以拆分为若干个条件概率相乘,即
一个经典方法
词向量#
我们希望将神经网络沿用至此,但直接将词编号输入难以体现词与词之间的关系。(one-hot)
词嵌入(word embedding)的想法是将每个词映射成低维空间中的定长向量,两个词的相似程度表现为其对应向量的空间位置关系。
为了建立一个词向量模型,我们需要假设一个似然函数的模型,然后通过神经网络训练其参数,实现最大似然估计。
如果只是传统的同时学习词向量和模型参数,训练量过大。因此可以先只训练出简单的词向量,然后不同的模型基于此设计不同的神经网络。
Word2vec#
接下来会介绍训练词向量的经典工作 Word2vec,其包含两个模型:Skip-gram 和 CBOW。
两个模型均是考虑中心词与其附近的背景词之间的关系。背景词指的是与中心词距离不超过窗口大小
假设词向量维数为
Skip-gram
Skip-gram模型重在描述中心词对背景词的生成。
将编号为
其中
似然函数为
CBOW
CBOW模型重在描述背景词对中心词的生成。
将编号为
其中
似然函数为
近似训练
注意到以上两个模型的概率计算中,都需要遍历词库
两个近似技巧可以将复杂度降下来:
- 负采样(Negative Sampling) 不再遍历
而是在里面采样 次(目标函数也有所修改)。 - 层次Softmax(Hierarchical Softmax) 对所有单词建一棵哈夫曼树,每个非叶子节点是一个二分类器,相当于每次只考虑 target word 和两个集合之间哪个更相近,这样每个节点只需要进行一次两个元素的Softmax。
GloVe(Global Vectors for Word Representation)#
记
对三个词
因此一个方法是令
另外还可以添加偏置项
据此定义损失函数(选用平方损失)
其中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!