• Word2Vec算法简介


    一.简介

      word2vec是Google在2003年开源的一款将词表征为实数值向量的高效算法,采用的模型有CBOW【Continuous Bag-Of-Words 连续的词袋模型】和Skip-Gram两种。

      word2vec通过训练,可以把文本内容的处理简化为k维向量空间中的向量运算,二向量空间上的相似度可以用来表示文本语义上的相似度。

    二.背景知识

      1.One-hot Representation

        NLP相关的任务中最常见的第一步是创建一个词表库并把每个词顺序编号。这实际就是词表示方法中的One-hot Representation,这种方法把每个词顺序编号,每个词就是一个很长的向量,向量的维度等于词表大小,一般采用稀疏编码存储,只有对应位置上的数字为1其它都为0。

        这种表示方法最大的问题是无法捕捉词与词之间的相似度,而且还容易发生维数灾难,尤其是在Deep Learning相关的一些应用中。

      2.Distributed Representation

        Distributed Representation 通过训练将每个词映射成k维实数向量【k一般为模型的超参数】,通过词之间的距离【比如:cosine相似度、欧式距离等】来判断它们之间的语义相似度。word2vec就是采用这种词向量表示方式。

    三.统计语言模型

      传统的统计语言模型是表示语言基本单位【一般为句子】的概率分布函数,这个概率分布也就是该语言的生成模型。一般语言模型可以使用各个词语条件的概率表示。

      1.上下文无关模型

        该模型仅仅考虑当前词本身的概率,不考虑词所对应的上下文环境,仅仅依赖于训练文本中的词频统计。这是一种最简单,易于实现,但没有多大实际应用价值的统计语言模型。它是n-gram模型中n=1时候的特殊情况,所以也称为Unigram Model【一元文法统计模型】。

      2.n-gram模型

        当n=1时,就是上面所说的上下文无关模型,这里n-gram一般认为是n>=2时的上下文相关模型。当n=2时,也称为Bigram语言模型。n指往前看n-1个词而不是一个词。

        一般n-gram模型优化的目标是最大log似然。

        优点:

          包含了前n-1个词所能提供的全部信息,这些信息对当前词出现具有很强的约束力,同时因为只看前n-1个词而不是全部词也使得模型的效率较高。

        缺点:

          1.n-gram语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型。

          2.这种模型无法建模出词之间的相似度,有时候两个具有某种相似性的词,如果一个词经常出现在某段词之后,那么也许另一个词出现在这段词后面的概率也比较大。

          3.训练语料里面有些n元组没有出现过,其对应的条件概率就是0,导致计算一整句话的概率为0。

          解决办法:

              1.平滑法:最简单的方法是把每个n元组的出现次数加1,那么原来出现k次的某个元组就会记成k+1次,原来出现0次的n元组就会即为出现1次。这种也称为Laplace平滑。

            2.回退法:类似决策树中的后剪枝方法,即如果n元的概率不到,那就往上回退一步,用n-1元的概率乘上一个权重来模拟。

      3.n-pos模型

        严格来说n-pos只是n-gram的一种衍生模型。n-gram模型假定第t个词出现概率条件依赖它前n-1个词,而现实中很多词出现的概率是条件依赖于它前面词的语法功能的。n-pos模型就是基于这种假设的模型。

      4.基于决策树的语言模型

        统计决策树中每个节点的决策规则是一个上下文相关的问题。基于决策树的语言模型优点是分布数不是预先固定好的,而是根据训练语料库中的实际情况决定的,更为灵活。缺点是构造决策树的问题很困难,且时空开销很大。

      5.最大熵模型

        对一个随机事件的概率分布进行预测时,在满足全部已知条件下对未知的情况不做任何主观假设。从信息论的角度来说就是在只掌握关于未知分布的部分知识时,应当选取符合这些知识但又能使得熵最大的概率分布。

      6.自适应语言模型

        前面的模型概率分布都是预先从训练语料库中估算好的,属于静态语言模型。二自适应语言模型类似online learning的过程,及根据少量新数据动态调整模型,属于动态模型。

  • 相关阅读:
    PTA 5-3 树的同构 ——理解递归
    停车管理系统
    两个有序链表序列的合并 (15分)
    lua 面向对象笔记 继承 和 组合
    二叉树高度计算,判定是否为平衡二叉树
    会用git的重要性,记工作中使用git reset 代码丢失的教训
    #include <bits/stdc++.h> 万能头文件
    C++中类的静态变量成员
    C++创建对象加括号和不加括号的区别
    deepin(深度系统)安装微信 qq
  • 原文地址:https://www.cnblogs.com/yszd/p/10872282.html
Copyright © 2020-2023  润新知