精华内容
下载资源
问答
  • 词袋模型和词向量模型

    万次阅读 多人点赞 2016-06-05 19:47:44
    本文简要介绍了词袋模型、词向量模型的原理和应用。

    在自然语言处理和文本分析的问题中,词袋(Bag of Words, BOW)和词向量(Word Embedding)是两种最常用的模型。更准确地说,词向量只能表征单个词,如果要表示文本,需要做一些额外的处理。下面就简单聊一下两种模型的应用。

    所谓BOW,就是将文本/Query看作是一系列词的集合。由于词很多,所以咱们就用袋子把它们装起来,简称词袋。至于为什么用袋子而不用筐(basket)或者桶(bucket),这咱就不知道了。举个例子:

                       文本1:苏宁易购/是/国内/著名/的/B2C/电商/之一

    这是一个短文本。“/”作为词与词之间的分割。从中我们可以看到这个文本包含“苏宁易购”,“B2C”,“电商”等词。换句话说,该文本的的词袋由“苏宁易购”,“电商”等词构成。就像这样:

    但计算机不认识字,只认识数字,那在计算机中怎么表示词袋模型呢?其实很简单,给每个词一个位置/索引就可以了。例如,我们令“苏宁易购”的索引为0,“电商”的索引为1,其他以此类推。则该文本的词袋就变成了:

    是的,词袋变成了一串数字的(索引)的集合。这样计算机就能读懂了。如果用程序来描述的话,就会像:Set<int>(0,1,2…)。当然,刚才的例子中像“苏宁易购”等词只出现了一次,如果出现多次,可能就需要支持重复元素的容器了,如Java/C++中的MultiSet。

    可是,在实际的应用中(如:文本的相似度计算),用刚才说的容器是非常不方便的(如果要用,需要额外用Map容器来存储一本字典来表征词和索引的映射关系)。因此我们考虑用更简单的数据结构来组织词袋模型。既然刚才说词是用数字(索引)来表示的,那自然我们会想到数组。例如:

             Intwords[10000] = {1,20,500,0,……}

                                         索引:{0,1,2,3,……}

                                         词:   {苏宁易购,是,国内,B2C,……}

    数组的下标表示不同的词,数组中的元素表示词的权重(如:TF,TF-IDF)。更为一般的,词的索引可以用词的HashCode来计算,即:Index(苏宁易购) = HashCode(苏宁易购)。将词散列到数组的某个位置,并且是固定的(理论上会有冲突,需要考虑冲突的问题)。因此,HashCode这个函数起到了字典的作用。转化成了数组,接下来计算余弦相似度啥的就好办多了。这就是词袋模型。

    下面讲讲词向量模型。实际上,单个词的词向量不足以表示整个文本,能表示的仅仅是这个词本身。往往,这个词向量是个高维的向量(几万甚至几十万)。先不说它是如何得到的,单说它的应用应该是很广泛的。再举文本相似度的例子,既然词可以用一串数字表示,那么自然可以用余弦相似度或欧式距离计算与之相近的词。这样,词的聚类什么的都可以做了。那长文本怎么办呢?一个简单的办法是把这个文本中包含的词的词向量相加。这样长文本也就表示成了一串数字。可是这种处理方法总让我们觉得怪怪的。看到过有同学做的测试,当文本只有十几个字的时候,这种处理方法还算凑合,字多了,结果就很难看了。至于词向量是怎么获得,咱下回再说。目前word2vec有多种版本可供大家使用。至于像doc2vec,sentence2vec的效果还有待评估。

    展开全文
  • 转自:[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型 阅读目录 1. 词向量 2.Distributed representation词向量表示 3.词向量模型 4.word2vec算法思想 5.doc2vec算法...

    转自:[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

      深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢?

      引用三年前一位网友的话来讲:

      “Steve Renals算了一下icassp录取文章题目中包含deep learning的数量,发现有44篇,而naacl则有0篇。有一种说法是,语言(词、句子、篇章等)属于人类认知过程中产生的高层认知抽象实体,而语音和图像属于较为底层的原始输入信号,所以后两者更适合做deep learning来学习特征。

      实际上,就目前而言,Deep Learning 在 NLP 领域中的研究已经将高深莫测的人类语言撕开了一层神秘的面纱。其中最有趣也是最基本的,就是“词向量”了。

    1. 词向量

      自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化。
      NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。
      举个栗子,
      “话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 …]
      “麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 …]
      每个词都是茫茫 0 海中的一个 1。
      这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。
      当然这种表示方法也存在一个重要的问题就是“词汇鸿沟”现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,哪怕是话筒和麦克这样的同义词也不能幸免于难。此外,这种表示方法还容易发生维数灾难,尤其是在Deep Learning相关的一些应用中。

    2.Distributed representation词向量表示

      既然上述这种易于理解的One-hot Representation词向量表示方式具有这样的重要缺陷,那么就需要一种既能表示词本身又可以考虑语义距离的词向量表示方法,这就是我们接下来要介绍的Distributed representation词向量表示方法。

      Distributed representation 最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子:

    [0.792, −0.177, −0.107, 0.109, −0.542, …]

      维度以 50 维和 100 维比较常见,当然了,这种向量的表示不是唯一的。
      Distributed representation 最大的贡献就是让相关或者相似的词,在距离上更接近了(看到这里大家有没有想到普通hash以及simhash的区别呢?有兴趣的同学请见博客《[Algorithm] 使用SimHash进行海量文本去重》)。向量的距离可以用最传统的欧氏距离来衡量,也可以用 cos 夹角来衡量。用这种方式表示的向量,“麦克”和“话筒”的距离会远远小于“麦克”和“天气”。可能理想情况下“麦克”和“话筒”的表示应该是完全一样的,但是由于有些人会把英文名“迈克”也写成“麦克”,导致“麦克”一词带上了一些人名的语义,因此不会和“话筒”完全一致。

      将 word映射到一个新的空间中,并以多维的连续实数向量进行表示叫做“Word Represention” 或 “Word Embedding”。自从21世纪以来,人们逐渐从原始的词向量稀疏表示法过渡到现在的低维空间中的密集表示。用稀疏表示法在解决实际问题时经常会遇到维数灾难,并且语义信息无法表示,无法揭示word之间的潜在联系。而采用低维空间表示法,不但解决了维数灾难问题,并且挖掘了word之间的关联属性,从而提高了向量语义上的准确度。

    3.词向量模型

      a)  LSA矩阵分解模型

      采用线性代数中的奇异值分解方法,选取前几个比较大的奇异值所对应的特征向量将原矩阵映射到低维空间中,从而达到词矢量的目的。

      b)  PLSA 潜在语义分析概率模型

      从概率学的角度重新审视了矩阵分解模型,并得到一个从统计,概率角度上推导出来的和LSA相当的词矢量模型。

      c)  LDA 文档生成模型

      按照文档生成的过程,使用贝叶斯估计统计学方法,将文档用多个主题来表示。LDA不只解决了同义词的问题,还解决了一次多义的问题。目前训练LDA模型的方法有原始论文中的基于EM和 差分贝叶斯方法以及后来出现的Gibbs Samplings 采样算法。

      d)  Word2Vector 模型

      最近几年刚刚火起来的算法,通过神经网络机器学习算法来训练N-gram 语言模型,并在训练过程中求出word所对应的vector的方法。本文将详细阐述此方法的原理。

    4.word2vec算法思想

      什么是word2vec?你可以理解为word2vec就是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似

      Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。如果换个思路, 把词当做特征,那么Word2vec就可以把特征映射到 K 维向量空间,可以为文本数据寻求更加深层次的特征表示 。

      Word2vec 使用的词向量不是我们上述提到的One-hot Representation那种词向量,而是 Distributed representation 的词向量表示方式。其基本思想是 通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度.其采用一个 三层的神经网络 ,输入层-隐层-输出层。有个核心的技术是 根据词频用Huffman编码 ,使得所有词频相似的词隐藏层激活的内容基本一致,出现频率越高的词语,他们激活的隐藏层数目越少,这样有效的降低了计算的复杂度。而Word2vec大受欢迎的一个原因正是其高效性,Mikolov 在论文中指出,一个优化的单机版本一天可训练上千亿词。

      这个三层神经网络本身是 对语言模型进行建模 ,但也同时 获得一种单词在向量空间上的表示 ,而这个副作用才是Word2vec的真正目标。

      与潜在语义分析(Latent Semantic Index, LSI)、潜在狄立克雷分配(Latent Dirichlet Allocation,LDA)的经典过程相比,Word2vec利用了词的上下文,语义信息更加地丰富。

      Word2Vec实际上是两种不同的方法:Continuous Bag of Words (CBOW) 和 Skip-gram。CBOW的目标是根据上下文来预测当前词语的概率。Skip-gram刚好相反:根据当前词语来预测上下文的概率(如下图所示)。这两种方法都利用人工神经网络作为它们的分类算法。起初,每个单词都是一个随机 N 维向量。经过训练之后,该算法利用 CBOW 或者 Skip-gram 的方法获得了每个单词的最优向量。

      取一个适当大小的窗口当做语境,输入层读入窗口内的词,将它们的向量(K维,初始随机)加和在一起,形成隐藏层K个节点。输出层是一个巨大的二叉 树,叶节点代表语料里所有的词(语料含有V个独立的词,则二叉树有|V|个叶节点)。而这整颗二叉树构建的算法就是Huffman树。这样,对于叶节点的 每一个词,就会有一个全局唯一的编码,形如"010011",不妨记左子树为1,右子树为0。接下来,隐层的每一个节点都会跟二叉树的内节点有连边,于是 对于二叉树的每一个内节点都会有K条连边,每条边上也会有权值。

     

      对于语料库中的某个词w_t,对应着二叉树的某个叶子节点,因此它必然有一个二进制编码,如"010011"。在训练阶段,当给定上下文,要预测后 面的词w_t的时候,我们就从二叉树的根节点开始遍历,这里的目标就是预测这个词的二进制编号的每一位。即对于给定的上下文,我们的目标是使得预测词的二 进制编码概率最大。形象地说,我们希望在根节点,词向量和与根节点相连经过 logistic 计算得到 bit=1 的概率尽量接近 0,在第二层,希望其 bit=1 的概率尽量接近1,这么一直下去,我们把一路上计算得到的概率相乘,即得到目标词w_t在当前网络下的概率P(w_t),那么对于当前这个 sample的残差就是1-P(w_t),于是就可以使用梯度下降法训练这个网络得到所有的参数值了。显而易见,按照目标词的二进制编码计算到最后的概率 值就是归一化的。

      Hierarchical Softmax用Huffman编码构造二叉树,其实借助了分类问题中,使用一连串二分类近似多分类的思想。例如我们是把所有的词都作为输出,那么“桔 子”、“汽车”都是混在一起。给定w_t的上下文,先让模型判断w_t是不是名词,再判断是不是食物名,再判断是不是水果,再判断是不是“桔子”。

      但是在训练过程中,模型会赋予这些抽象的中间结点一个合适的向量,这个向量代表了它对应的所有子结点。因为真正的单词公用了这些抽象结点的向量,所 以Hierarchical Softmax方法和原始问题并不是等价的,但是这种近似并不会显著带来性能上的损失同时又使得模型的求解规模显著上升。

      没有使用这种二叉树,而是直接从隐层直接计算每一个输出的概率——即传统的Softmax,就需要对|V|中的每一个词都算一遍,这个过程时间复杂 度是O(|V|)的。而使用了二叉树(如Word2vec中的Huffman树),其时间复杂度就降到了O(log2(|V|)),速度大大地加快了。

      现在这些词向量已经捕捉到上下文的信息。我们可以利用基本代数公式来发现单词之间的关系(比如,“国王”-“男人”+“女人”=“王后”)。这些词向量可 以代替词袋用来预测未知数据的情感状况。该模型的优点在于不仅考虑了语境信息还压缩了数据规模(通常情况下,词汇量规模大约在300个单词左右而不是之前 模型的100000个单词)。因为神经网络可以替我们提取出这些特征的信息,所以我们仅需要做很少的手动工作。但是由于文本的长度各异,我们可能需要利用 所有词向量的平均值作为分类算法的输入值,从而对整个文本文档进行分类处理。

    5.doc2vec算法思想

      然而,即使上述模型对词向量进行平均处理,我们仍然忽略了单词之间的排列顺序对情感分析的影响。即上述的word2vec只是基于词的维度进行"语义分析"的,而并不具有上下文的"语义分析"能力。

      作为一个处理可变长度文本的总结性方法,Quoc Le 和 Tomas Mikolov 提出了 Doc2Vec方法。除了增加一个段落向量以外,这个方法几乎等同于 Word2Vec。和 Word2Vec 一样,该模型也存在两种方法:Distributed Memory(DM) 和 Distributed Bag of Words(DBOW)。DM 试图在给定上下文和段落向量的情况下预测单词的概率。在一个句子或者文档的训练过程中,段落 ID 保持不变,共享着同一个段落向量。DBOW 则在仅给定段落向量的情况下预测段落中一组随机单词的概率。

      以下内容摘自语义分析的一些方法(中篇)

      先看c-bow方法,相比于word2vec的c-bow模型,区别点有:

    • 训练过程中新增了paragraph id,即训练语料中每个句子都有一个唯一的id。paragraph id和普通的word一样,也是先映射成一个向量,即paragraph vector。paragraph vector与word vector的维数虽一样,但是来自于两个不同的向量空间。在之后的计算里,paragraph vector和word vector累加或者连接起来,作为输出层softmax的输入。在一个句子或者文档的训练过程中,paragraph id保持不变,共享着同一个paragraph vector,相当于每次在预测单词的概率时,都利用了整个句子的语义。
    • 在预测阶段,给待预测的句子新分配一个paragraph id,词向量和输出层softmax的参数保持训练阶段得到的参数不变,重新利用梯度下降训练待预测的句子。待收敛后,即得到待预测句子的paragraph vector。


      sentence2vec相比于word2vec的skip-gram模型,区别点为:在sentence2vec里,输入都是paragraph vector,输出是该paragraph中随机抽样的词。

      下面是sentence2vec的结果示例。先利用中文sentence语料训练句向量,然后通过计算句向量之间的cosine值,得到最相似的句子。可以看到句向量在对句子的语义表征上还是相当惊叹的。


     

    6.参考内容

      1. word2vec官方地址:Word2Vec Homepage

      2. python版本word2vec实现:gensim word2vec

      3. python版本doc2vec实现:gensim doc2vec

      4. 情感分析的新方法——基于Word2Vec/Doc2Vec/Python

      5. 练数成金:语义分析的一些方法(中篇)

      6. 王琳 Word2vec原理介绍

     

    展开全文
  • 详解GloVe词向量模型

    千次阅读 多人点赞 2019-08-04 21:26:52
      词向量表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。   word2vector中的skip-gram模型是...

      词向量的表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。
      word2vector中的skip-gram模型是利用类似于自动编码的器网络以中心词的one-hot表示作为输入来预测这个中心词环境中某一个词的one-hot表示,即先将中心词one-hot表示编码然后解码成环境中某个词的one-hot表示(多分类模型,损失函数用交叉熵)。CBOW是反过来的,分别用环境中的每一个词去预测中心词。尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,斯坦福的GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,成功利用语料库的全局信息。

    1. 共现概率

    什么是共现?
      单词 i i i出现在单词 j j j的环境中(论文给的环境是以 j j j为中心的左右10个单词区间)叫共现。

    什么是共现矩阵?
      单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。
      例如,有语料如下:
      I like deep learning.
      I like NLP.
      I enjoy flying.
      我以窗半径为1来指定上下文环境,则共现矩阵就应该是[2]
    共现矩阵
      取 x 01 x_{01} x01解释:它表示 l i k e like like出现在 I I I的环境( I l i k e I like Ilike区间)中的次数(在整个语料库中的总计次数),此处应当为2次,故第一行第二列应当填2。还应当发现,这个共现矩阵它是对称阵,因为 l i k e like like出现在 I I I的环境中,那么必然 I I I也会出现在 l i k e like like的环境中,所以 x 10 x_{10} x10=2。
      共现矩阵它有以下3个特点:
      ·统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。
      ·共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。
      ·共现矩阵它是对称的。

    共现矩阵的生成步骤:
      · 首先构建一个空矩阵,大小为 V × V V ×V V×V,即词汇表×词汇表,值全为0。矩阵中的元素坐标记为 ( i , j ) (i,j) (i,j)
      · 确定一个滑动窗口的大小(例如取半径为m)
      · 从语料库的第一个单词开始,以1的步长滑动该窗口,因为是按照语料库的顺序开始的,所以中心词为到达的那个单词即 i i i
      · 上下文环境是指在滑动窗口中并在中心单词 i i i两边的单词(这里应有2m-1个 j j j)。
      · 若窗口左右无单词,一般出现在语料库的首尾,则空着,不需要统计。
      · 在窗口内,统计上下文环境中单词 j j j出现的次数,并将该值累计到 ( i , j ) (i,j) (i,j)位置上。
      · 不断滑动窗口进行统计即可得到共现矩阵。

    什么是叫共现概率?
      我们定义 X X X为共现矩阵,共现矩阵的元素 x i j x_{ij} xij为词 j j j出现在词 i i i环境的次数,令 x i = ∑ k x i k x_i=\sum_kx_{ik} xi=kxik为任意词出现在 i i i的环境的次数(即共现矩阵行和),那么, P i j = P ( j ∣ i ) = x i j x i P_{ij}=P(j|i)={x_{ij}\over x_{i}} Pij=P(ji)=xixij
      为词 j j j出现在词 i i i环境中的概率(这里以频率表概率),这一概率被称为词 i i i和词 j j j的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

    2. 共现概率比

      接下来阐述为啥作者要提共现概率和共现概率比这一概念。下面是论文中给的一组数据:
    共现概率比
      先看一下第一行数据,以 i c e ice ice为中心词的环境中出现 s o l i d solid solid固体的概率是大于 g a s 、 f a s h i o n gas、fashion gasfashion的而且是小于 w a t e r water water的,这是很合理的,对吧!因为有 i c e ice ice的句子中出现 s o l i d 、 w a t e r solid、water solidwater的概率确实应当比 g a s 、 f a s h i o n gas、fashion gasfashion大才对,实验数据也说明的确是如此。同理可以解释第二行数据。我们来重点考虑第三行数据:共现概率比。我们把共现概率进行一比,我们发现:
      1.看第三行第一列:当 i c e ice ice的语境下共现 s o l i d solid solid的概率应该很大,当 s t r e a m stream stream的语境下共现 s o l i d solid solid的概率应当很小,那么比值就>1。
      2.看第三行第二列:当 i c e ice ice的语境下共现 g a s gas gas的概率应该很小,当 s t r e a m stream stream的语境下共现 g a s gas gas的概率应当很大,那么比值就<1。
      3.看第三行第三列:当 i c e ice ice的语境下共现 w a t e r water water的概率应该很大,当 s t r e a m stream stream的语境下共现 w a t e r water water的概率也应当很大,那么比值就近似=1。
      4.看第三行第四列:当 i c e ice ice的语境下共现 f a s h i o n fashion fashion的概率应该很小,当 s t r e a m stream stream的语境下共现 f a s h i o n fashion fashion的概率也应当很小,那么比值也是近似=1。
      因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。

    3. 设计词向量函数

      想要表达共现概率比,这里涉及到的有三个词即 i , j , k i,j,k i,j,k,它们对应的词向量我用 v i 、 v j 、 v ~ k v_i、v_j、\widetilde{v}_k vivjv k表示,那么我们需要找到一个映射 f f f,使得 f ( v i , v j , v ~ k ) = P i k P j k f(v_i,v_j,\widetilde{v}_k)={P_{ik}\over P_{jk}} f(vi,vj,v k)=PjkPik (1)。前面我说过,任意两个词的共现概率可以用语料库事先统计计算得到,那这里的给定三个词,是不是也可以确定共现概率比啊。这个比值可以作为标签,我们可以设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为 l o s s loss loss。明显地,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。
      我们可以发现公式(1)等号右侧结果是个标量,左边是个关于向量的函数,如何将函数变成标量。于是作者这么设计: f ( ( v i − v j ) T v ~ k ) = P i k P j k f((v_i-v_j)^T\widetilde{v}_k)={P_{ik}\over P_{jk}} f((vivj)Tv k)=PjkPik (2)即向量做差再点积再映射到目标。再次强调,这只是一种设计,它可能不是那么严谨,合理就行。于是乎:
    在这里插入图片描述
      于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。于是作者这样设计损失函数: J = ∑ i = 1 N ∑ j = 1 N f ( x i j ) ( v i T v ~ j + b i + b j − l o g ( x i j ) ) 2 J=\sum_{i=1}^{N}\sum_{j=1}^{N}f(x_{ij})(v_i^T\widetilde{v}_j+b_i+b_j-log(x_{ij}))^2 J=i=1Nj=1Nf(xij)(viTv j+bi+bjlog(xij))2
      这里用的是误差平方和作为损失值,其中N表示语料库词典单词数。它这里在误差平方前给了一个权重函数 f ( x i j ) f(x_{ij}) f(xij),这个权重是用来控制不同大小的共现次数( x i j x_{ij} xij)对结果的影响的。作者是这么设计这个权重函数的:
    权重函数
    在这里插入图片描述
      也就是说词对儿共现次数越多的它有更大的权重将被惩罚得更厉害些,次数少的有更小的权重,这样就可以使得不常共现的词对儿对结果的贡献不会太小,而不会过分偏向于常共现的词对儿。此外,当 x i j x_{ij} xij=0时,加入了这个权重函数此时该训练样本的损失直接为0,从而避免了 l o g ( x i j ) log(x_{ij}) log(xij)为无穷小导致损失值无穷大的问题。

    4. GloVe模型算法

      最后,关于glove模型算法,大致是这样的:从共现矩阵中随机采集一批非零词对作为一个mini-batch的训练数据;随机初始化这些训练数据的词向量以及随机初始化两个偏置;然后进行内积和平移操作并与 l o g ( x i j ) log(x_{ij}) log(xij)计算损失值,计算梯度值;然后反向传播更新词向量和两个偏置;循环以上过程直到结束条件。论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。

    reference:
    [1] 来b站搞学习
    [2] https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1184/lectures/midterm-review.pdf
    [3] GloVe论文
    [4] glove开源代码

    展开全文
  • 自然语言词向量模型:Glove和Bert

    千次阅读 2019-06-30 23:13:58
    自然语言预训练模型:Glove和Bert1. 词向量模型2....这里面有些是“一揽子”表示的词向量模型,如word2vec、glove,是用一个固定的向量表示一个具体的token(单词)。这样的好处是简单且易于使用,预训练完...

    自然语言预训练模型:Glove和Bert

    1. 词向量模型

    词向量模型包括:word2vec、glove、fastText、elmo、GPT和bert、xlnet等。
    这里面有些是“一揽子”表示的词向量模型,如word2vec、glove,是用一个固定的向量来表示一个具体的token(单词)。这样的好处是简单且易于使用,预训练完词向量之后可以直接通过查“词典”来使用,但是缺点也很明显,比如一词多义怎么办?一个token只有一个固定的向量。
    另一些则是需要在句子中才能将词向量具体化,比如bert和xlnet。这样词向量就不是一个具体的词向量了,在不同的语境中一个单词可以有不同的意思。缺点是比较消耗资源,太贵。

    2. Glove

    Glove的用法和word2vec相似,可以直接从网站上下载Glove已经训练好的“词典”,也可以单独训练自己的语料库。glove官方的训练代码是c语言写的,用起来也不难,不需要懂很多c语言的知识,训练完成后再用其他语言进行调用就行,因为“查词典”的解决方案还是很easy的。
    glove的理解分为两步(共现矩阵、尽量靠近共现矩阵的词向量表示公式):
    在这里插入图片描述
    在这里插入图片描述

    bert模型

    bert模型是 transformer 模型里的多个 encoder 堆叠而成 ,通过预测15%的MASK来达到无监督训练的目的。bert模型比较复杂,由于编者水平有限,难以在一篇博文中把想要表达的知识点全都讲完,因此提供了一个系统性理解 bert 模型的思路步骤,希望能帮到大家理解 bert,以及更新的 xlnet 模型:
    1)seq2seq with attention
    2)Transformer
    3)bert

    bert模型的使用

    基本上90%以上的人都只使用fine-tuning,因为pre-trained实在是太消耗资源了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    参考资料

    https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
    https://jalammar.github.io/illustrated-transformer/
    https://jalammar.github.io/illustrated-bert/

    展开全文
  • 向量2.Distributed representation词向量表示3.词向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习...
  • 向量模型扩展

    千次阅读 2017-12-14 12:38:21
    到one-hot方式,将用一个词表大小的向量表示,有且仅有一个位置为1,其余为0,即下标index等同于id,如:词袋模型(BOW bag of words);再到如今的分布式表示,采用一个k维的向量,每一个维度都是一个double(float...
  • 此模型既可以用于训练词向量,也可以将句子表示成句子向量,质量都比较高
  • 向量模型(1)

    千次阅读 2018-08-14 09:55:59
    向量模型 one-hot Vector one-hot vector 最简单的编码方式:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0。 问题 这种词向量编码...
  • 它的基本内容是词以及它们的向量表示,即将词映射为对应的向量,这样就可以被计算机识别和计算。它的文件后缀名是.bin。过程 分词 即将文本分词,分词工具有很多,比如哈工大的分词工具和结巴分词工具,具体如何...
  • 向量 (module) 范数(norm)

    千次阅读 2019-02-14 16:52:46
    2,在空间几何中(经常是2或3维空间),常用表示向量的长度或两个向量间的距离,符号为||x⃗\vec{x}x||。 例子: 在二维空间中有两个向量:x⃗=(1,2),y⃗=(2,3)\vec{x}=(1,2),\vec{y}=(2,3)x=(1,2),y​=(2,3)...
  • 既然上述这种易于理解的One-hot Representation词向量表示方式具有这样的重要缺陷,那么就需要一种既能表示词本身又可以考虑语义距离的词向量表示方法,这就是我们接下来要介绍的Distributed representation词向量...
  • 向量 向量表示

    千次阅读 2009-06-01 17:28:00
    向量 向量表示 向量 在初中课改教材初三课本中学习数量的定义 中,把只有大小但没有方向的量叫做数量(或纯量),物理中常称为标量。向量的定义 既有大小又有方向的量叫做向量(亦称矢(shi 3声)量)。 注:...
  • 空间向量模型和tf-idf

    千次阅读 2017-09-21 16:56:00
    向量空间模型是一个把文本文件表示为标识符(比如索引)向量的代数模型,它应用于信息过滤、信息检索、索引以及相关排序。 1 定义 文档和查询都用向量表示: 每一维都对应于一个个别的词组。如果某个词组...
  • 典型的使用场景就是把高质量的词向量输入到的模型中,通过后续的一系列计算,去完成相应的任务。比如文本分类,文本匹配等等。 说到高质量的词向量,这里要给出一个名词:预训练。土豪公司利用大量数据、构造复杂...
  • 3.1 向量和单位向量

    千次阅读 2020-08-25 16:50:30
    向量的长度() u=(3,4) 该向量的大小是多少? ||u|| = 5 二范数、欧拉距离 在二维空间中,可以直接根据勾股定理计算出。 u=OP=(2,3,5) 该向量的大小是多少? n维向量 同理。 单位向量向量上记^为单位...
  • C++向量类模板

    千次阅读 多人点赞 2020-01-27 17:47:51
    C++向量类模板 向量(vector)时一种随机访问的数组类型,提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机的删除和插入操作...表示向量的类型,v表示向量名。 vector对象主要成员函数说明: 只是一些常...
  • 字和词语联合训练的词向量模型

    万次阅读 2017-10-03 15:50:01
    今天又读了一篇刘知远老师团队2015年在顶会Ijcai上发表的论文《Joint Learning of Character and Word Embeddings》,同样是有关于在词向量生成部分进行了改进,引入了词语组成成分的单个汉字的信息(论文主要针对的...
  • 向量模型(word2vec) 详解

    千次阅读 多人点赞 2019-01-16 12:49:28
    觉得挺有意思,于是做了一个实现(可参见[20]),但苦于其中字向量的训练时间太长,便选择使用 word2vec 来提供字向量,没想到中文分词效果还不错,立马对 word2vec 刮目相看了一把,好奇心也随之增长。 后来,...
  • 关于向量向量的范数的理解

    万次阅读 多人点赞 2018-08-15 10:15:08
    向量   含义 向量 的长度叫做向量,记作 ,也就是向量 的大小 计算公式 对于向量 属于n维复向量空间 =(x1,x2,…,xn) 的为 =  向量的范数  范数,在机器学习中通常用于衡量一个向量的大小...
  • 向量及语言模型

    万次阅读 2018-06-21 10:23:24
    一、词向量向量(word embedding):词的向量表征。...词向量表示方法:1)one-hot vector:将所有单词排序,排序之后每个单词就会有一个位置,然后用一个与单词数量等长的数组表示某单词,该单词所...
  • 向量表示及协方差矩阵

    万次阅读 多人点赞 2014-01-13 20:26:05
    面对的数据被抽象为一组向量,那么有必要研究一些向量的数学性质。而这些数学性质将成为PCA的理论基础。向量运算:内积。两个维数相同的向量的内积被定义为: (a1,a2,⋯,an)T⋅(b1,b2,⋯,bn)T=a1b1+a2b2+⋯+anbn 内...
  • 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介
  • 词的向量表示

    千次阅读 2017-04-24 22:07:05
    为什么使用向量表示词但是在NLP中,传统方法通常是把词转换为离散的不可分割的符号,这导致很难利用不同的词之间的关系(所有的单词之间的距离都一样),例如dog:id143,cat:id537,这使得我们需要更多的数据来...
  • matlab向量

    万次阅读 2019-11-09 11:33:08
    MATLAB中需要采按照下述步骤进行向量的计算: 采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素是向量的元素的平方和V. sv = v.*v; 使用求和函数得到 v。这也被称为矢量的点积...
  • 2.4.2平面向量数量积的坐标表示、夹角.doc
  • 平面向量数量积的坐标表示模夹角练习[精选].doc
  • 向量表示和句向量、文章向量计算方法 本文介绍一种计算句向量和文章向量的方法及参考代码,自然语言处理的第一步即是要进行文本的向量化,包括获得词向量,句向量或者文章向量,以便输入各种机器学习模型或者深度...
  • Doc2Vec句向量模型PV-DM与PV-DBOW的理解

    千次阅读 2018-09-26 12:01:02
    在我们的句(Paragraph)向量模型中,每一个句子都被映射成一个独立的向量,这个句向量作为矩阵 的一列;同时,每一个词也被映射成一个独立的向量,这个词向量作为矩阵 的一列。对这个句向量和这些词向量求平均或者...
  • 文本的向量表示总结

    千次阅读 2019-03-10 23:02:11
    几种文本特征向量化方法 1.词集模型:one-hot编码向量化文本(统计各词在文本中是否出现) 2.词袋模型:文档中出现的词对应的one-hot向量相加(统计各词在文本中出现次数,在词集模型的基础上。) 3.词袋模型+IDF...
  • 向量和范数

    万次阅读 2016-11-03 17:17:22
    向量 向量的大小(或长度)叫做向量,记作||。 平面向量=(x,y),长是: 空间向量= (x,y,z),长是: 对于向量属于n维复向量空间=(x1,x2…,xn),的为‖‖=sqrt((x,x*))(x与x共轭的内积再开方...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,889
精华内容 83,155
关键字:

向量的模怎么表示