[智能体-273]:词袋模型(BoW)完整详解:背景 + 解决问题 + 原理 + 实例 + 应用
一、诞生背景在One-Hot 单字编码阶段One-Hot 只能对单个词语数字化没办法把整段文本转为机器学习能计算的特征机器学习朴素贝叶斯、SVM、逻辑回归只能接收数值向量不能直接处理字符串早期没有 Word2Vec、BERT缺少文本向量化方案。词袋Bag-of-Words应运而生把整篇文档转为数字向量打通「自然文本→机器数值特征」。时序链路ASCII→String→OneHot (单个词)→BoW (整句向量化)→TF-IDF→Word2Vec→BERT→BGE二、词袋要解决的核心问题问题 1原始字符串无法输入机器学习模型计算机不能直接识别中文 / 英文句子BoW 实现文本→数值向量。问题 2OneHot 只能编码单个词不能表示文档BoW 基于全局词典一次性完成整篇文档编码。问题 3快速低成本构建文本特征无需神经网络训练无监督、不用训练、规则统计早年算力不足下最优落地方案。⚠️ 词袋不能解决语序理解、词语语义关联苹果 / 香蕉同类识别这是后续 Word2Vec 解决的。三、工作原理核心抛弃语序只统计词出现频次四大执行步骤文档分词把句子切分成独立词语构建全局词典所有文档词语去重固定词典顺序词典长度 向量维度逐文档统计每个词出现次数填充向量。实操示例手工演算向量的维度与单词的总数一致每个维度代表一个单词也就是说每个单词都各自拥有一个维度的信息用于单词的统计数量或频次这样每句话就拥有了在每个单词维度的投影信息单词在句子中出现的频次这就是文本向量的原型在这里不需要词向量后者说词向量相等于采用的onehot编码。致命特性完全舍弃语序狗咬人、人咬狗分词相同词袋向量一模一样无法区分语义。四、词袋改进TF-IDF优化高频虚词权重普通 BoW只统计次数「我、爱吃」这类高频通用词权重过大TF词在当前文档出现频次IDF词在全部文档的稀缺度越少出现权重越高作用压低通用助词权重放大专属关键词权重。五、优缺点总结优点原理简单、实现快、不需要训练小样本、低算力环境快速生成文本特征。缺点丢失语序、语法信息无词语语义苹果、香蕉同属水果但向量无相似度词典越大向量越稀疏、维度爆炸。六、落地应用场景垃圾邮件过滤BoW 提取邮件关键词特征 朴素贝叶斯经典工业老方案新闻分类体育 / 财经 / 科技新闻分类基线模型早期搜索引擎关键词检索基于词频粗筛选文档情感分析基线影评好评 / 差评简易分类。现状高精度语义任务淘汰 BoW改用 Word2Vec/BGE简单分类、小样本仍可做基线对比。七、Python 代码示例python运行from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer # 原始语料 corpus [ 我爱吃苹果, 我爱吃香蕉, 苹果很甜 ] #1.基础词袋Count bow CountVectorizer() bow_vec bow.fit_transform(corpus).toarray() print(词典,bow.get_feature_names_out()) print(词袋矩阵\n,bow_vec) #2.TF-IDF词袋 tfidf TfidfVectorizer() tf_vec tfidf.fit_transform(corpus).toarray() print(TF-IDF矩阵\n,tf_vec)八、前后技术承接BoW计数向量化、无序、无语义Word2Vec上下文训练、稠密向量、近义词靠近弥补词袋短板BERT动态向量、一词多义BGE段落整体语义表征