使用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,您将能够:
在您的自定义数据集上训练(更精确地说是微调)bert、roberta和xlnet文本分类模型。
调整模型的超参数,如时间段、学习速率、批量大小、优化程序计划等。
保存并部署经过训练的模型以进行推理(包括在aws sagemaker上)。
fast-bert将支持多类和多标签文本分类,并在适当的时候支持其他nlu任务,如命名实体识别、问答和自定义语料库微调。
- bert(来自google)与论文一起发布的bert:jacob devlin,ming-w的《深度双向变压器语言理解的预培训》。张爱玲、李肯顿和克里斯蒂娜·图坦诺娃。
xlnet(来自google/cmu)随论文发布.xlnet:语言理解的广义自回归预训练*,杨一鸣,卡博内尔,萨拉胡迪诺夫,库奥克诉勒。
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。
<表><广告>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)<表><广告>
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-bert0
模型人工制品将保存在提供给学习者对象的输出目录/模型输出路径中。将保留以下文件:
<表><广告>由于模型人工制品都存储在同一个文件夹中,因此您可以通过指向此位置的预训练路径来实例化learner对象以运行推断。
<H3>5。模型推断如果已经实例化了一个已训练模型的学习者对象,只需使用文本数据列表调用学习者对象上的predict_batch方法即可:
pip install fast-bert1
如果您有持续训练的模型,并且只想在该训练模型上运行推理逻辑,请使用第二种方法,即predictor对象。
pip install fast-bert2
AWS SageMaker支持
此库的目的是让您培训和部署生产级模型。由于变压器模型需要昂贵的GPU进行培训,我增加了对AWS SageMaker上培训和部署模型的支持。
存储库包含Docker图像和用于在SageMaker中构建Bert和XLnet模型的代码。由于Fast Bert和底层Pythorch Transformers库中的大量中断更改,目前SageMaker将支持旧版本的Fast Bert库。
我希望在未来几周内对此进行更新。
引文
如果您在已发布或开源项目中使用此工作,请包括此库和huggingfacepytorch transformers库以及指向当前存储库的链接。
还包括我关于这个主题的博客: