使用bert的ai库

fast-bert的Python项目详细描述


快速伯特

新建

向fastbert添加了roberta模型支持

现在支持lamb优化器以加快训练速度。 关于lamb optimizer的论文,请参考https://arxiv.org/abs/1904.00962

现在支持bert和xlnet进行多类和多标签文本分类。

快速伯特是深度学习库,它允许开发者和数据科学家从文本分类开始训练和部署基于自然语言处理任务的伯特和基于XLNET的模型。

FastBert的作品建立在优秀的"拥抱面"Bert Pythorch库提供的坚实基础上,灵感来源于Fast.ai为广大的机器学习从业者社区提供尖端的深度学习技术。

使用FastBert,您将能够:

  1. 在您的自定义数据集上训练(更精确地说是微调)bert、roberta和xlnet文本分类模型。

  2. 调整模型的超参数,如时间段、学习速率、批量大小、优化程序计划等。

  3. 保存并部署经过训练的模型以进行推理(包括在aws sagemaker上)。

fast-bert将支持多类和多标签文本分类,并在适当的时候支持其他nlu任务,如命名实体识别、问答和自定义语料库微调。

  1. bert(来自google)与论文一起发布的bert:jacob devlin,ming-w的《深度双向变压器语言理解的预培训》。张爱玲、李肯顿和克里斯蒂娜·图坦诺娃。
  1. xlnet(来自google/cmu)随论文发布.xlnet:语言理解的广义自回归预训练*,杨一鸣,卡博内尔,萨拉胡迪诺夫,库奥克诉勒。

  2. roberta(来自facebook),一种经过强大优化的伯特预训练方法,作者是刘银汉、myle ott、naman goyal、jingfei du等人。

安装

此回购协议在Python3.6+上进行测试。

具有PIP

Pythorch变压器可由PIP安装,如下所示:

pip install fast-bert

来源

克隆存储库并运行:

pip install [--editable] .

pip install git+https://github.com/kaushaltrivedi/fast-bert.git

您还需要安装nvidia apex。

git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

用法

<H3>1。创建数据发送对象

databunch对象接受培训、验证和测试csv文件,并将数据转换为bert、roberta或xlnet的内部表示。对象还根据设备配置文件、批大小和最大序列长度实例化正确的数据加载程序。

fromfast_bert.data_clsimportBertDataBunchdatabunch=BertDataBunch(DATA_PATH,LABEL_PATH,tokenizer='bert-base-uncased',train_file='train.csv',val_file='val.csv',label_file='labels.csv',text_col='text',label_col='label',batch_size_per_gpu=16,max_seq_length=512,multi_gpu=True,multi_label=False,model_type='bert')

train.csv和val.csv的文件格式 <表><广告>索引文本标签< /广告><正文>< 0 >< > >纵观其他评论,我很惊讶,没有任何警告潜在的观众,他们必须期待什么时,租用这个垃圾。首先,我租了这件东西,但我知道这是一件非常适合印第安纳琼斯的仿制品。 NEG < /TD>我看过前17集,这部剧简直太棒了!自从霓虹灯创世传福音以来,我对动漫系列就没这么感兴趣了。这个系列实际上是基于一个H游戏,我是不确定之前是否做过,我没有玩过这个游戏,但据我所知,它很好地遵循了这个原则 POS 他的电影简直是一部黑暗、粗犷的杰作。我可能有偏见,因为种族隔离时代是我一直向往的领域。 POS

如果列名与通常的文本和标签不同,则必须在数据发送文本和标签列参数中提供这些名称。

labels.csv将包含所有唯一标签的列表。在这种情况下,文件将包含:

pos
neg

对于多标签分类,文件将包含多个标签,每个标签值为0或1。

<表><广告>< < 文本有毒 剧毒 淫秽 威胁 侮辱 身份仇恨 < /广告><正文>< 0 >< > >为什么在我的用户名hardcore metallica fan下所做的编辑被还原?< 0 >< > >< 0 >< > >< 0 >< > >< 0 >< > >< 0 >< > >< 0 >< > >< 0 >< > >我会把你搞砸的< 0 >< > >< 0 >< > >< 0 >< > >< 0 >< > >

label_col将是标签列名的列表。在这种情况下,它将是:

['toxic','severe_toxic','obscene','threat','insult','identity_hate']

标记器

您可以创建一个tokenizer对象并将其传递给dataunch,也可以将模型名称作为tokenizer传递,dataunch将自动下载并实例化一个适当的tokenizer对象。

例如,对于使用xlnet基本大小写模型,请将tokenizer参数设置为"xlnet基本大小写"。dataunch将自动下载并实例化xlnettokenizer,其中包含xlnet基cased模型的词汇表。

型号

fast bert支持xlnet、roberta和基于bert的分类模型。将模型类型参数值设置为'bert'roberta'xlnet',以便启动适当的数据发送对象。

<H3>2。创建学习者对象

伯特勒纳是"学习者"的对象,它把所有的东西都放在一起。它封装了模型生命周期的关键逻辑,如训练、验证和推理。

Learner对象将把先前创建的数据作为输入,同时还包括一些其他参数,例如一个预训练模型的位置、FP16训练、多GPU和多标签选项。

学习者类包含训练循环、验证循环、优化策略和关键指标计算的逻辑。这有助于开发人员专注于他们的自定义用例,而不必担心这些重复的活动。

同时,learner对象具有足够的灵活性,可以通过使用灵活的参数或通过创建bertlearner的子类并重新定义相关方法进行定制。

fromfast_bert.learner_clsimportBertLearnerfromfast_bert.metricsimportaccuracyimportlogginglogger=logging.getLogger()device_cuda=torch.device("cuda")metrics=[{'name':'accuracy','function':accuracy}]learner=BertLearner.from_pretrained_model(databunch,pretrained_path='bert-base-uncased',metrics=metrics,device=device_cuda,logger=logger,output_dir=OUTPUT_DIR,finetuned_wgts_path=None,warmup_steps=500,multi_gpu=True,is_fp16=True,multi_label=False,logging_steps=50)
<表><广告>参数 说明 < /广告><正文>数据启动先前创建的数据发送对象预训练路径预训练模型文件的位置或其中一个预训练模型的名称的目录,即bert base uncased、xlnet large cased等 指标希望模型在验证集上计算的度量函数列表,例如准确性、beta等设备cudacpu型火炬装置 记录器记录器对象输出目录模型保存经过训练的人工制品、标记器词汇表和TensorBoard文件的目录微调的WGTS路径提供微调语言模型的位置(实验功能)热身步骤调度程序的训练预热步骤数多个GPU多个GPU可用,例如,如果在AWS P3.8XL实例上运行是FP16 FP16培训多个标签多标签分类记录步骤每个tensorboard度量计算之间的步骤数。将其设置为0可禁用张量流日志记录。保持此值过低将降低训练速度,因为每次记录指标时都会对模型进行评估 <H3>3。培训车型

learner.fit(epochs=6,lr=6e-5,validate=True.# Evaluate the model after each epochschedule_type="warmup_cosine",optimizer_type="lamb")

fast bert现在支持lamb optmizer。由于训练速度快,我们将lamb设置为默认优化器。通过将优化器类型设置为"adamw",您可以切换回adamw。

<H3>4。保存经过训练的模型工件
pip install fast-bert
0

模型人工制品将保存在提供给学习者对象的输出目录/模型输出路径中。将保留以下文件:

<表><广告>文件名说明 < /广告><正文>pytorch_model.bin训练模型权重spice.型号句子标记器词汇表(对于xlnet模型)vocab.txt工件标记器词汇表(对于bert模型)特殊标记映射.json特殊标记映射配置json型号配置添加了_tokens.json新令牌列表

由于模型人工制品都存储在同一个文件夹中,因此您可以通过指向此位置的预训练路径来实例化learner对象以运行推断。

<H3>5。模型推断

如果已经实例化了一个已训练模型的学习者对象,只需使用文本数据列表调用学习者对象上的predict_batch方法即可:

pip install fast-bert
1

如果您有持续训练的模型,并且只想在该训练模型上运行推理逻辑,请使用第二种方法,即predictor对象。

pip install fast-bert
2

AWS SageMaker支持

此库的目的是让您培训和部署生产级模型。由于变压器模型需要昂贵的GPU进行培训,我增加了对AWS SageMaker上培训和部署模型的支持。

存储库包含Docker图像和用于在SageMaker中构建Bert和XLnet模型的代码。由于Fast Bert和底层Pythorch Transformers库中的大量中断更改,目前SageMaker将支持旧版本的Fast Bert库。
我希望在未来几周内对此进行更新。

引文

如果您在已发布或开源项目中使用此工作,请包括此库和huggingfacepytorch transformers库以及指向当前存储库的链接。

还包括我关于这个主题的博客:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java ClientServersocket只能发送1个文件   使用jCUDA实现复杂矩阵的java操作   映射是否存在独立于持久性技术的Java数据API   java Android图像在ExiFinInterface不工作的情况下旋转   java api通过串口发送文件   java使用Restcontroller将空值转换为空字符串   如何在Java中指定网络接口   在一个不工作的安卓系统中,java在另一个文本视图的右边膨胀文本视图   Java JSON解析器错误   java单空间Swing文本   我在eclipse中制作的java游戏在导出后停止加载我的资产   java将给定字符串转换为long,并在解码时返回相同的字符串   java在安卓应用程序中使用dll库   javascript映射json对象并创建随机数组   java JMS主题生存时间   在Swing中的JTextArea上使用setText时出现java死锁   java JFXtra议程是否只在特定时间之间显示?