《自然语言处理》—— 词向量之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())
  • 结果如下:
相关推荐
安全二次方security²1 天前
CUDA C++编程指南(7.25)——C++语言扩展之DPX
c++·人工智能·nvidia·cuda·dpx·cuda c++编程指南
童话名剑1 天前
训练词嵌入(吴恩达深度学习笔记)
人工智能·深度学习·word2vec·词嵌入·负采样·嵌入矩阵·glove算法
桂花很香,旭很美1 天前
智能体技术架构:从分类、选型到落地
人工智能·架构
HelloWorld__来都来了1 天前
2026.1.30 本周学术科研热点TOP5
人工智能·科研
aihuangwu1 天前
豆包图表怎么导出
人工智能·ai·deepseek·ds随心转
YMWM_1 天前
深度学习中模型的推理和训练
人工智能·深度学习
中二病码农不会遇见C++学姐1 天前
文明6-mod制作-游戏素材AI生成记录
人工智能·游戏
九尾狐ai1 天前
从九尾狐AI案例拆解企业AI培训的技术实现与降本增效架构
人工智能
2501_948120151 天前
基于RFID技术的固定资产管理软件系统的设计与开发
人工智能·区块链
(; ̄ェ ̄)。1 天前
机器学习入门(十五)集成学习,Bagging,Boosting,Voting,Stacking,随机森林,Adaboost
人工智能·机器学习·集成学习