N-grams 词袋模型17 Mar 2025 | 阅读 17 分钟 引言在自然语言处理(NLP)中,N-grams词袋模型(Bag of N-Grams Model)是一种用于以结构化的方式表示文本输入的方法,以便机器学习算法能够利用。N-gram是由特定语音或文本样本中的“N”个连续元素组成的序列。这些元素可以是单词、音节或字符。为了生成用于文本分析的特征集,该模型构建了一个“词袋”(即N-gram的集合)。
在自然语言处理(NLP)中的重要性
与词袋模型(Bag of Words Model)的比较NLP的核心策略包括词袋模型(Bag of Words, BoW)和N-grams词袋模型,但它们之间存在显著差异。
例如,考虑句子“I am happy”
通过比较这些模型可以清楚地看到,N-grams词袋模型能够更复杂地理解文本输入,尤其是在需要检查词语模式和上下文的应用中。 理解N-gramsN-grams是指从特定文本或音频样本中连续的n个元素的组。在自然语言处理(NLP)中,它们的应用范围很广,包括文本分析、语言建模和机器学习应用。根据n的值,有几种方式可以概念化n-grams。 Unigrams当n = 1时,unigram是最基本的n-gram类型。它们代表文档中的特定术语。Unigrams对于简单的文本分析任务很有用,但它们通常缺乏单词组合所提供的上下文。 例如,在句子“The cat sat on the mat”中,unigrams是
BigramsBigrams由连续的两个相邻单词组成(n = 2)。它们考虑了单词对,从而部分捕获了上下文。Bigrams对于破译文本中的单词关系很有用,因为它们比unigrams提供了更多的上下文信息。 使用相同的句子,bigrams是
Trigrams三个单词连续排列构成一个trigram(n = 3)。由于它们识别了三个单词的序列,因此提供了更多的上下文。Trigrams对于更深入的文本分析和语言理解很有用,因为它们可以在短语级别捕获趋势。 从我们的示例句子中,trigrams是
高阶N-Grams高阶n-grams(n > 3)通过包含四个或更多单词来扩展此概念。高阶n-grams需要更高的处理和数据需求,但能够捕获复杂的语言模式。它们对于需要捕获复杂上下文的特定NLP任务尤其有用。 例如,我们句子的4-grams(quad grams)将是
N-Grams示例为了进一步说明这个概念,让我们考虑另一个句子:“Machine learning is fascinating。”
N-grams词袋模型是在自然语言处理(NLP)中一个强大而灵活的工具。 在文本分析中的作用由于它们实现了以下功能,n-grams对于文本分析至关重要。
构建N-grams词袋模型文本预处理步骤在创建n-grams之前,有必要对文本进行预处理,以确保生成的n-grams是相关且有用的。 分词 将文本划分为称为标记(tokens)的更小部分的过程称为标记化(tokenization)。单词、句子或其他重要组成部分都可以作为标记。标记化通常将内容划分为单独的单词。 示例
小写化 小写化是指将文本中的所有字符转换为小写。通过将“Natural”和“natural”等术语视为相同的标记,此步骤有助于文本标准化。 示例
去除标点符号和特殊字符 通常可以从文本中排除标点符号和特殊字符,因为它们不提供任何有用的信息。此阶段会从文本中移除这些字符,使其更干净。 示例
去除停用词 “is”、“and”和“the”等常用词是停用词的例子;在文本分析的上下文中,它们通常意义不大。消除这些术语有助于专注于文本中最重要部分。 示例
从文本生成N-Grams在预处理文本之后,下一步是生成n-grams。N-grams是n个文本元素(单词、字母等)的连续组。 滑动窗口方法 要捕获每个n-gram,滑动窗口方法包括将大小为n的窗口拖过文本。例如,当窗口大小为2(bigrams)时,窗口记录彼此相随的单词对。 示例
对于trigrams(n=3),窗口捕获连续单词的三元组。 示例
处理文本中的边界 在创建n-grams时,必须仔细处理文本边界,特别是对于被分割成句子或页面的文本。
示例
示例
这些预处理步骤和细致的n-gram生成确保了N-grams词袋模型能够捕获文本中的局部上下文和模式,从而为各种NLP应用提供了坚实的基础。 使用N-grams词袋进行特征提取在自然语言处理(NLP)中,特征提取是一个关键阶段,它将未处理的文本转换为适合机器学习算法的数值表示。与词袋模型相比,N-grams词袋模型通过考虑连续的词语序列,捕获了更多的上下文信息。 文本的向量表示频率计数 将文本转换为数值向量的过程,其中每个元素代表N-Gram在文本中出现的次数,称为频率计数。这种方法提供了一种量化文本数据的简单方法。
示例
词频-逆文档频率(TF-IDF) 一种更高级的方法,称为TF-IDF,通过对N-Grams在多个文档中的频率进行加权来衡量其相关性。它减少了可能对文本区分不重要的频繁出现的N-Grams的影响。
![]()
![]()
TF-IDF(t,d) = TF(t,d) * IDF(t) 示例
N-Gram特征的稀疏性由于并非所有潜在的N-Gram都出现在每个文本中,因此N-Gram特征向量通常是稀疏的,尤其是在N值较高的情况下。这种稀疏性可能导致计算和存储效率低下。
降维技术我们使用降维方法来处理稀疏性。通过保留重要信息,这些方法有助于将高维N-Gram特征空间转换为低维空间。 主成分分析 (PCA) 主成分分析(PCA)是一种统计方法,它将数据转换为一组线性不相关的变量。通过沿方差最大的方向投影数据,它降低了维度。
奇异值分解(SVD) SVD是一种矩阵分解技术,它将矩阵分解为三个矩阵:U、Σ和V^T。SVD在处理N-Gram特征时,有助于降低维度并保持数据的结构。
N-grams词袋模型的应用文本分类情绪分析 识别文本内容(如社交媒体帖子或产品评论)中传达的情感或情绪称为情感分析。通过考虑词语序列(n-grams)而不是单个词语,N-grams词袋模型有助于捕获上下文和细微差别。Unigrams“not”、“good”、“very”和“happy”不像bigrams“not good”或“very happy”那样传达相同的情感信息。 示例工作流程
垃圾邮件检测 识别电子邮件或通信是否为垃圾邮件的过程称为垃圾邮件检测。通过识别垃圾邮件通信中常见的词语和模式,N-grams词袋模型提高了检测的准确性。 示例工作流程
文本聚类文本聚类是将相关的文本分组到一个集合中,而无需提前分配标签。通过考虑词语序列,N-grams词袋模型有助于查找文本中的模式和相似性。 示例工作流程
语言建模语言建模是预测序列中的下一个单词,用于文本生成和语音识别等任务。使用n-gram出现的概率,N-grams词袋模型提供了一种简单而强大的语言建模方法。 示例工作流程
信息检索信息检索是指根据查询查找相关文档或信息的过程。N-grams词袋模型考虑了n-grams提供的上下文,从而提高了检索的准确性。 示例工作流程
机器翻译将文本从一种语言翻译成另一种语言称为机器翻译。统计机器翻译系统使用N-grams词袋模型来捕获局部上下文,从而提高翻译质量。 示例工作流程
N-grams词袋模型的优点捕获局部上下文N-grams词袋模型能够识别文本中的局部上下文是其主要优点之一。与单独处理单词的词袋模型不同,N-grams词袋模型考虑了词语序列。这种方法可以更清晰地理解单词之间的关系。例如,在句子“The quick brown fox”中,bigram模型通过识别“quick brown”和“brown fox”作为重要单元,可以保留unigram模型会丢失的上下文。此功能对于情感分析等任务尤其有用,因为单词组合和顺序会极大地改变语句的含义。 与Unigrams相比,在特定任务中性能更好在多种自然语言处理(NLP)任务中,N-grams词袋模型的性能优于更简单的词袋模型。这种改进在上下文和词语顺序起重要作用的任务中尤为明显。例如,在垃圾邮件检测或情感分析等文本分类应用程序中,bigrams和trigrams可能比单个单词提供更具辨别力的特征。该模型考虑相邻单词对或三元组的能力,通过识别代表特定类别或情感的短语和表达式,提高了分析的准确性和鲁棒性。 选择N的灵活性N-grams词袋模型能够选择N值也提供了另一个重要好处。根据文本的性质和使用的特定任务,可以通过使用不同数量的N来优化效率。例如,trigrams(N=3)可能更适合需要更多上下文的任务,如命名实体识别或复杂的语言建模,而bigrams(N=2)通常足以在情感分析中捕获局部上下文。这种适应性在模型复杂性和计算效率之间取得了平衡,使从业人员和研究人员能够测试不同的N值,以寻求其特定应用的最佳表示。 ## 7. N-grams词袋模型的局限性 N-grams词袋模型的局限性维度灾难N-Gram词袋模型经常受到维度灾难的影响,即随着N的增大,特征(N-Grams)的数量呈指数级增长。例如,包含10,000个不同单词的词汇量的文本语料库可以生成多达10,000^2个bigrams(1亿)和10,000^3个trigrams(1万亿)。从潜在N-Gram总数的急剧增加中可能出现大量问题。
数据稀疏性问题N-grams词袋模型的另一个重大障碍是数据稀疏性。随着N-Grams数量的增加,许多N-Grams可能很少出现或根本不出现在文本语料库中。
缺乏语义理解
可伸缩性问题在大型文本语料库上使用N-grams词袋模型时,可伸缩性是一个主要挑战。随着数据集的增大,上述限制变得更加明显。
在 Python 中实现使用NLTK生成N-Grams对于Python中的人类语言数据处理,自然语言工具包(NLTK)提供了广泛的工具集。它提供了文本处理工具集以及对50多个语料库和词汇资源的友好接口。 使用NLTK生成N-Grams的分步指南 1. 安装NLTK 首先,确保您已安装NLTK。如果没有,您可以使用pip进行安装。 2. 导入所需的库 导入必要的库以开始处理文本数据和N-grams。 3. 下载必要的NLTK数据 NLTK需要一些数据集和预训练的模型,可以使用以下命令下载 4. 生成N-Grams 定义一个函数来从给定文本生成N-grams。 N-grams词袋模型的示例代码要构建N-grams词袋模型,首先必须从文本输入创建N-grams,然后将其转换为适合机器学习应用程序的特征矩阵。 分步示例 1. 导入库 2. 示例文本数据 准备一些示例文本数据。 3. 生成N-Grams 为CountVectorizer创建一个自定义分词器函数。 与机器学习管道集成Scikit-Learn 对于Python机器学习,Scikit-Learn是一个强大的库。将N-grams包含在Scikit-Learn管道中可以轻松创建和评估模型。 1. 导入库 2. 示例数据 准备文本和标签。 3. 创建管道 TensorFlow/KerasTensorFlow和Keras等强大的框架可用于更复杂的深度学习任务。 1. 导入库 2. 准备数据 3. 构建和训练模型 结论通过扩展词袋模型来捕获词语序列并保留单个单词无法提供的上下文,N-grams词袋模型是在自然语言处理(NLP)中一个强大而灵活的工具。这种技术在需要理解词语组合以提高性能的情况下特别有用,例如文本分类、情感分析和语言建模。通过生成N-grams(来自给定文本的n个元素的连续序列),该模型能够更好地区分不同的文本模式并捕获局部词语依赖关系。N-grams词袋模型具有优势,但也存在缺点,包括更高的维度和数据稀疏性,这需要使用高级嵌入和降维技术。然而,正确使用时,该模型仍然是自然语言处理(NLP)的基石,在易用性和捕获重要词语关联的能力之间取得了合理的折衷。 下一个主题TF-IDF模型 |
我们请求您订阅我们的新闻通讯以获取最新更新。