主页

多标签“Softmax+交叉熵”

单标签分类问题负责从 $n$ 个候选类别中选出 $1$ 个目标类别,常规的操作就是在最后一个全连接层输出每个类的分数,然后用 softmax 激活并用交叉熵作为损失函数。假设各个类的得分分别为 $s_1, s_2, …, s_n$,目标类为 $t\in{1,2,\dots,n}$,那么所用的 loss 就为: \[-\log \frac{e^{s_t}}{\sum\limits_{i=1}^n e^{s_i}}= - s_t + \log \sum\limits_{i=1}^n e^{s_i}\label{eq:log-softmax}\tag{1}\] 这个 loss 的优化方向是让目标类的得分 $s_t$ 变为 $s_1,s_2,\dots,s_n$ 中的最大值。 而多标签分...

阅读更多

从 GlobalPointer 到 GPLinker

NLP 知名博主苏剑林在 21 年首次提出了用于命名实体识别 (NER) 任务的 GlobalPointer 模型,然后提出了改进版 Efficient GlobalPointer 模型,能够用更少的参数量取得更好的结果,后来又基于 GlobalPointer 提出了用于实体关系联合抽取的 GPLinker 模型,并且进一步将其拓展用于完成事件联合抽取。 与近年来越来越繁琐的信息抽取模型相比,这些模型不仅思路清晰,而且用简单的结构就实现了优异的性能。本文将对这些模型进行简单的梳理,帮助读者快速了解其核心思想。 GlobalPointer GlobalPointer 利用全局归一化的思路来进行命名实体识别 (NER),因此不仅可以识别非嵌套实体 (Flat NER),还能识别嵌套实...

阅读更多

Transformer 模型通俗小传

近年来,在自然语言处理 (NLP) 领域,Transformer 已经替代了循环神经网络 (RNN)、卷积神经网络 (CNN) 等模型,成为了深度学习模型的标配。 如题目所示,本文并非是对 Transformer 模型原理进行介绍的专业文章,而是专注于概述 Transformer 模型的定义及发展。你可以将本文看作是一份地图,在阅读后再根据自己的实际需要继续深入了解。 起源与发展 2017 年,Google 的研究者在《Attention Is All You Need》中提出了一个名为 Transformer 的神经网络模型用于序列标注,该模型在翻译任务上超过了之前最优秀的循环神经网络模型,不仅翻译质量更高,而且训练成本更低。与此同时,Fast AI 的研究者在《Univers...

阅读更多

Hugging Face 的 Transformers 库快速入门(九):抽取式问答

本系列教程已整理至 Github,在线阅读地址:transformers.run 本文我们将运用 Transformers 库来完成抽取式问答任务。自动问答 (Question Answering, QA) 是经典的 NLP 任务,需要模型基于给定的上下文回答问题。 根据回答方式的不同可以分为: 抽取式 (extractive) 问答:从上下文中截取片段作为回答,类似于我们前面介绍的序列标注任务; 生成式 (generative) 问答:生成一个文本片段作为回答,类似于我们前面介绍的翻译和摘要任务。 抽取式问答模型通常采用纯 Encoder 框架(例如 BERT),它更适用于处理事实性问题,例如“谁发明了 Transformer 架构?”,这些问题的答案通常就包含在...

阅读更多

Hugging Face 的 Transformers 库快速入门(八):文本摘要任务

本系列教程已整理至 Github,在线阅读地址:transformers.run 本文我们将运用 Transformers 库来完成文本摘要任务。与我们上一章进行的翻译任务一样,文本摘要同样是一个 Seq2Seq 任务,旨在尽可能保留文本语义的情况下将长文本压缩为短文本。 虽然 Hugging Face 已经提供了很多文本摘要模型,但是它们大部分只能处理英文,因此本文将微调一个多语言文本摘要模型用于完成中文摘要:为新浪微博短新闻生成摘要。 文本摘要可以看作是将长文本“翻译”为捕获关键信息的短文本,因此大部分文本摘要模型同样采用 Encoder-Decoder 框架。当然,也有一些非 Encoder-Decoder 框架的摘要模型,例如 GPT 家族也可以通过小样本学习 (few...

阅读更多

Hugging Face 的 Transformers 库快速入门(七):翻译任务

本系列教程已整理至 Github,在线阅读地址:transformers.run 本文我们将运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务,即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近,例如: 文本摘要 (Summarization):将长文本压缩为短文本,并且还要尽可能保留核心内容。 风格转换 (Style transfer):将文本转换为另一种书写风格,例如将文言文转换为白话文、将古典英语转换为现代英语; 生成式问答 (Generative question answering):对于给定的问题,基于上下文生成对应的答...

阅读更多

Hugging Face 的 Transformers 库快速入门(六):序列标注任务

本系列教程已整理至 Github,在线阅读地址:transformers.run 我们的第一个实战任务是序列标注 (Sequence Labeling/Tagging),其目标是为文本中的每一个 token 分配一个标签,因此 Transformers 库也将其称为 token 分类任务。常见的序列标注任务有命名实体识别 NER (Named Entity Recognition) 和词性标注 POS (Part-Of-Speech tagging)。 命名实体识别 NER 旨在识别出文本中诸如人物、地点、组织等实体,即为所有的 token 都打上实体标签(包含“非实体”)。词性标注 POS 旨在为文本中的每一个词语标注上对应的词性,例如名词、动词、形容词等。 下面我们以...

阅读更多

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

本系列教程已整理至 Github,在线阅读地址:transformers.run 通过第一部分的介绍,我们已经对 Transformers 库有了基本的了解,并且上手微调了一个句子对分类模型。从本章开始,我们将通过一系列的实例向大家展示如何使用 Transformers 库来完成目前主流的 NLP 任务。 在开始之前,我们先回顾一下在《模型与分词器》中已经介绍过的分词器 (Tokenizer),进一步了解分词器的一些高级功能。 1. 快速分词器 前面我们已经介绍过如何使用分词器将文本编码为 token IDs,以及反过来将 token IDs 解码回文本。 实际上,Hugging Face 共提供了两种分分词器: 慢速分词器:Transformers 库自带,使用 P...

阅读更多