主页

Hugging Face 的 Transformers 库快速入门(五):快速分词器

通过前面四篇文章,我们已经对 Transformers 库有了基本的了解,并且通过上手微调一个文本分类模型熟悉了 Pytorch 框架编写和训练模型的流程。从本篇开始,我们将通过一系列实例来完成更加复杂的 NLP 任务。 在开始具体的任务之前,我们先回顾一下在《Hugging Face 的 Transformers 库快速入门(二):模型与分词器》中已经介绍过的分词器 (Tokenizer),进一步了解分词器的一些高级功能。 快速分词器 先前我们已经介绍了如何使用分词器来编码文本,将文本转换为 token IDs,以及反过来将 token IDs 解码回文本。其实,Hugging Face 共提供了两种编码器: 慢速分词器:Transformers 库自带,使用 Pyth...

阅读更多

同指消解任务简介

同指消解 (Coreference Resolution),又称指代消解,是自然语言处理中的一个基础任务,即判断两个描述 (mention) 是否指向现实世界中的同一个对象。根据描述类型的不同,可以分为: 实体同指消解 实体就是我们常说的人物、组织机构、时间、地点等元素,在自然语言处理中通过专门的命名实体识别 (Named Entity Recognition, NER) 任务进行研究,更宽泛意义上的实体定义还包括代词,例如他、该公司、这些机构等。 实体同指消解任务就负责将指向现实世界中同一实体的所有实体描述连接起来,形成同指簇(或同指链),在同一个簇中(链上)的所有实体描述都互相同指。 事件同指消解 事件是指由某些参...

阅读更多

Hugging Face 的 Transformers 库快速入门(四):微调预训练模型

在上一篇《Hugging Face 的 Transformers 库快速入门(三):必要的 Pytorch 知识》中,我们介绍了训练模型必要的 Pytorch 知识, 本文我们将正式上手训练自己的模型。 本文以基础的句子对分类任务为例,展示如何微调一个预训练模型,并且保存验证集上最好的模型权重。 加载数据集 我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,在其之上训练一个同义句判断模型:每次输入两个句子,判断它们是否为同义句。AFQMC 提供了官方的数据划分,训练集/验证集/测试集分别包含 34334 / 4316 / 3861 个句子对,对应的标签 0 表示是非同义句,1 表示是同义句: {"sentence1": "双十一花呗提额在哪", "sentence2": ...

阅读更多

Hugging Face 的 Transformers 库快速入门(三):必要的 Pytorch 知识

在上一篇《Hugging Face 的 Transformers 库快速入门(二):模型与分词器》中,我们介绍了 Transformers 库中的 Model 类和 Tokenizers 类,尤其是如何运用分词器对文本进行编码。 我们都知道,Transformers 库是建立在 Pytorch 框架之上(Tensorflow 的版本功能并不完善),虽然官方宣称学习 Transformers 库并不需要 Pytorch 的知识,但是在之后的模型训练(微调)等环节,实际上我们还是需要通过 Pytorch 提供的 DataLoader 类来加载数据、使用 Pytorch 的优化器对模型参数进行调整等等。 因此,本文将介绍 Pytorch 的一些基础概念以及后续会使用到的 Pytorch...

阅读更多

Hugging Face 的 Transformers 库快速入门(二):模型与分词器

在上一篇文章《Hugging Face 的 Transformers 库快速入门(一):开箱即用的 pipelines》中,我们通过 Transformers 库提供的 pipeline 函数,快速展示了 Transformers 库能够完成哪些 NLP 任务,以及这些 pipelines 背后的工作原理。 本文将深入介绍 Transformers 库中的两个重要组件:模型(Models 类)和分词器(Tokenizers 类),以及它们的使用方法。 模型 在之前介绍 pipeline 模型时,我们使用 AutoModel 类来自动地根据 checkpoint 的名称加载模型,AutoModel 类很强大,它可以根据名称自动地推断并创建模型结构。当然,如果我们知道具体使用的是哪一...

阅读更多

Hugging Face 的 Transformers 库快速入门(一):开箱即用的 pipelines

Transformers 库是由 Hugging Face 开发的一个 NLP 包,支持几乎所有主流的预训练模型。随着深度学习的兴起,越来越多的公司和研究者采用 Transformers 库来进行 NLP 应用开发和研究,因此了解 Transformers 库的使用方法很有必要。 注:本文只专注于纯文本模态,多模态的相关使用方法请查阅相关文档。 开箱即用的 pipelines Transformers 库将目前的 NLP 任务归纳为几下几类: 文本分类:例如情感分析、垃圾邮件识别、“句子对”关系判断等等; 对文本中的每一个词语进行分类:例如语法组件识别(名词、动词、形容词)或者命名实体识别(人物、地点、组织); 文本生成:例如自动填充预设的模板 (prom...

阅读更多

使用 Keras 实现 Transformer 模型

自从 2017 年 Google《Attention is All You Need》一文发布后,各种基于 Multi-Head Attention 的方法和模型层出不穷,文中提出的 Transformer 模型更是成为了自然语言处理 (NLP) 领域的标配。尤其是 2019 年在 NAACL 上正式发布的 BERT 模型,在一系列任务上都取得了优异的性能表现,将 Transformer 模型的热度推上了又一个高峰。 目前大部分的研究者都直接使用已有的 Python 包来进行实验(例如适用于 PyTorch 框架的 Transformers,以及适用于 Keras 框架的 bert4keras),这固然很方便,但是并不利于深入理解模型结构,尤其是对于 NLP 研究领域的入门者。 本...

阅读更多

分类任务中的类别不平衡问题(下):实践

在上一篇《分类任务中的类别不平衡问题(上):理论》中,我们介绍了几种常用的过采样法 (SMOTE、ADASYN 等)与欠采样法(EasyEnsemble、NearMiss 等)。正所谓“纸上得来终觉浅,绝知此事要躬行”,说了这么多,我们也该亲自上手编写代码来实践一下了。 下面我们使用之前介绍的 imbalanced-learn 库来进行实验。 准备阶段 为了方便地进行实验,我们首先通过 sklearn 提供的 make_classification 函数来构建随机数据集: from sklearn.datasets import make_classification def create_dataset( n_samples=1000, weights=(0...

阅读更多