word2vec
一、参考资料
(1)斯坦福224n课堂笔记
https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1214/
(2)github代码
这个是skip-gram的
https://github.com/Adoni/word2vec_pytorch
二、自己复述
什么是word2vec?怎么训练的?有什么用?优缺点是什么?用输入-隐层,还是隐层到-输出表示词的embedding?用输入到隐层
word2vec是一个以无监督方式从大量文本中语料中学习词向量的一种模型。使得语义相似的词在高维向量空间内距离相近。
主要有CBOW和skip-gram两种模型,也就是从上下文预测中心词,和根据中心词预测上下文。认真看的是skip-gram模型。
模型结构类似一个3层神经网络,输入层/隐层和输出层,输入层的维度为词袋的维度,隐层的维度为词向量的维度,输出层的维度也为词袋的维度。模型的权重矩阵就可以当做是词的embedding。
模型怎么算是训练好了呢。假如中心词是a,上下文是b,输入a,输出层b对应的位置的概率最大。用交叉熵来量化,算这个概率的时候,用到softmax,要对词袋中的所有词都计算一遍e*,计算量非常大,使用负采样来优化,只更新部分负样本对应的权重参数。
负样本的选取是从词袋中随机抽取 ,词抽中的概率与词频有关。一般来说一个正样本抽5个负样本。
模型训练的正样本为真实的中心词与上下文对,负样本为随机抽的非真实的上下文。
优点:简单,容易训练,不需要人工标注数据。有考虑上下文,相对于之前svd等完全上下文无关的效果较好
确定:词与向量是静态的一对一,没办法处理一词多意的情况
2.复习问题
负采样代码是怎么实现的:正(上下文)、负样本(随机取样)是怎么放进模型的;损失函数又是怎么算的;参数怎么更新的?
假设训练的batch_size是8,负采样个数是5
forward时,模型输入
pos_u:中心词u,torch.Size([8])
pos_v:上下文v,torch.Size([8])
neg_v:负采样,torch.Size([8,5])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!