《自然语言处理》—— 词向量之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())
  • 结果如下:
相关推荐
西西弗Sisyphus1 分钟前
大型语言模型(LLMs)演化树 Large Language Models
人工智能·语言模型·自然语言处理·大模型
车载诊断技术2 小时前
电子电气架构 --- 什么是EPS?
网络·人工智能·安全·架构·汽车·需求分析
KevinRay_2 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
跃跃欲试-迪之2 小时前
animatediff 模型网盘分享
人工智能·stable diffusion
Captain823Jack3 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
被制作时长两年半的个人练习生3 小时前
【AscendC】ReduceSum中指定workLocal大小时如何计算
人工智能·算子开发·ascendc
Captain823Jack3 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
Black_mario3 小时前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景
网络·人工智能·web3
Aileen_0v04 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
数信云 DCloud4 小时前
实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域
人工智能