4、文本表示方法(一):词袋模型(Bag of Words)、TF-IDF、N-gram,以及它们的优缺点和适用场景
在NLP文本分类与意图识别任务中,文本表示是连接原始文本与机器学习模型之间的桥梁。计算机无法直接理解自然语言,必须将文本转换为数值向量。词袋模型、TF-IDF和N-gram是最经典且应用最广泛的文本表示方法,它们构成了现代文本特征工程的基石。理解这些方法的数学原理、优缺点和适用场景,是构建高效分类模型的前提。本章将系统讲解这三种方法的核心机制,并通过案例对比帮助你在实际项目中做出合理选择。
4.1 词袋模型(Bag of Words)
4.1.1 核心原理
词袋模型是最直观的文本向量化方法。其核心思想是:将文本看作一个无序的词集合,忽略语法和词序,仅统计每个词在文档中出现的次数。具体实现分为三步:第一步,构建词表(Vocabulary),即语料中所有不重复词的集合;第二步,为每个文档创建一个与词表等长的向量;第三步,遍历文档中的每个词,在向量对应位置累加计数。
例如,两句话“我喜欢自然语言处理”和“自然语言处理很有趣”,词表为{我,喜欢,自然,语言,处理,很,有趣},则第一句的向量为[1,1,1,1,1,0,0],第二句为[0,0,1,1,1,1,1]。这种表示方式将文本转化为固定长度的数值向量,可直接输入机器学习模型。
4.1.2 操作流程与判断方法
- 文本预处理:分词、去停用词、词干提取/词形还原,降低特征维度。
- 构建词表:统计所有文档中的词频,可设置min_df和max_df过滤低频词和高频词。
- 向量化:使用sklearn的CountVectorizer或手动实现,生成文档-词频矩阵。
- 模型训练:将稀疏矩阵输入分类器(如朴素贝叶斯、逻辑回归)。
4.1.3 案例拆解:电商评论情感分类
假设我们有一个电商评论数据集,共10000条评论,标注为正面/负面。使用词袋模型进行情感分类的流程如下:
| 步骤 | 操作 | 参数/结果 |
|---|---|---|
| 1. 预处理 | 分词、去停用词 | 词表初始约50000词 |
| 2. 过滤 | min_df=2, max_df=0.8 | 词表缩减至12000词 |
| 3. 向量化 | CountVectorizer | 10000×12000稀疏矩阵 |
| 4. 分类器 | 朴素贝叶斯 | 准确率82.3% |
该案例中,词袋模型简单高效,但存在明显问题:高频词如“不错”在正面评论中频繁出现,但“不错”在负面评论中也可能出现(如“包装不错但质量差”),导致误分类。这说明词袋模型忽略了词序和上下文信息。
4.1.4 常见误区与总结
总结:词袋模型适合短文本、类别区分度高的任务(如垃圾邮件过滤、简单情感判断),其优势在于实现简单、计算快速、可解释性强;劣势在于无法捕捉词序、语义和上下文信息。
4.2 TF-IDF(词频-逆文档频率)
4.2.1 核心原理
TF-IDF在词袋模型基础上引入了权重机制,用于评估一个词对某篇文档的重要程度。其核心思想是:如果一个词在文档中频繁出现(TF高),但在整个语料中很少出现(IDF高),则该词具有很好的区分能力。计算公式为:
TF-IDF(t,d) = TF(t,d) × IDF(t)
IDF(t) = log((N+1) / (DF(t)+1)) + 1
其中,TF(t,d)是词t在文档d中的出现次数,N是文档总数,DF(t)是包含词t的文档数。加1平滑避免除零,log压缩IDF值范围。
4.2.2 操作流程与调优方法
- 参数选择:sublinear_tf=True(对TF取log)、min_df/max_df过滤、norm='l2'归一化。
- 与分类器配合:TF-IDF特征适合线性模型(逻辑回归、SVM),不适合树模型(因稀疏性)。
- 降维处理:可结合卡方检验或互信息选择Top-K特征。
4.2.3 案例拆解:新闻主题分类
使用TF-IDF对20000篇新闻进行分类(体育、财经、科技、娱乐)。关键步骤与结果:
| 方法 | 特征维度 | 准确率 | 训练时间 |
|---|---|---|---|
| 词袋模型 | 80000 | 88.1% | 12s |
| TF-IDF | 80000 | 92.7% | 15s |
| TF-IDF+卡方选择Top20000 | 20000 | 93.2% | 8s |
结果显示,TF-IDF比词袋模型准确率提升4.6个百分点,且通过特征选择后维度降低75%,训练速度反而更快。这说明TF-IDF的权重机制有效提升了特征质量。
4.2.4 常见误区与总结
总结:TF-IDF是文本分类中最常用的基线方法,在多数任务中优于词袋模型。它适合中长文本、主题明显的分类任务,计算复杂度低,可解释性强。但需注意,它仍是基于词频的统计方法,无法捕捉语义和上下文。
4.3 N-gram模型
4.3.1 核心原理
N-gram模型通过将连续的N个词(或字符)作为一个整体特征,部分保留了词序信息。当N=1时退化为词袋模型;N=2时称为Bigram,N=3时称为Trigram。例如,“我不喜欢”的Bigram特征为“我不”“不喜”“喜欢”。N-gram能捕捉局部短语搭配,如“非常棒”比单独的“非常”和“棒”更具情感倾向。
4.3.2 操作流程与参数选择
- 确定N值:N=2或3最常用,N越大特征维度爆炸式增长。
- 特征组合:可同时使用Unigram+Bigram,兼顾覆盖率和词序信息。
- 剪枝策略:设置min_df过滤低频N-gram,或使用特征选择保留Top-K。
4.3.3 案例拆解:短文本意图识别
在智能客服系统中,需要识别用户意图(如“查余额”“办理挂失”“投诉”)。使用不同N-gram配置的对比:
| 配置 | 特征数 | 准确率 | 召回率 |
|---|---|---|---|
| Unigram | 3500 | 84.5% | 83.1% |
| Bigram | 12000 | 89.2% | 88.0% |
| Unigram+Bigram | 15500 | 91.8% | 90.5% |
| Unigram+Bigram+Trigram | 28000 | 92.1% | 91.0% |
从结果看,Unigram+Bigram组合性价比最高,准确率比纯Unigram提升7.3个百分点,而加入Trigram仅提升0.3个百分点,但特征数增加80%。这说明在短文本场景中,Bigram已能捕捉足够的局部词序信息。
4.3.4 常见误区与总结
总结:N-gram适合需要保留局部词序的任务,如短文本分类、情感分析、语言识别。它比词袋模型信息量更丰富,但计算开销更大。在实际应用中,建议从Unigram+Bigram组合开始,根据验证集效果决定是否增加Trigram。
4.4 三种方法对比与选择策略
| 维度 | 词袋模型 | TF-IDF | N-gram |
|---|---|---|---|
| 核心机制 | 词频统计 | 词频×逆文档频率 | 连续N词组合 |
| 词序信息 | 无 | 无 | 局部保留 |
| 特征维度 | 词表大小 | 词表大小 | 词表大小^N |
| 稀疏性 | 高 | 高 | 极高 |
| 计算复杂度 | 低 | 低 | 中高 |
| 可解释性 | 强 | 强 | 中 |
| 适用场景 | 短文本、简单分类 | 中长文本、主题分类 | 短文本、情感分析 |
| 典型算法 | 朴素贝叶斯 | 逻辑回归、SVM | 逻辑回归、SVM |
4.5 综合案例:电商评论情感分析系统
背景与约束:某电商平台需要构建评论情感分析系统,数据为50万条用户评论,平均长度约30字。业务要求:准确率不低于90%,推理延迟小于10ms,模型可解释。
初始现象:使用词袋模型+逻辑回归,准确率仅85.2%,且对“物流慢但质量好”这类混合情感评论误判严重。
分析判断:词袋模型无法区分“慢”和“好”分别修饰的对象,需要引入局部词序信息。同时,评论中存在大量“不错”“还行”等模糊词,需要TF-IDF抑制其权重。
实际操作:
- 预处理:分词、去停用词、保留情感词和程度副词。
- 特征构建:使用TF-IDF加权Unigram+Bigram,min_df=3,max_features=50000。
- 模型选择:逻辑回归(L2正则化,C=1.0)。
- 验证:5折交叉验证,准确率91.3%,推理延迟3ms。
结果对比:相比纯词袋模型,准确率提升6.1个百分点;相比纯TF-IDF,提升2.8个百分点。混合情感评论的误判率从18%降至7%。
风险与代价:特征维度从8000增至50000,内存占用增加约3倍,但通过稀疏矩阵存储和在线预测优化,实际内存占用仅增加120MB。模型可解释性略有下降,但通过查看Top特征权重仍可追溯关键决策依据。
复盘经验:在短文本场景中,TF-IDF+Bigram是性价比最高的组合。若业务对延迟敏感,可考虑使用特征选择将维度压缩至20000,准确率仅下降0.4个百分点,但推理速度提升40%。