《自然语言处理》—— 词向量之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())
  • 结果如下:
相关推荐
大模型真好玩12 小时前
LangChain DeepAgents 速通指南(三)—— 让Agent告别混乱:Tool Selector与Todo List中间件解析
人工智能·langchain·trae
孟祥_成都12 小时前
【全网最通俗!新手到AI全栈开发必读】 AI 是如何进化到大模型的
前端·人工智能·全栈
牛奶13 小时前
AI辅助开发的基础概念
前端·人工智能·ai编程
东坡肘子13 小时前
OpenClaw 不错,但我好像没有那么需要 -- 肘子的 Swift 周报 #125
人工智能·swiftui·swift
风象南20 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
牛奶21 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶21 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab1 天前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab1 天前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯