掘金 人工智能 05月08日 15:23
探索大语言模型(LLM):词袋法(Bag of Words)原理与实现
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入浅出地介绍了自然语言处理(NLP)中最基础的文本向量化方法——词袋法(Bag of Words, BoW)。文章详细阐述了词袋法的核心思想、实现步骤以及数学公式,包括词频表示和TF-IDF加权。通过示例表格和Python代码,展示了如何手动计算和使用sklearn库实现词袋法。同时,也指出了词袋法的局限性,如维度灾难和语义丢失,并提出了预处理的重要性。最后,总结了词袋法在NLP任务中的地位,并展望了更高级的文本向量化方法。

💡核心思想:词袋法将文本视为词汇的集合,忽略语法和词序,关注词汇的出现频率,将文本转换为数值向量。

🔢实现步骤:包括构建词汇表(统计所有文本中的唯一词汇)和文本向量化(生成N维向量,表示词汇在文本中的权重)。

⚖️TF-IDF加权:为了降低常见词的权重,可以使用TF-IDF(词频-逆文档频率)加权方法,公式为TF−IDF(wi,d)=TF(wi,d)×log(1+D1+DF(wi))。

🐍Python实现:文章提供了使用sklearn库的CountVectorizer和TfidfVectorizer进行词袋法和TF-IDF向量化的代码示例。

⚠️注意事项:词袋法存在维度灾难和语义丢失等局限性,需要结合停用词过滤、词干提取等预处理方法来提升效果。

引言

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

一、词袋法原理

1.1 核心思想

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

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

1.2 实现步骤

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

二、数学公式

2.1 词频表示

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

2.2 TF-IDF加权(可选)

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

TFIDF(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)})

其中:

三、示例表格

假设有以下三个文档:

文档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)

3.2 文本向量化(词频)

文档catsitsonmatdogchasesmouse
D11111000
D20111100
D31000011

四、Python代码实现

4.1 基础实现(手动计算)

import numpy as npfrom 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())

五、注意事项

六、总结

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

词袋法 NLP 文本向量化 TF-IDF sklearn
相关文章