1、 概率语言模型

一句话的概率公式:

根据一句话中的前文预测下一个词:

根据链式概率法则:

根据马尔科夫假设,当前词只和前n个词有关系:

2. 大名鼎鼎的 n-gram模型

为模型想要预测的下一个词,为句子中的历史词语。

之后,我们利用极大似然估计优化模型:

说起来极大似然很高级,在实现上就是统计各种情况下出现的次数,然后再除以因子来归一化。

n-gram的优点:

1. 常见的Bigram,Trgram 实现简单,能够很好地应用在一些经典场景中,例如检查拼写错误(极大似然句子概率)。

2. 常见搜索引擎的输入下拉帮助,就是通过n-gram来实现的。

3. 可解释性强,易于理解和调试。

4. 易于增量实现和并行训练。

n-gram的缺点:

1. 需要解决数据稀疏性的问题(没有出现过的词语的概率会被置为0),一般有平滑算法,back-off算法,Interpolation算法。

2. 由于是离散型变量,没有办法度量词语之间相似度。

3. 模型巨大,与|V| 词库大小呈指数增长。

3. 困惑度(perplexity)

在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度。它也可以用来比较两个概率分布或概率模型。(译者:应该是比较两者在预测样本上的优劣)低困惑度的概率分布模型或概率模型能更好地预测样本。

在语言概率模型中,我们用来检测整个语料整体的困惑度。整体困惑度越低,说明模型效果越好。

4. 连续空间语言模型

我们设想把每个词都在低维向量空间中,有唯一的连续向量对应。我们可以通过比较向量之间的距离来判断词之间的距离,解决了词相似度度量的问题。(例如:Dot product,Cosine similarity,Eucliean distance,但是一般选择Cosine相似度,因为词向量的基本都是很小的浮点数,欧氏距离和点乘需要额外的操作)。

所有通过神经网络训练得到词向量的都有一个基本的假设:

words that occur in similar contexts tend to have similar meanings

(拥有相似上下文的词语通常也会有相似的语义)

4.1 NNLM(Neural Network Language Model)

NNLM是一个简单易懂的模型。首先是我们想要预测的词,是预测词的前n-1个词。表示对应词w的词向量。

输入层就是将n-1个词向量首尾相连形成一个(n-1)*m的矩阵输入隐藏层。

隐藏层为一个普通的神经网络隐藏层。之后,使用作为激活函数。值域为(-1,1)

输出层为共有|V|个节点。|V|为词典内词的数目。在进行线性变换之后,通过softmax归一化。

整个网络前馈公式如下:

目标函数为极大化函数L:

整个网络结构如下:(绿色为W的值,如果W值为0,代表词向量不直接进入最后输出层运算)

优缺点:

1. 模型实现起来效果不错,但是计算量很大。时间消耗在两个大型矩阵的乘法,H和U。

2. 没有解决一词多义的情况。

3. 网络输入窗口为固定值,不能更改。

4. 整个网络参数与词库大小|V| 呈线性增长,因为需要逐个对U对应的每个参数做更新。

后来作者本人又提出了 Hierarchical Neural Language(分层神经语言模型),简单来说就是简历一棵树,每个节点都做一个分类判断,树的叶子是每个词。这样做虽然减少了计算量,从|V|变到了log2|V|,但是分类树模型构建需要专家知识,而且分层模型比不分层模型要差。

4.2 LBL(Log-Bilinear Language Model)

LBL的模型跟NNLM非常相似,它只是去掉了中间的tanh激活函数,从非线性变成线性。之后又提出了各种办法来优化训练速度。例如分层模型(hierarchical softmax),noisecontrastive estimation (NCE)。

4.3 C&W(Collobert and Weston)

跟LBL比较起来,多了一个非线性层,跟NNLM比较起来多了一个非线性层。无话可说,有时候学术圈就是这么喜欢排列组合。

4.4 增加语言特点的特征到语言模型中

例如下图:增加了单个词的POS,先从离散的POS features 转化成向量,再和原来的词向量分别相乘不同的权重参数,最后融合到z中去,后面的步骤与前几个模型相同。

4.5 增加WordNet相似性加训练中

4.6 增加主题信息在训练中

4.7 接下去,大神又再接在励,设计出了RNN语言模型

5. Word2Vec

好啦,以上都是之前的尝试,其实跟Word2Vec一脉相承,前面已经出现了一层非线性一层线性(NNLM),两层线性模型(LBL),一层非线性两层线性(C&W)。而且出现了经典的优化方法,分层二叉树优化,noise contrastive estimation (NCE) 优化。

5.1 CBOW

CBOW的思想很简单,就是运用上下文来预测当前词。目标函数为:

中间层只是一个简单的累计取平均值为h。输出层的优化有两种:层次化softmax(霍夫曼树)和负采样(NEG)。

5.1 霍夫曼树

霍夫曼树是二叉树,有正负两条边,每个词语都唯一对应一个霍夫曼编码(也就是路径)。所以类似于二分类问题,只是我们由许多个二分类器构成的。我们要求的似然函数就为:

其中为路径第i个节点所对应的编码,为路径第i个节点所对应的向量。

最后我们要优化的极大似然估计为:

下图为霍夫曼树作为输出层的整体网络结构:

5.2 NEG优化

NEG的思想很朴素。以上方法都是直接将目标词w和整个词库的所有词都做了一次比较。我们能不能挑出一些词语来作为负样本,我们只需要将我们的目标词从负样本中识别出来就行了。

博文:word2vec基于负采样的模型原理介绍

里面介绍得非常基础且详细。

6. 总结

上面非常朴素地介绍了一遍语言模型的历史和模型。现在最常用的就是谷歌开发的Word2Vec。也有许多工具可以帮助你训练自己的词向量。例如Gensim,Tensorflow中也对词向量有专门的实现。

感谢博客:由NPLM到Word2vec

语言概率模型和Word2Vec简述相关推荐

  1. 情感分析的描述、基于词袋模型和word2vec模型的情感分析实现

    情感分析的描述.基于词袋模型和word2vec模型的情感分析实现 以购物评论为例: # 读入原始数据集 import pandas as pddfpos = pd.read_excel('../dat ...

  2. 文档信息的向量化-NNLM模型和word2vec

    文档信息的向量化-NNLM模型和word2vec

  3. R语言GARCH-DCC模型和DCC(MVT)建模估计

    这个简短的演示说明了使用r软件包的DCC模型及其方法的使用,尤其是在存在MVT分布形状参数的情况下进行2级DCC估计的另一种方法. 最近我们被客户要求撰写关于GARCH-DCC的研究报告,包括一些图形 ...

  4. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

    系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 [word2vec]篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模 ...

  5. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

    文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...

  6. 简述osi七层模型和TCP/IP五层模型

    简述osi七层模型和TCP/IP五层模型 1 osi七层模型 2 osi七层模型各层功能定义 这里我们只对OSI各层进行功能上的大概阐述,不详细深究,因为每一层实际都是一个复杂的层.后面我也会根据个人 ...

  7. R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能

    R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载.划分数据.并分别构建线性回归模型和广义线性加性模型GAMs.并比较线性模型和GAMs模型的性能 目录

  8. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...

    如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...

  9. 独家 | 什么是生成模型和GAN?一文体验计算机视觉的魔力(附链接)

    作者:PULKIT SHARMA 翻译:吴金笛 校对:王婷 本文长度约为4700字,建议阅读15分钟 本文介绍了生成模型和生成对抗网络(GAN)的工作原理和训练步骤. 概况 生成模型和GAN是计算机视 ...

  10. 什么是生成模型和GAN?一文体验计算机视觉的魔力

    作者:PULKIT SHARMA 翻译:吴金笛 校对:王婷 本文长度约为4700字,建议阅读15分钟 本文介绍了生成模型和生成对抗网络(GAN)的工作原理和训练步骤. 概况 生成模型和GAN是计算机视 ...

最新文章

  1. Qt 生成 ui 对应的 h 文件和 cpp 文件的方法
  2. wxWidgets:wxMemoryFSHandler类用法
  3. python操作hive数据库代码_Python连接Hive操作数据库
  4. Django contenttypes组件
  5. python glob模块的应用
  6. CentOS首次安装,网络环境配置
  7. scala构造器的介绍
  8. [论文阅读] | Graph U-Nets
  9. 最全面的Android混淆
  10. 汽车CAN总线思维导图
  11. Cocoa设计模式(iOS常用设计模式) Cocoa Design Patterns
  12. 大数据产品开发流程规范_大数据系统开发步骤流程是怎样的
  13. ktt算法 约化_答:那些深度学习《面试》你可能需要知道的
  14. Stein引理(Stein's lemma)
  15. Java平台,标准版Oracle JDK 9中的新功能
  16. 基于脉振高频电流注入的永磁同步电机无感FOC
  17. excel给定一个日期,确定是本月的第几周
  18. win7 打开防火墙端口
  19. goland使用fabric-go-sdk连接虚拟机fabric网络(保姆级教学)
  20. 2019全国电赛总结

热门文章

  1. 服务器Linux系统下常见的软件包有哪些
  2. 3d工口医Android,3d口工医完整版
  3. android translateanimation动画,Android 动画之TranslateAnimation应用详解
  4. excel使用教程_火遍全球的14个Excel学习网:大神套路、视频课、软件下载应有尽有...
  5. flash绘制荷花多个图层_《荷花》Flash动画课件
  6. [附源码]java毕业设计宾馆客房管理系统
  7. UnityShader[1]光照模型
  8. linux ps3手柄驱动,ps3 DS3 手柄驱动
  9. 基于elasticjob的入门maven项目搭建
  10. Java目前主流框架