首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以实践的方式讨论:N-Gram原理与其应用

以实践的方式讨论:N-Gram原理与其应用

作者头像
double
发布2019-10-16 16:46:17
1.8K0
发布2019-10-16 16:46:17
举报
文章被收录于专栏:算法channel算法channel算法channel

「Python与算法社区」 第 306 篇原创

“N-Gram 模型介绍”

本文将以实践的方式讨论N-Gram原理与其应用,我对N-Gram的接触来源与一个文本分类的实验,发现在原有的分词基础上引入N-Gram会提升分类准确率,因此在此讨论什么是N-Gram?它有什么作用?

N-Gram常用的有三种:unigram,bigram,trigram 分别对应一元,二元,三元。

以“我想去成都吃火锅”为例,对其进行分词处理,得到下面的数组:["我",“想”,“去”,“成”,“都”,“吃”,“火”,“锅”]

这就是uningram, 分词的时候对应一个滑动窗口,窗口大小为1,所以每次只取一个值,同理假设使用bigram就会得到

[“我想”,“想去”,“去成”,“成都”,“都吃”,“吃火”,“火锅”], N-gram模型认为词与词之间有关系的距离为N, 如果超过N则认为它们之间没有联系,所以就不会出现"我成",“我去”这些词。

如果使用trigram,则就是["我想去",“想去成”,“去成都”,...]。N理论上可以设置为任意值,但是一般设置成上面3个类型就够了。

“N-Gram 模型应用”

假设我们有下面的语料

“我想去成都吃火锅”

"你会成功"

“我想吃火锅”

“成都火锅好吃”

对上面的语料使用bigram模型统计词频处理,为每个二元词分配一个概率,或者统计单个词条件下后面一个词出现的概率,这两种概率有什么用呢?

首先以一种概率可以应用在名词提取,比如说语料库中,“成都”,“火锅”出现频率较高,将会被分配较高的概率,因此可以考虑将这两个词作为名词提取出。

第二种概率可以以条件概率的形式给出,就比较明显用处了。如P("都"|“成”),P("锅"|“火”)将会被分配给较高的概率,因此可以用在智能提示上面,加上我输入一个“成”,模型将会将返回在“成”的条件下,下个词出现频率较高的词,这里解释可能有点绕口,看下面的公式:

P("都"|“成”)=2/3 > P("功"|"成")=1/3

那么我们很有必要认为用户下一个词输入的是“都”,而不是“功”。或者直接给个列表,按照概率的方式排序,像这样:

看谷歌的提示,都是2个或者4个词,我觉得这里可以把“成”看成一个词,预测下个词"都"后,再把“成都”看成一个词,从而可以预测出来“天气”,“房价”,就能够实现这个功能。

一般情况下,N-Gram的N设置为1,2就够用了,但是如果语料够丰富的话,我觉得适当的增加N大小,可能会引入更多的语义信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档