探索NLP中的N-grams:理解,应用与优化

简介

n-gram[1] 是文本文档中 n 个连续项目的集合,其中可能包括单词、数字、符号和标点符号。 N-gram 模型在许多与单词序列相关的文本分析应用中非常有用,例如情感分析、文本分类和文本生成。 N-gram 建模是用于将文本从非结构化格式转换为结构化格式的众多技术之一。 n-gram 的替代方法是词嵌入技术,例如 word2vec。N-grams 广泛用于文本挖掘和自然语言处理任务。

示例

通过计算每个唯一的 n 元语法在文档中出现的次数,可以创建包含 n 元语法的语言模型。这称为 bag-of-n-grams 模型。

例如[2],对于"The cow jumps over the moon"这句话。如果 N=2(称为二元模型),那么 ngram 将为:

  • the cow
  • cow jumps
  • jumps over
  • over the
  • the moon

所以在这种情况下你有 5 个 n 元语法。请注意,我们从 the->cow 转移到 cow->jumps 到 Jumps->over 等,本质上是向前移动一个单词以生成下一个二元组。

如果 N=3,则 n 元语法将为:

  • the cow jumps
  • cow jumps over
  • jumps over the
  • over the moon

所以在这种情况下你有 4 个 n 元语法。当 N=1 时,这被称为一元语法,本质上是句子中的各个单词。当 N=2 时,称为二元组;当 N=3 时,称为三元组。当N>3时,这通常被称为多元组等等。

  • 一个句子中有多少个 N-gram?

如果 X=给定句子 K 中的单词数量,则句子 K 的 n-gram 数量为:

N-gram 有什么用?

N-gram 用于各种不同的任务。例如,在开发语言模型时,n-gram 不仅用于开发一元模型,还用于开发二元模型和三元模型。谷歌和微软开发了网络规模的 n-gram 模型,可用于各种任务,例如拼写纠正、断词和文本摘要。以下是 Microsoft 公开提供的网络规模 n-gram 模型:http://research.microsoft.com/en-us/collaboration/focus/cs/web-ngram.aspx。这是一篇使用 Web N-gram 模型进行文本摘要的论文:Micropinion Generation: An Unsupervised Approach to Generating Ultra-Concise Summaries of Opinions

n-gram 的另一个用途是为有监督的机器学习模型(例如 SVM、MaxEnt 模型、朴素贝叶斯等)开发特征。其想法是在特征空间中使用二元语法等标记,而不仅仅是一元语法。但请注意,根据我的个人经验和我审阅的各种研究论文,在特征空间中使用二元组和三元组不一定会产生任何显着的改进。

Code

在 python 中生成 n-gram。

复制代码
import re

def generate_ngrams(text,n):

    # split sentences into tokens
    tokens=re.split("\\s+",text)
    ngrams=[]

    # collect the n-grams
    for i in range(len(tokens)-n+1):
       temp=[tokens[j] for j in range(i,i+n)]
       ngrams.append(" ".join(temp))

    return ngrams

如果您使用的是 Python,还有另一种使用 NLTK 的方法:

复制代码
from nltk import ngrams

sentence = '_start_ this is ngram _generation_'
my_ngrams = ngrams(sentence.split(), 3)

Reference [1]

N-gram: https://www.mathworks.com/discovery/ngram.html

2

What: https://kavita-ganesan.com/what-are-n-grams/

本文由mdnice多平台发布

相关推荐
tuan_zhang7 小时前
第七章:未名湖畔的樱花网关
程序人生·云计算
~plus~16 小时前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
~plus~16 小时前
WPF八大法则:告别模态窗口卡顿
开发语言·经验分享·后端·程序人生·c#
空中湖17 小时前
免费批量图片格式转换工具
图像处理·python·程序人生
CIb0la2 天前
Ubuntu 25.10 将默认使用 sudo-rs
linux·程序人生·生活
薛定谔的猫_C8T63 天前
程序人生-Hello’s P2P
c语言·汇编·程序人生·shell·二进制·计算机系统·hello
破晓的历程3 天前
程序员保碗之策
程序人生
xinwulinzi3 天前
HIT-csapp大作业:程序人生-HELLO‘s P2P
程序人生·课程设计·csapp·计算机系统·哈工大
ゾ等ミ流星ジ3593 天前
程序人生-hellohelloo
程序人生·职场和发展
%#RulER#%3 天前
哈工大计算机系统2024大作业——Hello的程序人生
linux·笔记·程序人生