本站提倡有节制游戏,合理安排游戏时间,注意劳逸结合。

【易语言 取网页源码】【活动申请源码】【dx工具源码】cbow模型源码

2024-12-27 04:23:40 来源:知识 分类:知识

1.负采样(negative sampling)
2.Word2vec原理详细解读
3.NLP总结之word2vec
4.论文|万物皆可Vector之Word2vec:2个模型、模型2个优化及实战使用
5.One-hot与Word2Vec
6.CBOW(连续词袋模型)简介

cbow模型源码

负采样(negative sampling)

       负采样是源码word2vec优化方法中的关键策略,它针对未优化的模型CBOW模型中的计算瓶颈提出了创新解决方案。在原始模型中,源码每个词的模型预测需要与词汇表中所有词的词向量进行点乘,这导致了极大的源码易语言 取网页源码计算量。分层softmax通过减少不必要的模型点乘次数,提高了效率,源码但仍然保留了所有词的模型概率计算。

       负采样则更进一步,源码它通过随机选取部分词向量进行点乘,模型而不是源码全部。这样,模型尽管不能直接进行softmax,源码但引入了一个解耦机制,模型使得每个词的概率可以独立计算。具体来说,给定(context(w), w)这对样本,网络输出w的概率计算如下:

       概率[公式] 由[公式] 的点乘相似度决定,相似度越大,概率越高。负采样的活动申请源码目标是让与w相关的[公式] 的概率增大,同时尽可能降低与w不相关的[公式] 的概率。

       样本的损失函数[公式] 和总体损失[公式] 中,C代表预料库,负采样模型通过这样的设计,有效地降低了计算复杂性,实现了“负样本”的精确控制,即在保证预测目标词概率的同时,降低非目标词的干扰。

       总结起来,“负采样”这个名字的含义在于其采样策略和“负”目标的双重作用。它通过对词向量进行有选择的计算,既提高了模型的效率,又确保了目标词预测的准确性。

Word2vec原理详细解读

       Softmax函数:

        哈夫曼树(Huffman Tree)

            ä»Žå›¾1可以看出Skip-gram就是用当前中心词 (banking)预测附近的词,图1中将窗口大小设为2,即需要预测左边的2个词和右边的2个词。

             å¯¹äºŽæ¯ä¸ªä½ç½® ,预测窗口大小为 的上下文,设当前中心词为 ,那么目标为最大化:

                                                                                       (1)

        其中 为模型的参数。

             ä¸ºäº†å°†æœ€å¤§åŒ–转为最小化,可对 取负数,为了简化计算,可取对数:

                                       (2)  

              现在问题的关键是如何计算 ,我们使用两个向量表示: 为中心词的表示, 为上下文词的表示。那么,计算中心词 c 和上下文词 o 的出现概率为:

                                                                                               (3)

        其中,V为整个词表大小, 为中心词向量表示。其实式3就是softmax函数。

              图2展示了Skip-gram的计算过程,从图中可以看出Skip-gram预测的是 , , ,由于只预测前后两个单词,因此窗口大小为2。

        输入层到隐藏层 :输入层的中心词 用one-hot向量表示(维度为V*1,V为整个词表大小),输入层到隐藏层的权重矩阵为中心词矩阵W(维度为V*d,d为词向量维度),设隐含向量为 (维度为d*1),那么:

                                                                                                                     (4)

        隐藏层到输出层: 隐藏层到输出层的上下文权重矩阵为U(维度为d*V),输出层为y(维度为V*1),那么:

                                                                                                  (5)

        注意 ,输出层的向量 y 与输出层的向量 虽然维度一样,但是 y 并不是one-hot向量,并且向量 y 的每一个元素都是有意义的。如,假设训练样本只有一句话”I like to eat apple”,此时我们正在使用eat去预测to,输出层结果如图3所示。

             å‘量y中的每个元素表示用 I、like、eat、apple 四个词预测出来的词是对应的词的概率,比如是like的概率为0.,是to的概率是0.。由于我们想让模型预测出来的词是to,那么我们就要尽量让to的概率尽可能的大,所以我们将式子(1)作为最大化函数。

       Continuous Bag-of-Words(CBOW),的计算示意图如图4所示。从图中可以看出,CBOW模型预测的是 ,由于目标词 只取前后的两个词,因此窗口大小为2。假设目标词 前后各取 个词,即窗口大小为 ,那么CBOW模型为:

                                 (6)

        输入层到隐藏层: 如图4所示,输入层为4个词的one-hot向量表示,分别为 , , , (维度都为V*1,V为整个词表大小),记输入层到隐藏层的上下文词的权重矩阵为W(维度为V*d,d是词向量维度),隐藏层的向量h(维度为d*1),那么:

                                                  (7)

        这里就是把各个上下文词的向量查找出来,再进行简单的加和平均。

        隐藏层到输出层: 记隐藏层到输出层的中心词权重矩阵为U(维度d*V),输出层的向量y(维度V*1),那么:

                                                                                                            (8)

        注意 ,输出层的向量 与输入层的 虽然维度一样,但是 并不是one-hot向量,并且向量 的每个元素都是有意义的。CBOW的目标是最大化函数:

             (9)

        由于softmax的分母部分计算代价很大,在实际应用时,一般采用层次softmax或者负采样替换掉输出层,降低计算复杂度。

        层次softmax(Hierarchical Softmax)是一棵哈夫曼树,树的叶子节点是训练文本中所有的词,非叶子节点是一个逻辑回归二分类器,每个逻辑回归分类器的参数都不同,分别用 表示,假定分类器的输入为向量h,记逻辑回归分类器输出的结果为 将向量h传递给节点的左孩子概率为 ,否则传递给节点的右孩子概率为 。重复这个传递流程直到叶子节点。

       ä»Žå›¾5和图6可以看出,我们就是将隐藏层的向量h直接传递到了层次softmax,层次softmax的复杂度为O(log(V)),层次softmax采样到每个词的概率如下:

        对于CBOW或者skip-gram模型,如果要预测的词是to,那么我们就让 尽量大,所以我们将任务转换成训练V-1个逻辑分类器。CBOW模型和skip-gram模型训练目标函数和之前形式一样,为:

                                                                     ()

          ()

        负采样实际上是采样负例来帮助训练的手段,其目的与层次softmax一样,是用来提升模型的训练速度。我们知道,模型对正例的预测概率是越大越好,模型对负例的预测概率是越小越好。负采样的思路就是根据某种负采样的策略随机挑选一些负例,然后保证挑选的这部分负例的预测概率尽可能小。所以,负采样策略是对模型的效果影响很大,word2vec常用的负采样策略有均匀负采样、按词频率采样等等。

        以“I like to eat apple”为例子,假设窗口的大小是2,当中心词为like时,即我们会用 I to 来预测like,所以在这里我们就认为(I,like)和(to,like)都是正例,而(I,apple)、(to,apple)就是负例,因为(I,apple)、(to,apple)不出现在当前正例中。用NEG(w)表示负样本,有:

                                                                           ()

                        ()

        这里的 是词*的中心词向量表示,h为隐藏层的输出向量。我们只需要最大化目标函数:

                              ()

        这个损失函数的含义就是让正例概率更大,负例的概率更小。

        以“I like to eat apple”为例子,假设窗口的大小是1,即我们会用 like 来预测 I to,所以在这里我们就认为(like,I)和(like,to)都是正例,而(like,apple)就是负例,因为(like,apple)不会出现在正例中。那么,对于给定的正样本(w,context(w))和采样出的负样本(w,NEG(w)),有:

                                                                                          ()

                                                                ()

        这里的 是词*的中心词向量表示,h为隐藏层的输出向量。我们只需要最大化目标函数:

                                                 ()

        word2vec常用的负采样策略有均匀负采样、按词频率采样等等。比较常用的采样方法是一元分布模型的3/4次幂。该方法中,一个词被采样的概率,取决于这个词在语料中的词频 ,其满足一元分布模型(Unigram Model).

                                                                                                 () 

        其中V为整个词表大小,    为词 的词频。

        至于为什么选择3/4呢?其实是由论文作者的经验所决定的。

        假设由三个词,,”我“,”和平“,”觊觎“ 权重分别为 0.9 ,0.,0.;经过3/4幂后:

        我: 0.9^3/4 = 0.

        和平:0.^3/4 = 0.

        觊觎:0.^3/4 = 0.

        对于”觊觎“而言,权重增加了4倍;”和平“增加3倍;”我“只有轻微增加。

        可以认为:在保证高频词容易被抽到的大方向下,通过权重3/4次幂的方式, 适当提升低频词、罕见词被抽到的概率 。如果不这么做,低频词,罕见词很难被抽到,以至于不被更新到对应的Embedding。

       Question&Answer

        Question1:  å¦‚图7中,skip-gram模型中,从隐藏层到输出层,因为使用权值共享,所以会导致输出的几个上下文词向量总是完全一样,但网络的目的是要去预测上下文会出现的词,而实际中给定中心词的情况下上下文的词会五花八门。怎么解释skip gram的这种输出形式?

        Answer1: 网络的目的不是要预测上下文会出现啥词,这只是一个fake task。实际上这个loss就是降不下来的,所以本来就不能用于真正预测上下文,而初衷也不是用于预测上下文,只是利用上下文信息去实现嵌入。

               å¦‚果你的W个句子都是”I really love machine learning and deep learning“,加上权值共享,结果就是给定machine以后,它输出really,love,learning,and这四个词的概率完全相同,这就意味着这四个词的词向量也是差不多的。正因为这样,语义相近的词,他们在空间上的映射才会接近。

        Question2 : Word2Vec哪个矩阵是词向量?

        Answer2: 如图7所示,中心词矩阵W,上下文矩阵W' 可以任意选一个作为词向量矩阵。但是,如果采用优化后(层次softmax)的模型,那么将不存在W',这种情况下只能选矩阵W。

       ä¸‰åƒå¤šå­—,码字不易,如果大家发现我有地方写得不对或者有疑问的,麻烦评论, 我会回复并改正 。对于重要问题,我会持续更新至 Question&Answer。

        参考:

        [1] skip-gram的关键术语与详细解释

        [2] 一篇浅显易懂的word2vec原理讲解

        [3] CSn:深度学习的自然语言处理(年冬季)p

        [4] Stanford  CSN: NLP with Deep Learning | Winter | Lecture 2 – Word Vectors and

        Word Senses

        [5] 关于skip gram的输出?

        [6] Le, Quoc V , and T. Mikolov . "Distributed Representationsof Sentences and Documents." ().

        [7] Mikolov, T. . "Distributed Representations of Words andPhrases and their Compositionality." Advances in Neural InformationProcessing Systems ():-.

        [8] Mikolov, Tomas , et al."Efficient Estimation of Word Representations in Vector Space." Computerence ().

        [9] Goldberg, Yoav , and O. Levy . "word2vec Explained:deriving Mikolov et al.'s negative-sampling word-embedding method." arXiv().

NLP总结之word2vec

       在NLP领域中,word2vec是一种广泛使用的模型,用于将文本中的单词转化为向量表示,以便于进行各种语言处理任务。它的两种主要形式分别是连续词袋模型(CBOW)和skip-gram模型。本文将详细介绍word2vec中的关键概念和算法原理。

       在word2vec中,每个单词都映射到一个固定维度的dx工具源码向量空间中,这使得机器可以理解单词之间的语义关系。以输入单词i为例,词表大小为6,包含单词{ i, love singing, in, the, sky}。在onehot表示中,输入i对应向量1,0,0,0,0,0,其他单词的onehot表示依次类推。

       模型由输入层、隐藏层和输出层构成。输入层包含与词表大小相同(6个)的神经元,激活函数用于将输入映射到隐藏层。假设隐藏层有3个神经元,因此映射矩阵W的维度为6x3。隐藏层到输出层的映射矩阵V的维度为3x6。通过矩阵乘法计算隐藏层和输出层的向量表示。

       使用向量的点积来计算输入单词i与其他单词之间的相似度,公式中涉及到了向量转置和矩阵乘法的概念。通过softmax函数对这些点积结果进行归一化,得到各个单词被预测为输入单词i的上下文的概率分布。

       在训练过程中,需要通过反向传播算法调整W和V矩阵的Libra源码下载权重,以最小化预测概率与实际目标值之间的差距。权重更新的具体方法参见相关文献。

       skip-gram模型是word2vec的另一种形式,它通过上下文单词预测中心词的方式进行训练。在skip-gram模型中,隐藏层到输出层的映射关系是通过softmax函数实现的,这需要计算大量词汇的概率分布,存在计算成本高的问题。为了解决这一问题,word2vec提出了分层softmax和负采样的优化方法。

       分层softmax通过构建一棵树结构来减少计算量,其中树的每个叶子节点表示一个词汇,通过树的路径可以估计词汇的概率。同时,负采样技术仅选择部分词汇进行训练,以减少计算负担。

       在实现word2vec的代码中,首先构建训练数据,然后基于上述原理训练模型。实现细节参考相关文献进行。

论文|万物皆可Vector之Word2vec:2个模型、facebook react 源码2个优化及实战使用

       万物皆可Vector系列将深入解析Word2vec,包括两个模型、优化方法及其实战应用。我们已分享了Efficient Estimation of Word Representations in Vector Space论文中的理论基础,接下来将详细介绍CBOW和skip-gram模型,以及hierarchical softmax和negative sampling的优化策略。

       CBOW模型通过上下文预测中心词,而skip-gram则是反向进行,通过输入词预测上下文。CBOW在只有一个上下文词时,输入向量经过隐藏层的权重矩阵计算,形成输出向量,通过归一化处理得出每个单词的概率。当有多词上下文时,损失函数相应调整。

       为了减少大规模训练的计算负担,word2vec引入了hierarchical softmax,利用霍夫曼树的结构简化输出层,以及negative sampling,通过负采样降低负样本计算量。Gensim库提供了Word2vec模型的使用方法,包括模型创建、参数设置和常见操作。

       想要了解更多实战技巧和案例,持续关注「搜索与推荐Wiki」,我们将在实践中分享更多细节。点击阅读原文,一起探索Word2vec的更多可能性。

       最后,如果你觉得内容有价值,请不要忘了点赞支持。搜索并关注我们的公众号搜索与推荐Wiki,与我们一起探索搜索和推荐技术的深度与广度!

One-hot与Word2Vec

       one-hot是文本向量化最常用的方法之一。

        1.1 one-hot编码

          什么是one-hot编码?one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。举个例子,假设我们有四个样本(行),每个样本有三个特征(列),如图:

        上图中我们已经对每个特征进行了普通的数字编码:我们的feature_1有两种可能的取值,比如是男/女,这里男用1表示,女用2表示。那么one-hot编码是怎么搞的呢?我们再拿feature_2来说明:

        这里feature_2 有4种取值(状态),我们就用4个状态位来表示这个特征,one-hot编码就是保证每个样本中的单个特征只有1位处于状态1,其他的都是0。

       å¯¹äºŽ2种状态、三种状态、甚至更多状态都是这样表示,所以我们可以得到这些样本特征的新表示:

        one-hot编码将每个状态位都看成一个特征。对于前两个样本我们可以得到它的特征向量分别为

        1.2 one-hot在提取文本特征上的应用

          one hot在特征提取上属于词袋模型(bag of words)。关于如何使用one-hot抽取文本特征向量我们通过以下例子来说明。假设我们的语料库中有三段话:

            我爱中国

            爸爸妈妈爱我

            爸爸妈妈爱中国

        我们首先对预料库分离并获取其中所有的词,然后对每个此进行编号:

            1 我; 2 爱; 3 爸爸; 4 妈妈;5 中国

        然后使用one hot对每段话提取特征向量:

        ;

        ;

        此我们得到了最终的特征向量为

            我爱中国  ->   1,1,0,0,1

            爸爸妈妈爱我  ->  1,1,1,1,0

            爸爸妈妈爱中国  ->  0,1,1,1,1

        优缺点分析

        优点:一是解决了分类器不好处理离散数据的问题,二是在一定程度上也起到了扩充特征的作用(上面样本特征数从3扩展到了9)

        缺点:在文本特征表示上有些缺点就非常突出了。首先,它是一个词袋模型,不考虑词与词之间的顺序(文本中词的顺序信息也是很重要的);其次,它假设词与词相互独立(在大多数情况下,词与词是相互影响的);最后,它得到的特征是离散稀疏的。

        sklearn实现one hot encode

        from sklearn import preprocessing 

        enc = preprocessing.OneHotEncoder()  # 创建对象enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  # 拟合array = enc.transform([[0,1,3]]).toarray()  # 转化print(array)

        1

        2

        3

        4

        5

        6

        word2vec得到词向量

        word2vec是如何得到词向量的?这个问题比较大。从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转换检查拼写错误等操作,如果是中文日语语料库你需要增加分词处理。这个过程其他的答案已经梳理过了不再赘述。得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。不得不说word2vec是个很棒的工具,目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Negative Sample与Hierarchical Softmax)。于是我主要理解word2vec如何将corpus的one-hot向量(模型的输入)转换成低维词向量(模型的中间产物,更具体来说是输入权重矩阵),真真切切感受到向量的变化,不涉及加速算法。

        1 Word2Vec两种模型的大致印象

        刚才也提到了,Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。

        CBOW模型根据中心词W(t)周围的词来预测中心词 

        Skip-gram模型则根据中心词W(t)来预测周围词

        抛开两个模型的优缺点不说,它们的结构仅仅是输入层和输出层不同。请看:

       CBOW模型 

       Skip-gram模型

        这两张结构图其实是被简化了的,读者只需要对两个模型的区别有个大致的判断和认知就ok了。接下来我们具体分析一下CBOW模型的构造,以及词向量是如何产生的。理解了CBOW模型,Skip-gram模型也就不在话下啦。

        2 CBOW模型的理解

        其实数学基础及英文好的同学可以参照 斯坦福大学Deep Learning for NLP课堂笔记 。

        当然,懒省事儿的童鞋们就跟随我的脚步慢慢来吧。

        先来看着这个结构图,用自然语言描述一下CBOW模型的流程:

        CBOW模型结构图

        (花括号内{ }为解释内容.)

        输入层:上下文单词的onehot. { 假设单词向量空间dim为V,上下文单词个数为C}

        所有onehot分别乘以共享的输入权重矩阵W. { V*N矩阵,N为自己设定的数,初始化权重矩阵W}

        所得的向量 { 因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N.

        乘以输出权重矩阵W’ { N*V}

        得到向量 { 1*V} 激活函数处理得到V-dim概率分布 { PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)

        与true label的onehot做比较,误差越小越好

        所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W’。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

        这回就能解释题主的疑问了!如果还是觉得我木有说明白,别着急!跟我来随着栗子走一趟CBOW模型的流程!

        3 CBOW模型流程举例

        假设我们现在的Corpus是这一个简单的只有四个单词的document: 

        { I drink coffee everyday} 

        我们选coffee作为中心词,window size设为2 

        也就是说,我们要根据单词”I”,”drink”和”everyday”来预测一个单词,并且我们希望这个单词是coffee。

        假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。

        在我的新闻分类中由于使用的是自带的多词训练出的embedding层而有多个词并不在里面所以效果没有达到最佳,值得改进

CBOW(连续词袋模型)简介

       探索深度:连续词袋模型(CBOW)的魅力与应用

       CBOW,全称为连续词袋模型,犹如一座语言学的宝藏,是神经网络世界里一颗璀璨的明珠。由天才科学家Tomas Mikolov等人在年首次揭示,它旨在通过巧妙地捕捉单词间的语义与语法联系,将每个单词转化为一维度的实数向量,为理解自然语言提供了全新的视角。

       核心理念:上下文预测的智慧

       CBOW的核心思想是基于上下文的预测。以"The cat climbed up the tree"为例,通过窗口大小为5,它关注的是"climbed"周围的"The", "cat", "up", 和 "the"。它的目标是利用这些邻居,精准计算出中心词的出现概率。这就像在语言的拼图中寻找缺失的一块,CBOW模型正是用数学的魔法拼凑出单词的完整含义。

       神经网络架构的精妙

       CBOW的神经网络设计巧妙地融合了上下文信息。它通过复制输入层到隐藏层的连接,根据上下文词的数量C,对隐藏层进行调整,确保每个目标词的上下文都被充分捕捉。这种设计使得模型能够在大规模数据中学习,生成高质量的词向量。

       训练过程与优化

       CBOW的训练目标是最大化给定上下文下中心词出现的概率,这就意味着最小化交叉熵损失函数。通过反向传播和随机梯度下降,模型不断调整参数,如权重矩阵W和U,从而生成富有语义的词向量。W通常比U更常用,因为它能更好地捕捉单词间的复杂联系。

       优缺点并论:平衡与挑战

       尽管CBOW模型在利用大规模数据、学习高效向量和捕捉复杂关系上表现出色,但也存在不足。它不考虑上下文的顺序,可能导致对低频词理解不准确。此外,大规模的训练数据和内存需求也是其需要面对的挑战。

       广泛应用:超越文字的力量

       然而,CBOW的力量远不止于此。生成的词向量被广泛应用于自然语言处理的各个领域,如文本分类、情感分析、机器翻译和问答系统。它们为这些任务注入了强大的语言理解力,提升了模型的性能和泛化能力,成为现代AI的得力助手。

       总结来说,CBOW模型以其独特的上下文预测方式和灵活的神经网络架构,为词汇的向量化处理带来了革命性的突破,它在深度学习的海洋中,书写着语言理解的新篇章。

word2vec算法原理与pytorch实现

       word2vec算法原理与PyTorch实现详解:

       word2vec是一种强大的工具,用于生成单词的分布式向量表示,以捕捉单词的语义和上下文信息。它基于两个模型:CBOW(连续词袋模型)和Skip-Gram。CBOW通过上下文预测中心词,而Skip-Gram则相反,通过中心词预测上下文。核心是通过神经网络(包括输入和输出Embedding矩阵)学习到单词之间的关系,减少计算量的方法包括Hierarchical Softmax和Negative Sampling。

       Negative Sampling通过采样少量负例单词(通常是中心词的非上下文词),将多分类问题转化为二分类,大大减少了计算复杂度。CBOW模型中,上下文词通过平均向量表示,与所有词的词向量做点积,目标是最大化与中心词的相似度。Skip-Gram模型对每个中心词的上下文词做类似操作。

       在PyTorch中,实现word2vec涉及数据准备、数据加载、模型构建(包括输入和输出Embedding)、Trainer类的创建以及模型训练。以PTB数据集为例,预处理后生成“上下文-中心词”对,然后使用Dataset类加载数据,训练时设置超参数如词向量维度、负采样数量等,最终得到单词向量并进行验证,如单词相似度和类比任务的测试。

       通过实际应用,word2vec成功捕捉了单词的词性、语义和语法信息,展现出强大的语言理解能力。

相关推荐
一周热点