当前位置: 首页 > ds >正文

探索大语言模型(LLM):词袋法(Bag of Words)原理与实现

文章目录

  • 引言
  • 一、词袋法原理
    • 1.1 核心思想
    • 1.2 实现步骤
  • 二、数学公式
    • 2.1 词频表示
    • 2.2 TF-IDF加权(可选)
  • 三、示例表格
    • 3.1 构建词汇表
    • 3.2 文本向量化(词频)
  • 四、Python代码实现
    • 4.1 基础实现(手动计算)
    • 4.2 输出结果
    • 4.3 TF-IDF加权实现
  • 五、注意事项
  • 六、总结


引言

词袋法(Bag of Words, BoW)是自然语言处理(NLP)中最基础的文本向量化方法之一。它通过统计文本中词汇的出现频率,将非结构化的文本转换为结构化的数值向量,为后续的机器学习任务(如分类、聚类)提供输入。本文将系统讲解词袋法的原理、数学公式、实现步骤,并通过代码演示其完整流程。

一、词袋法原理

1.1 核心思想

词袋法将文本视为一个“袋子”,忽略语法、词序和句子结构,仅关注词汇的出现与否或出现次数。例如:

  • 文本1:“I love NLP”
  • 文本2:“NLP is fun”

词袋法会将这两个文本转换为向量,维度由所有唯一词汇构成,每个维度表示对应词汇的权重(如词频或TF-IDF值)。

1.2 实现步骤

  1. 构建词汇表:统计所有文本中的唯一词汇,形成词汇表 V = w 1 , w 2 , . . . , w N V={w_1,w_2,...,w_N} V=w1,w2,...,wN,其中 N 为词汇表大小。
  2. 文本向量化:对每个文本 d,生成一个 N 维向量 v d v_d vd,其中第 i 个元素表示词汇 w i w_i wi在 d 中的权重。

二、数学公式

2.1 词频表示

向量 v d v_d vd的第 i 个元素为词频(Term Frequency, TF):
v d , i = c o u n t ( w i ∈ d ) v_{d,i}=count(w_i∈d) vd,i=count(wid)

2.2 TF-IDF加权(可选)

为降低常见词(如“the”、“is”)的权重,可使用TF-IDF:

T F − I D F ( w i , d ) = T F ( w i , d ) × l o g ( 1 + D 1 + D F ( w i ) ) TF-IDF(w_i,d)=TF(w_i ,d)×log( \frac{1+D}{1+DF(w_i)}) TFIDF(wi,d)=TF(wi,d)×log(1+DF(wi)1+D)
其中:

  • D D D为总文档数
  • D F ( w i ) DF(w_i) DF(wi)为包含词汇 w i w_i wi的文档数

三、示例表格

假设有以下三个文档:

文档ID文本内容
D1“cat sits on mat”
D2“dog sits on mat”
D3“cat chases mouse”

3.1 构建词汇表

V = { c a t , s i t s , o n , m a t , d o g , c h a s e s , m o u s e } ( N = 7 ) V=\{cat, sits, on, mat, dog, chases, mouse\}(N=7) V={cat,sits,on,mat,dog,chases,mouse}(N=7)

3.2 文本向量化(词频)

文档catsitsonmatdogchasesmouse
D11111000
D20111100
D31000011

四、Python代码实现

4.1 基础实现(手动计算)

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer# 示例文档
documents = ["cat sits on mat","dog sits on mat","cat chases mouse"
]# 1. 构建词汇表并向量化
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)# 2. 输出结果
print("词汇表:", vectorizer.get_feature_names_out())
print("向量矩阵:\n", X.toarray())

4.2 输出结果

词汇表: ['cat' 'chases' 'dog' 'mat' 'mouse' 'on' 'sits']
向量矩阵:[[1 0 0 1 0 1 1][0 0 1 1 0 1 1][1 1 0 0 1 0 0]]

4.3 TF-IDF加权实现

from sklearn.feature_extraction.text import TfidfVectorizer# 使用TF-IDF向量化
tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(documents)print("TF-IDF向量矩阵:\n", X_tfidf.toarray())

五、注意事项

  • 维度灾难:词汇表大小随数据量增长,可能导致高维稀疏矩阵。
  • 语义丢失:忽略词序和上下文(如“不喜欢”和“喜欢”无法区分)。
  • 预处理关键性:需结合停用词过滤、词干提取(如Porter Stemmer)提升效果。

六、总结

词袋法通过简单的统计实现了文本的数值化,是NLP任务的基石。尽管存在局限性,但其思想仍被广泛应用于早期文本分类系统(如垃圾邮件过滤)。对于需要语义理解的任务,可进一步探索Word2Vec、BERT等深度学习模型。

http://www.xdnf.cn/news/4971.html

相关文章:

  • 参考文献怎么对齐操作
  • Python 基础知识
  • 网络流量分析 | Snort
  • LeetCode 216.组合总和 III:回溯算法实现与剪枝优化
  • SpringBoot快速入门WebSocket(​​JSR-356附Demo源码)
  • 为何Google广告频繁拒登?常见原因与解决方法
  • 图表制作-折线图堆叠
  • 允许别的电脑连接我电脑wsl下5001、5002端口
  • 枚举 · 例13-【模板】双指针
  • 《Scala基础》
  • DeepSeek 赋能金融:从智能分析到高效服务的全链路革新
  • WHAT - react-query(TanStack Query) vs swr 请求
  • VUE——自定义指令
  • LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
  • IEEE PRMVAI Workshop 17 | 智能医疗数据分析与应用
  • Baklib云中台赋能企业内容智管
  • Kubernetes外部访问服务全攻略:生产级方案详解
  • 12.hbase 源码构建
  • PFC(Power Factor Correction)功率因数校正电路
  • 金蝶api对接沙箱环境python代码调试
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)
  • 【Bluedroid】蓝牙 SDP(服务发现协议)模块代码解析与流程梳理
  • linux动态占用cpu脚本、根据阈值增加占用或取消占用cpu的脚本、自动检测占用脚本状态、3脚本联合套用。
  • java使用MinIO,虚拟机时间异常
  • 低秩适应(LoRA)与量化LoRA(QLoRA)技术解析
  • ‌CDGP|数据治理:探索企业数据有序与安全的解决之道
  • Web 自动化之 HTML JavaScript 详解
  • OpenCV-Python (官方)中文教程(部分一)_Day22
  • 云服务如何简化物联网设备生命周期(How Cloud Services Simplify IoT Device Lifecycles)?
  • 摄像头模组AF、OIS模组