Python30 使用Gensim库实现Word2Vec对文本进行处理

图片

1.Word2Vec

Word2Vec 是一种将词语表示为向量的技术,能够捕捉词语之间的语义关系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,广泛应用于自然语言处理任务中。其核心概念主要包括:

词嵌入(Word Embeddings)

词嵌入是将词语映射到一个固定大小的向量空间中,使得在语义上相似的词在向量空间中也相互接近。Word2Vec 通过神经网络模型生成词嵌入。

模型架构

图片

Word2Vec 主要有两种模型架构:

  • CBOW(Continuous Bag of Words):给定一个词的上下文,预测中心词。例如,给定上下文 ["The", "cat", "on", "the", "mat"],目标词是 "sat"。

  • Skip-gram:给定一个词,预测其上下文。例如,目标词是 "sat",上下文是 ["The", "cat", "on", "the", "mat"]。

工作原理

CBOW 模型

CBOW 模型通过上下文词预测中心词。其工作原理如下:

  • 输入层接受上下文词的词向量,将这些词向量求平均,得到一个上下文表示。

  • 隐藏层将上下文表示映射到一个新的空间。

  • 输出层使用 softmax 函数预测中心词的概率分布,选择概率最大的词作为预测结果。

Skip-gram 模型

Skip-gram 模型通过中心词预测上下文词。其工作原理如下:

  • 输入层接受中心词的词向量。

  • 隐藏层将中心词词向量映射到一个新的空间。

  • 输出层使用 softmax 函数预测上下文词的概率分布,选择概率最大的词作为预测结果。

训练过程

Word2Vec 的训练过程包括以下几个步骤:

  1. 语料库准备:收集并预处理大量文本数据,将其分词,并去除低频词和停用词。

  2. 模型初始化:初始化词向量矩阵和模型参数。

  3. 前向传播:将输入词通过神经网络进行前向传播,计算预测的上下文词或中心词。

  4. 损失计算:计算预测结果与实际标签之间的损失。

  5. 反向传播:通过反向传播算法更新词向量和模型参数。

  6. 迭代训练:重复上述过程,直至模型收敛。

2. Gensim

图片

Gensim 是一个开源的 Python 库,用于从非结构化文本数据中提取语义信息,主要应用于自然语言处理(NLP)领域。它提供了高效的工具和算法来实现主题建模、文档相似性分析、词嵌入等任务。其核心功能主要包括:

Gensim 提供了多种强大的 NLP 功能,包括但不限于:

  1. 词嵌入(Word Embeddings)

    • 支持 Word2Vec、FastText、Glove 等词嵌入模型。

    • 可以从文本语料库中训练词向量,或加载预训练的词向量。

  2. 主题建模(Topic Modeling)

    • 支持 Latent Dirichlet Allocation (LDA)、Latent Semantic Indexing (LSI)、Hierarchical Dirichlet Process (HDP) 等主题模型。

    • 可以从文档集合中提取主题,分析文档的主题分布。

  3. 文档相似性分析(Document Similarity)

    • 提供相似性检索工具,可以计算文档与文档、文档与查询之间的相似性。

  4. 文本预处理(Text Preprocessing)

    • 包括分词、去停用词、词干提取、词频计算等功能。

3. Python实现

以下代码使用 Gensim 库中的 Word2Vec 模型对分词后的文本数据进行训练,并实现以下功能:

  1. 加载分词语料文件 word.txt

  2. 训练一个向量维度为200的skip-gram模型。

  3. 计算并打印两个单词"企业"和"公司"的相似度。

  4. 查找并打印与"科技"最相关的20个词。

  5. 通过词向量计算,寻找与"公司-产品+生产"关系最相关的词。

  6. 查找并打印在"企业 公司 是 合作伙伴"中最不合群的词。

  7. 将训练好的模型保存为 企业关系.model

这段代码展示了如何使用 Word2Vec 模型进行文本数据的相似性计算和关系分析。

# 导入包
from gensim.models import word2vec
import logging

# 初始化日志
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus("files/data/python32-data/word.txt")  # 加载分词语料

# 训练skip-gram模型,使用vector_size参数替代size
model = word2vec.Word2Vec(sentences, vector_size=200)  # 默认window=5
print("输出模型", model)

# 计算两个单词的相似度
try:
    y1 = model.wv.similarity("企业", "公司")
except KeyError:
    y1 = 0
print("【企业】和【公司】的相似度为:{}\n".format(y1))

# 计算某个词的相关词列表
y2 = model.wv.most_similar("科技", topn=20)  # 20个最相关的
print("与【科技】最相关的词有:\n")
for word in y2:
    print(word[0], word[1])
print("*********\n")

# 寻找对应关系
print("公司-产品", "生产")
y3 = model.wv.most_similar(positive=["公司", "产品"], negative=["生产"], topn=3)
for word in y3:
    print(word[0], word[1])
print("*********\n")

# 寻找不合群的词
y4 = model.wv.doesnt_match("企业 公司 是 合作伙伴".split())
print("不合群的词:{}".format(y4))
print("***********\n")

# 保存模型
model.save("files/data/python32-data/企业关系.model")

输入数据:

图片

输出结果:

图片

通过 Gensim 的 Word2Vec 模型对给定文本数据进行了训练,生成了词向量,并通过计算词语相似度、相关词、对应关系、不合群的词等方法对词向量进行了分析和应用。

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

【重大消息】报告称OpenAI的产品可经由微软的服务提供给中国客户

尽管OpenAI正在采取措施限制中国用户访问其平台,但一份最新报告称,中国用户仍可通过微软的Azure云计算平台访问该公司的产品。微软和OpenAI有着密切的合作关系,前者通过人工智能功能获得了独家产品访问权以拓展企业计算。最新的报道来自《The…

拓展神经网络八股(入门级)

自制数据集 minst等数据集是别人打包好的,如果是本领域的数据集。自制数据集。 替换 把图片路径和标签文件输入到函数里,并返回输入特征和标签 只需要把图片灰度值数据拼接到特征列表,标签添加到标签列表,提取操作函数如下: def…

25.无源蜂鸣器驱动设计

相对于有源蜂鸣器,无源蜂鸣器的成本更低,声音频率可控。而有源蜂鸣器因其内部 自带振荡源,只要加上适当的直流电源即可发声,程序控制较为方便。 (1)设计定义:设计一个无源蜂鸣器的驱动程序&…

基于泰坦尼克号生还数据进行 Spark 分析

基于泰坦尼克号生还数据进行 Spark 分析 在这篇博客中,我们将展示如何使用 Apache Spark 分析著名的泰坦尼克号数据集。通过这篇教程,您将学习如何处理数据、分析乘客的生还情况,并生成有价值的统计信息。 数据解析 • PassengerId &#…

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…

EasyCVR视频汇聚平台:存储系统怎么选?分布式存储vs.集中式存储的区别在哪?

在当今的数字化时代,安防监控已成为维护社会秩序和公共安全的重要手段。随着监控设备的普及和监控数据的不断增加,如何高效、安全地存储和管理这些视频数据,成为了安防行业面临的重要挑战。EasyCVR视频存储系统凭借其卓越的性能和灵活的架构&…

综合安全防护

题目 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问. 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMz区的FTP服务器和HTTP服务器,仅能ping通10.0.3.10 4,办公区分为市场部和研发部,研…

pnpm workspace使用教程【Monorepo项目】

目录 前言一、pnpm简介特点:对比 二、 创建项目添加文件 pnpm-workspace.yaml目录结构pnpm workspace: 协议修改配置文件执行 安装 三、命令解析执行包命令所有包操作命令 四、实例代码 前言 前面两篇,我们讲了 yarn workspace 和 lerna , …

局域网远程共享桌面如何实现

在局域网内实现远程共享桌面,可以通过以下几种方法: 一、使用Windows自带的远程桌面功能: 首先,在需要被控制的电脑上右键点击“此电脑”,选择“属性”。 进入计算机属性界面后,点击“高级系统设置”&am…

记录excel表生成一列按七天一个周期的方法

使用excel生成每七天一个周期的列。如下图所示: 针对第一列的生成办法,使用如下函数: TEXT(DATE(2024,1,1)(ROW()-2)*7,"yyyy/m/d")&" - "&TEXT(DATE(2024,1,1)(ROW()-1)*7-1,"yyyy/m/d") 特此记录。…

一文实践强化学习训练游戏ai--doom枪战游戏实践

一文实践强化学习训练游戏ai–doom枪战游戏实践 上次文章写道下载doom的环境并尝试了简单的操作,这次让我们来进行对象化和训练、验证,如果你有基础,可以直接阅读本文,不然请你先阅读Doom基础知识,其中包含了下载、动作…

android CameraX构建相机拍照

Android CameraX 是一个 Jetpack 支持库,旨在简化相机应用的开发工作。它提供了一致且易用的API接口,适用于大多数Android设备,并可向后兼容至Android 5.0(API级别21)。 CameraX解决了在多种设备上实现相机功能时所遇…

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算,基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

java:获取当前的日期和时间

// 获取当前的日期和时间LocalDateTime now LocalDateTime.now();// 定义日期时间格式化器DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化日期时间String formattedDateTime now.format(formatter);// 打印结果Syste…

【数据结构和算法的概念等】

目录 一、数据结构1、数据结构的基本概念2、数据结构的三要素2.1 数据的逻辑结构2.2 数据的存储(物理)结构2.3 数据的运算 二、算法1、算法概念2、算法的特性及特点3、算法分析 一、数据结构 1、数据结构的基本概念 数据: 是所有能输入到计…

前端八股文 对事件循环的理解

对事件循环的理解 思维导图 图示 实际案例的执行过程 总结

能源电子领域2区SCI,版面稀缺,即将截稿,无版面费!

【SciencePub学术】今天小编给大家推荐1本能源电子领域的SCI!影响因子1.0-2.0之间,最重要的是审稿周期较短,对急投的学者较为友好! 能源电子类SCI 01 / 期刊概况 【期刊简介】IF:1.0-2.0,JCR2区&#xf…

【C++】C++入门基础--引用,inline,nullptr

文章目录 前言一、引用?1.1 引用的概念和定义1.2 引用的特性1.3 引用的使用1.4 const引用(常引用)1.5 指针和引用的关系 二、inline2.1inline概念和定义2.2 inline使用2.3 inline注意事项 三.nullptr总结 前言 上一篇文章我们介绍了C中的命名…

枚举对象序列化规则(将Java枚举转换为JSON字符串的步骤)

文章目录 引言I 案例分析1.1 接口签名计算1.2 请求对象1.3 枚举对象序列化II 在JSON中以枚举的code值来表示枚举的实现方式2.1 自定义toString方法返回code引言 在Java中,每个对象都有一个toString方法,用于返回该对象的字符串表示。默认情况下,Enum类的toString方法返回的…

C语言笔记30 •单链表经典算法OJ题-2.移除链表元素•

移除链表元素 1.问题 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 2.代码实现&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h&g…