首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 7.7 多个单词的词袋(n元分词) 在自然语言处理(NLP)和机器学习领域,处理文本数据时经常需要将文本转换为计算机能够理解和处理的数值形式。词袋模型(Bag of Words, BoW)是一种简单而有效的文本表示方法,它将文本视为一系列词汇的集合,忽略了词汇之间的顺序和语法结构。然而,在处理复杂文本时,仅仅依赖单个词汇可能不足以捕捉足够的上下文信息。这时,n元分词(n-gram)技术便应运而生,它作为词袋模型的一种扩展,通过考虑连续的n个词汇(或字符)的组合来丰富文本的表示,从而提高模型的性能。 #### 7.7.1 理解n元分词 **定义**:n元分词(n-gram)是指文本中连续出现的n个元素(如字符、单词等)的序列。其中,n是一个正整数,决定了序列的长度。根据n的不同,n元分词可以分为字符级n元分词(如1-gram, 2-gram, ...)、单词级n元分词(word-level n-grams)等。在NLP中,最常见的是单词级n元分词。 - **1-gram**(或称为unigram):单个词汇的集合,即传统的词袋模型。 - **2-gram**(bigram):连续两个词汇的组合。 - **3-gram**(trigram):连续三个词汇的组合,以此类推。 **优点**: 1. **捕捉上下文**:n元分词能够捕捉词汇之间的局部关系,这对于理解句子含义至关重要。 2. **减少数据稀疏性**:通过增加词汇组合,可以生成更多的特征,从而在一定程度上缓解数据稀疏性问题。 3. **提高模型性能**:在许多NLP任务中,如文本分类、情感分析等,使用n元分词可以显著提高模型的准确率。 **缺点**: 1. **计算复杂度**:随着n的增加,特征空间呈指数级增长,可能导致计算复杂度和存储需求的显著增加。 2. **噪声引入**:不常见的n元组合可能只是噪声,对模型性能产生负面影响。 3. **语义鸿沟**:n元分词虽然能捕捉局部关系,但可能无法跨越句子或段落的界限,存在语义鸿沟。 #### 7.7.2 实现n元分词 在Python中,实现n元分词可以通过多种方式进行,包括使用标准库如`collections.Counter`,或者利用专门的NLP库如NLTK、spaCy、Gensim等。以下是一个使用Python标准库实现的简单示例,展示了如何生成单词级n元分词。 ```python from collections import Counter def generate_ngrams(text, n): """ 生成单词级n元分词 :param text: 输入文本 :param n: n-gram的n值 :return: n元分词的Counter对象 """ tokens = text.split() # 假设文本已经通过某种方式分词 ngrams = zip(*[tokens[i:] for i in range(n)]) return Counter([' '.join(ngram) for ngram in ngrams]) # 示例文本 text = "Python is a widely used high-level programming language for general-purpose programming." # 生成2-gram bigrams = generate_ngrams(text, 2) print("Bigrams:", bigrams) # 生成3-gram trigrams = generate_ngrams(text, 3) print("Trigrams:", trigrams) ``` 注意:上述代码示例中,`text.split()`简单地将文本按空格分割成单词,这在实际应用中可能不够准确,因为文本中可能包含标点符号、缩写等。因此,在分词前通常需要进行更复杂的文本预处理步骤,如使用正则表达式去除标点符号、将缩写转换为完整形式等。 #### 7.7.3 n元分词在机器学习中的应用 n元分词在机器学习领域有着广泛的应用,特别是在文本分类、情感分析、命名实体识别等任务中。以下是一些具体的应用场景: 1. **文本分类**:在文本分类任务中,使用n元分词作为特征可以捕捉文本中的局部模式,帮助分类器更好地区分不同类别的文本。例如,在垃圾邮件检测中,某些特定的2-gram或3-gram组合可能高度指示邮件为垃圾邮件。 2. **情感分析**:情感分析旨在判断文本所表达的情感倾向(如正面、负面、中性)。通过n元分词,可以捕捉表达情感的关键词汇组合,从而提高情感分析的准确性。例如,“very good”和“not good”虽然都包含“good”,但情感倾向截然不同,n元分词能够区分这种差异。 3. **命名实体识别**:命名实体识别(Named Entity Recognition, NER)是NLP中的一个基础任务,旨在从文本中识别出具有特定意义的实体(如人名、地名、机构名等)。n元分词可以帮助模型识别出由多个单词组成的实体名称。 #### 7.7.4 注意事项与优化 1. **选择合适的n值**:n的选择取决于具体任务和数据集。较小的n值可以捕获更多的频繁模式,但可能忽略重要的上下文信息;较大的n值可以捕获更丰富的上下文信息,但可能导致数据稀疏性和计算复杂度增加。 2. **停用词处理**:在生成n元分词时,通常需要从文本中移除停用词(如“的”、“是”、“在”等常见但无具体意义的词汇),以减少噪声并降低特征空间的维度。 3. **特征选择**:可以通过频率过滤(如只保留出现次数超过某个阈值的n元分词)、信息增益、卡方检验等方法进行特征选择,以提高模型的效率和性能。 4. **平滑技术**:为了处理数据稀疏性问题,可以使用平滑技术(如拉普拉斯平滑、古德-图灵平滑等)对n元分词的频率进行修正。 综上所述,n元分词作为词袋模型的一种重要扩展,在NLP和机器学习领域发挥着重要作用。通过合理应用n元分词技术,可以显著提升文本处理任务的性能和效果。
上一篇:
7.6 研究模型系数
下一篇:
7.8 分词、词干提取与词形还原
该分类下的相关小册推荐:
Python编程轻松进阶(五)
Python机器学习基础教程(上)
Python合辑1-Python语言基础
剑指Python(磨刀不误砍柴工)
Python编程轻松进阶(四)
Python编程轻松进阶(三)
Python合辑12-面向对象
Python爬虫入门与实战开发(上)
Python合辑8-变量和运算符
实战Python网络爬虫
Python3网络爬虫开发实战(下)
Python合辑14-面向对象编程案例(下)