一、背景

  近期研究了一下语言模型,同事推荐了一个比较好用的工具包kenlm,记录下使用过程。

二、使用kenlm训练 n-gram

  1.工具介绍:http://kheafield.com/code/kenlm/

  2.工具包的下载地址:http://kheafield.com/code/kenlm.tar.gz

  3.解压后运行,./bjam 进行编译

  4.使用如下命令进行训练:bin/lmplz -o 5 --verbose_header --text data/chat_log.txt --arpa result/log.arpa --vocab_file result/log.vocab

  备注:4.1 文件必须是分词以后的文件。

     4.2 -o后面的5表示的是5-gram,一般取到3即可,但可以结合自己实际情况判断。

  

三、使用kenlm判断一句话概率

  使用kenlm主要就是对arpa文件内容的运行,下面解析下该文件的内容。

  1.arpa文件

  

\1-grams:
-6.5514092 <unk> 0
0 <s> -2.9842114
-1.8586434 </s> 0
-2.88382 ! -2.38764
-2.94351 world -0.514311
-2.94351 hello -0.514311
-6.09691 guys -0.15553 \2-grams:
-3.91009 world ! -0.351469
-3.91257 hello world -0.24
-3.87582 hello guys -0.0312 \3-grams:
-0.00108858 hello world !
-0.000271867 , hi hello ! \end\

  1.1 介绍该文件需要引入一个新的概念,back_pro.  超详细的介绍见 --> http://blog.csdn.net/visionfans/article/details/50131397

       三个字段分别是:Pro  word  back_pro (注:arpa文件中给出的数值都是以10为底取对数后的结果)

1.2 需要特别介绍三个特殊字符。<s>、</s>和<unk>

    一看便知,<s>和</s>结对使用,模型在计算概率时对每句话都进行了处理,将该对标记加在一句话的起始和结尾。这样就把开头和结尾的位置信息也考虑进来。

    如“我 喜欢 吃 苹果” --> "<s> 我 喜欢 吃 苹果 </s>"。

    <unk>表示unknown的词语,对于oov的单词可以用它的值进行替换。

  2.n-gram概率计算

  2.1 一元组w1

    直接在arpa文件中查找,如果有则直接返回它的pro,否则返回<unk>的pro。

  2.2 二元组w1w2

    直接在arpa文件中查找,有则直接返回它的pro,否则返回back_pro(w1)*pro(w2)的结果。当然此处都去过log,直接加减即可。

  2.3 三元组w1w2w3

    这个说起来比较麻烦,画个图。

    

    其中有一点大家可能会比较疑惑。为什么文件中存在二元组w1w2,要输出 back_pro(w1w2)*pro(w2w3),而没有w1w2,则可以直接输出pro(w2w3)。因为直观理解,有w1w2出现,概率pro(w1w2w3)的数值应该更大些。其实此处是用pro(w2w3)来近似代替pro(w1w2w3)的值。

    我在arpa文件中选了前2000个一元组的pro和back_pro画出下图,由图我们可知,一个单词或者词组的pro和back_pro是负相关的。所以当二元组w1w2没有出现时,我们认为pro(w1w2)的特别小,相应地back_pro的值就会变大,而取完log以后的结果就为0,在加法中可以直接忽略该项。

  

  3. sentence pro计算

    句子的计算就不需我多说了,一般情况下都只用到三元组。

  4.衡量指标

  4.1 衡量的指标暂时只考虑了困惑度(perplexity),定义如下:

    

    取完对数后计算超级方便,对数运算真乃利器也!!!

  

    

语言模型kenlm的训练及使用的更多相关文章

  1. 预训练语言模型整理(ELMo/GPT/BERT...)

    目录 简介 预训练任务简介 自回归语言模型 自编码语言模型 预训练模型的简介与对比 ELMo 细节 ELMo的下游使用 GPT/GPT2 GPT 细节 微调 GPT2 优缺点 BERT BERT的预训 ...

  2. 学习AI之NLP后对预训练语言模型——心得体会总结

    一.学习NLP背景介绍:      从2019年4月份开始跟着华为云ModelArts实战营同学们一起进行了6期关于图像深度学习的学习,初步了解了关于图像标注.图像分类.物体检测,图像都目标物体检测等 ...

  3. 预训练语言模型的前世今生 - 从Word Embedding到BERT

    预训练语言模型的前世今生 - 从Word Embedding到BERT 本篇文章共 24619 个词,一个字一个字手码的不容易,转载请标明出处:预训练语言模型的前世今生 - 从Word Embeddi ...

  4. 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)

    转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章   从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...

  5. [转] 如何用kaldi训练好的模型做特定任务的在线识别

    转自:http://blog.csdn.net/inger_h/article/details/52789339 在已经训练好模型的情况下,需要针对一个新任务做在线识别应该怎么做呢? 一种情况是,用已 ...

  6. 【中文版 | 论文原文】BERT:语言理解的深度双向变换器预训练

    BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding 谷歌AI语言组论文<BERT:语言 ...

  7. BERT总结:最先进的NLP预训练技术

    BERT(Bidirectional Encoder Representations from Transformers)是谷歌AI研究人员最近发表的一篇论文:BERT: Pre-training o ...

  8. 语言模型预训练方法(ELMo、GPT和BERT)——自然语言处理(NLP)

    1. 引言 在介绍论文之前,我将先简单介绍一些相关背景知识.首先是语言模型(Language Model),语言模型简单来说就是一串词序列的概率分布.具体来说,语言模型的作用是为一个长度为m的文本确定 ...

  9. 自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT)

    自然语言处理中的语言模型预训练方法(ELMo.GPT和BERT) 最近,在自然语言处理(NLP)领域中,使用语言模型预训练方法在多项NLP任务上都获得了不错的提升,广泛受到了各界的关注.就此,我将最近 ...

随机推荐

  1. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  2. centos6.5无法访问网络

    1.在network Adapter选中,右侧是否是选中为NAT 2.打开网络和共享中心-->更改适配器设置,VMnet8和VMnet1是否是自动获取了IP,自动获取ip连接上后 3.右击本地连 ...

  3. RHEL6和RHEL7恢复root用户密码

    一.RHEL6恢复root密码 将系统重启,出现如下界面按上下键选择会停住,并输入e键 选中下图红框选项,再输入e键 再输入1,进入单用户模式 输入b进行启动   修改密码,然后重启 二.RHEL7恢 ...

  4. jquery基础

    show() hide() toggle()         fadeIn() fadeOut() fadeToggle() fadeTo()         slideUp() slideDown( ...

  5. stm32 usb error : identifier "bool" is undefined

    .\usb\USB\usb_pwr.h(54): error:  #20: identifier "bool" is undefinedusb\USB\usb_pwr.h(54): ...

  6. Android ListView ArrayAdapter 的简单使用

    前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity ...

  7. 禁止chrome记住密码

    谷歌浏览器保存密码后输入框背景色变成黄色,会影响原来的输入框样式,css样式input:-webkit-autofill可以改变输入框样式,background-color,background-im ...

  8. Entity Framework关于SQL注入安全问题

    1.EF生成的sql语句,用 parameter 进行传值,所以不会有sql注入问题 2.EF下有涉及外部输入参数传值的,禁止使用EF直接执行sql命令方式,使用实体 SQL   参考: https: ...

  9. 外网访问内网工具ngrok tunnel 使用总结

    需求分析 在软件开发测试过程中,我们会经常遇到需要网站部署测试.给客户演示.APP开发的调试这样的需求.通常的做法是申请一个域名和空间,将网站放到外网上给客户演示. 这种方法确实可行不过会有两点不好, ...

  10. Power Management开发的一般流程

    本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 开发流程 针对一个PM feature进行开发,设计模型是第一步.模型设计好之后,还要保留参数接口,可以基于这些参数针对特殊个体进行优化. ...