当前位置: 首页 > news >正文

基于Python的自然语言处理系列(2):Word2Vec(负采样)

        在本系列的第二篇文章中,我们将继续探讨Word2Vec模型,这次重点介绍负采样(Negative Sampling)技术。负采样是一种优化Skip-gram模型训练效率的技术,它能在大规模语料库中显著减少计算复杂度。接下来,我们将通过详细的代码实现和理论讲解,帮助你理解负采样的工作原理及其在Word2Vec中的应用。

1. Word2Vec(负采样)原理

1.1 负采样的背景

        在Word2Vec的Skip-gram模型中,我们的目标是通过给定的中心词预测其上下文词。然而,当词汇表非常大时,计算所有词的预测概率会变得非常耗时。为了解决这个问题,负采样技术被引入。

1.2 负采样的工作原理

        负采样通过从词汇表中随机选择一些词作为负样本来简化训练过程。具体来说,除了正样本(即真实的上下文词),我们还为每个正样本选择若干个负样本。模型的目标是最大化正样本的预测概率,同时最小化负样本的预测概率。这样,训练过程只需要考虑部分词汇,从而减少了计算量。

2. Word2Vec(负采样)实现

        我们将通过以下步骤来实现带有负采样的Word2Vec模型:

2.1 定义简单数据集

        首先,我们定义一个简单的语料库来演示负采样的应用。

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import torch.nn.functional as F# 定义语料库
corpus = ["apple banana fruit", "banana apple fruit", "banana fruit apple","dog cat animal", "cat animal dog", "cat dog animal"]corpus = [sent.split(" ") for sent in corpus]
print(corpus)

2.2 数据预处理

        获取词序列和唯一词汇,并进行数值化处理。

# 获取词汇表
flatten = lambda l: [item for sublist in l for item in sublist]
vocab = list(set(flatten(corpus)))
print(vocab)# 数值化
word2index = {w: i for i, w in enumerate(vocab)}
print(word2index)# 词汇表大小
voc_size = len(vocab)
print(voc_size)# 添加UNK标记
vocab.append('<UNK>')
word2index['<UNK>'] = 0
index2word = {v: k for k, v in word2index.items()}

2.3 准备训练数据

        定义一个函数用于生成Skip-gram模型的训练数据。

def random_batch(batch_size, word_sequence):skip_grams = []for sequence in word_sequence:for i, word in enumerate(sequence):context = [sequence[j] for j in range(max(0, i - 1), min(len(sequence), i + 2)) if j != i]for ctx_word in context:skip_grams.append((word, ctx_word))return skip_grams

2.4 负采样

        实现负采样的训练过程。

class Word2Vec(nn.Module):def __init__(self, vocab_size, embedding_dim):super(Word2Vec, self).__init__()self.in_embed = nn.Embedding(vocab_size, embedding_dim)self.out_embed = nn.Embedding(vocab_size, embedding_dim)self.in_embed.weight.data.uniform_(-1, 1)self.out_embed.weight.data.uniform_(-1, 1)def forward(self, center_word, context_word):in_embeds = self.in_embed(center_word)out_embeds = self.out_embed(context_word)scores = torch.matmul(in_embeds, out_embeds.t())return scores# Initialize model
embedding_dim = 10
model = Word2Vec(voc_size, embedding_dim)
optimizer = optim.SGD(model.parameters(), lr=0.01)

2.5 训练模型

        进行模型训练,并应用负采样技术来优化模型。

def train_word2vec(model, skip_grams, epochs=10):for epoch in range(epochs):total_loss = 0for center, context in skip_grams:center_idx = torch.tensor([word2index[center]], dtype=torch.long)context_idx = torch.tensor([word2index[context]], dtype=torch.long)optimizer.zero_grad()scores = model(center_idx, context_idx)target = torch.tensor([1], dtype=torch.float32)loss = F.binary_cross_entropy_with_logits(scores.squeeze(), target)loss.backward()optimizer.step()total_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {total_loss}')# Prepare skip-gram pairs
skip_grams = random_batch(10, corpus)
train_word2vec(model, skip_grams)

结语

        在本篇文章中,我们详细探讨了Word2Vec模型中的负采样技术,并通过代码实现展示了如何在Python中应用这一技术来优化Skip-gram模型。负采样通过减少计算量,提高了模型的训练效率,使得在大规模数据集上的训练变得可行。

        在下一篇文章中,我们将继续探讨另一种词向量表示方法——GloVe(Global Vectors for Word Representation)。敬请期待!

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

相关文章:

基于Python的自然语言处理系列(2):Word2Vec(负采样)

在本系列的第二篇文章中&#xff0c;我们将继续探讨Word2Vec模型&#xff0c;这次重点介绍负采样&#xff08;Negative Sampling&#xff09;技术。负采样是一种优化Skip-gram模型训练效率的技术&#xff0c;它能在大规模语料库中显著减少计算复杂度。接下来&#xff0c;我们将…...

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目&#xff1a; 牛牛发明了一种新的四舍五…...

大数据之Flink(六)

17、Flink CEP 17.1、概念 17.1.1、CEP CEP是“复杂事件处理&#xff08;Complex Event Processing&#xff09;”的缩写&#xff1b;而 Flink CEP&#xff0c;就是 Flink 实现的一个用于复杂事件处理的库&#xff08;library&#xff09;。 总结起来&#xff0c;复杂事件处…...

设计模式学习[5]---装饰模式

文章目录 前言1. 原理阐述2. 举例2.1 人装饰方案一2.2 人装饰方案二2.3 人装饰方案三 总结 前言 近期在给一个已有的功能拓展新功能时&#xff0c;基于原有的设计类图进行讨论。其中涉及到了装饰模式&#xff0c;因为书本很早已经看过一遍&#xff0c;所以谈及到这个名词的时候…...

3.C_数据结构_栈

概述 什么是栈&#xff1a; 栈又称堆栈&#xff0c;是限定在一段进行插入和删除操作的线性表。具有后进先出(LIFO)的特点。 相关名词&#xff1a; 栈顶&#xff1a;允许操作的一端栈底&#xff1a;不允许操作的一端空栈&#xff1a;没有元素的栈 栈的作用&#xff1a; 可…...

Debian11安装DolphinScheduler

安装地址 前置准备工作 JDK安装 下载JDK (1.8)&#xff0c;安装并配置 JAVA_HOME 环境变量&#xff0c;并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在&#xff0c;可以跳过这步 二进制包安装DolphinScheduler 依赖 apt-get install psmisc 二进制安…...

C语言深度剖析--不定期更新的第五弹

const关键字 来看一段代码&#xff1a; #include <stdio.h> int main() {int a 10;a 20;printf("%d\n", a);return 0; }运行结果如下&#xff1a; 接下来我们在上面的代码做小小的修改&#xff1a; #include <stdio.h> int main() {const int a 1…...

python之事务

事务&#xff08;Transaction&#xff09;是数据库管理系统&#xff08;DBMS&#xff09;中的一个重要概念&#xff0c;用于确保一组数据库操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而保证数据的一致性和完整性。 事务ACID 特性 事务具有以下四个特性&#xf…...

文件加密软件都有哪些?推荐6款文件加密工具

不久前&#xff0c;一家知名科技公司的内部文件在未经授权的情况下被泄露到了网络上&#xff0c;其中包括了公司的核心技术蓝图、客户名单及未来战略规划。这一事件不仅给公司带来了巨大的经济损失&#xff0c;还严重损害了企业的声誉。 如何防止以上事件的发生呢&#xff0c;文…...

Docker中的容器内部无法使用vi命令怎么办?

不知道你是否遇到过,在修改容器内部的配置的时候,有时候会提示vi命令不可用。尝试去安装vi插件,好像也不是很容易,有什么办法可以帮助我们修改这个配置文件呢? 解决办法 这时候,我们就需要用到docker cp 命令了,它可以帮助我们把容器内部的文件复制到宿主机上,也可以将…...

【Linux系统编程】TCP实现--socket

使用套接字socket实现服务器和客户端之间的TCP通信。 流程如下&#xff1a; 实现代码&#xff1a; /* server.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> #include <s…...

企业微信hook协议接口,聚合群聊客户管理工具开发

服务提供了丰富的API和SDK&#xff0c;可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互&#xff0c;可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作&#xff0c;通过接口可以实…...

Selenium集成Sikuli基于图像识别的自动化测试

看起来您提供了一个链接,但目前我并没有从该链接获取到具体的信息内容。不过,如果您希望了解如何将Sikuli集成到Selenium中,我可以为您提供一些基本的指南。 什么是Sikuli? Sikuli是一款开源工具,用于基于图像识别的自动化测试。它可以识别屏幕上的图像,并模拟用户的交…...

【STM32实物】基于STM32设计的智能仓储管理系统(程序代码电路原理图实物图讲解视频设计文档等)——文末资料下载

基于STM32设计的智能仓储管理系统 演示视频: 基于STM32设计的智能仓储管理系统 摘要 近年来,随着我国仓储发展的和药品需求的不断增多,许多医院都采用药物仓储管理系统。我国的药物仓储产业已经有了长足的发展,仓库的规模不断变大,对仓储的要求也不断增高,药物的存储,…...

libtool 中的 .la 文件说明

libtool 中的 .la 文件说明 1 概述 在 Linux 系统中&#xff0c;libtool 是一个用于自动化编译和链接复杂软件项目的工具&#xff0c;特别是那些使用了共享库&#xff08;.so 文件在 Linux 上&#xff0c;.dylib 在 macOS 上&#xff09;的项目。它帮助处理各种编译器和链接器…...

NLP-transformer学习:(6)dataset 加载与调用

NLP-transformer学习&#xff1a;&#xff08;6&#xff09;dataset 加载与调用 平常其实也经常进行trainning等等&#xff0c;但是觉得还是觉得要补补基础&#xff0c;所以静下心&#xff0c;搞搞基础联系 本章节基于 NLP-transformer学习&#xff1a;&#xff08;5&#xff0…...

数据库系统 第43节 数据库复制

数据库复制是一种重要的技术&#xff0c;用于在多个数据库系统之间同步数据。这在分布式系统中尤其重要&#xff0c;因为它可以提高数据的可用性、可扩展性和容错性。以下是几种常见的数据库复制类型&#xff1a; 主从复制 (Master-Slave Replication): 在这种模式下&#xff0…...

LabVIEW FIFO详解

在LabVIEW的FPGA开发中&#xff0c;FIFO&#xff08;先入先出队列&#xff09;是常用的数据传输机制。通过配置FIFO的属性&#xff0c;工程师可以在FPGA和主机之间&#xff0c;或不同FPGA VIs之间进行高效的数据传输。根据具体需求&#xff0c;FIFO有多种类型与实现方式&#x…...

如何验证VMWare WorkStation的安装?

如何验证VMWare WorkStation的安装&#xff1f; 右击"网络"&#xff0c;点击 打开"网络和Internet设置"&#xff0c;点击更改适配器选项&#xff0c;如果出现VMNet1和VMNet8&#xff0c;则说明安装成功。...

论文阅读:AutoDIR Automatic All-in-One Image Restoration with Latent Diffusion

论文阅读&#xff1a;AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion 这是 ECCV 2024 的一篇文章&#xff0c;利用扩散模型实现图像恢复的任务。 Abstract 这篇文章提出了一个创新的 all-in-one 的图像恢复框架&#xff0c;融合了隐扩散技术&#x…...

美国RTP全系列抗静电塑料产品服务介绍

宏裕塑胶代理美国RTP全系列材料&#xff0c;专注于为制造业企业提供高性价比、稳定可控的工程塑料原料供应及全流程技术支持&#xff0c;凭借源头直采优势与专业服务能力&#xff0c;成为塑胶制品厂、汽车零部件厂及精密电子企业的可靠合作伙伴。宏裕塑胶代理美国RTP全系列材料…...

【前端无障碍】无障碍测试:确保你的应用对所有人友好

【前端无障碍】无障碍测试&#xff1a;确保你的应用对所有人友好 前言 大家好&#xff0c;我是cannonmonster01&#xff01;今天咱们来聊聊无障碍测试这个话题。无障碍设计不仅仅是开发阶段的事情&#xff0c;测试阶段同样重要。只有通过全面的测试&#xff0c;才能确保你的应用…...

【Sora 2视频后期处理黄金法则】:20年AI影像专家亲授5大不可绕过的帧级调优技巧

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2视频后期处理的底层逻辑与帧级思维重构 Sora 2并非传统时间轴驱动的剪辑工具&#xff0c;其视频后期处理建立在扩散模型与隐空间帧序列联合优化的基础之上。每一帧不再作为孤立图像存在&#xff0c;而是…...

【稻米计数】基于matlab形态学稻米计数【含Matlab源码 15562期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

保姆级教程:用向日葵远程在Windows系统上安装Vector CANape 21.0.10(附Demo工程位置详解)

Vector CANape 21.0.10安装全流程与实战技巧作为一名长期从事汽车电子测试的工程师&#xff0c;我深知Vector CANape在ECU标定与诊断领域的重要性。本文将从一个技术实践者的角度&#xff0c;详细解析如何高效完成CANape 21.0.10的安装部署&#xff0c;特别是针对远程协作安装场…...

英文会议翻译 app

一个针对开会读取大家说话的内容&#xff0c;过滤掉中文&#xff0c;只对英文的录音进行翻译&#xff0c;翻译的内容实时显示在屏幕上&#xff0c;除非点击停止&#xff0c;否则一直这样动态听并翻译成中文 显示在屏幕上的app,并直接安装在我手机上&#xff0c;并写一篇公众文章…...

AI视频生成工具“免费额度”背后的算法剥削:我们逆向拆解11家平台的Token计费黑箱(含实测换算表)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI视频生成工具收费价格对比 当前主流AI视频生成工具在定价策略上呈现显著差异&#xff0c;涵盖免费试用、按分钟计费、订阅制及企业定制等多种模式。用户在选型时需综合考量生成质量、输出分辨率、商用授权范…...

使用Taotoken稳定调用大模型API提升智能客服响应效率

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken稳定调用大模型API提升智能客服响应效率 构建一个稳定、高效的智能客服系统&#xff0c;是许多技术团队面临的核心挑战…...

5分钟解锁Cursor Pro:免费使用AI编程助手的终极指南

5分钟解锁Cursor Pro&#xff1a;免费使用AI编程助手的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial…...

终极鸣潮优化指南:3分钟解锁120FPS与专业抽卡分析

终极鸣潮优化指南&#xff1a;3分钟解锁120FPS与专业抽卡分析 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否还在为《鸣潮》的60FPS帧率限制而烦恼&#xff1f;是否想科学分析自己的抽卡概率&#…...