使用Gensim库来实现Word2Vec

2023-12-18 19:30

本文主要是介绍使用Gensim库来实现Word2Vec,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gensim

Gensim是一个开源库,用于无监督的统计建模和自然语言处理,用Python和Cython实现的

 

 

Gensim库来实现Word2Vec

Word2Vec被认为是自然语言处理(NLP)领域中最大、最新的突破之一。其的概念简单,优雅,(相对)容易掌握。Google一下就会找到一堆关于如何使用诸如Gensim和TensorFlow的库来调用Word2Vec方法的结果


Word2Vec的目标是生成带有语义的单词的向量表示,用于进一步的NLP任务。每个单词向量通常有几百个维度,语料库中每个唯一的单词在空间中被分配一个向量。例如,单词“happy”可以表示为4维向量[0.24、0.45、0.11、0.49],“sad”具有向量[0.88、0.78、0.45、0.91]。

这种从单词到向量的转换也被称为单词嵌入(word embedding)。这种转换的原因是机器学习算法可以对数字(在向量中的)而不是单词进行线性代数运算。

 

首先解压数据,读入到list里面

import gzip
import gensim
import logging#logging格式设置
logging.basicConfig(format="", level=logging.INFO)#解压我们的数据
data_file = "reviews_data.txt.gz"with gzip.open(data_file,'rb') as f:for i, line in enumerate(f):print(line)break#--------------下一步需要把读的数据变为gensim的输入------------------------#把gzip文件的内容读入到list
def read_input(input_file):logging.info("reading file {0}...this may take a while".format(input_file))with gzip.open(input_file,'rb') as f:for i, line in enumerate(f):if(i%10000 == 0):logging.info("read {0} reviews".format(i))#做预处理,每个review返回一个单词列表yield gensim.utils.simple_preprocess(line)documents = list(read_input((data_file)))
logging.info("Done reading data file")
print(documents)

 

训练model

import gzip
import gensim
import logging#logging格式设置
logging.basicConfig(format="", level=logging.INFO)#解压我们的数据
data_file = "reviews_data.txt.gz"with gzip.open(data_file,'rb') as f:for i, line in enumerate(f):print(line)break#--------------下一步需要把读的数据变为gensim的输入------------------------#把gzip文件的内容读入到list
def read_input(input_file):logging.info("reading file {0}...this may take a while".format(input_file))with gzip.open(input_file,'rb') as f:for i, line in enumerate(f):if(i%10000 == 0):logging.info("read {0} reviews".format(i))#做预处理,每个review返回一个单词列表yield gensim.utils.simple_preprocess(line)documents = list(read_input((data_file)))
logging.info("Done reading data file")
print(documents)#--------------训练我们的model-------------model = gensim.models.Word2Vec(documents, size=150,window=10, min_count=2,workers=10)#不加这句,光上面那句也能训练,这句是给训练的时候规定一些参数,比如epochs,这里规定了10,如果不规定默认是5的
model.train(documents,total_examples=len(documents), epochs=10)

 

 

我们可以通过训练好的模型做什么呢?

我们要做的是,给出一个之前语料中没有出现的词,然后能够在语料中找一个最相近的

                         能够计算两个单词之间的相似度

                         能够在几个单词中找出意思和其他单词相差较大的单词来

找和polite最相近的6个词

找和france最相近的6个词

找和shocked最相近的6个词

寻找床上用品相关的词

计算两个单词之间的相似度

在几个单词中找到意思和其他单词相差较大的单词,即the odd one

 

 

 

总程序

import gzip
import gensim
import logging#logging格式设置
logging.basicConfig(format="", level=logging.INFO)#解压我们的数据
data_file = "reviews_data.txt.gz"with gzip.open(data_file,'rb') as f:for i, line in enumerate(f):print(line)break#--------------下一步需要把读的数据变为gensim的输入------------------------#把gzip文件的内容读入到list
def read_input(input_file):logging.info("reading file {0}...this may take a while".format(input_file))with gzip.open(input_file,'rb') as f:for i, line in enumerate(f):if(i%10000 == 0):logging.info("read {0} reviews".format(i))#做预处理,每个review返回一个单词列表yield gensim.utils.simple_preprocess(line)documents = list(read_input((data_file)))
logging.info("Done reading data file")
# print(documents)#--------------训练我们的model-------------model = gensim.models.Word2Vec(documents, size=150,window=10, min_count=2,workers=10)#不加这句,光上面那句也能训练,这句是给训练的时候规定一些参数,比如epochs,这里规定了10,如果不规定默认是5的
model.train(documents,total_examples=len(documents), epochs=10)#------------验证我们的结果--------------------
w1 = "dirty"
print(model.wv.most_similar(positive=w1))# look up top 6 words similar to 'polite'
w1 = ["polite"]
print(model.wv.most_similar (positive=w1,topn=6))# look up top 6 words similar to 'france'
w1 = ["france"]
print(model.wv.most_similar (positive=w1,topn=6))# look up top 6 words similar to 'shocked'
w1 = ["shocked"]
print(model.wv.most_similar (positive=w1,topn=6))# get everything related to stuff on the bed
w1 = ["bed",'sheet','pillow']
w2 = ['couch']
print(model.wv.most_similar (positive=w1,negative=w2,topn=10))# similarity between two different words
print(model.wv.similarity(w1="dirty",w2="smelly"))# similarity between two identical words
print(model.wv.similarity(w1="dirty",w2="dirty"))# similarity between two unrelated words
print(model.wv.similarity(w1="dirty",w2="clean"))#Find the odd one out# Which one is the odd one out in this list?
print(model.wv.doesnt_match(["cat","dog","france"]))# Which one is the odd one out in this list?
print(model.wv.doesnt_match(["bed","pillow","duvet","shower"]))

 

这篇关于使用Gensim库来实现Word2Vec的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/509519

相关文章

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建