Word2Vec/WordEmbedding笔记

本文深入探讨了CBOW和Skip-gram模型在词嵌入中的应用,包括Hierarchical Softmax和Negative Sampling技术,以及如何将word2vec算法应用于item向量学习。此外,还介绍了三种sentence-embedding的方法,并讨论了多机分布式并行训练策略。

CBOW: Continous Bag Of Words; Context词预测中心词;

Skip-gram: 中心词预测Context词;

最原始的训练网络是Context词的WordEmbedding首尾相连,输入浅层神经网络,输出层是word个数个节点的softmax;每次context词们做输入,中心词做softmax输出的label;缺点:最后一层softmax节点数太多(等于词库大小),训练速度慢;

Hierarchical Softmax:哈夫曼树,为了将词频高的词放到浅层,以减少计算次数;x为输入词的词向量,θ[i]为叶子节点词路径上的某个中间节点的分类面,sigmoid(x*θ[i])是往左走的概率,1-sigmoid(x*θ[i])是往右走的概率: CBOW: 输入词是某个上下文词,叶子节点是中心词;Skip-gram: 输入词是中心词,叶子节点是某个上下文词;

Negative Sampling: a为输入词,b为预测词,c[1]、c[2]等为负采样词,则最大化Likelihood: p(b|a)(1-p(c[1]))(1-p(c[2]))...   p是用a的词向量和b(或c[i])的分界面向量θ点乘进sigmoid得到的概率;CBOW: a为某个上下文词,b为中心词;Skip-gram:a为中心词,b为上下文词;  (很像LogisticRegression, 区别是每次一个正例和几个负例一起算极大似然,且每个词都有一个分类面,且除了训练分类面还要训练词向量;训练的目标是让上下文的词pair互为对方的"正例",不在上下文的词pair互为对方的"负例";上下文词们确定后,该上下文可能出现的中心词,对应他们的分类平面>0部分围成的区域,因此这些中心词的词向量们长得类似(因为都在同一个区域内)

以上两者,每个词都有词向量x和分界面向量θ这两个向量;

以上两者的本质,都是求极大似然概率;学到的都是上下文共现信息;

 

学习item向量:任何基于co-occurrence矩阵的算法模型,都可以套用word2vec算法的思路加以改进。比如,推荐系统领域的协同过滤算法:协同过滤算法是建立在一个user-item的co-occurrence矩阵的基础上,通过行向量或列向量的相似性进行推荐。如果我们将同一个user购买的item视为一个context,就可以建立一个item-context的矩阵。进一步的,可以在这个矩阵上借鉴CBoW模型或Skip-gram模型计算出item的向量表达,在更高阶上计算item间的相似度。

sentence-embedding的3种方法:

1. word-embedding做max-pooling或sum-pooing等;

2. sentence-id作为一个特殊词,来加入训练,该句子里的词和该sentence-id互为上下文关系;

3. RNN

 

Glove?

参考文献

 

多机分布式并行:

1. 有人用ps-lite来存放embedding,worker来push梯度和pull权重;

2. 网易有道:也是用parameter-server来多机训练;

3. 我们:AllReduce同步更新1百万词表(400MB,半分钟更新完),每3分钟更新一次;每轮save几次模型,永不停止(直到kill掉),所以没有末尾同步问题;

4. Google原始论文:参数服务器DistBelief

 

实验评价标准是单词预测正确与否的Accuracy

Word2Vec利用类似基于神经网络的语言模型思想,通过训练简化的神经网络来找到词向量表示,捕捉单词之间的语义关系。其背后的基本理论可通过基于神经网络的语言模型来解释,它的两种主要模型Skip - Gram和CBOW是在基于神经网络的统计语言模型框架内的特定实现[^1]。 2013年Google团队发表了word2vec工具,可将所有的词向量化,定量地度量词与词之间的关系,挖掘词之间的联系,相关论文有Mikolov等人发表的《Distributed Representations of Sentences and Documents》《Efficient estimation of word representations in vector space》等[^4]。 此外,还有关于Word2Vec原理的相关学习笔记,如“深度学习word2vec笔记之算法篇”“Word2Vec学习笔记(四)——Negative Sampling模型”“DL4NLP——词表示模型(三)word2vec(CBOW/Skip - gram)的加速”“word2vec中的数学原理详解”等可作为教程参考学习[^2]。 ```python # 这里也给出一个使用Python和gensim库实现Word2Vec模型的简单示例代码,帮助理解原理在实践中的应用 from gensim.models import Word2Vec sentences = [["I", "love", "natural", "language", "processing"], ["Word2Vec", "is", "a", "powerful", "embedding", "model"], ["NLP", "is", "fun", "and", "challenging"]] # 训练Word2Vec模型 model = Word2Vec(sentences, size=100, window=5, min_count=1, workers=4) # 获取词向量 vector = model.wv["natural"] # 寻找与指定词语相似的词语 similar_words = model.wv.most_similar("natural") # 打印结果 print("词向量:", vector) print("与'natural'相似的词语:", similar_words) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值