word2vec总结

**

1.背景

**

词是NLP的基础,在自然语言任务中,往往使用词向量表示作为机器学习、特别是深度学习的输入和表示空间。在NLP中,传统上词使用离散表示:one-hot表示,主要存在以下问题:

  • 无法衡量词向量之间的关系,无法通过各种度量捕获文本的含义
  • 词表维度随着语料库增长而膨胀
  • 数据稀疏问题

而word2vec的提出,一定程度上解决了one-hot表示存在的一些问题

2.算法实现

word2vec主要有两种训练模式,skip-gram和cbow,其中cbow是根据上下文预测目标单词,而skip-gram是根据目标单词预测上下文。

2.1 cbow

在这里插入图片描述

cbow根据上下文预测目标单词,要极大化这个目标单词出现的概率。图中从左到右依次是上下文单词的one-hot向量,乘以初始词向量矩阵W,得到各自对应的词向量,再对这些词向量加和取平均,作为hidden vector,设为h,将h乘以辅助矩阵W’,得到一个维度为V的向量,对其进行softmax归一化,取概率最大的作为预测单词,与答案对比计算损失,然后更新W和W’两个参数矩阵,先根据loss对参数求梯度,再使用梯度下降法更新参数。

2.2 skip-gram

根据目标单词预测上下文,训练模式可参考cbow,反过来。
因为skip-gram根据目标单词预测上下文,进行预测的次数要多于cbow,训练时间也相应的要比cbow长一些。
一般情况下,如果语料库大的话,skip-gram效果要好于cbow。

3.训练过程优化

由于词向量学习最初的设计方案存在很大的效率问题,输出向量维度太大,而且前面还要有一个更大的参数矩阵W‘,难以进行训练优化,因此提出了层次softmax和负采样两种方式来代替原始的从projection layer到output layer的过程。

3.1层次softmax

在这里插入图片描述
首先根据词汇表单词出现次数建立一棵Huffman树。
如上图所示,从input layer到projection layer不变,我们要做的是将之前所有都要计算的从输出softmax层的概率变为一颗Huffman树,那么我们的softmax计算只需要沿着Huffman树进行就可以了。其中树的根节点即投影后的词向量,叶子节点对应之前softmax的输出神经元。在根节点处左右子树概率之和为1,在接下来的每个节点,对应两个子节点的概率值之和等于父节点本身的概率值,那么走到最后,所有叶子节点的概率值之和必定还是等于1。
在这里插入图片描述
其中σ()为Sigmoid函数,n(w,j)为Huffman树内部w路径第j层的节点,ch(n(w,j))为n节点的孩子节点。
计算量降为树的深度log_2(V)

3.2负例采样

使用负例采样,只有一个正样本,负样本太多,对负样本进行采样,只采样一部分,可以建立一个长度为1的线段,假设为[0,1],划分为10^7等份,根据词出现频率,分配对应线段长度,进行负例采样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Word2Vec是一种用于生成单词嵌入的模型,它可以将单词映射到实数向量的语言建模技术。这个模型由一个输入层、一个隐藏层和一个输出层的浅层两层神经网络组成。在实际应用中,我们可以使用Python的Gensim库来实现Word2Vec的基本操作。 具体地,我们可以使用Gensim库中的`word2vec.Word2Vec`类进行模型训练和预测。在训练模型时,我们可以设置一些参数,比如`hs`表示使用层次化softmax进行优化,`sg`表示使用skip-gram模型,`min_count`表示忽略低频词,`window`表示上下文窗口的大小,`vector_size`表示生成的单词嵌入向量的维度等。 下面是一个示例代码,展示了如何使用Gensim库中的Word2Vec类进行模型训练和预测: ``` from gensim.models import word2vec from gensim.models import Word2Vec # 假设我们有一个句子列表作为训练语料 sentences = [['this', 'is', 'an', 'example', 'sentence'], ['another', 'example', 'sentence']] # 创建并训练Word2Vec模型 w2v = word2vec.Word2Vec(sentences, hs=1, sg=1, min_count=1, window=5, vector_size=300, workers=4) # 使用训练好的模型进行单词的预测 word = 'example' similar_words = w2v.wv.most_similar(word) # 输出与给定单词相似的其他单词 for similar_word, similarity in similar_words: print(similar_word, similarity) ``` 在上述示例中,我们首先创建一个Word2Vec模型对象,并传入训练语料`sentences`和一些参数进行训练。然后,我们可以使用训练好的模型来获取与给定单词相似的其他单词,即通过`w2v.wv.most_similar(word)`方法来实现。最后,我们可以输出与给定单词相似的其他单词及其相似度。 总结来说,word2vec实战中可以使用Python的Gensim库来进行模型训练和预测,通过设置合适的参数来调整模型的性能和结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深度学习 - 38.Gensim Word2Vec 实践](https://blog.csdn.net/BIT_666/article/details/129837715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值