十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

阶段八(周 25–30)NLP 与 LLM 基础实战 阶段八周 25–30NLP 与 LLM 基础实战实验环境华为云 m3CPU 版 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-SNEsrc/word2vec.pyskip-gram 目标给定中心词预测上下文词用负采样避免对整个词表做 softmax。classSkipGramNeg(nn.Module):def__init__(self,vocab_size,dim):super().__init__()self.in_embnn.Embedding(vocab_size,dim)# 中心词嵌入self.out_embnn.Embedding(vocab_size,dim)# 上下文词嵌入defforward(self,center,context,neg):v_cself.in_emb(center)# [B, D]v_ctxself.out_emb(context)# [B, D]v_negself.out_emb(neg)# [B, NEG, D]postorch.bmm(v_ctx.unsqueeze(1),v_c.unsqueeze(2)).squeeze()# [B]negtorch.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_loss2.1197 epoch 10/30 avg_loss1.7182 epoch 20/30 avg_loss1.9014 epoch 30/30 avg_loss1.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_model32,n_heads4,depth2):super().__init__()self.embednn.Embedding(vocab_size,d_model)self.posPositionalEncoding(d_model)self.encodernn.ModuleList([EncoderLayer(d_model,n_heads)for_inrange(depth)])self.clsnn.Linear(d_model,2)defforward(self,x):xself.pos(self.embed(x))# 嵌入 位置编码forlayerinself.encoder:xlayer(x)returnself.cls(x.mean(1))# 全局平均池化分类真实运行结果前向验证: x (8, 10) - logits (8, 2) epoch 1 train_loss0.9294 train_acc0.481 test_acc0.300 epoch 5 train_loss0.6716 train_acc0.519 test_acc0.700 epoch 10 train_loss0.5758 train_acc0.706 test_acc0.725 epoch 15 train_loss0.5093 train_acc0.775 test_acc0.675 epoch 20 train_loss0.4512 train_acc0.756 test_acc0.750test_acc从 0.30 提升到0.75证明从零实现的 Self-Attention / 位置编码 / Encoder 组件端到端可训练能学到「A 多于 B」这类序列级规律。四、最小检索式问答src/search_demo.py用 TF-IDF 把知识库向量化对用户问题做余弦检索返回最相关条目——这是RAG / 搜索推荐系统的极简雏形。vecTfidfVectorizer(tokenizerlambdax:list(x),lowercaseFalse)# 字符级切分Xvec.fit_transform(DOCS)qvvec.transform([query])simscosine_similarity(qv,X)[0]topint(sims.argmax())# 返回最相关文档作为「答案」真实运行结果知识库文档数10词表维度175 问: 怎么处理图像 最相关(0.343): 卷积神经网络 CNN 擅长处理图像通过卷积核提取局部特征。 问: 什么是残差网络 最相关(0.397): ResNet 残差网络通过跳跃连接缓解深层网络退化问题可训练上百层。 问: 语言模型怎么预测下一个词 最相关(0.512): GPT 是自回归生成式预训练模型根据前文预测下一个词。 问: 如何让模型关注重要信息 最相关(0.499): 注意力机制让模型在处理每个词时动态关注输入中相关的部分。每条查询都检索到了语义最匹配的FAQ验证了「向量检索」的有效性。五、进阶概念周 26–30LSTM / CNN 文本抽取器周 26RNN/LSTM 通过门控遗忘/输入/输出门缓解长程梯度消失适合序列标注TextCNN 用多尺寸卷积核一次性抽取 n-gram 特征速度快、并行好是经典文本分类 baseline。BERT / GPT 预训练思想周 27BERT 用MLM掩码语言模型 NSP做双向预训练适合理解类任务分类、抽取、问答GPT 用自回归预测下一个 token适合生成。二者都遵循「大规模无标注语料预训练 下游任务微调」范式。分布式训练周 28数据并行DDP每张卡一份模型、切分 batch、模型并行切分层、ZeRO/流水线并行切分参数/梯度/优化器状态用于训练超大规模模型。RLHF周 29监督微调 SFT → 训练奖励模型 RM → 用 PPO 做强化学习对齐人类偏好是 ChatGPT 类助手的关键。LangChain / 搜索推荐周 30LangChain 把「检索 提示 工具调用 记忆」串成可编排的 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)
返回列表