语言模型(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#:Winfrom 实现DataGridView 自定义分页

目录 安装Dapper依赖 安装SQLite依赖 新建SQLite数据库文件 主要代码示例 运行界面 今天给大家分享Winform实现DataGridView 自定义分页的案例,感兴趣的朋友可以一起来学习一下。 采用技术:C#WinformDapperSQLite。 本次为了避免安装数据库的繁琐&#x…

超维空间S2无人机使用说明书——21、VINS视觉定位仿真

引言:为了实现室内无人机的定位功能,S系列无人机配置了VINS-FUSION定位环境,主要包含了仿真跑数据集和实际操作部分。为了提前熟悉使用原理,可以先使用仿真环境跑数据集进行学习和理解 硬件:1080P显示器、Jetson orin…

正割函数(sec)

1. 定义 正割与余弦互为倒数,余割与正弦互为倒数。即: ⎧⎩⎨⎪⎪⎪⎪secθ1cosθcscθ1sinθ也即在几何上,设 △ABC,∠C90,ACb,BCa,ABc,正割函数:sec∠Ac/b(…

网站:推荐几款好用的在线短链生成工具

目录 一、网站工具:ft12 二、网站工具:缩我短网址 三、Sina新浪短网址 四、短网址在线生成- ock.cn 五、网站工具:i排版 短链技术目前对网站推广非常的有用,有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天…

java中范型的限定

泛型的一般格式Test<T>&#xff0c;使用起来很方便&#xff0c;相当于Object&#xff0c;而且和C/C中的模板差不多。 但是Java的泛型还有一个好处&#xff0c;在于可以限定T的类型&#xff0c;格式如下&#xff1a;Test<T extends Base>&#xff0c;这样就要求Test…

猿创征文|docker 系列: 具名、匿名挂载介绍

目录 匿名挂载 1.1 含义 1.2 匿名挂载示例 1.3 文件同步测试 具名挂载 2.1 含义

学习mysql中使用inner join,left join 等

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下&#xff1a; -----------------------------------------…

MySQL:union all与union区别详解

union 是对数据进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认排序 Union all 是对数据进行并集操作&#xff0c;包括重复行&#xff0c;不进行排序 举例说明&#xff1a; 创建数据库表&#xff1a; CREATE TABLE t_demo ( id int(32) NOT NULL, name var…

正则表达式小结

正则表达式主要是用来操作字符串的&#xff0c;可以预先定义特定字符以及字符组合&#xff0c;来对字符串进行匹配或从中获取我们想要的字串&#xff0c;从而方便操作。在实际测试项目中&#xff0c;我们主要用来做两件事&#xff1a;第一&#xff0c;用正则表达式来判断给定的…

如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树

1.索引是什么东西&#xff1f; 索引就是一个数据结构&#xff0c;我们把表中的记录用一个适合高效查找的数据结构来表示&#xff0c;目的就是让查询变得更高效。 2.它到底怎么运作的&#xff1f; 这个问题就说来话长了&#xff0c;且听我慢慢道来&#xff1a; 在mysql中使用…

微信输入法来了,一起来体验一下吧

大家期待已久的微信输入法终于来了&#xff0c;不是内置于微信当中&#xff0c;而是一款独立应用的APP&#xff0c;今天小编带大家来体验一下微信输入&#xff0c;到底好不好用&#xff1f; 目录 1、安装 2、功能介绍 2.1、智能推荐公众号、视频号、小程序等 2.2、可直接发…

python2.6.6安装MySQL-python模块正确方法

Centos6.5 x64 系统python2.6.6安装MySQL-python模块 一、安装前准备 操作系统&#xff1a;centos6.5 x64 安装python和python开发工具   python python-devel 安装mysql-server和mysql开发工具   mysql-server mysql mysql-devel yum -y install mysql-devel libxml2 libx…

猿创征文 | Docker实战:Linux环境安装Tomcat安装步骤

目录 1.官网镜像版本查找 2、拉取tomcat镜像 3. 查看镜像是否下载成功

博客搬家

博客搬家 今天这篇博客只想向大家公布一件事&#xff0c;我的博客要搬家了&#xff0c;确切的说是我要同步我两个博客端的博客&#xff0c;原因主要有二&#xff1a; 我最初在网络上查资料主要看到的两个端有csdn 也有 博客园&#xff08;我喜欢的一个大神在这&#xff09;&…

猿创征文 | Docker笔记:Docker网络知识介绍

目录 1、docker网络介绍 2、测试容器和宿主主机的通信 2.1 宿主主机可以ping通 docker0

Zabbix的安装(源码安装)

zabbix3.0完全安装 安装zabbix首先需要安装ltmp&#xff08;lnmp&#xff09;&#xff0c;这里的t是指tengine&#xff08;taobao的nginx版本&#xff09;&#xff0c;安装教程见 http://www.ltmp.cc 安装的时候PHP选择5.4版本&#xff0c;因为zabbix3.0需要php5.4以上版本。 安…