4.7k 4 分钟

# 子词嵌入 🏷 sec_fasttext 在英语中,“helps”“helped” 和 “helping” 等单词都是同一个词 “help” 的变形形式。“dog” 和 “dogs” 之间的关系与 “cat” 和 “cats” 之间的关系相同,“boy” 和 “boyfriend” 之间的关系与 “girl” 和 “girlfriend” 之间的关系相同。在法语和西班牙语等其他语言中,许多动词有 40 多种变形形式,而在芬兰语中,名词最多可能有 15 种变形。在语言学中,形态学研究单词形成和词汇关系。但是,word2vec 和 GloVe 都没有对词的内部结构进行探讨。 #...
12k 11 分钟

# 通过时间反向传播 🏷 sec_bptt 到目前为止,我们已经反复提到像梯度爆炸或梯度消失, 以及需要对循环神经网络分离梯度。 例如,在 :numref: sec_rnn_scratch 中, 我们在序列上调用了 detach 函数。 为了能够快速构建模型并了解其工作原理, 上面所说的这些概念都没有得到充分的解释。 本节将更深入地探讨序列模型反向传播的细节, 以及相关的数学原理。 当我们首次实现循环神经网络( :numref: sec_rnn_scratch...
899 1 分钟

# 循环神经网络 🏷 chap_rnn 到目前为止,我们遇到过两种类型的数据:表格数据和图像数据。 对于图像数据,我们设计了专门的卷积神经网络架构来为这类特殊的数据结构建模。 换句话说,如果我们拥有一张图像,我们需要有效地利用其像素位置, 假若我们对图像中的像素位置进行重排,就会对图像中内容的推断造成极大的困难。 最重要的是,到目前为止我们默认数据都来自于某种分布, 并且所有样本都是独立同分布的 (independently and identically...
11k 10 分钟

# 语言模型和数据集 🏷 sec_language_model 在 :numref: sec_text_preprocessing 中, 我们了解了如何将文本数据映射为词元, 以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为TTT 的文本序列中的词元依次为x1,x2,…,xTx_1, x_2, \ldots, x_Tx1​,x2​,…,xT​。 于是,xtx_txt​(1≤t≤T1 \leq t \leq T1≤t≤T) 可以被认为是文本序列在时间步ttt 处的观测或标签。 在给定这样的文本序列时,语言模型(language...
2.9k 3 分钟

# 循环神经网络的简洁实现 🏷 sec_rnn-concise 虽然 :numref: sec_rnn_scratch 对了解循环神经网络的实现方式具有指导意义,但并不方便。 本节将展示如何使用深度学习框架的高级 API 提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2lbatch_size, num_steps = 32, 35train_iter, vocab =...
8.1k 7 分钟

# 词嵌入(word2vec) 🏷 sec_word2vec 自然语言是用来表达人脑思维的复杂系统。 在这个系统中,词是意义的基本单元。顾名思义, 词向量是用于表示单词意义的向量, 并且还可以被认为是单词的特征向量或表示。 将单词映射到实向量的技术称为词嵌入。 近年来,词嵌入逐渐成为自然语言处理的基础知识。 # 为何独热向量是一个糟糕的选择 在 :numref: sec_rnn_scratch 中,我们使用独热向量来表示词(字符就是单词)。假设词典中不同词的数量(词典大小)为NNN,每个词对应一个从000 到N−1N−1N−1 的不同整数(索引)。为了得到索引为iii...
4.8k 4 分钟

# 预训练 word2vec 🏷 sec_word2vec_pretraining 我们继续实现 :numref: sec_word2vec 中定义的跳元语法模型。然后,我们将在 PTB 数据集上使用负采样预训练 word2vec。首先,让我们通过调用 d2l.load_data_ptb 函数来获得该数据集的数据迭代器和词表,该函数在 :numref: sec_word2vec_data 中进行了描述。 import mathimport torchfrom torch import nnfrom d2l import torch as d2lbatch_size,...
9.2k 8 分钟

# 循环神经网络的从零开始实现 🏷 sec_rnn_scratch 本节将根据 :numref: sec_rnn 中的描述, 从头开始基于循环神经网络实现字符级语言模型。 这样的模型将在 H.G.Wells 的时光机器数据集上训练。 和前面 :numref: sec_language_model 中介绍过的一样, 我们先读取数据集。 %matplotlib inlineimport mathimport torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as...
9.5k 9 分钟

# 序列模型 🏷 sec_sequence 想象一下有人正在看网飞(Netflix,一个国外的视频网站)上的电影。 一名忠实的用户会对每一部电影都给出评价, 毕竟一部好电影需要更多的支持和认可。 然而事实证明,事情并不那么简单。 随着时间的推移,人们对电影的看法会发生很大的变化。 事实上,心理学家甚至对这些现象起了名字: 锚定(anchoring)效应:基于其他人的意见做出评价。 例如,奥斯卡颁奖后,受到关注的电影的评分会上升,尽管它还是原来那部电影。 这种影响将持续几个月,直到人们忘记了这部电影曾经获得的奖项。 结果表明( :cite: Wu.Ahmed.Beutel.ea.2017...
4.6k 4 分钟

# 文本预处理 🏷 sec_text_preprocessing 对于序列数据处理问题,我们在 :numref: sec_sequence 中 评估了所需的统计工具和预测时面临的挑战。 这样的数据存在许多种形式,文本是最常见例子之一。 例如,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 本节中,我们将解析文本的常见预处理步骤。 这些步骤通常包括: 将文本作为字符串加载到内存中。 将字符串拆分为词元(如单词和字符)。 建立一个词表,将拆分的词元映射到数字索引。 将文本转换为数字索引序列,方便模型操作。 import collectionsimport refrom d2l...