word2vec

本文深入解析word2vec,包括其工作原理、与n-gram模型的对比、词向量的生成方式,以及CBOW和Skip-Gram两种模型的运作机制。同时介绍了word2vec如何通过霍夫曼树和Hierarchical softmax优化传统神经网络,实现高效计算。

word2vec是google在2013年推出的NLP工具,特点是将所有的词向量化,这样词与词之间就可以定量地度量 它们之间的关系,挖掘之间的联系。

与n-gram模型相比,神经概率语言模型有什么优势呢?

  • 词语之间的相似性可以通过词向量来体现
    比如:在某个语料库中 s1 = "A dog is running in the room"出现了10000次, s2="A cat is running in the room"只出现了一次,按照n-gram, p(s1)肯定远大于p(s2),由神经概率语言模型算得的p(s1)和p(s2)是大致相等的。原因在于:(1)在神经概率语言模型中假定了“相似的”词对应的词向量也是相似的(2)概率函数关于词向量是光滑的,即词向量中的一个小变化对概率的影响也只是一个小变化
  • 基于词向量的模型自带平滑化功能,p(w|context(w)) 为0时

词向量

  • one-hot  representation
    就是用一个很长的向量来表示一个词,向量的长度为词典的大小N,向量的分量只有一个1,其他全为0,1的位置对应该词在词典中的索引。(缺点:容易导致维数灾难)
  • Distributed representation
    通过训练将某种语言中的某一个词映射成一个固定长度的短向量。所有这些词向量构成词向量空间,而每一个向量则视为该空间的一个点,在这个空间引入“距离”

1. CBOW(输出中心词)

  CBOW(continus bag of words)模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量

   

  我们上下文大小取值为4,特定的这个词是"learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是与关注的词之间的距离无关,只要在上下文之内即可。这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可

2. Skip-Gram(输出上下文词)

  输入是特定一个词的词向量,而输出是特定词对应的上下文词向量。与CBOW相反

CBOW通常适用于小型数据,而Skip-gram在大型预料中表现更好,两个模型结构如图:

3. 霍夫曼树

  霍夫曼树是word2vec的基础, word2vec使用了CBOW和Skip-Gram来训练模型,得到词向量,但没有使用传统的DNN模型。最先优化使用的数据结构是霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点即为词汇表的大小,而内部节点则为起到隐藏层神经元的作用。
带权路径长度:若为树中节点赋予一个具有某种含义的(非负)数值,则这个数值称为该节点的权。集诶大拿的带权路径长度是指,从跟节点到该节点之间的路径长度与该节点的权的乘积
树的带权路径长度:树的带权路径长度规定为所有叶子节点的带权路径长度之和

给定n个权值作为n个叶子节点的权,构造一棵二叉树,,若它的带权路径长度达到最小,则这样的二叉树为最优二叉树,也称Huffman树(节点个数为n-1)。

霍夫曼树的建立过程:

输入:权值为(w_1,w_2,...w_n)的N个节点

输出:对应的霍夫曼树

1)将(w_1,w_2,...w_n)看作是n棵树的森林,每个树仅有一个节点

2)在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分别作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和

3)将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林

4)重复步骤2)和3)直到森林只有一棵树为止

注意:二叉树的两个子树是分左右的,并且将权值大的节点作为左子树的节点

那么霍夫曼树有什么好处呢?一般得到霍夫曼树后我们会对叶子节点进行霍夫曼编码,由于权重高的叶子节点越靠近根节点,而权重低的叶子节点会远离根节点,这样我们的高权重节点编码值较短,而低权重值编码值较长。这保证的树的带权路径最短

4. word2vec改进传统的神经网络:基于Hierarchical softmax 和基于Negative Sampling

4.1   基于Hierarchical softmax
应用传统的神经网络最大的问题在于从隐藏层到输出层的softmax的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。word2vec对此作出了改进

  • 对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法
  • 从隐藏层到输出的softmax层。为了避免要计算所有词的softmax,word2vec采用了霍夫曼树来代替从隐藏层到输出softmax层的映射。

缺点: 如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久

  • 4.2 基于Negative Sampling
    Negative Sampling由于没有采用霍夫曼树,每次只是通过采样neg个不同的中心词做负例,就可以训练模型

参考:

1. https://blog.youkuaiyun.com/h2026966427/article/details/80368320

2. word2vec-中的数学原理详解

 

  

 

转载于:https://www.cnblogs.com/xz824/p/9991679.html

### Word2Vec 技术简介 Word2Vec是一种用于生成词语向量的技术,能够将自然语言中的单词转换成数值型向量表示。这种技术基于神经网络模型,在处理大规模语料库时表现出色[^1]。 ### 使用 Gensim 库构建 Word2Vec 模型 为了简化开发流程并提高效率,可以利用 Python 的 `gensim` 库快速搭建起一个功能完备的 Word2Vec 实现方案: #### 安装依赖包 首先需要安装必要的Python库: ```bash pip install gensim numpy ``` #### 准备训练数据 准备待训练的数据集,并将其转化为适合输入的形式。假设变量名为 `x` ,它应该是一个由多个句子组成的列表,而每个句子又是一系列分词后的字符串数组。 #### 初始化配置参数 创建一个新的 Word2Vec 对象实例,并设置一些重要的超参选项,比如特征向量维度 (`vector_size`) 和最小词频阈值(`min_count`)等: ```python from gensim.models.word2vec import Word2Vec import numpy as np w2v = Word2Vec( vector_size=100, # 特征向量长度设为100维 min_count=3 # 过滤掉出现频率低于三次的词汇 ) ``` #### 构建词汇表 调用 `.build_vocab()` 方法读取整个语料库以建立词汇索引关系: ```python w2v.build_vocab(x) ``` #### 开始训练过程 通过`.train()`函数启动迭代更新权重的过程,期间指定总的样本数量以及循环轮次数目(epochs): ```python w2v.train( x, total_examples=w2v.corpus_count, epochs=20 # 设定训练周期数为20次 ) ``` 上述代码片段展示了如何使用Gensim库轻松地完成从零开始构建自己的Word2Vec模型的任务[^2]。 ### 关键概念解析 在深入理解Word2Vec的工作原理之前,有必要先熟悉几个核心术语和技术细节,例如神经网络架构的选择(CBOW vs Skip-Gram),优化算法(Hierarchical Softmax 或 Negative Sampling)等等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值