《自然语言处理》—— 词向量之CountVectorizer方法实现

文章目录

一、什么是词向量,为什么要进行词向量

  • 词向量是一种将单词或短语映射到实数向量空间的技术。
  • 在自然语言处理中,计算机无法直接理解人类语言中的单词或句子,因为它们本质上是离散的符号。词向量的出现解决了这一问题,通过将单词表示为向量,计算机可以对文本进行数学计算,进而执行各种NLP任务。

二、CountVectorizer方法简单介绍

CountVectorizer是scikit-learn库中用于文本特征提取的一个类,它能够将文本数据转换为词频矩阵,是自然语言处理中常用的文本特征提取方法之一。

1、基本作用

CountVectorizer的作用是将文本数据转换为词频矩阵,即将文本中的每个单词转换为一个特征,统计每个单词在文本中出现的次数,并将其存储在矩阵中。这种表示方法有助于机器学习算法对文本数据进行处理和分析。

2、参数详解

  • CountVectorizer提供了多个参数来控制文本向量化的过程,以下是一些常见参数的解释:

    • stop_words:指定停用词列表,这些词将被忽略不计入词袋中。可以是预定义的停用词列表,如'english',也可以是自定义的停用词列表。
    • max_features:限制词汇表中的最大单词数量,保留出现频率最高的前n个单词。
    • ngram_range:指定要提取的n-gram范围,例如(1, 2)将提取单个词和二元词组。
    • lowercase:是否将文本转换为小写。默认为True。
    • analyzer:指定文本分析方式,可以是'word'(基于单词的n-gram)、'char'(基于字符的n-gram)或'char_wb'(基于单词边界的字符n-gram)。默认为'word'。
    • max_df和min_df:分别用于过滤掉文档频率太高或太低的单词。文档频率是指单词出现在多少个文档中的比例。
  • 主要方法

    • fit(raw_documents)学习词汇表。该方法通过遍历输入文档(raw_documents)来构建一个词汇表,词汇表中的每个词都会对应一个唯一的索引。但该方法不会返回文档的词频矩阵。
    • transform(raw_documents)将文档集合转换为词频矩阵,但前提是该文档集合中的词汇必须已经包含在之前通过 fit 或 fit_transform 方法学习到的词汇表中。
    • fit_transform(raw_documents)先学习词汇表(如 fit 方法),然后将文档集合转换为词频矩阵。该方法结合了 fit 和 transform 的功能,效率更高。
    • inverse_transform(X) :将词频矩阵 X 转换回原始的文本形式。注意,这里的"原始文本"并不是指原始输入文档,而是指由词汇表中的词重新组合成的文本,每个词出现的次数由矩阵中的值决定。
      • X:由 fit_transform 或 transform 方法生成的词频矩阵
    • get_feature_names_out()获取词汇表中的词,即特征名称。在较新版本的 scikit-learn 中,get_feature_names() 方法已被弃用,取而代之的是 get_feature_names_out()。

三、示例:代码实现

python 复制代码
# 导入CountVectorizer方法
from sklearn.feature_extraction.text import CountVectorizer

"""
ngram_range(1,2):对词进行组合,文字进行频率的统计。基于整个文本库来进行统计。
max_features:限制词汇表中的最大单词数量,保留出现频率最高的前n个单词。
(1)本例组合方式:两两组合   
['bird', 'cat', 'cat cat', 'cat fish', 'dog', 'dog cat', 'fish', 'fish bird']
(2)如果ngram_range(1,3),则会出现3个词进行组合
['bird','cat','cat cat','cat fish', 'dog', 'dog cat', 'dog cat cat', 'dog cat fish',"fish','fish bird']
"""
# 示例文本数据,其中一共有四条语句
texts = ["dog cat fish", "dog cat cat", "fish bird", "bird"]


# 实例化一个模型
cv = CountVectorizer(max_features=6, ngram_range=(1, 2))  # 统计每句话中每个词出现的频率次数

# 训练此模型
cv_fit = cv.fit_transform(texts)  # 每个词在这篇文章中出现的次数
print("\n左边一列对应每条语句中每个词在全部词库中对应的索引值")
print("\n右边代表每个词在全部词库中出现的次数")
print(cv_fit)

# 打印出模型的全部词库
print("\n词之间的排列顺序是按照26个英文字母的排序进行的")
print(cv.get_feature_names_out())

# 打印出每个语句的词向量
print("\n每一行代表一条语句")
print(cv_fit.toarray())
  • 结果如下:
相关推荐
GISer_Jing3 小时前
AI自动化工作流:智能驱动未来(升级研究生项目!!!)
人工智能·前端框架·自动化
草捏子3 小时前
Agent Skills:让 AI 一次学会、永远记住的能力扩展方案
人工智能
NocoBase3 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
后端小肥肠3 小时前
OpenClaw实战|从识图到公众号内容自动化,我跑通了完整链路
人工智能·aigc·agent
Elastic 中国社区官方博客3 小时前
快速 vs. 准确:衡量量化向量搜索的召回率
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_381338504 小时前
【技术日报】2026-03-18 AI 领域重磅速递
大数据·人工智能
NocoBase4 小时前
开源项目管理工具选型指南(2026年最新)
人工智能·开源·无代码
feasibility.4 小时前
AI 爬虫高手养成:Openclaw+Scrapling 手动部署 + 采集策略(以Walmart 电商平台为例)
人工智能·爬虫·科技·机器人·agi·openclaw·scrapling
程序员老猫4 小时前
前端菜鸡狂喜!DeepSeek+Gemini,嘴炮出完整博客方案
人工智能
AI周红伟5 小时前
周红伟:《OpenClaw安全防控:OpenClaw++Skills智能体安全部署、实操和企业应用实操》
人工智能·阿里云·云计算·腾讯云·openclaw