HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

用于多文本分类的孪生和双 BERT

  • 2020-05-28
  • 本文字数:1844 字

    阅读完需:约 6 分钟

用于多文本分类的孪生和双BERT

本文最初发表在 Medium 博客,经原作者 Marco Cerliani 授权,InfoQ 中文站翻译并分享。


本文介绍了在模型中插入 Transformer 的不同方法。


人们对自然语言处理的不断研究催生了各种预训练模型的发展。在各种任务(如文本分类、无监督的主题建模和问题解答等)的最新结果方面,通常都有越来越多的改进,这是一个典型的现象。


最大的发现之一是在神经网络架构中采用了注意力机制(attention mechanics)。这种技术是所有称为 Transformer 的网络的基础。它们应用注意力机制来提取关于给定单词上下文的信息,然后将其编码到学习向量中。


作为数据科学家,我们可以产生并使用许多 Transformer 架构来对我们的任务进行预测或微调。在本文中,我们尽情享受经典的 BERT,但同样的推理也可以应用到其他所有的 Transformer 架构中。我们的研究范围是在双(dual)架构和孪生(siamese)架构中使用 BERT,而不是将其作为多文本输入分类的单一特征提取器。

数据

我们从 Kaggle 收集了一个数据集:News Category Dataset(新闻分类数据),它包含了 2012 年到 2018 年从 HuffPost 获得的大约 20 万条新闻标题。我们的范围是根据两种不同的文本来源对新闻文章进行分类:标题和简短描述。总共有 40 多条不同类型的新闻。为简单起见,并考虑到我们工作流的计算时间,因此我们只使用了 8 个类的子组。


我们不应用任何种类的预处理清晰;我们要让 BERT 来“完成所有的魔法”。我们的工作框架是 TensorFlow 和强大的 Huggingface Transformer 库。更详细地说,我们利用“裸”BERT 模型 Transformer,它输出原始的隐藏状态,而且上面没有任何特定头。它可以像 TensorFlow 模型子类一样访问,并且可以很容易地将其引入我们的网络架构中进行微调。

单 BERT

作为第一个竞争者,我们引入了一个单 BERT 架构。它只接受一个文本输入,这是我们两个文本源连接的结果。这就是常态:任何模型都可以接受连接特性的输入。对于 Transformer 来说,将输入与特殊特征符(special tokens)相结合提升了这一过程。


BERT 需要特定格式的输入数据:有特殊的特征符来标记句子/文本源的开头([CLS] [SEP])。同时,标记化涉及到将输入文本分割成词汇库中可用的特征符列表。词汇表外的单词用 WordPiece 技术进行处理;其中一个单词被逐步拆分成属于词汇表的子词。这一过程可以通过 Huggingface 预训练的词法分析器(Tokenizer)轻松完成,我们只需注意做好 padding 即可。


我们以每个文本源的三个矩阵(token、mask、sequence id)结束。它们作为 Transformer 的输入。在单 BERT 的情况下,我们只有一个矩阵元祖。这是因为我们同时将两个文本序列传递给词法分析器,这两个文本序列会自动连接起来(用 [SEP] 标记)。


我们的模型架构非常简单:将上面构建的矩阵直接馈入 Transformer。最后,通过平均池操作减少了 Transformer 的最终隐藏状态。概率分数是由最后致密层计算出来的。



在我们的测试数据上,我们的单 BERT 达到了 83% 的准确率。性能报告请见下面的混淆矩阵中。


双 BERT

我们的第二个架构可以定义为双 BERT,因为它使用了两个不同的 Transformer。它们有相同的组成,但使用了不同的输入进行训练。第一个 Transformer 接收新闻标题,而另一个接受简短文本描述。输入被编码为始终产生两个矩阵(token、mask 和 sequence id),每个输入都有一个。对于这两个数据源,我们的 Transformer 的最终隐藏状态都是通过平均池来减少的。它们链接在一起,并通过一个完全连接层。



通过这些设置,双 BERT 测试数据上可以在达到 84% 的准确率。


孪生 BERT

我们的最后一种模型是一种孪生式架构。它可以这样定义,因为两个不同的数据源在同一个可训练的 Transformer 架构中同时传递。输入矩阵与双 BERT 的情况相同。对于两个数据源,我们的 Transformer 的最终隐藏状态是通过平均操作进行池化的。所得到的的结果,在一个完全连接层中传递,该层将它们进行组合并产生概率分数。



在我们的测试数据上,孪生式架构达到了 82% 的准确率。


总结

在本文中,我们应用 BERT 架构进行了多类分类任务。我们这个实验的附加价值在于,它以各种方式使用 Transformer 来处理多个输入源。我们从一个源中的所有输入的经典连接开始,然后在输入模型时保持文本输入的分离。提出的双 BERT 和孪生变体能够获得良好的性能。因此,它们可以被认为是经典单 Transformer 架构的良好替代方案。

参考资料


作者介绍:


Marco Cerliani,Lutech 统计学家、黑客和数据科学家。


原文链接


https://sourl.cn/qy6Diz


2020-05-28 15:052314

评论

发布
暂无评论
发现更多内容

2022秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软

程序猿阿宇

Java 面试题 面经 Java工程师 秋招

阿里云技术专家秦隆:可靠性保障必备——云上如何进行混沌工程

阿里云弹性计算

分布式系统 混沌工程 故障演练

Java编程程序员怎么开发水平?

小谷哥

大数据开发课程怎么学?

小谷哥

我写的dubbo扩展jar包如何无侵入的给别人使用

石臻臻的杂货铺

7月月更

怎么才能提高自己web前端技术呢?

小谷哥

第五届数字中国建设峰会举行,每日互动发布每日治数平台DIOS创新成果

个推

大数据 数据中台 数据智能 每日治数平台

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

华为云开发者联盟

数据库 redis 存储 GaussDB ( for Redis ) 用户画像

浅谈低代码技术在物流管理中的应用与创新

王平

大数据课程培训和自学哪个比较适合?

小谷哥

基于Netty,从零开发IM(四):编码实践篇(系统优化)

JackJiang

网络编程 Netty 即时通讯 im开发 开源im

看了这么多Python教程,最香的还得是……

博文视点Broadview

Java & Go 专场 | 阿里云中间件开发者线下 Meetup 开启报名

阿里巴巴云原生

Java Go 阿里云 云原生 中间件

微软Azure和易观分析联合发布《企业级云原生平台驱动数字化转型》报告

易观分析

数字化转型

阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践

阿里云弹性计算

异地多活 多活容灾

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现

华为云开发者联盟

人工智能 推理 昇腾 处理器

中文起,Python 字体反爬实战案例,再一点

梦想橡皮擦

Python 爬虫 7月月更

web前端开发技术学习比较靠谱

小谷哥

kafka的Docker镜像使用说明(wurstmeister/kafka)

程序员欣宸

kafka 7月月更

如何把css渐变背景玩出花样来

南极一块修炼千年的大冰块

7月月更

字节一面:TCP 和 UDP 可以使用同一个端口吗?

程序员小毕

Java 程序员 面试 TCP 计算机网络

物理防火墙是什么?有什么作用?

行云管家

网络安全 防火墙

行云管家V6.5.1/2/3系列版本发布:数据库OpenAPI能力持续强化

行云管家

数据库 版本 IT运维 行云管家

银行理财子公司蓄力布局A股;现金管理类理财产品整改加速

易观分析

金融 银行

Kyligence 入选 Gartner 2022 数据管理技术成熟度曲线报告

Kyligence

sql查询 Gartner

敞开大门的支付宝,是商家的新掘金地吗?

ToB行业头条

创新突破!亚信科技助力中国移动某省完成核心账务数据库自主可控改造

亚信AntDB数据库

国产数据库

Plus版SBOM:流水线物料清单PBOM

SEAL安全

开源 软件供应链 软件物料清单 SBOM 软件供应链安全

想要做好软件测试,可以先了解AST、SCA和渗透测试

华为云开发者联盟

云计算 安全 软件测试 后端 开发

Okaleido生态核心权益OKA,尽在聚变Mining模式

股市老人

用于多文本分类的孪生和双BERT_AI&大模型_Marco Cerliani_InfoQ精选文章