尧图精选

AI-For-Beginners 课程 NLP 章节全景:用神经网络攻克自然语言处理的 9 类核心任务

🕒 发布时间:2026/10/1 9:33:36 📁 来源:尧图网络
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本节内容源自 AI-For-Beginners 课程的第 5 大章节Natural Language Processing从任务分类、技术演进、环境搭建到逐课路线图完整梳理了如何用神经网络解决 NLP 问题的知识体系。读完本文你将掌握 NLP 领域 9 类典型任务的定义与难点、文本与图像数据的本质差异、PyTorch/TensorFlow 双框架的环境配置方法以及从文本表示到 Transformer 大模型的完整学习路径。NLP 任务全景计算机需要解决的 9 类语言问题课程开篇用一张思维导图对应课程草图 ai-nlp 示意图总结了我们希望计算机能够解决的 NLP 问题它们是整章课程后续所有内容的问题清单文本分类Text classification针对文本序列的典型分类问题例如将电子邮件判定为垃圾邮件/正常邮件或将新闻文章归类为体育、商业、政治等。在开发聊天机器人时我们常常需要理解用户想表达什么这就引出了意图分类intent classification——并且意图分类往往要面对非常多的类别。情感分析Sentiment analysis一个典型的回归问题需要给句子赋予一个数值情感值表达其含义积极/消极的程度。进阶版本是基于方面的情感分析ABSA它不再对整个句子赋情感值而是对句子不同部分方面分别判定例如在这家餐厅我喜欢菜肴但氛围糟透了。命名实体识别NER从文本中抽取特定实体。例如从我明天需要飞往巴黎中理解明天指向日期DATE、巴黎是一个地点LOCATION。关键词提取Keyword extraction与 NER 类似但无需针对特定实体类型预训练而是自动抽取对句子含义重要的词汇。文本聚类Text clustering用于把相似句子归组例如技术支持的会话中相似的请求。问答Question answering模型以一段文本和一个问题作为输入需要给出文本中包含答案的位置有时直接生成答案文本。文本生成Text generation模型生成新文本的能力本质上可视为一个根据文本提示text prompt预测下一个字母/单词的分类任务。GPT-3 等高级文本生成模型还能通过**提示编程prompt programming或提示工程prompt engineering**的技巧顺带解决分类等其他 NLP 任务。文本摘要Text summarization让计算机阅读长文本并用几句话概括。机器翻译Machine translation可看作用一种语言理解文本 用另一种语言生成文本的组合。技术演进从语法规则到神经网络最初大部分 NLP 任务都依赖传统方法如语法规则。以机器翻译为例传统流程是先用语言解析器parser把源语句转换成语法树再提取更高层的语义结构来表达句子含义最后基于该含义与目标语言的语法生成结果。如今许多 NLP 任务用神经网络解决效率更高。经典的 NLP 方法大多收录在 Python 的NLTKNatural Language Processing Toolkit库中配套的 NLTK Book 详细讲解了如何用 NLTK 解决各类 NLP 任务。在本课程中主线是用神经网络处理 NLPNLTK 只在需要时作为辅助工具使用。为什么文本与众不同变长序列与复杂模式课程此前已讲过用神经网络处理表格数据和图像而文本与它们的核心区别在于文本是长度可变的序列而图像的输入尺寸预先已知。卷积网络虽然能从输入数据中提取模式但文本中的模式复杂得多。例如否定negation可能与主语相隔任意多个词我不喜欢橙子与我不喜欢那些又大又鲜艳的美味橙子——这两句都应被解释为同一个模式否定但中间插入的词汇数量任意可变。因此处理语言需要引入新的网络类型循环神经网络recurrent networks与Transformertransformer。环境准备安装 NLP 依赖库如果使用本地 Python 环境运行本课程需要先安装 NLP 所需的全部依赖库PyTorch 与 TensorFlow 两套环境分别对应仓库中的两个依赖清单文件PyTorch 环境pip install -r lessons/5-NLP/requirements-pytorch.txtTensorFlow 环境pip install -r lessons/5-NLP/requirements-tf.txt以 requirements-pytorch.txt 为例其中锁定了关键组件版本torch2.12.1、torchtext0.9.1、transformers5.5.0、nltk3.10.0、gensim4.3.0,5用于 Word2Vec 等词向量训练以及opencv-python、scikit-learn等辅助库而 requirements-tf.txt 则对应TensorFlow、TensorFlow_datasets、TensorFlow_text与同版本的transformers。两份清单都包含numpy1.22.0与Pillow保证跨框架的数值计算与图像处理底座一致。GPU 使用警告训练大模型的注意事项本章部分示例需要训练规模较大的模型官方文档明确给出了以下实践要点使用带 GPU 的机器建议在配备 GPU 的计算机上运行 notebook以减少大模型训练的等待时间。GPU 内存约束训练大模型时容易耗尽 GPU 显存。显存消耗因素训练期间 GPU 显存占用取决于多种因素包括小批量minibatch大小。减小批量大小如果遇到显存不足优先考虑在代码中调小 minibatch size。TensorFlow 显存释放问题旧版 TensorFlow 在同一个 Python 内核中训练多个模型时可能无法正确释放 GPU 显存可配置 TensorFlow 仅在需要时分配显存。为让 TensorFlow 采用按需增长的显存分配策略在 notebook 中加入以下代码physical_devices tf.config.list_physical_devices(GPU) if len(physical_devices)0: tf.config.experimental.set_memory_growth(physical_devices[0], True)课程路线图本章 8 课的核心内容本章从文本表示出发一路进阶到预训练大语言模型具体课目与配套 notebook 均已在仓库中落地1. 文本表示为张量13-TextRep神经网络要求输入为张量因此首先要解决如何把文本表示成张量。计算机本身已用 ASCII/UTF-8 等编码把字符映射为数字对应 ascii-character-map.png但网络必须自己学习字符的含义。字符级表示把每个字符当作一个数字若有 C 种不同字符单词Hello会表示为 5×C 的张量每个字母对应 one-hot 编码中的一列。词级表示建立**词表vocabulary**后用 one-hot 编码表示单词。由于单词比字母承载更多语义这简化了网络的任务但词表很大需要面对高维稀疏张量。无论哪种表示都需要先把文本切分成**词元token**序列token 可以是字符、单词甚至子词再用词表把 token 映射为数字最后通过 one-hot 编码喂给神经网络。N-Gram词的精确含义只能由上下文决定neural network与fishing network含义完全不同。一种思路是把词对当作独立词表 token如I like,like to……但词表会急剧膨胀且go fishing与go shopping因动词相同却毫无语义相似性。有时也用三词组合tri-grams字符级表示下 n-gram 大致对应不同音节。词袋模型BoW与 TF/IDF文本分类需要固定大小的向量作为最终分类器的输入最简单的方式是累加所有单词的表示。累加每个词的 one-hot 编码会得到频率向量即词袋模型对应示意图 bow.png。BoW 能体现文本里出现哪些词、各出现多少次例如政治新闻容易出现president、country科技论文则会出现collider、discovered。但and、is等常见词频率最高会掩盖真正重要的词——TF/IDF通过统计单词在整个文档集合中的出现频率来降低这类词的权重正是针对这一问题的改进细节在配套 notebook 中展开。不过这些方法都无法完整刻画文本语义需要更强大的神经网络模型这正是后续课程的铺垫。配套练习为 TextRepresentationPyTorch.ipynb 与 TextRepresentationTF.ipynb。2. 词嵌入14-EmbeddingsBoW/TF-IDF 分类器操作的是长度达vocab_size的高维向量需要显式从低维位置表示转换为稀疏 one-hot 表示——不仅内存效率低每个词还被独立对待完全不表达词间语义相似性。嵌入embedding的思想是用低维稠密向量表示单词并让该向量在一定程度上反映词的语义。嵌入层以单词为输入输出指定embedding_size维的向量它类似Linear层但能直接接收词编号作为输入从而避免构造巨大的 one-hot 向量。把嵌入层作为分类器网络的第一层就从词袋模型切换到**嵌入袋embedding bag**模型先把每个词转为对应嵌入再对所有嵌入做sum、average或max等聚合架构见 embedding-classifier-example.png。Word2Vec 语义嵌入直接训练的嵌入层不一定有语义含义理想情况是相似词/同义词的向量在某种向量距离如欧氏距离下彼此接近。Word2Vec 通过在大型文本集合上以特定方式预训练获得这种表示其两大架构为Continuous bag-of-wordsCBoW用上下文预测中心词给定 ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$目标是仅用 $(W_{-2},W_{-1},W_1,W_2)$ 预测 $W_0$Continuous skip-gram与 CBoW 相反用中心词预测周边上下文词。CBoW 更快skip-gram 更慢但对低频词的表示更好两种算法对比见 example-algorithms-for-converting-words-to-vectors.png。Word2Vec/GloVe 预训练嵌入可替代网络中的嵌入层但预训练词表与语料词表往往不一致需要处理词表对齐问题notebook 中有具体方案。配套练习EmbeddingsPyTorch.ipynb、EmbeddingsTF.ipynb。上下文嵌入的局限Word2Vec 这类传统预训练嵌入存在词义消歧问题——同一个词的所有含义被编码进同一个嵌入例如play在 I went to aplayat the theatre 与 John wants toplaywith his friends 中含义迥异却共享同一向量。克服这一局限需要基于语言模型构建嵌入即在本章后续的语言建模中解决。3. 语言建模15-LanguageModelingWord2Vec、GloVe 这类语义嵌入是迈向语言建模的第一步——即创建某种理解或表示语言本质的模型。语言建模的核心思想是在无标注数据上以无监督方式训练因为未标注文本海量可得而标注数据始终受限于人工标注成本。最常见的做法是让模型预测文本中的缺失词——随机遮盖文本中的一个词作为训练样本非常简单。训练嵌入的几种思路N-Gram 语言建模根据前 N 个 token 预测当前 tokenCBoW在 token 序列 $W_{-N},…,W_N$ 中预测中间 token $W_0$Skip-gram由中间 token $W_0$ 预测邻域 token 集合。配套的 CBoW 训练实战见 CBoW-TF.ipynb 与 CBoW-PyTorch.ipynb。此外还有一项进阶任务lab 说明修改本课代码把 CBoW 训练改为 skip-gram 训练并可用gensim框架用几行代码训练最常用的嵌入。4. 循环神经网络16-RNN前面用嵌入 简单线性分类器的架构只能捕捉句子中词的聚合含义丢失了词的顺序信息因此无法解决文本生成、问答等更复杂或更模糊的任务。RNN 的基本思想让句子一个符号一个符号地通过网络网络产生某种状态state再把状态与下一个符号一起传回网络结构见 rnn.png。给定输入序列 $X_0,…,X_n$RNN 展开为一系列共享权重的网络块每个块接收 $(X_i,S_i)$ 并产生 $S_{i1}$最终状态 $S_n$或输出 $Y_n$送入线性分类器得到结果全部块通过一次反向传播端到端训练。由于状态向量在序列间传递网络能学习词间的顺序依赖——例如出现not时它可以学习把状态向量中的某些元素取反从而表达否定。RNN 单元解剖简单 RNN 单元内部有两组权重矩阵一组变换输入符号记为 W另一组变换输入状态记为 H输出为 $\sigma(W×X_iH×S_{i-1}b)$其中 $\sigma$ 是激活函数、b 是偏置见 rnn-anatomy.png。输入 token 常先经过嵌入层降维若输入向量维度为emb_size、状态向量为hid_size则 W 尺寸为emb_size×hid_sizeH 尺寸为hid_size×hid_size。LSTM 与门控机制经典 RNN 存在梯度消失问题——端到端单次反向传播难以把误差传回网络浅层导致无法学习远距离 token 的关系。解决方案是引入显式状态管理的门gates代表架构为LSTM与GRU单元结构见 long-short-term-memory-cell.svg。LSTM 在层间传递两个状态实际状态 C 与隐藏向量 H。每个单元中H 与输入 X 拼接后通过三个 sigmoid 激活的门输出在 [0,1]相当于与状态向量相乘的位掩码控制 C 的演化遗忘门forget gate决定 C 的哪些分量需要遗忘、哪些放行输入门input gate从输入与隐藏向量取信息写入状态输出门output gate先经 tanh 激活的线性层变换状态再用 H 选取部分分量产生新状态。状态 C 的分量可视为可开关的标志位例如遇到名字Alice就置位句中出现女性名词再遇到and Tom就置位复数名词从而追踪句子的语法属性。双向与多层 RNN单向网络按序列从头到尾计算类似阅读习惯但在可随机访问输入序列的场景双向计算更有意义——双向 RNN需要两个方向各一个隐藏状态向量。与卷积网络类似可在第一层之上堆叠第二层循环层来捕捉更高层模式即多层 RNN示意见 multi-layer-lstm.jpg。实战练习RNNPyTorch.ipynb、RNNTF.ipynb。5. 生成网络17-GenerativeNetworksRNN 及其门控变体LSTM/GRU通过学习词序、预测序列中的下一个词提供了语言建模机制从而可用于生成式任务普通文本生成、机器翻译甚至图像描述image captioning。在 RNN 架构中除了产生下一个隐藏状态还可给每个循环单元增加一个输出从而输出与原序列等长的序列甚至可以构造每一步不接受输入、只取初始状态向量就产生输出序列的单元。由此衍生出几种架构模式图见 unreasonable-effectiveness-of-rnn.jpg一对多one-to-many接受一个输入值、生成输出序列例如图像描述网络——图片经 CNN 得到隐藏状态再由循环链逐词生成描述多对一many-to-one对应上一课的文本分类等 RNN 架构多对多 / 序列到序列sequence-to-sequence对应机器翻译等任务——第一个 RNN 把输入序列的全部信息收集进隐藏状态另一个 RNN 链把该状态展开为输出序列。本课聚焦简单的字符级 token 化文本生成训练时每次取长度为nchars的字符序列让网络为每个输入字符生成下一个字符训练示意见 rnn-generate.png推理时从一个**提示prompt**出发逐字符生成并回传状态见 rnn-generate-inf.png。软生成与温度temperature每个 RNN 单元输出一个字符概率分布。若总是选取概率最高的字符文本容易在相同序列间循环如today of the second the company and a second the company ...。而最高概率之间差距往往很小如play之后空格与字母 e 概率接近 0.2 与 0.19因此更明智的做法是从概率分布中采样还可引入温度参数调节分布的平坦/陡峭程度增大随机性或更贴向高概率字符。实现细节见 GenerativePyTorch.ipynb 与 GenerativeTF.ipynb。实验室任务lab 说明)要求从字符级生成进阶到词级文本生成。6. Transformer 与注意力18-TransformersNLP 领域最重要的问题之一是机器翻译它是 Google Translate 等工具的基石更广义地说是任意**序列到序列sentence transduction**任务。RNN 实现 seq2seq 用两个循环网络**编码器encoder**把输入序列压缩进隐藏状态**解码器decoder**把该状态展开为翻译结果。但有两个问题编码器最终状态难以记住句子开头长句质量差且序列中所有词对结果影响相同而现实中某些词影响更大。**注意力机制Attention**为每个输出预测加权各输入向量的上下文影响实现方式是在输入 RNN 与输出 RNN 的中间状态之间建立捷径生成输出符号 $y_t$ 时会以不同权重系数 $\alpha_{t,i}$ 考虑所有输入隐藏状态 $h_i$架构见 encoder-decoder-attention.png。注意力矩阵 ${\alpha_{i,j}}$ 刻画了输入词对输出词的贡献程度示例对齐矩阵见 bahdanau-fig3.png。注意力的代价是模型参数大增而 RNN 的循环本质难以批量化与并行化训练序列元素必须按顺序处理这一约束促使了Transformer的出现——如今 SOTA 的 BERT、GPT 系列均由此而来见 EncDecAttention.gif。Transformer 的两大核心思想位置编码positional encodingRNN 中 token 的相对位置由步数隐式表示改用注意力后必须显式知道 token 在序列中的相对位置。做法是把 token 序列与位置序列0,1,...结合既可用可训练嵌入对 token 和位置分别应用嵌入层得到同维向量后相加也可用原论文的固定位置编码函数示意见 pos-embedding.png。多头自注意力multi-head self-attention自注意力把注意力应用于输入与输出同一序列从而捕捉句内上下文、看清词间相互指代关系如it的指代见 CoreferenceResolution.png。多头注意力让网络具备同时捕捉多种依赖关系的能力长期 vs 短期词关系、指代 vs 其他关系等。Transformer 中注意力出现在两处一是输入文本内部的自注意力捕捉模式二是编码器与解码器之间的注意力完成序列翻译动态示意见 transformer-animated-explanation.gif。由于每个输入位置独立映射到每个输出位置Transformer 比 RNN 更易并行化从而支撑起更大、更具表达力的语言模型。Transformer 层的具体实现细节见 TransformersTF.ipynb。BERT双向编码器表示Bidirectional Encoder Representations from Transformers是一个超大多层 Transformer 网络——BERT-base12 层BERT-large24 层。模型先在大型文本语料维基百科 书籍上用无监督训练预测句中被遮蔽的词见 jalammarBERT-language-modeling-masked-lm.png进行预训练吸收大量语言理解能力再用其他数据集微调fine tuning——这一过程称为迁移学习transfer learning。练习见 TransformersPyTorch.ipynb 与 TransformersTF.ipynb任务见 assignment.md。Transformer 变体众多BERT、DistilBERT、BigBird、GPT 系列等HuggingFace 工具包提供了在 PyTorch 与 TensorFlow 下训练这些架构的统一入口。7. 命名实体识别19-NER前面课程集中于分类任务NER 则是另一类可用神经网络完成的任务识别文本中的特定实体地点、人名、日期时间区间、化学式等。以智能聊天机器人类似 Alexa/Google Assistant为例机器人先通过文本分类理解用户意图但用户还可能在话术中携带参数如查询天气时指定地点或日期机器人必须识别这些实体并填入参数槽这正是 NER 的用武之地流程示意见 bot-ner.png。NER 本质上是 token 分类模型要为每个输入 token 判定它是否属于实体、属于哪个实体类。考虑论文标题Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infantTricuspid valve regurgitation是疾病DISLithium carbonate是化学物质CHEMToxicity也是疾病DIS。注意一个实体可跨多个 token且需要区分相邻实体因此每个实体常用两类标签实体首 token前缀B-beginning与实体延续 token前缀I-inner另用O表示其他 token这就是BIO 标注IOB。标注结果如下TokenTagTricuspidB-DISvalveI-DISregurgitationI-DISandOlithiumB-CHEMcarbonateI-CHEMtoxicityB-DISinOaOnewbornOinfantO.O由于需要建立 token 与类别的一一对应可以训练最右侧的多对多网络对应 17-GenerativeNetworks 中的 unreasonable-effectiveness-of-rnn.jpg 所示架构。训练上直接复用熟悉的 RNN每个循环块返回 token ID。示例 notebook 展示如何训练 LSTM 做 token 分类NER-TF.ipynb。课程实验lab 说明要求先训练 LSTM 医疗实体识别模型再进阶到 BERT 模型。8. 预训练大语言模型20-LangModels此前所有任务都用带标签数据集训练网络执行特定任务而 BERT 这类大型 Transformer 用自监督语言建模构建语言模型再通过领域专属训练适配下游任务。但研究表明大型语言模型可以不经过任何领域训练就解决许多任务这类模型家族被称为GPTGenerative Pre-Trained Transformer。文本生成与困惑度perplexity语言模型是无监督多任务学习者这一思想的核心是许多任务都可以建模为文本生成因为理解文本本质上就是能够产出文本模型在海量涵盖人类知识的文本上训练自然就博学。文本生成网络预测下一个词的概率 $P(w_N)$无条件下的概率等于该词在语料中的频率而 GPT 给出的是给定前文的条件概率 $P(w_N | w_{n-1}, …, w_0)$。语言生成模型的质量可用**困惑度perplexity**衡量——一个无需任务专属数据集的内在指标。它基于句子概率模型给真实句子分配高概率不被困惑给不合理句子如Can it does what?分配低概率。数学上定义为测试集归一化逆概率$$\mathrm{Perplexity}(W) \sqrt[N]{1 \over P(W_1,…,W_N)}$$GPT 是一个家族GPT-2 是参数多达 15 亿的语言模型GPT-3 参数多达 1750 亿GPT-4 据称达 100 万亿参数且接受图像与文本输入、输出文本。提示工程Prompt EngineeringGPT 在海量语言与代码数据上训练对输入提示产生输出。要获得理想结果需要选择恰当的词、格式、短语乃至符号来构造有效提示。课程配套 notebook 演示了用 Hugging Face Transformers 与 OpenAI-GPT 生成文本GPT-PyTorch.ipynb。结论是新一代通用预训练语言模型不仅建模语言结构还蕴含海量自然语言知识因此能在 zero-shot 或 few-shot 场景下高效解决部分 NLP 任务。学习路径与配套资源本章遵循表示 → 嵌入 → 建模 → 序列网络 → 生成 → 注意力/Transformer → 实体识别 → 大模型的递进脉络每条主线都配有 PyTorch 与 TensorFlow 双实现 notebook 及独立作业assignment。建议按顺序完成各课 assignment.mdTextRep、assignment.mdEmbeddings、lab/README.mdLanguageModeling、assignment.mdRNN、lab/README.mdGenerativeNetworks、assignment.mdTransformers、lab/README.mdNER中的实践任务最终通过 GPT 生成实验理解预训练大模型的能力边界。若想从经典机器学习视角补充 NLP 知识仓库还提供了 ML-For-Beginners 系列的 6-NLP 课程集作为对照参考。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐ML-For-Beginners 第 6 模块 NLP 课程常见自然语言处理任务与 TextBlob 实战指南ML For Beginners 第 6 模块 NLP 课程常见自然语言处理任务与 TextBlob 实战指南 自然语言处理NLP是机器学习在生产软件中最教程机器学习人工智能AI-For-Beginners 课程之自然语言处理NLP学习路线从文本表示到大型语言模型AI For Beginners 课程之自然语言处理NLP学习路线从文本表示到大型语言模型 导读 本文是 lessons/5 NLP/README.md教程人工智能机器学习深度学习循环神经网络与自然语言处理循环神经网络与自然语言处理 本文系统介绍了序列建模的基础架构RNN、LSTM和GRU的原理与实现详细解析了文本预处理技术包括分词、词向量和语言模型构建方法深人工智能深度学习机器学习教程上一篇fabric.js 的 CodeSandbox CI 沙箱体系模板、CLI 与热重载机制全解析下一篇告别Null异常Ramda-Fantasy algebraic types实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →