3.3k 3 分钟

# 情感分析:使用循环神经网络 🏷 sec_sentiment_rnn 与词相似度和类比任务一样,我们也可以将预先训练的词向量应用于情感分析。由于 :numref: sec_sentiment 中的 IMDb 评论数据集不是很大,使用在大规模语料库上预训练的文本表示可以减少模型的过拟合。作为 :numref: fig_nlp-map-sa-rnn 中所示的具体示例,我们将使用预训练的 GloVe 模型来表示每个词元,并将这些词元表示送入多层双向循环神经网络以获得文本序列表示,该文本序列表示将被转换为情感分析输出 :cite: Maas.Daly.Pham.ea.2011...
8.2k 7 分钟

# 前言 几年前,在大公司和初创公司中,并没有大量的深度学习科学家开发智能产品和服务。我们中年轻人(作者)进入这个领域时,机器学习并没有在报纸上获得头条新闻。我们的父母根本不知道什么是机器学习,更不用说为什么我们可能更喜欢机器学习,而不是从事医学或法律职业。机器学习是一门具有前瞻性的学科,在现实世界的应用范围很窄。而那些应用,例如语音识别和计算机视觉,需要大量的领域知识,以至于它们通常被认为是完全独立的领域,而机器学习对这些领域来说只是一个小组件。因此,神经网络 ——...
4.8k 4 分钟

# 近似训练 🏷 sec_approx_train 回想一下我们在 :numref: sec_word2vec 中的讨论。跳元模型的主要思想是使用 softmax 运算来计算基于给定的中心词wcw_cwc​ 生成上下文字wow_owo​ 的条件概率(如 :eqref: eq_skip-gram-softmax ),对应的对数损失在 :eqref: eq_skip-gram-log 给出。 由于 softmax 操作的性质,上下文词可以是词表V\mathcal{V}V 中的任意项, :eqref: eq_skip-gram-log 包含与整个词表大小一样多的项的求和。因此, :eqref:...
5.3k 5 分钟

# 预训练 BERT 🏷 sec_bert-pretraining 利用 :numref: sec_bert 中实现的 BERT 模型和 :numref: sec_bert-dataset 中从 WikiText-2 数据集生成的预训练样本,我们将在本节中在 WikiText-2 数据集上对 BERT 进行预训练。 import torchfrom torch import nnfrom d2l import torch as d2l首先,我们加载 WikiText-2 数据集作为小批量的预训练样本,用于遮蔽语言模型和下一句预测。批量大小是 512,BERT 输入序列的最大长度是...
8.1k 7 分钟

# 用于预训练 BERT 的数据集 🏷 sec_bert-dataset 为了预训练 :numref: sec_bert 中实现的 BERT 模型,我们需要以理想的格式生成数据集,以便于两个预训练任务:遮蔽语言模型和下一句预测。一方面,最初的 BERT 模型是在两个庞大的图书语料库和英语维基百科(参见 :numref: subsec_bert_pretraining_tasks )的合集上预训练的,但它很难吸引这本书的大多数读者。另一方面,现成的预训练 BERT 模型可能不适合医学等特定领域的应用。因此,在定制的数据集上对 BERT 进行预训练变得越来越流行。为了方便 BERT...
6.2k 6 分钟

# 全局向量的词嵌入(GloVe) 🏷 sec_glove 上下文窗口内的词共现可以携带丰富的语义信息。例如,在一个大型语料库中,“固体” 比 “气体” 更有可能与 “冰” 共现,但 “气体” 一词与 “蒸汽” 的共现频率可能比与 “冰” 的共现频率更高。此外,可以预先计算此类共现的全局语料库统计数据:这可以提高训练效率。为了利用整个语料库中的统计信息进行词嵌入,让我们首先回顾 :numref: subsec_skip-gram 中的跳元模型,但是使用全局语料库统计(如共现计数)来解释它。 # 带全局语料统计的跳元模型 🏷...
4.4k 4 分钟

# 词的相似性和类比任务 🏷 sec_synonyms 在 :numref: sec_word2vec_pretraining 中,我们在一个小的数据集上训练了一个 word2vec 模型,并使用它为一个输入词寻找语义相似的词。实际上,在大型语料库上预先训练的词向量可以应用于下游的自然语言处理任务,这将在后面的 :numref: chap_nlp_app 中讨论。为了直观地演示大型语料库中预训练词向量的语义,让我们将预训练词向量应用到词的相似性和类比任务中。 import osimport torchfrom torch import nnfrom d2l import torch as...
10k 9 分钟

# 来自 Transformers 的双向编码器表示(BERT) 🏷 sec_bert 我们已经介绍了几种用于自然语言理解的词嵌入模型。在预训练之后,输出可以被认为是一个矩阵,其中每一行都是一个表示预定义词表中词的向量。事实上,这些词嵌入模型都是与上下文无关的。让我们先来说明这个性质。 # 从上下文无关到上下文敏感 回想一下 :numref: sec_word2vec_pretraining 和 :numref: sec_synonyms 中的实验。例如,word2vec 和 GloVe 都将相同的预训练向量分配给同一个词,而不考虑词的上下文(如果有的话)。形式上,任何词元xxx...
8.2k 7 分钟

# 用于预训练词嵌入的数据集 🏷 sec_word2vec_data 现在我们已经了解了 word2vec 模型的技术细节和大致的训练方法,让我们来看看它们的实现。具体地说,我们将以 :numref: sec_word2vec 的跳元模型和 :numref: sec_approx_train 的负采样为例。本节从用于预训练词嵌入模型的数据集开始:数据的原始格式将被转换为可以在训练期间迭代的小批量。 import mathimport osimport randomimport torchfrom d2l import torch as d2l# 读取数据集 我们在这里使用的数据集是 Penn...
1k 1 分钟

# 自然语言处理:预训练 🏷 chap_nlp_pretrain 人与人之间需要交流。 出于人类这种基本需要,每天都有大量的书面文本产生。 比如,社交媒体、聊天应用、电子邮件、产品评论、新闻文章、 研究论文和书籍中的丰富文本, 使计算机能够理解它们以提供帮助或基于人类语言做出决策变得至关重要。 自然语言处理是指研究使用自然语言的计算机和人类之间的交互。 在实践中,使用自然语言处理技术来处理和分析文本数据是非常常见的, 例如 :numref: sec_language_model 的语言模型 和 :numref: sec_machine_translation...