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

news2024/10/1 21:24:49

图片

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率&…

寂静孤独的404页面源码

寂静孤独的404页面源码,灯光闪烁动态效果,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 寂静孤独的404页面源…

禁用华为小米?微软中国免费送iPhone15

微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

FullCalendar的使用,react日历组件

1.下载 yarn add fullcalendar/core fullcalendar/react fullcalendar/daygrid 2.运行 import React from react; import FullCalendar from "fullcalendar/react"; import dayGridPlugin from "fullcalendar/daygrid";const ExperimentalSchedule () …

matlab仿真 信道(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容,有兴趣的读者请阅读原书) 之前的内容还剩下simulink的仿真过程。 3.simulink中的AWGN模块仿真 系统框图如图所示,TX和RX 模块需要单独实现…

使用esptool工具备份ESP32的固件(从芯片中备份下来固件)

本文以Windows电脑为例 板子为esp32-c3 1下载python 可在官网中下载,此处不进行讲解 使用如下代码查看是否安装了 Python(终端输入) python 2下载esptool 在终端输入如下代码即可下载 使用 pip(推荐): 在你已经安装的 Pyth…

【面试题】正向代理和反向代理的区别?

正向代理(Forward Proxy)和反向代理(Reverse Proxy)是两种常见的代理服务器类型,它们在网络通信中扮演着不同的角色,具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…

Python基础知识——(003)

文章目录 P12——11. 保留字和标识符 1. 保留字 2. Python标识符的命名规则(必须遵守) 3. Python标识符的命名规范(建议遵守) P13——12. 变量与常量 变量的语法结构 变量命名应遵循以下几条规则 常量 P14——13. 数值类型…

一键式创建GTest TDD测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址:从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder …

VUE中ECharts提示框tooltip自动切换

目录 前言1导入插件2定义参数3 插件API 前言 使用VUE开发的数据大屏统计,又需要将 echarts的提示框 tooltip 实现自动切换,网上有个很简单的插件(echarts-tooltip-auto-show),使用教程简单分享给大家。 自动每隔几秒切…

2024前端面试真题【JS篇】

DOM DOM:文本对象模型,是HTML和XML文档的编程接口。提供了对文档的结构化的表述,并定义可一种方式可以使从程序中对该结构进行访问,从而改变文档的结构、样式和内容。 DOM操作 创建节点:document.createElement()、do…

数据结构(初阶2.顺序表)

文章目录 一、线性表 二、顺序表 2.1 概念和结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3动态顺序表的实现 1.SeqList.h 2.SeqList.c 打印顺序表 初始化 销毁 增容 尾插 头插 在指定位置之前插入数据 尾删 头删 在指定位置删除数据 3.test.c 一、线性表 线性表&#…

Ubuntu 24.04 LTS (Linux) 安装二维码生成工具 QRencode 二维码生成和识别

1 Ubuntu 安装 sudo apt update sudo apt-get install qrencode 2 查看版本 qrencode -V 3 生成二维码 qrencode -o test.png http://www.baidu.com 可以下载test.png图片,用手机浏览器扫描下看(⊙﹏⊙)

单对以太网:工业4.0时代的通信革命

单对以太网连接器概述 单对以太网(Single Pair Ethernet,简称SPE)是一种新兴的以太网技术,它通过一对双绞线实现数据传输,支持PoDL(Power over Data Line)技术,为终端设备提供电力供…

SSE 和 WebSocket 的区别与选择指南

在构建现代网络应用时,实时通信技术扮演着至关重要的角色。本文将深入讨论 Server-Sent Events (SSE) 和 WebSocket ——两种主要的实时通信技术,对比它们的实现方式、优势和具体用途,以帮助开发人员根据自身项目需求选择合适的技术。 何为 …

绝区捌--将GPT幻觉的发生率从20%以上降低到2%以下

总结:我们没有使用微调,而是结合使用提示链和预处理/后处理来将幻觉发生率降低一个数量级,但这确实需要对 OpenAI 进行 3-4 倍的调用。还有很大的改进空间! 使用 GPT 等大型语言模型面临的最大挑战之一是它们倾向于捏造信息。 这…

328. 奇偶链表

https://leetcode.cn/problems/odd-even-linked-list/https://leetcode.cn/problems/odd-even-linked-list/ 解题思路: 把第一个和第二个节点分别作为奇数、偶数的头节点,当遇到奇节点,删除,并插入到奇数头节点后,这样…

【深度学习基础】环境搭建 Linux报错bash: conda: command not found...

目录 一、 问题描述二、 解决方法1. 在.bashrc文件中添加环境变量2. 卸载重装anconda 三、总结 一、 问题描述 在linux环境下安装anaconda时候报错:bash: conda: command not found… 二、 解决方法 1. 在.bashrc文件中添加环境变量 参考链接:【解决】…