news 2026/8/20 15:02:48

阶段八(周 25–30)NLP 与 LLM 基础实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
阶段八(周 25–30)NLP 与 LLM 基础实战

阶段八(周 25–30)NLP 与 LLM 基础实战

实验环境:华为云 m3(CPU 版 PyTorch 2.13 + jieba + scikit-learn)。所有脚本在m3真实运行,结果为真实 stdout / 指标;图存figures/

一、学习目标

  • jieba 分词+ 从零实现skip-gram(负采样)训练中文词向量,并用t-SNE可视化。
  • 用从零实现的Transformer 组件完成一个极简序列分类任务(前向验证 + 短训练)。
  • TF-IDF + 余弦相似度实现最小可运行的「检索式问答」(RAG/搜索推荐的雏形)。
  • 理解 LSTM/CNN 文本抽取、BERT/GPT 预训练思想、分布式训练 / RLHF / LangChain / 搜索推荐等进阶概念。

二、词向量:jieba + skip-gram + t-SNE(src/word2vec.py)

skip-gram 目标:给定中心词预测上下文词;用负采样避免对整个词表做 softmax。

classSkipGramNeg(nn.Module):def__init__(self,vocab_size,dim):super().__init__()self.in_emb=nn.Embedding(vocab_size,dim)# 中心词嵌入self.out_emb=nn.Embedding(vocab_size,dim)# 上下文词嵌入defforward(self,center,context,neg):v_c=self.in_emb(center)# [B, D]v_ctx=self.out_emb(context)# [B, D]v_neg=self.out_emb(neg)# [B, NEG, D]pos=torch.bmm(v_ctx.unsqueeze(1),v_c.unsqueeze(2)).squeeze()# [B]neg=torch.bmm(v_neg,v_c.unsqueeze(2)).squeeze()# [B, NEG]loss=-F.logsigmoid(pos).mean()-F.logsigmoid(-neg).mean()returnloss

负采样分布采用freq^0.75(降低高频词如「的」被抽作负样本的概率)。

真实运行结果(小中文语料,55 句堆叠,seed 固定):

分词后 token 数: 305(样例: ['神经网络', '是', '深度', '学习', '的', '核心', '模型', '。', '卷积', ...]) 词表大小: 67 训练样本对(center,context): 1214 epoch 1/30 avg_loss=2.1197 epoch 10/30 avg_loss=1.7182 epoch 20/30 avg_loss=1.9014 epoch 30/30 avg_loss=1.7295 t-SNE 图 -> figures/w2v_tsne.png 词相似度(余弦)示例: sim(神经网络, 卷积) = 0.421 sim(神经网络, 注意力) = -0.295 sim(卷积, 注意力) = -0.241

解读sim(神经网络, 卷积)=0.421为正且明显大于其他配对,说明二者在向量空间中更接近(都与「网络结构」相关),符合「语义相近的词向量也相近」的预期;卷积注意力为负相关,体现它们在语料中很少共现。由于语料很小,向量质量有限,但训练链路(分词→建表→负采样→t-SNE)已完整跑通

三、用 Transformer 做序列任务(src/transformer_text.py)

把从零实现的 Transformer 编码器用于一个玩具序列分类:输入 A/B/C 短序列,判断 A 是否多于 B。

classSeqClassifier(nn.Module):def__init__(self,vocab_size,d_model=32,n_heads=4,depth=2):super().__init__()self.embed=nn.Embedding(vocab_size,d_model)self.pos=PositionalEncoding(d_model)self.encoder=nn.ModuleList([EncoderLayer(d_model,n_heads)for_inrange(depth)])self.cls=nn.Linear(d_model,2)defforward(self,x):x=self.pos(self.embed(x))# 嵌入 + 位置编码forlayerinself.encoder:x=layer(x)returnself.cls(x.mean(1))# 全局平均池化分类

真实运行结果

前向验证: x (8, 10) -> logits (8, 2) epoch 1 train_loss=0.9294 train_acc=0.481 test_acc=0.300 epoch 5 train_loss=0.6716 train_acc=0.519 test_acc=0.700 epoch 10 train_loss=0.5758 train_acc=0.706 test_acc=0.725 epoch 15 train_loss=0.5093 train_acc=0.775 test_acc=0.675 epoch 20 train_loss=0.4512 train_acc=0.756 test_acc=0.750

test_acc从 0.30 提升到0.75,证明从零实现的 Self-Attention / 位置编码 / Encoder 组件端到端可训练,能学到「A 多于 B」这类序列级规律。

四、最小检索式问答(src/search_demo.py)

用 TF-IDF 把知识库向量化,对用户问题做余弦检索返回最相关条目——这是RAG / 搜索推荐系统的极简雏形。

vec=TfidfVectorizer(tokenizer=lambdax:list(x),lowercase=False)# 字符级切分X=vec.fit_transform(DOCS)qv=vec.transform([query])sims=cosine_similarity(qv,X)[0]top=int(sims.argmax())# 返回最相关文档作为「答案」

真实运行结果

知识库文档数=10,词表维度=175 问: 怎么处理图像? 最相关(0.343): 卷积神经网络 CNN 擅长处理图像,通过卷积核提取局部特征。 问: 什么是残差网络 最相关(0.397): ResNet 残差网络通过跳跃连接缓解深层网络退化问题,可训练上百层。 问: 语言模型怎么预测下一个词 最相关(0.512): GPT 是自回归生成式预训练模型,根据前文预测下一个词。 问: 如何让模型关注重要信息 最相关(0.499): 注意力机制让模型在处理每个词时动态关注输入中相关的部分。

每条查询都检索到了语义最匹配的FAQ,验证了「向量检索」的有效性。

五、进阶概念(周 26–30)

  • LSTM / CNN 文本抽取器(周 26):RNN/LSTM 通过门控(遗忘/输入/输出门)缓解长程梯度消失,适合序列标注;TextCNN 用多尺寸卷积核一次性抽取 n-gram 特征,速度快、并行好,是经典文本分类 baseline。
  • BERT / GPT 预训练思想(周 27):BERT 用MLM(掩码语言模型)+ NSP双向预训练,适合理解类任务(分类、抽取、问答);GPT 用自回归预测下一个 token,适合生成。二者都遵循「大规模无标注语料预训练 + 下游任务微调」范式。
  • 分布式训练(周 28):数据并行(DDP,每张卡一份模型、切分 batch)、模型并行(切分层)、ZeRO/流水线并行(切分参数/梯度/优化器状态),用于训练超大规模模型。
  • RLHF(周 29):监督微调 SFT → 训练奖励模型 RM → 用 PPO 做强化学习对齐人类偏好,是 ChatGPT 类助手的关键。
  • LangChain / 搜索推荐(周 30):LangChain 把「检索 + 提示 + 工具调用 + 记忆」串成可编排的 Agent 管线;工业搜索推荐则是「召回(向量/倒排)→ 粗排 → 精排(CTR 预估)→ 重排」的多级架构,与上面的 TF-IDF 检索一脉相承。

六、小结

  • 词向量、序列 Transformer、检索式问答三条线都真实跑通并给出指标/可视化
  • 现代 LLM 技术栈(BERT/GPT → 分布式 → RLHF → Agent/搜索推荐)均建立在本次动手实现的注意力、预训练、向量检索等基础之上。

七、参考

  • Mikolov et al.,Efficient Estimation of Word Representations(Word2Vec, 2013)
  • Vaswani et al.,Attention Is All You Need(2017)
  • Devlin et al.,BERT(2018);Radford et al.,GPT系列
  • Ouyang et al.,Training language models to follow instructions with RLHF(2022)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 15:01:38

技术写作中如何安全使用ChatGPT:避免AI幻觉与事实错误的防御性指南

最近,澳大利亚政府一份关于社交媒体禁令的技术报告,因为其中引用了错误的、甚至是不存在的学术研究而被曝光。更令人惊讶的是,负责该报告的机构随后承认,在编辑过程中使用了ChatGPT。这起事件迅速从一桩普通的“学术不严谨”升级为…

作者头像 李华
网站建设 2026/8/20 14:55:23

Qwen 3.8 27B模型推理性能优化:解决过度思考与参数调优实战

这次我们来看一个关于 Qwen 3.8 27B 模型推理性能的深度技术观察。这个由阿里云开源的 270 亿参数大语言模型,在多项基准测试中表现出了强大的能力,但一个关键的技术细节——默认推理强度设置——却可能成为影响其实际应用体验的“双刃剑”。简单来说&am…

作者头像 李华
网站建设 2026/8/20 14:52:40

Netlify自建Git平台:重塑Jamstack开发工作流的一体化战略

如果你是一名前端开发者,或者正在使用 Jamstack 架构构建网站,那么 Netlify 这个名字你一定不陌生。它几乎成了现代静态网站托管和持续部署的代名词。但最近,一个消息在开发者社区里激起了不小的水花:Netlify 正在构建自己的 Git …

作者头像 李华
网站建设 2026/8/20 14:48:45

多款线上投票工具实测!日常社群评选该怎么选

在数字化办公与社群运营日益普及的今天,线上投票已成为我们日常社群评选、意见征集和风采展示的重要工具。然而,面对市面上琳琅满目的投票小程序,许多组织者常常陷入选择困难:有的工具看似免费,却在导出数据时暗藏收费…

作者头像 李华