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

词袋(Bag of Words, BoW)

词袋(Bag of Words, BoW)模型详解

词袋(BoW)是一种用于文本处理的特征提取方法,常用于自然语言处理(NLP)任务中。在BoW模型中,文本被表示为一个词的无序集合,而忽略了词的顺序和语法结构。

工作原理
  1. 词汇表的构建:首先,BoW会构建一个词汇表,包含在所有文档中出现的独特词汇。
  2. 文档表示:接下来,每个文档都通过词汇表转化为向量。这个向量的长度与词汇表中的词数相同,每个位置表示一个词的出现次数。这样,文档就可以通过这个向量来表示。
词袋模型的主要特点
  • 词频计数:词袋模型只关心某个词在文档中出现的频率(也可以是二元计数:出现或不出现)。
  • 忽略词序:它不关心词的顺序,即"我爱你"和"你爱我"会被表示为相同的向量。
  • 稀疏表示:由于每个文档只包含词汇表中的一部分词,词袋向量大部分位置为零,属于典型的稀疏向量。
BoW模型的优缺点
  • 优点
    • 简单易懂,计算量小。
    • 对大多数文本分类问题表现良好。
  • 缺点
    • 忽略了词语的顺序和语法结构。
    • 无法处理同义词,且会被停用词(如"的", “是”)影响。
    • 需要较大的词汇表,可能导致高维稀疏矩阵。

Python 实现词袋模型

我们可以使用sklearn库中的CountVectorizer来构建词袋模型。下面是一个例子。

示例代码
from sklearn.feature_extraction.text import CountVectorizer# 样本文档
documents = ["I love machine learning. Machine learning is amazing.","I love coding in Python. Python is great for machine learning.","Natural Language Processing with Python and machine learning is fun."
]# 初始化 CountVectorizer
vectorizer = CountVectorizer()# 将文本转化为词袋模型
X = vectorizer.fit_transform(documents)# 获取词汇表
vocab = vectorizer.get_feature_names_out()# 输出词汇表
print("词汇表:", vocab)# 输出稀疏矩阵
print("词袋模型的稀疏表示:\n", X)# 将稀疏矩阵转换为稠密矩阵(便于查看)
print("词袋模型的稠密表示:\n", X.toarray())
输出解析
  1. 词汇表:程序首先会提取出所有文档中的唯一词汇。例如,['and', 'amazing', 'coding', 'for', 'fun', ...]
  2. 稀疏矩阵:文档中的每个词对应词汇表中的一个位置,矩阵中的值表示该词在文档中的出现频次。
  3. 稠密矩阵:将稀疏矩阵转化为密集的矩阵,使得每一行都对应于一个文档,每个单元格表示词汇表中对应词汇在该文档中出现的次数。例如,某一行代表文档1,某一列代表词汇表中的某个词,数值为该词在文档1中出现的次数。
运行结果

假设词汇表是这样的:

['amazing', 'and', 'coding', 'for', 'fun', 'great', 'in', 'is', 'language', 'learning', 'love', 'machine', 'natural', 'processing', 'python', 'with']

稠密矩阵可能像这样:

[[1 0 0 0 0 0 0 1 0 2 1 2 0 0 0 0][0 0 1 1 0 1 1 1 0 1 1 1 0 0 2 0][0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 1]]
  • 第一行表示文档1的词频,其中“amazing”出现了1次,“is”出现了1次,“learning”出现了2次,依此类推。
  • 第二行表示文档2,类似地解释每个词的出现频率。

总结

词袋模型是一种简单且有效的文本表示方法,常用于文本分类、文本聚类等任务中。通过sklearn中的CountVectorizer,可以轻松实现词袋模型,并将文档转化为机器学习模型所需的特征向量。

http://www.lryc.cn/news/451345.html

相关文章:

  • HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA
  • 宁夏众智科技OA办公系统存在SQL注入漏洞
  • Spring邮件发送:配置与发送邮件详细步骤?
  • iPhone/iPad技巧:如何解锁锁定的 iPhone 或 iPad
  • 无源码实现免登录功能
  • 大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark
  • 疾风大模型气象,基于气象数据打造可视化平台
  • PHP安装后Apache无法运行的问题
  • [论文精读]Multi-Channel Graph Neural Network for Entity Alignment
  • Study-Oracle-10-ORALCE19C-RAC集群搭建(一)
  • 1.8 物理层下的传输媒体
  • 指纹定位的原理与应用场景
  • 发现一款适合所有用户小巧且强大的编辑器(完美替换Windows记事本)
  • Mysql知识点整理
  • ISA-95制造业中企业和控制系统的集成的国际标准-(4)
  • Redis篇(Redis原理 - 数据结构)(持续更新迭代)
  • Disco公司的DBG工艺详解
  • 大学学校用电安全远程监测预警系统
  • C++网络编程之IP地址和端口
  • 陶瓷4D打印有挑战,水凝胶助力新突破,复杂结构轻松造
  • 网络安全的详细学习顺序
  • 人工智能与机器学习原理精解【28】
  • StarRocks 中如何做到查询超时(QueryTimeout)
  • Windows 开发工具使用技巧 Visual Studio使用安装和使用技巧 Visual Studio 快捷键
  • 计算机网络-系分(5)
  • React Native使用高德地图
  • 排序算法的理解
  • Yocto - 使用Yocto开发嵌入式Linux系统_04 使用Toaster来创建一个image
  • 【C#生态园】后端服务与网络库:选择适合你游戏开发的利器
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30