语言模型(N-Gram)
问题描述:由于公司业务产品中,需要用户自己填写公司名称,而这个公司名称存在大量的乱填现象,因此需要对其做一些归一化的问题。在这基础上,能延伸出一个预测用户填写的公司名是否有效的模型出来。
目标:问题提出来了,就是想找到一种办法来预测用户填写的公司名是否有效?
问题分析:要想预测用户填写的公司名称是否有效,需要用到NLP的知识内容,我们首先能够想到的是利用NLP中的语言模型,来对公司名称进行训练建模,并结合其他的特征(如:长度等)进行预测。
一、N-Gram的原理
N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关。(这也是隐马尔可夫当中的假设。)整个句子出现的概率就等于各个词出现的概率乘积。各个词的概率可以通过语料中统计计算得到。假设句子T是有词序列w1,w2,w3...wn组成,用公式表示N-Gram语言模型如下:
P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)***p(wn|w1w2w3...)
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:
Bi-Gram: P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
Tri-Gram: P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn|wn-1,wn-2)
- 注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。(这里需要进行平滑)
二、N-Gram的应用
根据上面的分析,N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,它主要有两个重要应用场景:
(1)、人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。
(2)、另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。这是模糊匹配中常用的一种手段。
1、N-gram在两个字符串的模糊匹配中的应用
首先需要介绍一个比较重要的概念:N-Gram距离。
(1)N-gram距离
它是表示,两个字符串s,t分别利用N-Gram语言模型来表示时,则对应N-gram子串中公共部分的长度就称之为N-Gram距离。例如:假设有字符串s,那么按照N-Gram方法得到N个分词组成的子字符串,其中相同的子字符串个数作为N-Gram距离计算的方式。具体如下所示:
字符串:s="ABC",对字符串进行分词,考虑字符串首尾的字符begin和end,得到begin,A,B,C,end。这里采用二元语言模型,则有:(begin,A)、(A,B)、(B,C)、(C,end)。
字符串:t="AB",对字符串进行分词,考虑字符串首尾的字符begin和end,得到begin,A,B,end。这里采用二元语言模型,则有:(begin,A)、(A,B)、(B,end)。
此时,若求字符串t与字符串s之间的距离可以用M-(N-Gram距离)=0。
然而,上面的N—gram距离表示的并不是很合理,他并没有考虑两个字符串的长度,所以在此基础上,有人提出非重复的N-gram距离,公式如下所示:
上面的字符串距离重新计算为:
4+3-2*3=1
2、N-Gram在判断句子有效性上的应用
假设有一个字符串s="ABC",则对应的BI-Gram的结果如下:(begin,A)、(A,B)、(B,C)、(C,end)。则对应的出现字符串s的概率为:
P(ABC)=P(A|begin)*P(B|A)*P(C|B)*P(end|C)。
3、N-Gram在特征工程中的应用
在处理文本特征的时候,通常一个关键词作为一个特征。这也许在一些场景下可能不够,需要进一步提取更多的特征,这个时候可以考虑N-Gram,思路如下:
以Bi-Gram为例,在原始文本中,以每个关键词作为一个特征,通过将关键词两两组合,得到一个Bi-Gram组合,再根据N-Gram语言模型,计算各个Bi-Gram组合的概率,作为新的特征。
转载于:https://www.cnblogs.com/ljy2013/p/6425277.html
语言模型(N-Gram)相关推荐
- DLM:微信大规模分布式n-gram语言模型系统
来源 | 微信后台团队 Wechat & NUS<A Distributed System for Large-scale n-gram Language Models at Tence ...
- edittext禁止换行符但能自动换行简书_使用n-gram创建自动完成系统
n-gram语言模型用于就是计算句子的概率,通俗来讲就是判断这句话是人话的可能性有多少.n就是将句子做切割,n个单词为一组. 如何计算句子的概率?根据条件概率和链式规则 P(B|A)=P(A,B)/P ...
- NLP基础:n-gram语言模型和神经网络语言模型
文章目录 语言模型的计算 n-gram 语言模型 n-gram 平滑技术 神经网络语言模型(NNLM) 基本思想 神经网络语言模型小结 语言模型评价指标-困惑度 语言模型是自然语言处理中的重要技术,假 ...
- chatbot2 RNN语言模型
基于RNN的语言模型 RNN语言模型理论基础 参考文献 cbow/skip gram 的局限性#### 解决方案 rnn模型细节 数学表示 一个输入一个输出的不是循环神经网络. RNN语言模型实践 d ...
- 如何计算给定一个unigram语言模型_CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)...
CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs) 作者:郭必扬 许久没更新了,十分惭愧,翻了翻之前的笔记,才之前上一期我们讲的是"依存分析".本期,我们介绍一下语 ...
- 语言 双线性内插_数位语音信号处理概论 Lesson6 语言模型
在上一节lesson中主要总结了HMM在声学模型中的用法,本小节主要总结语言模型相关的内容.在语音识别领域,语言模型评估的是一句话到底有多像一句人话,在语音识别.拼写纠错.机器翻译.音字转换都有许多应 ...
- nlp-tutorial代码注释1-1,语言模型、n-gram简介
系列语:本系列是nlp-tutorial代码注释系列,github上原项目地址为:nlp-tutorial,本系列每一篇文章的大纲是相关知识点介绍 + 详细代码注释. 本文知识点介绍来自斯坦福大学CS ...
- 神经网络 和 NLP —— 语言模型和词向量
前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑.大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也 ...
- [VLDB2019]DLM:微信大规模分布式n-gram语言模型系统
Wechat & NUS<A Distributed System for Large-scale n-gram Language Models at Tencent>分布式语言模 ...
最新文章
- python中基本程序结构_关于Python 程序格式框架的描述,正确的是( )
- LinkedList ArrayList Vector的区别
- Jenkins CLI命令行工具,助你轻松管理 Jenkins
- C++trie树的多重搜索算法的实现(附完整源码)
- 数字图像处理——引导滤波
- VC2010 项目的创建
- windows rt c语言,有arm架构的windows平板吗??与x86的win有什么不同?arm写c语言怎样?
- [HNOI 2011]数学作业
- Jedis 1.0.0 版 源码分析系列3:JedisPool.java
- html5 原生 弹窗,HTML5 Popmotion.js实现的弹窗控件
- 一定要吃透的四个人性真相
- 让Fiddler调试localhost和127.0.0.1
- 社区列表根据关注人数排序(排行榜)的实现思路整理
- 《C++标准库》学习笔记 — STL —流
- 浅谈MySQL安全加固
- MYSQL-mysql中的truncate的用法
- 快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)
- 开发通用资料——英文缩写
- 游戏盾,有效解决游戏行业安全管理问题
- HTML a 标签的 href 属性