一、自然语言处理(NLP)概述

  • ​定义​​:让计算机理解、生成人类语言。

  • ​核心任务​​:语言理解、语言生成。

  • ​基本概念​​:

    • 语料(Corpus):文本数据集合。

    • 词表(Vocabulary):所有不重复的词组成的列表。

    • 词向量(Word Embedding):词的数值化表示。

    • Token:分词后的最小单位。

    • 时间步(Time Step):每个词输入模型的时刻。


二、词嵌入层(Word Embedding)

  • ​作用​​:将离散的词转换为连续的稠密向量。

  • ​优势​​:

    • 捕捉语义相似性

    • 降低维度(相比One-Hot)

  • ​PyTorch实现​​:

    nn.Embedding(num_embeddings, embedding_dim)
  • ​使用步骤​​:

    1. 分词(如使用jieba

    2. 构建词表(词 → 索引)

    3. 将词索引转换为词向量


三、循环神经网络(RNN)

  • ​为什么需要RNN​​:处理序列数据(如文本、时间序列),捕捉前后依赖关系。

  • ​应用场景​​:

    • 文本生成

    • 机器翻译

    • 情感分析

    • 文本摘要

  • ​RNN结构​​:

    • 每个时间步接收当前输入和上一隐藏状态

    • 输出当前隐藏状态和预测结果

  • ​数学表达​​:

    ht​=tanh(Wih​xt​+bih​+Whh​ht−1​+bhh​)
  • ​PyTorch API​​:

    nn.RNN(input_size, hidden_size, num_layers)
    • 输入:(seq_len, batch_size, input_size)

    • 隐藏状态:(num_layers, batch_size, hidden_size)


四、文本生成实战:周杰伦歌词生成

1. 数据预处理
  • 读取歌词文件

  • 使用jieba分词

  • 构建词表(word_to_index, index_to_word

2. 构建数据集(Dataset)
  • 将文本转为索引序列

  • 按固定长度切分样本

  • 每个样本的标签是下一个词

3. 构建模型
class TextGenerator(nn.Module):
    def __init__(self, vocab_size):
        super().__init__()
        self.embed = nn.Embedding(vocab_size, 128)
        self.rnn = nn.RNN(128, 256, 1)
        self.fc = nn.Linear(256, vocab_size)
4. 训练过程
  • 损失函数:CrossEntropyLoss

  • 优化器:Adam

  • 训练循环:遍历DataLoader,计算损失,反向传播

5. 预测生成
  • 输入起始词,逐步预测下一个词

  • 将预测词作为下一个输入,循环生成文本


五、核心代码片段摘要

  • 构建词表:build_vocab()

  • 自定义数据集:LyricsDataset

  • 模型定义:TextGenerator

  • 训练循环:train()

  • 文本生成:predict(start_word, length)


XMind 思维导图(内容结构)

深度学习基础-RNN
├── 一、NLP概述
│   ├── 定义与目标
│   ├── 基本术语:语料、词表、Token、时间步
│   └── 数据特点:序列性、非结构化
├── 二、词嵌入层
│   ├── 作用:词→向量,语义表示
│   ├── PyTorch实现:nn.Embedding
│   └── 使用流程:分词→建表→转换
├── 三、循环神经网络(RNN)
│   ├── 为什么需要RNN:序列依赖
│   ├── 应用场景:生成、翻译、情感分析等
│   ├── 网络结构:隐藏状态传递
│   ├── 数学公式
│   └── PyTorch API:nn.RNN
├── 四、文本生成案例
│   ├── 数据预处理:分词、建词表
│   ├── 数据集构建:LyricsDataset
│   ├── 模型结构:Embedding + RNN + Linear
│   ├── 训练过程:损失函数、优化器、循环
│   └── 预测生成:逐步生成文本
└── 五、总结
    ├── RNN适合处理序列数据
    ├── 词嵌入是NLP基础表示方法
    └── 文本生成是典型生成式任务

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐