主页

同指消解任务简介

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

阅读更多

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

本系列教程已整理至 Github,在线阅读地址:transformers.run 在上一篇《必要的 Pytorch 知识》中,我们介绍了使用 Transformers 库必须要掌握的 Pytorch 知识。 本文我们将正式上手微调一个句子对分类模型,并且保存验证集上最好的模型权重。 1. 加载数据集 我们以同义句判断任务为例(每次输入两个句子,判断它们是否为同义句),带大家构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,它提供了官方的数据划分,训练集 / 验证集 / 测试集分别包含 34334 / 4316 / 3861 个句子对,标签 0 表示非同义句,1 表示同义句: {"sentence1": "还款还清了,为什么...

阅读更多

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

本系列教程已整理至 Github,在线阅读地址:transformers.run 在上一篇《模型与分词器》中,我们介绍了 Model 类和 Tokenizers 类,尤其是如何运用分词器对文本进行预处理。 Transformers 库建立在 Pytorch 框架之上(Tensorflow 的版本功能并不完善),虽然官方宣称使用 Transformers 库并不需要掌握 Pytorch 知识,但是实际上我们还是需要通过 Pytorch 的 DataLoader 类来加载数据、使用 Pytorch 的优化器对模型参数进行调整等等。 因此,本文将介绍 Pytorch 的一些基础概念以及后续可能会使用到的类,让大家可以快速上手使用 Transformers 库建立模型。 1. Pyt...

阅读更多

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

本系列教程已整理至 Github,在线阅读地址:transformers.run 在上一篇文章《开箱即用的 pipelines》中,我们通过 Transformers 库提供的 pipeline 函数展示了 Transformers 库能够完成哪些 NLP 任务,以及这些 pipelines 背后的工作原理。 本文将深入介绍 Transformers 库中的两个重要组件:模型(Models 类)和分词器(Tokenizers 类)。 1. 模型 在之前介绍 pipeline 模型时,我们使用 AutoModel 类根据 checkpoint 名称自动加载模型。当然,我们也可以直接使用对应的 Model 类。例如加载 BERT 模型(包括采用 BERT 结构的其他模型): fr...

阅读更多

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

本系列教程已整理至 Github,在线阅读地址:transformers.run Transformers 是由 Hugging Face 开发的一个 NLP 包,支持加载目前绝大部分的预训练模型。随着 BERT、GPT 等大规模语言模型的兴起,越来越多的公司和研究者采用 Transformers 库来构建 NLP 应用,因此熟悉 Transformers 库的使用方法很有必要。 注:本系列教程只专注于处理文本模态,多模态方法请查阅相关文档。 1. 开箱即用的 pipelines Transformers 库将目前的 NLP 任务归纳为几下几类: 文本分类:例如情感分析、句子对关系判断等; 对文本中的词语进行分类:例如词性标注 (POS)、命名实体识别 (N...

阅读更多

使用 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...

阅读更多

分类任务中的类别不平衡问题(上):理论

什么是类别不平衡 大部分的分类模型都会假设不同类别的训练样例数目相当,但在实际运用中,经常会遇到不同类别的训练样例数目差别很大的情况(例如有 998 个负例,正例却只有 2 个),这时模型只需永远判定为数量最多的那个类别,就能达到很高的精度,这会对学习过程造成困扰。 分类任务中这种不同类别的训练样例数目差别很大的情况就被称为类别不平衡 (class imbalance)。不失一般性,下面都假定正例样本较少,负例样本较多。 再缩放 从线性分类器的角度很容易理解,在我们用 $y=\boldsymbol{w}^\top\boldsymbol{x}+b$ 对样本 $\boldsymbol{x}$ 进行分类时,实际上是在用预测出的 $y$ 与一个阈值进行比较,例如通常 $y \gt 0....

阅读更多