新闻中心
使用GPT-2计算词向量与句向量的实践指南

本教程详细阐述了如何利用Hugging Face Transformers库中的GPT-2模型来准确计算词向量和句向量。文章将指导读者完成从模型加载、数据分词、提取词级隐藏状态,到关键的填充词掩码处理,以及最终通过平均池化和长度归一化生成高质量句向量的完整流程。通过实际代码示例,确保读者能够掌握生成有效语义表示的关键技术。
1. 引言:GPT-2与词句向量
在自然语言处理(NLP)领域,将文本数据转换为数值向量(即词向量和句向量)是许多下游任务(如文本分类、语义搜索、问答系统)的基础。这些向量能够捕捉词语和句子的语义信息,使得计算机能够理解和处理语言。GPT-2作为一种强大的预训练语言模型,其内部的隐藏状态天然地包含了丰富的上下文信息,是提取高质量词向量和句向量的理想选择。本文将详细介绍如何使用Hugging Face transformers库中的GPT-2模型,以规范和准确的方式计算这些语义表示。
2. 环境准备与模型加载
首先,我们需要安装必要的库并加载GPT-2的分词器(Tokenizer)和模型。Hugging Face transformers库提供了便捷的接口来完成这些操作。
from transformers import GPT2Tokenizer, GPT2Model
import torch
# 加载GPT-2分词器和模型
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')
# 设置填充令牌:GPT-2默认没有专门的pad_token,通常使用eos_token作为填充。
# 这确保了在处理不同长度序列时,填充部分也能被正确识别和处理。
tokenizer.pad_token = tokenizer.eos_token
# 示例句子列表
captions = [
"example caption",
"example bird",
"the bird
is yellow has red wings",
"hi",
"very good"
]注意事项:
- tokenizer.pad_token = tokenizer.eos_token 是一个关键步骤,它告诉分词器在进行批量处理时,用什么令牌来填充较短的序列,使其与最长序列对齐。对于GPT-2,通常使用其结束符(End-of-Sentence token)作为填充符。
3. 数据准备与分词
为了高效处理多个句子,我们需要将它们进行批量分词,并进行填充(Padding)和截断(Truncation)以确保所有输入序列长度一致。transformers库的分词器提供了非常方便的接口来完成这一系列操作。
PictoGraphic
AI驱动的矢量插图库和插图生成平台
133
查看详情
# 对句子列表进行分词和填充
# return_tensors='pt' 返回PyTorch张量
# padding=True 启用填充,使所有序列长度一致
# truncation=True 启用截断,如果序列过长则截断
encoded_captions = tokenizer(
captions,
return_tensors='pt',
padding=True,
truncation=True
)
# input_ids 包含分词后的token ID
input_ids = encoded_captions['input_ids']
# attention_mask 标识哪些是真实token,哪些是填充token (1为真实,0为填充)
attention_mask = encoded_captions['attention_mask']
print(f"Input IDs shape: {input_ids.shape}")
print(f"Attention Mask shape: {attention_mask.shape}")input_ids 是一个形状为 [batch_size, sequence_length] 的张量,其中 sequence_length 是批次中最长句子的长度。attention_mask 具有相同的形状,它对于后续正确处理词向量至关重要。
4. 提取词向量
词向量通常对应于模型最后一层隐藏状态的输出。GPT-2模型的前向传播会返回一个包含多个元素的元组,其中 outputs.last_hidden_state 即为我们所需的词向量。
# 在推理模式下运行模型,不需要计算梯度,可以节省内存和计算资源
with torch.no_grad():
outputs = model(input_ids)
# 提取最后一层的隐藏状态作为词向量
# 其形状为 [batch_size, sequence_length, hidden_size]
# 例如,对于gpt2模型,hidden_size通常是768
word_embeddings = outputs.last_hidden_state
print(f"Word Embeddings shape: {word_embeddings.shape}")word_embeddings 的形状为 [batch_size, max_seq_len, hidden_dim]。这意味着批次中的每个句子,其每个词(包括填充词)都有一个对应的 hidden_dim 维度的向量。
5. 处理填充词与掩码机制
由于不同句子长度不一,我们通过填充使得它们长度一致。然而,这些填充词的向量不应参与句向量的计算,否则会引入噪声。因此,我们需要使用 attention_mask 来“掩盖”这些填充词的向量,使其对最终的句向量贡献为零。
# 扩展attention_mask的维度,使其与word_embeddings的维度匹配,以便进行逐元素乘法 # attention_mask的形状从 [batch_size, sequence_length] 变为 [batch_size, sequence_length, 1] # 然后通过广播机制与 word_embeddings (shape: [batch_size, sequence_length, hidden_size]) 相乘 # 这样,填充位置(mask为0)的词向量将被置为0 masked_word_embeddings = word_embeddings * attention_mask.unsqueeze(-1).float()
以上就是使用GPT-2计算词向量与句向量的实践指南的详细内容,更多请关注其它相关文章!
# go
# 巴南网站建设高端
# 社群营销推广岗位职责
# 身份通网站建设游戏推荐
# seo最初网站怎么布局
# 网站内部SEO优化包括
# 网络推广营销公司推荐
# 安徽快速营销推广招聘
# 中山网站推广的行业须知
# 来完成
# 化生
# 高质量
# 令牌
# 多个
# 加载
# 是一个
# 使其
# 自然语言
# 文档
# red
# 自然语言处理
# pytorch
# gpt
# win
# ai
# 计算机
# word
# 网站推广企业的优势
# 怎么在抖音有效营销推广
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*a递归快速排序中静态变量导致数据累积问题的解决方案
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
微信网页版官方入口直达 微信网页版网页版登录使用方法
CSS实现侧边栏导航项全宽圆角悬停背景效果
2026年CSGO开箱网站推荐 CSGO开箱平台精选
J*aScriptWebpack优化_J*aScript构建工具实战
快手网页版在线登录 快手网页版官网入口快速访问
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
妖精动漫免费平台 妖精动漫官网资源观看网址
MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令
Angular中父组件异步更新子组件复选框状态的实践指南
qq游戏跨平台入口_qq游戏多设备同步登录
漫蛙官网正版漫画入口 漫蛙2官方网页登录地址
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
Bing引擎入口最新2025 Bing搜索免费官方登录
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
必由学网页版入口 必由学官方平台直接访问
理解Python模块与全局变量的作用域管理
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
Go语言中高效处理x-www-form-urlencoded表单数据
AO3最新可访问网址 Archive of Our Own官方在线入口
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
CSS子选择器:如何区分并样式化嵌套列表的子层级
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
在React函数组件中利用原生HTML5进行邮箱地址验证
美团外卖商家服务中心入口 美团商家版官网入口
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
《GTA6》开发画面疑似泄露!这次可不是AI了
J*aScript中针对特定容器内图片动画的实现教程
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
Pyrogram与g4f集成:异步编程实践与常见错误解决
铁路12306官网网页端快速入口 铁路12306官方首页登录教程
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
MongoDB聚合管道:正确匹配对象数组中_id的方法
微信语音通话掉线如何解决 微信语音通话稳定优化方法
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException


2025-11-24
浏览次数:次
返回列表
is yellow has red wings",
"hi",
"very good"
]