一、N-Gram介绍
自然语言处理(NLP)领域中,N-Gram算法是一种广泛应用于文本分析和处理的基础算法,它通过统计文本中连续n个词的序列(或称为“词组”)出现的评率,为各种NLP任务提供了有力的支持。
二、N-Gram算法原理
N-Gram算法的基本思想是将文本拆分成若干个连续的n个词的序列,并统计这些序列在文本中出现的频率,这里的n是一个正整数,表示词组中词的个数。
譬如:在句子“我喜欢学习自然语言处理”中,
- 1-Gram是单个词,如“我”、“喜欢”等;
- 2-Gram是相邻的两个词组成的词组,如“我喜欢”、“喜欢学习”等;
- 3-Gram是相邻的三个词组组成的词语,如“我喜欢学习”等。
通过统计这些N-Gram的频率,我们可以得到文本中各个词组的出现概率分布,这些概率信息对后续的文本生成、语言模型构建、文本分类等任务具有重要的指导意义
三、N-Gram模型的构建步骤
- 文本预处理:对输入文本进行清洗,如去除标点符号、转换为小写等;
- 分词:将文本分割成单词序列或其他元素序列
- 构建N-Gram:根据选定的N值,从序列中提取N个连续元素的组合
- 计算概率:统计每个N-Gram在语料库中出现的次数,并计算它们的概率。可以通过N-Gram出现的次数除以文本中总的N-Gram数量得到
四、应用示例
假设我们有一下句子作为训练预料:
"I love deep learning"
如果给出I love () learning,那么空中填入deep的概率就比填入apple的概率大,假设用$w_1$表示I, 用$w_2$表示Iove, $w_3$表示deep, $w_4$表示learning,那么$p( I love deep learning) = p(w_1,w_2,w_3,w_4) = p(w_1)p(w_2|w_1)p(w_3|w_2,w_1)p(w_4|w_3,w_2,w_1)$,就是第一个词是 I 的概率,然后乘上已知第一个词是 I 第二个词是love的概率....整个下来就是这个句子的概率。直观来看,如果这个句子越常见、越自然、那么这个句子的概率就会越大,这个$p(w_2|w_1)$的概率其实就是统计你的文本数据库中有多少个 I love这个组合出现,然后除以 I 的数量, I love出现的次数越多,$p(love| I)$越大
五、模型缺点
- 参数空间过大,假设这个句子非常的长,那么第N个词就要基于前面N-1个词的计算概率,参数是N-1,太多了;
- 数据过于稀疏,简单的说就是并不是所有的词的组合都会出现,万一本文数据库中刚好有某一个组合没有出现过,那么这个组合的概率就是0,这个句子的概率因为有一个因子是0,乘起来还是0就不好了