前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原创 | 利用BERT 训练推特上COVID-19数据

原创 | 利用BERT 训练推特上COVID-19数据

作者头像
数据派THU
发布2022-12-16 10:12:02
5680
发布2022-12-16 10:12:02
举报
文章被收录于专栏:数据派THU数据派THU

作者:陈之炎 本文约3000字,建议阅读7分钟本文介绍了利用BERT模型来对Twitter上海量的COVID-19信息自动进行分类、过滤和总结 一直以来,Twitter是新闻的重要来源,在COVID-19大流行期间,公众可以在推特上表达自己的焦虑情绪。然而,要对Twitter上海量的COVID-19信息手动进行分类、过滤和总结,几乎是不可能做到的。这个艰巨而富有挑战性的任务便落到了BERT 头上,作为自然语言处理(NLP)领域机器学习工具的不二选择,利用BERT模型来对Twitter上海量的COVID-19信息自动进行分类、过滤和总结,提高对Twitter上相关COVID-19内容的理解,以及针对这些内容做出分析和总结,并称之为 COVID-Twitter -BERT模型,简称CT-BERT。

模型基于BERT-LARGE (英文,不区分大小写,全字屏蔽)模型。BERT-LARGE主要用于训练英文维基百科(3.5B字)和免费书籍语料库(0.8B字)等大型的原始文本数据集,虽然这些数据集中包含了海量的数据,但是它却没有包含特殊子领域的相关信息,在一些特定的专业领域,已经有了利用transformer模型训练特殊专业领域的预料库的相关案例,如BIOBERT和SCIBERT,这些模型均采用完全相同的无监督训练技术MLM / NSP / SOP,需要消耗巨大的硬件资源。更为常见和通用的方法是首先利用通用的模型训练出权重,在完成专业领域的预训练之后,再将专业领域的预训练结果代替通用领域的预训练结果,输入到下游任务中进行训练。

1. 训练过程

CT-BERT模型在一个160M的语料库上进行训练,这个语料库搜集了2020年1月12日至2020年4月16日期间关于冠状病毒的推文,利用推特过滤API(应用编程接口)侦听一组与COVID-19相关的英文关键字。在训练之前,先将原始的语料库里的转发标签清洗掉,利用一个通用的文本替换掉每条推文的用户名称,对所有的URL和程序网页都执行类似操作。此外,用Python表情符号库emoji将所有的unicode表情符号换成了文本ASCII表示法(例如:用微笑替换了笑脸)。最后,将所有的转发、重复的数据从数据集中删除,2250万条推特的五个最终语料库总共有0.6B个字。专业领域的预训练数据集的内容是基础模型通用数据集大小的七分之一。每一条推文被视为一个独立文档,利用spaCy库将其分割成独立的句子。

所有输入到BERT中的序列转换成由30000个单词的词汇表构成的标记集合,每条推特消息的长度限制在280个字符以内,最大序列长度为96个标记,将训练批大小增加到1024,最终在数据集上生成285M训练示例和2.5M个验证示例。控制持续学习率设为2e-5,在专业领域数据集上预训练时,模型的参数设置和谷歌官方在GitHub上推荐的参数设置相一致。

通过预训练计算出损失和准确度程序,每10万个训练步长保存一个检查点,并将其定位为各种类型下游的分类任务,分布式训练在TPUv3-8(128GB)上使用Tensorflflow 2.2持续运行了120小时。

CT-BERT为基于transformer的模型,在关于COVID-19主题的大量推特消息语料库上预先训练好。v2模型在9700条推文基础上进行训练 (1.2B训练示例)。

CT-BERT用于训练特定专业领域的数据集,训练评估结果表明:与标准的BERT-Large模型相比,该模型的性能将有10-30%的提高,尤其是在与COVID-19相关的推特信息数据集上,性能改进尤为显著。

2. 训练方法

如果熟悉微调transformer模型,可以从两个渠道下载CT-BERT模型:既可以通过TFHub下载文档,也可以到Huggingface中下载文档。

图1

Huggingface

从huggingface中加载预先训练好的模型:

图2

可以使用内置的管道来预测内部标识:

图3

从TF-Hub中加载预先训练好的模型:

图4

用以下脚本对CT-BERT进行微调

脚本run_finetune.py可用于训练分类器,该代码依赖于tensorflow

2.2/Keras 框架下官方BERT模型实现。

在运行代码之前需要进行如下设置:

  • 谷歌云bucket;
  • 运行Tensorflow 2.2的谷歌云虚拟机;
  • 与虚拟机位于同一区域运行Tensorflow 2.2的TPU。

如果是做研究工作的话,可以申请访问TPU和/或谷歌云。

安装

递归地克隆存储仓库:

图5

代码是使用tf-nightly开发的,并确保它向后兼容,以便能在tensorflow 2.2上运行。建议使用Anaconda来管理Python版本:

图6

安装requirements.txt

图7

3. 数据准备

按照以下格式,将数据分为训练数据集:train.tsv和验证数据集dev.tsv :

图8

将准备好的两个数据集文件放到下述文件夹当中 data/finetune/originals/<dataset_name>/(train|dev).tsv

然后运行:

图9

之后在 data/finetune/run_2020-05-19_14-14-53_517063_test_run/<dataset_name>/tfrecords.目录下生成TF_Record 文件,

将数据加载进来:

图10

4. 预训练

预训练代码在现有的预训练模型(如BERT-Large)基础上,对目标域数据(在这个例子中是推特数据)进行无监督的预训练。此代码原则上可以用于任何特殊专业领域数据集的预训练。

数据准备阶段

数据准备阶段分两步:

数据清洗阶段

第一步,运行以下脚本,利用asciifying emojis将 用户名/URLs等信息清洗掉:

图11

第二步 为预训练生成TFrecord 文件

图12

此过程会占用大量内存,需要运行很长时间,所以可以选择已经准备好的TFrecord 文件max_num_cpus,预处理好的数据存储在data/pretrain/<run_name>/tfrecords/目录下。

将准备好的数据同步进来即可:

图13

预训练

在预训练模型之前,确保将在gs://cloud-tpu-checkpoints/bert/keras_bert/wwm_uncased_L-24_H-1024_A-16.tar.gz下的压缩文件解压,并将预训练模型复制到gs://<;bucket_name>;/pretrained_models/bert/keras_bert/wwm_uncased_L-24_H-1024_A-16/目录下:

将模型和TFrecord文件加载进来之后,在谷歌云虚拟机上访问TPU和bucket(二者位于同一区域same zone)。

图14

在 gs://<bucket_name>/pretrain/runs/<run_name>目录下会生成运行日志文件和模型检查点文件

5. 微调

利用下述命令对此数据集,利用CT-BERT进行微调操作:

图 15

运行配置文件进行训练,将运行日志文件保存到gs://<bucket_name>/covid-bert/finetune/runs/run_2020-04-29_21-20-52_656110_<run_prefix>/.目录之下。在 tensorflow 的日志文件中, run_logs.json 文件中包含所有相关的训练信息。

图 16

在本地计算机上运行sync_bucket_data.py脚本,下载训练日志文件:

图 17

模型的训练用到了Tensorflow研究云( Tensorflow Research Cloud ,TFRC)和谷歌云covid-19研究提供的资源。

6. 模型评估

选用了五个独立的训练集,对模型应用于下游任务的实际性能进行评估。其中三个数据集是公开的数据集,两个来自尚未公开的内部项目,所有数据集包括Twitter上与COVID-19相关的数据。

图18:评估数据集概览:所有五个评估数据集都是带标签的多分类数据集,通过标签栏中的比例栏宽度来实现可视化,N和Neg表示负面情绪;Disc 和A分别是沮丧和不确定情绪

7. 训练结果

图19显示了CT-BERT对验证数据集预训练25k步长及进行1k步验证后的结果,所有的指标均通过整个培训过程得到验证。值得注意的是,在MLM损失任务中性能有了显著的提高,最终获得的损失值为1.48。NSP任务的损失只有略微改进,因为它最初的性能已经很不错了。训练在50万个步长上中止,相当于训练了512M个样本,对应大约1.8个epochs。所有MLM任务和NLM任务的性能指标在整个训练过程中得到稳步改进。但是,使用这些任务的损失/度量标准来评估停止训练的正确时间难度相对来说比较大。

图19:CT-BERT领域专业领域数据集预训练评估指标。显示的是屏蔽语言模型(MLM)和下一个句子预测(NSP)任务的损失和准确度

实验表明,在预训练完成20万步步长之后,下游性能开始快速提高。另一方面,在预训练完成20万步步长之后,损失曲线也会逐渐增加。对于与COVID-19相关的数据集,在预训练完成20万步步长之后,下游性能有了明显的改进。SST-2这个唯一的非推特数据集,其性能改进则要慢得多,在预训练完成20万步步长之后,性能才开始改善。

即便相同的模型在同一数据集上运行时,也会在一定程度上观察到在性能上的差异。这个差异与数据集有关,但它在整个预训练过程中并没有明显的增加,与运行BERT-LARGE中观察到的差异大致相同。在SE数据集上的训练最为稳定,在SST-2数据集上的训练最不稳定,大部分的差异在误差允许的范围之内。

8. 结论

虽然利用CT-BERT可以大幅度改善分类任务的性能,但是还没有做将CT-BERT应用于其它自然语言处理任务上的实验。此外,在写本文的时候,也仅能访问一个与COVID-19相关的数据集。下一步,可以通过修改模型的超参数,比如修改学习率、训练批次大小和优化器等手段,进一步提高模型的性能。未来的工作可能包括评估在其他数据集上的训练结果。

编辑:王菁

校对:林亦霖

数据派研究部介绍

数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:

算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者:陈之炎 本文约3000字,建议阅读7分钟本文介绍了利用BERT模型来对Twitter上海量的COVID-19信息自动进行分类、过滤和总结 一直以来,Twitter是新闻的重要来源,在COVID-19大流行期间,公众可以在推特上表达自己的焦虑情绪。然而,要对Twitter上海量的COVID-19信息手动进行分类、过滤和总结,几乎是不可能做到的。这个艰巨而富有挑战性的任务便落到了BERT 头上,作为自然语言处理(NLP)领域机器学习工具的不二选择,利用BERT模型来对Twitter上海量的COVID-19信息自动进行分类、过滤和总结,提高对Twitter上相关COVID-19内容的理解,以及针对这些内容做出分析和总结,并称之为 COVID-Twitter -BERT模型,简称CT-BERT。
    • 1. 训练过程
      • 2. 训练方法
        • 3. 数据准备
          • 4. 预训练
            • 5. 微调
              • 6. 模型评估
                • 7. 训练结果
                  • 8. 结论
                  相关产品与服务
                  大数据
                  全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档