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

一、任务目标

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()

三、代码运行结果


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538143.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何开辟动态二维数组(C语言)

1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数,但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组,也就是存放着一维数组地址的一维数组。 所以&…

CRMEB 多商户和多店版的区别

(1)两个系统根本属性不同 CRMEB多商户是一款B2B2C多业态商家入驻平台系统,通俗点说,就是一个商城系统有多个商家运营各自的店铺。 多商户系统具有联营、自营、招商、混合等多种运营模式,主要用来构建类似京东、淘宝的…

【二分算法】

17. 二分查找(easy) 算法流程: 算法代码: int search(int* nums, int numsSize, int target) {// 初始化 left 与 right 指针int left 0, right numsSize - 1;// 由于两个指针相交时,当前元素还未判断,因…

2024最新仿默往IM即时通讯系统源码(PC+WEB+IOS+Android)客户端

简介: 2024最新仿默往IM即时通讯系统源码(PC+WEB+IOS+Android)客户端 系统功能配置灵活、海量并发、稳定可靠、数据安全,2小时快速部署、数据安全、单聊群聊、系统通知等通信功能,支持App、PC、Web等多端快速接入。 群功能:设置群二维码,群公告,昵称,头像,群共享文件…

零基础教程|四步学会自制宣传手册

在当今竞争激烈的市场中,一本精美而引人注目的宣传手册是吸引客户和推广产品的重要工具。但对于许多人来说,制作宣传手册似乎是一项艰巨的任务,特别是对于零基础的人来说。然而,通过以下四个简单的步骤,您也可以轻松学…

解决redis乱码问题

目录 1.问题 2.查看redis序列化机制 3.设置redis的序列化器 1.问题 在使用redis最为缓存时,发现key乱码问题 这是由于redis的序列化机制导致的 2.查看redis序列化机制 3.设置redis的序列化器 Configuration Data public class RedisConfig {/*** redis序列化*…

应急响应-战前反制主机HIDSElkeid蜜罐系统HFish

知识点 战前-反制-平台部署其他更多项目: https://github.com/birdhan/SecurityProduct HIDS:主机入侵检测系统,通常会有一个服务器承担服务端角色,其他主机就是客户端角色,客户端加入到服务端的检测范围里&#xff…

【漏洞复现】通天星CMSV6车载视频监控平台MobileAction文件读取漏洞

Nx01 产品简介 通天星车载视频监控平台软件拥有多种语言版本,应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控等公共交通上。 Nx02 漏洞描述 通天星CMSV6车载视频监控平台MobileAction文件读取漏洞,攻…

C语言---顺序表(二)

文章目录 前言1.准备工作2.代码的实现2.1.顺序表的创建、销毁和打印2.2.顺序表的扩容、头插\删、尾插\删2.2.1.扩容2.2.2.尾插2.2.3.头插2.2.3.尾删2.2.4.头删 2.3.指定位置之前插入/删除数据/查找数据2.3.1.指定位置之前插入数据2.3.2.指定位置之前删除数据2.3.3.查找特定数据…

ChatGPT基础(二) ChatGPT的使用和调优

文章目录 ChatGPT的特性采用关键词进行提问给ChatGPT指定身份提升问答质量的策略1.表述方式上的优化2.用"继续"输出长内容3.营造场景4.由浅入深,提升问题质量5.预设回答框架和风格 ChatGPT的特性 1.能够联系上下文进行回答 ChatGPT回答问题是有上下文的&…

Samba实现windows和Linux共享文件,环境搭建

​ 搭建步骤 安装sambad sudo apt-get install samba samba-common 创建samba用户和密码 此处使用 Linux 账号和密码作为 samba 的账号和密码。Linux 账号为 shelmean shelmeanmachine:[~] $ sudo smbpasswd -a shelmean New SMB password: Retype new SMB password: Add…

MongoDB副本集部署(windows)

环境准备 本教程演示mongodb4.4 副本集部署(一主两从,伪分布式) 节点配置主节点localhost:27017从节点1localhost:27018从节点2localhost:27019 每一个节点(实例)都创建对应的数据文件(data)…

记一次空迭代器导致的崩溃分析

一. 崩溃代码&#xff1a; class EasySelect::Impl { public:Impl() default;std::vector<int> waitForReadable ();void addFd (int fd);void removeFd (int fd);void stopWait ();private:std::vector<int> m_fds;std::mutex m_fdsMutex;std::mutex m_pipeMute…

MySQL数据导出导出的三种办法(13/16)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法&#xff1a; 使用mysqldump工具&#xff1a; 优点&#xff1a; 简单易用&#xff0c;只需一条命令即可完成数据导出。可以导出表结构和数据&#xff0c;方便完整备份。支持过滤条件&#xff0c;可以选择导出部分数据…

python知识点汇总(十一)

python知识点总结 1、当Python退出时&#xff0c;是否会清除所有分配的内存&#xff1f;2、Python的优势有哪些&#xff1f;3、什么是元组的解封装4、Python中如何动态获取和设置对象的属性&#xff1f;5、创建删除操作系统上的文件6、主动抛出异常7、help() 函数和 dir() 函数…

数据结构-----枚举、泛型进阶(通配符?)

文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…

加速杂交水稻走向世界 政协委员建议在湖南设立一“协会”一“中心”

中新网北京3月8日电 (刘曼)针对中国杂交水稻海外“飘香”的现象&#xff0c;全国政协委员、湖南省政协副主席、民盟湖南省委会主委何寄华建议&#xff0c;在湖南建立杂交水稻国际合作交流协会、设立杂交水稻国际科技合作技术转移中心&#xff0c;支持杂交水稻走向世界。 全国政…

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

Python爬取链家数据

技术&#xff1a;requests、BeautifulSoup、SQLite 解析页面&#xff0c;存数据到SQLite数据库&#xff0c;到时候你用navicat导出成csv什么的就行 1、确定城市 以天津为例&#xff0c;网页是https://tj.lianjia.com/ershoufang/rs/ 把上面这些地区名字复制 2、爬取数据内容…