AI大模型实战——深入理解Seq2Seq 📅 发布时间:2026/7/16 12:33:19 👁️ 浏览次数: 目录一、Seq2Seq二、基本概念2.1、编码器2.2、解码器2.3、注意力机制(可选)三、工作原理3.1、模型训练3.2、模型验证3.3、完整代码本文来源:极客时间vip课程笔记注:后续技术类文章会同步到我的公众号里,搜索公众号小志的博客感兴趣的读友可以去找来看看。一、Seq2SeqSeq2Seq(Sequence-to-Sequence),顾名思义是从一个序列到另一个序列的转换。它不仅仅能理解单词之间的关系,而且还能把整个句子的意思打包,并解压成另一种形式的表达。如果说 Word2Vec 是让我们的机器学会了理解词汇的话,那 Seq2Seq 则是教会了机器如何理解句子并进行相应地转化。在这个过程中,我们会遇到两个核心的角色:编码器(Encoder)和解码器(Decoder)。编码器的任务是理解和压缩信息,就像是把一封长信函整理成一个精简的摘要;而解码器则需要将这个摘要展开,翻译成另一种语言或形式的完整信息。这个过程有一定的挑战,比如如何确保信息在这次转换中不丢失精髓,而是以新的面貌精准地呈现出来,这就是我们接下来要探索的内容之一。二、基本概念Seq2Seq 也是一种神经网络架构,模型的核心由两部分组成:编码器(Encoder)和解码器(Decoder)。你可以看一下这个架构的示意图。2.1、编码器编码器的任务是读取并理解输入序列,然后把它转换为一个固定长度的上下文向量,也叫作状态向量。这个向量是输入序列的一种内部表示,捕捉了序列的关键信息。编码器通常是一个循环神经网络(RNN)或其变体,比如长短期记忆网络(LSTM)或门控循环单元(GRU),它们能够处理不同长度的输入序列,并且记住序列中的长期依赖关系。2.2、解码器解码器的任务是接收编码器生成的上下文向量,并基于这个向量生成目标序列。解码过程是一步步进行的,每一步生成目标序列中的一个元素,比如一个词或字符,直到生成特殊的结束符号,表示输出序列的结束。解码器通常也是一个 RNN、LSTM 或 GRU,它不仅依赖于编码器的上下文向量,还可能依赖于自己之前的输出,来生成下一个输出元素。2.3、注意力机制(可选)在编码器和解码器之间,可能还会有一个注意力机制(Attention Mechanism)。注意力机制使解码器能够在生成每个输出元素时“关注”输入序列中的不同部分,从而提高模型处理长序列和捕捉复杂依赖关系的能力。编码器、解码器、注意力机制之间是怎样协作的呢?你可以看一下我给出的示意图。三、工作原理我们先从模型的训练开始,Seq2Seq 的训练和 Word2Vec 不太一样,因为我们讲解的是中英文翻译场景,所以训练的时候,训练数据是中英文数据对。Seq2Seq 的训练会比 Word2Vec 更加复杂一些。上节课的 Word2Vec,我们使用的是 gensim 库提供的基础模型,直接进行训练,这节课我们完全从头写起,训练一个 Seq2Seq 模型。3.1、模型训练我们先准备训练数据,可以在网上找公开的翻译数据集,我们用的是 AIchallenger 2017,这个数据集有 1000 万对中英文数据,不过因为电脑配置问题,我直接从里面中文和英文的部分各取了 10000 条进行训练。数据集名称是 train_1w.zh和 train_1w.en。cn_sentences=[]zh_file_path="train_1w.zh"# 使用Python的文件操作逐行读取文件,并将每一行的内容添加到列表中withopen(zh_file_path,"r",encoding="utf-8")as file:forline in file:# 去除行末的换行符并添加到列表中 cn_sentences.append(line.strip())en_sentences=[]en_file_path="train_1w.en"# 使用Python的文件操作逐行读取文件,并将每一行的内容添加到列表中withopen(en_file_path,"r",encoding="utf-8")as file:forline in file:# 去除行末的换行符并添加到列表中 en_sentences.append(line.strip())接下来,基于训练数据集构建中文和英文的词汇表,将每个词映射到一个唯一的索引(integer)。# cn_sentences 和 en_sentences 分别包含了所有的中文和英文句子 cn_vocab=build_vocab(cn_sentences,tokenize_cn,max_size=10000,min_freq=2)en_vocab=build_vocab(en_sentences,tokenize_en,max_size=10000,min_freq=2)我们再来看 biild_vocab 的源码。defbuild_vocab(sentences,tokenizer,max_size,min_freq):token_freqs=Counter()forsentence in sentences:tokens=tokenizer(sentence)token_freqs.update(tokens)vocab={token:idx+4foridx,(token,freq)inenumerate(token_freqs.items())iffreq=min_freq}vocab['unk']=0vocab['pad']=1vocab['sos']=2vocab['eos']=3returnvocab思路就是把所有的句子读进去,循环分词,放入字典,放的时候要判断一下是否大于等于 min_freq,用来过滤掉出现频率较低的词汇,最后构建出来的词汇表如下:vocab={'unk':0,'pad':1,'sos':2,'eos':3,'i':4,'like':5,'learning':6,'machine':7,'is':8,'very':9,'interesting':10,...}我们来看一下里面比较重要的几个部分。 unk :未知单词,表示在训练数据中没有出现过的单词。当模型在处理输入文本时遇到未知单词时,会用这个标记来表示。 pad:填充单词,用于将不同长度的序列填充到相同的长度。在处理批次数据时,由于不同序列的长度可能不同,因此需要用这个标记把短序列填充到与最长序列相同的长度,以便进行批次处理。 sos:句子起始标记,表示句子的开始位置。在 Seq2Seq 模型中,通常会在目标句子的开头添加这个标记,以指示解码器开始生成输出。 eos:句子结束标记,表示句子的结束位置。在 Seq2Seq 模型中,通常会在目标句子的末尾添加该标记,以指示解码器生成结束。创建训练数据集,将数据处理成方便训练的格式:语言序列,比如 [1,2,3,4]。dataset=TranslationDataset(cn_sentences,en_sentences,cn_vocab,en_vocab,tokenize_cn,tokenize_en)train_loader=DataLoader(dataset,batch_size=32,collate_fn=collate_fn)然后检测是否有显卡:# 检查是否有可用的GPU,如果没有,则使用CPUdevice=torch.device("cuda"iftorch.cuda.is_available()else"cpu")print("训练设备为:",device)创建模型,参数的解释可以参考代码注释。# 定义一些超参数 INPUT_DIM=10000# 输入语言的词汇量 OUTPUT_DIM=10000# 输出语言的词汇量 ENC_EMB_DIM=256# 编码器嵌入层大小,也就是编码器词向量维度 DEC_EMB_DIM=256# 解码器嵌入层大小,解码器词向量维度 HID_DIM=512# 隐藏层维度 N_LAYERS=2# RNN层的数量 ENC_DROPOUT=0.5# 编码器神经元输出的数据有50%会被随机丢掉 DEC_DROPOUT=0.5# 解码器同上 enc=Encoder(INPUT_DIM,ENC_EMB_DIM,HID_DIM,N_LAYERS,ENC_DROPOUT)dec=Decoder(OUTPUT_DIM,DEC_EMB_DIM,HID_DIM,N_LAYERS,DEC_DROPOUT)model=Seq2Seq(enc,dec,device).to(device)# 假定模型已经被实例化并移到了正确的设备上 model.to(device)# 定义优化器和损失函数 optimizer=optim
用AI撰写高质量网络小说:脑洞生成实操指南 网络小说的核心竞争力,往往藏在“脑洞”里——一个新奇、合理又有延展性的脑洞,能快速抓住读者注意力,让作品在海量内容中脱颖而出。但脑洞的诞生并非偶然,很多创作者都会陷入“灵感枯竭”的困境,反复纠结于设定老套、… 2026/7/16 12:32:21
CAD默认状态下标高有固定图层,如何指定图层来标高? 在CAD建筑制图中,将标高信息系统地归入指定图层,是确保图纸清晰、图层管理规范的核心环节。这不仅能实现信息的快速筛选与显隐控制,更是团队协作中统一制图标准、高效输出专业图纸的重要基础。 针对这一需求,专业CAD建筑版软件提… 2026/7/9 18:58:33
Git 分支核心指南:原理、合并策略与实战技巧 在现代软件开发中,Git 已经成为版本控制的事实标准。而 Git 的精髓,无疑在于其强大而轻量的分支管理能力。要想真正地、高效地利用 Git 进行团队协作和项目管理,就必须深入理解其分支的底层工作机制。这篇笔记将从 Git 的核心指针HEAD开始&am… 2026/7/15 13:29:10
KMS_VL_ALL_AIO:一站式智能批量授权解决方案深度解析 KMS_VL_ALL_AIO:一站式智能批量授权解决方案深度解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO作为一款专业的Windows与Office批量授权激活工具,为技… 2026/7/16 12:32:41
wd elements se 机械硬盘,明明关闭了所有打开文件,但是无法推出,还提示下面提示,什么情况,怎么解决? wd elements se 机械硬盘,明明关闭了所有打开文件,但是无法推出,还提示下面提示,什么情况,怎么解决? 你遇到的这个提示是Windows系统判定你的WD Elements SE机械硬盘仍被系统内的进程占用,即便你手动关闭了所有打开的文件,仍有不少隐藏的后台程序、系统服务在悄悄访问硬… 2026/7/16 12:32:41
OpenClaw不是安装包,而是钉钉生态CLI工具链 1. OpenClaw不是“免费中文版软件”,而是钉钉生态中一个被误传的开源协作工具链最近在多个技术社区和钉钉开发者群看到大量标题党内容,比如“openclaw官方安装2026免费中文版原版打包一键本地部署直连钉钉教程”——这类表述本身存在三重事实性偏差&… 2026/7/16 12:32:41
Ubuntu 20.04系统优化配置全指南 1. 为什么新装Ubuntu 20.04需要优化配置刚安装完成的Ubuntu 20.04 LTS系统虽然可以立即使用,但默认配置往往无法充分发挥系统潜力。就像刚买的新房需要装修一样,系统初始状态只提供了基础功能框架。经过十多次Ubuntu版本迭代后,我发现这些优化… 2026/7/16 12:30:40
时光重启:当Flash记忆需要一个新的守护者 时光重启:当Flash记忆需要一个新的守护者 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在数字历史的角落,那些曾经让我们欢笑、思考、甚至彻夜不眠的Flash内容正… 2026/7/16 12:28:40
2026“百虾大战”全面爆发:龙虾企业 AI 智能体哪家好?主流OpenClaw商业发行版全面横评 从现象级开源OpenClaw项目到企业圈全民“养虾” 热潮,数字化服务商、商用技术厂商、企业服务平台集体入局龙虾智能体赛道,各类商用龙虾 AI 智能体仅用半年时间完成企业落地规模化。不少企业在数字化转型阶段都会咨询龙虾企业 AI 智能体哪家好,… 2026/7/16 12:28:40
A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并 摘要:本文系统讲解如何利用Codex App的Review功能与GitHub PR工作流,实现从代码修改到安全合并的完整流程。涵盖Review面板深度使用、/review命令实战、GitHub Connector配置、PR描述撰写技巧,以及常见问题排查方法。通过多个实战案例和流程图,帮助开发者建立高效的AI辅助代… 2026/7/16 0:00:26
HAM未来路线图:下一代高可用迁移技术的发展方向与展望 HAM未来路线图:下一代高可用迁移技术的发展方向与展望 【免费下载链接】ham Based on the remote memory access capability and high bandwidth of the UB, deterministic duration virtual machine live migration is achieved, addressing planned downtime issu… 2026/7/16 0:04:27
月球是否是从地球分离出去的?——容度原理解释 月球是否是从地球分离出去的?——容度原理解释一、月球起源的“三大假说”与容度原理的重新审视月球起源的三大假说——捕获说(月球是太阳系中独立的星体,被地球引力捕获)、共生说(月球与地球同时从原始星云中形成&… 2026/7/16 0:06:27
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/16 3:47:53
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/16 12:08:13