Transformer 入门


计算机科学和人工智能的自然语言处理 (NLP) 分支专注于计算机和人类语言之间的交互方式。它涉及创建能够分析、理解和生成人类语言的模型和算法。

NLP 用于解决许多问题,包括语言翻译、情感分析、文本摘要、语音识别和问答系统。随着数字文本数据呈指数级增长,以及从这些数据中提取见解和知识的需求不断增加,这些应用变得越来越重要。

什么是 NLP 中的 Transformer?

Transformer 是一种特定类型的神经网络架构,由于其能够对文本数据中的长距离依赖关系进行建模,因此在 NLP 中变得非常流行。它们最初由 Vaswani 等人在 2017 年的一篇基础性论文中提出,并已迅速获得普及。例如,循环神经网络 (RNN) 是传统的 NLP 模型,它们采用迭代方法处理输入,并依赖于隐藏状态来跨时间传递信息。但是,这种方法可能难以捕获序列中稍后发生的依赖关系,这可能导致在需要长期上下文的任务上的性能不佳。

RNN 约定示例

例如,考虑电影评论中的以下句子:“这部电影很好,但不是很好。”

评论者表达了一种矛盾的情绪,认为这部电影还可以,但并非出色。但是,RNN 模型可能无法准确地捕捉这种细微差别并预测情感是正面还是负面,这取决于它关注句子的哪个部分。如果模型只考虑“好”这个词,它可能会预测正面情感;如果只考虑“不是很好”这个短语,它可能会预测负面情感。为了解决这个问题,已经提出了更复杂的模型,例如 Transformer。这些模型在自然语言处理中的情感分析任务中取得了巨大的成功。

然而,Transformer 使用自注意力机制来计算每个位置的输入序列的加权总和,使它们能够识别整个序列中的依赖关系。这使得它们适用于诸如机器翻译之类的任务,在这些任务中,在生成翻译之前,理解整个句子的整体文本至关重要。Transformer 具有高度并行性,并且能够对长距离依赖关系进行建模,这使得它们非常适合在分布式计算系统中对大型数据集进行训练。这使得研究人员能够训练更大、更复杂的模型,从而显著提高了它们在各种 NLP 任务上的性能。

在自然语言处理 (NLP) 中,经常使用许多不同类型的 Transformer。下面列出了四个最重要的类别,并分别提供了一个示例:

  • 仅编码器 Transformer

  • 仅解码器 Transformer

  • 编码器-解码器 Transformer

  • 动态卷积 Transformer

仅编码器 Transformer

仅具有编码器组件(没有解码器组件)的 Transformer 称为仅编码器 Transformer。这些模型通常用于输入序列被处理并作为一个单元进行分类的任务,例如短语分类和命名实体识别。BERT(来自 Transformer 的双向编码器表示)和 RoBERTa(鲁棒优化的 BERT 预训练技术)是仅编码器 Transformer 的两个示例。

仅解码器 Transformer

仅具有解码器组件的 Transformer 称为仅解码器 Transformer,因为它们没有编码器组件。这些模型通常用于诸如语言生成和机器翻译之类的任务,在这些任务中,模型需要根据输入序列生成输出序列。GPT(生成式预训练 Transformer)和 GPT-2 是仅解码器 Transformer 的两个示例。

编码器-解码器 Transformer

同时具有编码器和解码器组件的 Transformer 称为编码器-解码器 Transformer。这些模型通常用于诸如机器翻译之类的应用,其中模型需要首先将输入序列编码成固定长度的表示,然后将该表示解码成输出序列。Vaswani 等人提出的第一个 Transformer 模型以及更新的 T5(文本到文本传输 Transformer)是编码器-解码器 Transformer 的两个示例。

动态卷积 Transformer

一种相对较新的 Transformer 类别,称为动态卷积 Transformer,它用动态卷积替换了传统的自注意力机制。这些模型保留了传统 Transformer 的计算效率,同时能够捕获文本数据中的长距离依赖关系。最近提出的 Longformer 模型是动态卷积 Transformer 的一个示例。

选择最佳的 Transformer 类型将取决于手头的特定 NLP 任务,因为每种类型都有其自身的优缺点。但是,它们都是对自然语言数据进行有效建模的工具,并且有助于 NLP 取得重大进步。

使用的库和示例

Hugging Face Transformers

一家名为“Hugging Face”的公司创建了自然语言处理的工具和库,例如著名的 Transformers 开源库。Transformers 库提供了预训练模型和各种 NLP 任务,使研究人员和从业者能够轻松地将其用于自己的工作中。

以下是如何使用预训练的 BERT 模型使用 Transformers 库对一段文本执行情感分析的示例:

示例

from transformers import pipeline

# creates a sentiment analysis pipeline
classifier = pipeline("sentiment-analysis", model="bert-base-uncased")

# Distinguish the sentiment of a piece of text
text = "I really enjoyed the movie"
result = classifier(text)[0]

# prints the final result.
print(f"Text: {text}")
print(f"Sentiment: {result['label']}")
print(f"Score: {result['score']}")

输出

Text: I really enjoyed the movie
Sentiment: LABEL_1
Score: 0.7276840806007385

在这个示例中,我们使用了一个预训练的 BERT 模型 (bert-base-uncased) 和 Transformers 库中的 pipeline 函数来构建一个情感分析管道。然后将文本样本提供给管道,它输出一个字典,其中包含预测的情感标签(正面或负面)以及预测的置信度分数。最后,我们打印了结果。

需要注意的是,还有许多其他预训练模型和 NLP 任务可以使用类似的方式使用,这只是一个使用 Transformers 库的示例。

  • 图解 Transformer - 图解 Transformer 由 Jay Alammar 开发,它以视觉化的方式解释了 Transformer 的内部工作原理。它详细描述了 Transformer 的工作方式,并用插图和代码片段阐明了每个步骤。

  • 带注释的 Transformer - 带注释的 Transformer 是对 Vaswani 等人最初的 Transformer 论文的全面解释,并附带 PyTorch 代码。它提供了对 Transformer 背后的底层数学概念的更深入的理解,对于希望从头开始构建自己的 Transformer 模型的任何人来说,都是一个很好的起点。

结论

总之,Transformer 是一种处理自然语言的有效方法,并且正在越来越多的应用中得到使用。无论您是想使用自己的数据微调预训练模型,还是从头开始构建自己的 Transformer,都有许多工具可以帮助您入门。我们真诚地希望本文能成为您了解 Transformer 世界的见解,我们强烈建议您进一步了解它们,并探索它们能为您做什么。

更新于: 2023 年 8 月 7 日

447 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告