【自然语言】使用词袋模型,TF-IDF模型和Word2Vec模型进行文本向量化

news/2025/2/22 20:21:12/

一、任务目标

python代码写将 HarryPorter 电子书作为语料库,分别使用词袋模型,TF-IDF模型和Word2Vec模型进行文本向量化。

1. 首先将数据预处理,Word2Vec 训练时要求考虑每个单词前后的五个词汇,地址为

作为其上下文 ,生成的向量维度为50维

2.分别搜索 courtroom 和 wizard 这两个词语义最近的5个单词

3.对wizard 和witch 这两个单词在二维平面上进行可视化

内容补充:

什么是对他们进行向量化?

当涉及将文本数据转换为计算机可以处理的形式时,常用的方法之一是文本向量化。文本向量化是将文本文档转换为数值向量的过程,以便计算机可以理解和处理。

 

  1. 词袋模型(Bag of Words Model):

    • 词袋模型是一种简单而常用的文本向量化方法。
    • 在词袋模型中,每个文档被表示为一个向量,其中每个维度对应于词汇表中的一个词。
    • 文档向量的每个维度表示对应词在文档中出现的频次(或者可以是二进制值,表示是否出现)。
    • 这意味着词袋模型忽略了单词的顺序和上下文,只关注词的出现频率。

 

  1. TF-IDF模型(Term Frequency-Inverse Document Frequency Model):

    • TF-IDF是一种用于评估一个词对于一个文档在语料库中的重要性的统计方法。
    • 与词袋模型类似,TF-IDF模型也将文档表示为向量,但是每个维度的值是基于词的TF-IDF得分。
    • Term Frequency(TF)表示词在文档中出现的频率,而Inverse Document Frequency(IDF)表示词的稀有程度或信息量。
    • TF-IDF的计算方法是将TF与IDF相乘,以突出显示在文档中频繁出现但在整个语料库中稀有的词语。

 

  1. Word2Vec模型:

    • Word2Vec是一种用于将词语表示为连续向量空间中的向量的技术。
    • Word2Vec模型基于分布式假设,即在语料库中,具有相似上下文的词在向量空间中应该具有相似的表示。
    • Word2Vec模型通常通过训练神经网络来学习词向量,其中每个词都被表示为一个密集的向量,称为嵌入(embedding)。
    • 通过Word2Vec,词向量可以捕捉到词语之间的语义和语法关系,例如,语义上相似的词在向量空间中会更加接近。

二、代码部分 

nltk.download('punkt')
nltk.download('stopwords')

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from gensim.models import Word2Vec
from gensim.models import TfidfModel
from gensim.corpora import Dictionary
import matplotlib.pyplot as plt# 导入停用词
stop_words = set(stopwords.words('english'))# 加载数据
corpus_file = '/Users/zhengyawen/Downloads/HarryPorter.txt'
with open(corpus_file, 'r', encoding='utf-8') as file:data = file.read()# 预处理数据
sentences = [word_tokenize(sentence.lower()) for sentence in data.split('.')]
preprocessed_sentences = []
for sentence in sentences:valid_words = []for word in sentence:if word.isalpha() and word not in stop_words:valid_words.append(word)preprocessed_sentences.append(valid_words)# 构建Word2Vec模型
w2v_model = Word2Vec(sentences=preprocessed_sentences, vector_size=50, window=5, min_count=1, sg=0)# 获取单词向量
vector_courtroom = w2v_model.wv['courtroom']
vector_wizard = w2v_model.wv['wizard']# 搜索与“courtroom”和“wizard”最相似的5个单词
similar_words_courtroom = w2v_model.wv.most_similar('courtroom', topn=5)
similar_words_wizard = w2v_model.wv.most_similar('wizard', topn=5)print("Word2Vec模型:")
print("单词 courtroom 的向量:", vector_courtroom)
print("单词 wizard 的向量:", vector_wizard)
print("语义最近的5个单词 (courtroom):")
for word, similarity in similar_words_courtroom:print(f"{word}: {similarity}")print("\n语义最近的5个单词 (wizard):")
for word, similarity in similar_words_wizard:print(f"{word}: {similarity}")# 构建词袋模型
dictionary = Dictionary(preprocessed_sentences)
corpus = [dictionary.doc2bow(sentence) for sentence in preprocessed_sentences]
tfidf_model = TfidfModel(corpus)
corpus_tfidf = tfidf_model[corpus]# 可视化Word2Vec模型中wizard和witch的向量
words_to_plot = ['wizard', 'witch']
word_vectors = [w2v_model.wv[word] for word in words_to_plot]# 可视化
plt.figure(figsize=(10, 6))
for i, word in enumerate(words_to_plot):plt.scatter(word_vectors[i][0], word_vectors[i][1], label=word)plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Visualization of Word Vectors')
plt.legend()
plt.show()

三、代码运行结果



http://www.ppmy.cn/news/1416661.html

相关文章

【力扣 Hot100 | 第三天】4.12(寻找两个正序数组的中位数)

文章目录 3.寻找两个正序数组的中位数3.1题目3.2解法:暴力(归并排序)3.3解法:二分法 3.寻找两个正序数组的中位数 3.1题目 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返…

vue小程序跳转页面携带参数

跳转携带对象 前一个页面:跳转的方法里把数组转成字符串 gotoArea(item){console.log("item",item)let datas JSON.stringify(item);goto.goto(navigateTo,index/area/main?itemdatas);},跳转的目标页面: onLoad(options){let datas JSO…

Java面试篇9——并发编程

并发编程知识梳理 提示,此仅为面试,若想对线程有跟完整了解,请点击这里 提示:直接翻到最后面看面试真题,上面的为详解 面试考点 文档说明 在文档中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表…

CSS-浮动文字环绕布局、隐藏属性display、overflow、三角形制作、鼠标样式

文字环绕布局 CSS文字环绕布局是指在网页中让文字环绕在图片或其他元素周围的布局方式。这通常通过CSS中的float属性来实现。你可以将图片设置为float: left;或float: right;,然后在文本元素中使用clear属性来清除浮动,以确保文字不会覆盖图片。另外&am…

解决 Redis 数据倾斜、热点等问题的方法

Redis 作为一门主流技术,应用场景非常多,很多大中小厂面试都列为重点考察内容 前几天有星球小伙伴学习时,遇到下面几个问题。 考虑到这些问题比较高频,工作中经常会遇到,这里写篇文章系统讲解下 问题描述&#xff1…

通过 Vue 3 组合式 API 优化 Uni-app 基础页面功能

Uni-app 是一个跨平台的应用开发框架,支持同时开发小程序、App 和 H5 等多个平台。而 Vue 3 的组合式 API 则是 Vue 3 新增的特性之一,它可以让我们更好地组织和复用组件逻辑。本文将结合 Vue 3 的组合式 API,来优化 Uni-app 中基础页面的功能…

SpringBoot 微服务token 传递实现

1、前言 随着微服务的流行,微服务之间的安全以及业务需要,都需要穿递token ,而token的传递一般通过header 头来传递。从架构的角度来讲 ,一般的企业应用都由nginx、业务网关和各个微服务组成。这个nginx 传递header 我就不讲述。下…

vue创建一个项目

要创建一个Vue项目,你可以使用Vue CLI(命令行界面)这个官方工具。以下是使用Vue CLI创建一个新项目的步骤: 步骤 1: 安装 Node.js 和 npm 首先,确保你的计算机上已经安装了Node.js和npm(Node.js的包管理器…