N-Gram模型简单介绍

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

### N-gram模型概述 N-gram模型是一种基于统计的语言模型,用于预测给定前缀下某个单词出现的概率。该模型的核心思想是假设当前词仅依赖于其前面的 \(n-1\) 个词[^1]。具体来说,对于一个长度为 \(n\) 的序列,N-gram 模型会估计条件概率 \(P(w_n|w_{n-1}, w_{n-2}, ..., w_1)\),即在已知前 \(n-1\) 个词的情况下,下一个词 \(w_n\) 出现的可能性。 #### 基本概念 N-gram 模型的主要特点是通过滑动窗口的方式提取文本中的连续片段,并将其视为独立事件进行建模。常见的 N-gram 类型包括 Uni-gram (单字/词)、Bi-gram (双字/词) 和 Tri-gram (三字/词)[^2]。这些模型广泛应用于自然语言处理任务中,例如机器翻译、语音识别和文本分类等。 #### 实现方式 N-gram 模型可以通过多种技术实现。传统的方法通常涉及构建频率表并利用最大似然估计法计算概率分布。然而,在实际应用中,由于数据稀疏性问题(某些组合可能从未出现在训练集中),平滑技术被引入以提高模型性能。常用的平滑策略有加一平滑(Laplace smoothing)、Kneser-Ney 平滑等[^3]。 随着深度学习的发展,基于神经网络的语言模型逐渐取代了传统的 N-gram 方法。这类新模型不仅考虑上下文中固定数量的先前词汇,还能捕捉到更复杂的模式特征。 ```python from collections import defaultdict, Counter def build_ngrams(text, n=2): words = text.split() ngrams = zip(*[words[i:] for i in range(n)]) return [" ".join(ng) for ng in ngrams] text = "this is an example sentence to demonstrate bigrams" bigrams = build_ngrams(text, n=2) print(bigrams) ``` 上述代码展示了如何简单地生成二元组(Bigram)列表。此函数接受一段字符串输入,并返回由相邻两个单词组成的列表形式表示的大规模短语集合。 #### 应用场景 在自然语言处理领域,N-gram 模型有着广泛的用途。它可以用来评估句子流畅度、纠正拼写错误或者推荐关键词[^4]。此外,当面对大规模未标记的数据集时,这种无需额外指导即可完成的任务显得尤为重要——因为这意味着减少了人为干预的需求同时提高了效率。 尽管如此,值得注意的是,单纯依靠历史信息来进行预测存在局限性;比如无法很好地应对长距离依赖关系等问题。因此,在现代实践中,人们往往倾向于采用更加先进的架构如循环神经网络(RNNs) 或者变压器(Transformers) 来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值