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

引言

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

一、词袋法原理

1.1 核心思想

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

  • 文本1:"I love NLP"
  • 文本2:"NLP is fun"

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

1.2 实现步骤

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

二、数学公式

2.1 词频表示

向量vdv_dvd​的第 i 个元素为词频(Term Frequency, TF): vd,i=count(wi∈d)v_{d,i}=count(w_i∈d)vd,i​=count(wi​∈d)

2.2 TF-IDF加权(可选)

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

TF−IDF(wi,d)=TF(wi,d)×log(1+D1+DF(wi))TF-IDF(w_i,d)=TF(w_i ,d)×log( \frac{1+D}{1+DF(w_i)})TF−IDF(wi​,d)=TF(wi​,d)×log(1+DF(wi​)1+D​)

其中:

  • DDD为总文档数
  • DF(wi)DF(w_i)DF(wi​)为包含词汇wiw_iwi​的文档数

三、示例表格

假设有以下三个文档:

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

3.1 构建词汇表

V={cat,sits,on,mat,dog,chases,mouse}(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 基础实现(手动计算)

 

python

体验AI代码助手

代码解读

复制代码

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 输出结果

 

python

体验AI代码助手

代码解读

复制代码

词汇表: ['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加权实现

 

python

体验AI代码助手

代码解读

复制代码

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等深度学习模型。

作者:imtoken
链接:https://www.chinaqicheng.com/post/75011532818019934340
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值