首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

「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大小,可能会引入更多的语义信息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191016A0BELE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券