我报名参加金石方案1期应战——瓜分10万奖池,这是我的第9篇文章,点击查看活动详情
作者:施晨、黄俊
导读
机器阅览了解是自然言语处理(NLP),特别是自然言语了解(NLU)范畴最重要的研讨方向之一。自1977年初次被提出以来,机器阅览了解已有近50年的开展史,历经“人工规则”、“传统机器学习”、“深度学习”、“大规模预练习模型”等多个开展阶段。机器阅览了解旨在协助人类从大量文本中,快速聚焦相关信息,降低人工信息获取本钱,增加信息检索有效性。作为人工智能在自然言语了解方向上的“集大成者”,机器阅览了解使命调查了从 “词” 到 “句” 甚至 “华章”,每一个言语粒度的了解才能,这使得在人工智能开展的每个阶段,它都是十分困难、也颇为重要的“兵家必争之地”。以SQuAD为代表的阅览了解数据集,见证了深度学习大开展年代里,各大公司刷榜立异方案的你方唱罢我上台,随后又在大规模预练习年代,成为BERT等预练习模型的评测基准。能够说近十年里,机器阅览了解极大促进与见证了自然言语处理范畴的昌盛与开展。
方法化来讲,机器阅览了解使命的输入为一段华章文本(context),与一个问句(question),经过学习模型,输出猜测的答案文本(answer)。依据获取答案办法的不同,当时业界主流将阅览了解使命分为四大类:完型填空式(Cloze tests)、多项挑选式(Multi-choice)、片段抽取式(Span extraction)及自由生成式(Free answering)。其间片段抽取式依据问句(question),直接从华章文本(context)中猜测答案文本(answer)的起止方位(start/end positions),然后抽取出答案。因为其与实在场景挨近,难度适中,易于评测,且有SQuAD等高质量数据集支撑,因而成为当时的主流阅览了解使命。跟着预练习言语模型的开展,近年来片段抽取式阅览了解的作用屡立异高。在英文场景下,传统的BERT、RoBERTa、ALBERT等模型都能取得超越人类的作用;而在中文场景下,MacBERT等模型(Pre-Training with Whole Word Masking for Chinese BERT)经过引进一种纠错型掩码言语模型(Mac)预练习使命,缓解了“预练习-下流使命”不一致的问题,也更好地适配了中文场景,在包含机器阅览了解在内的多种NLP使命上取得了显著的功用提高。因而,咱们在EasyNLP结构中集成了MacBERT算法和模型,合作EasyNLP中原有的BERT、RoBERTa等模型,运用户能够方便地运用这些模型进行中英文机器阅览了解使命的练习和猜测。
EasyNLP(github.com/alibaba/Eas…)是阿⾥云机器学习PAI 团队基于 PyTorch 开发的易⽤且丰厚的中⽂NLP算法结构,⽀持常⽤的中⽂预练习模型和⼤模型落地技能,并且供给了从练习到布置的⼀站式 NLP 开发体会。EasyNLP 供给了简洁的接⼝供⽤户开发 NLP 模型,包含NLP应⽤ AppZoo 和预练习 ModelZoo,一起供给技能协助⽤户⾼效的落地超⼤预练习模型到事务。机器阅览了解作为自然言语了解的集大成者,一起也是文本问答、信息抽取等范畴的基础使命,具有较高的研讨价值。因而,EasyNLP增加了对中英文机器阅览了解使命的支撑,希望能服务更多的NLP/NLU算法开发者和研讨者,也希望和社区一起推动NLU相关技能的开展和落地。
本⽂将供给对MacBERT模型的技能解读,以及如安在EasyNLP结构中使⽤MacBERT及其他预练习言语模型,进行中英文机器阅览了解使命的练习与猜测。
MacBERT模型解读
主流的大规模预练习言语模型(如BERT、RoBERTa等)首要针对英言语语规划,将其直接搬迁到中文场景时,会面临中英文言语自身的差异,如:中文词间无空格、无需切分子词、多个单字组成具有完好含义的词语等。例如下图中原始句子“运用言语模型来猜测下一个词的概率”,按单字切分后,某些单字因为会组成完好的词语(如:言语模型、猜测、概率),此时若只mask掉其间一个字,会影响掩码与言语模型预练习的作用。此外,传统言语模型在预练习时会选用 [MASK] 字符进行mask,而在下流使命文本中却并不存在 [MASK] 符号,这在两阶段中天然引进了gap。为缓解上述问题,MacBERT等模型修正传统MLM使命,引进了一种纠错型掩码言语模型(Mac)预练习使命,包含wwm (whole word masking)、NM(n-gram masking)、类似词替换等mask方案,更好地适配了中文的言语场景,减少了“预练习-下流使命”不一致的问题,提高了预练习模型在多种NLP使命上的作用。另外,因为MacBERT的首要结构与BERT完全一致,可在不修正现有代码的基础进步行无缝过渡,这为开发者的代码搬迁带来了很大的便利。
详细来讲,MacBERT等模型在MLM时,对中文整词中一切单字一起进行mask,并选用n-gram mask战略,从unigram到4-gram对应的mask概率别离为40%-10%。在mask时不再选用 [MASK] token,而改为运用词语的近义词,近义词选用基于word2vec类似度计算的Synonyms toolkit获取,在极少数情况没有近义词时,运用随机词进行替换。模型总体对输入15%的词进行mask,mask时80%的概率替换为近义词、10%的概率替换为随机词、10%的概率保存为原始词。此外,BERT原版的NSP模型长时间为研讨者们所诟病,MacBERT模型中将NSP修正为SOP (Sentence Order Prediction),其正例为连续文本,负例为交流原始文本顺序,这样很好提高了模型在多句华章型使命上的作用。模型的实验成果表明,去除上述MLM中任一改进都会导致平均功用下降,这表明几处掩码修正都有助于言语模型学习;一起去除SOP使命后,在机器阅览了解使命上的作用会显着下降,这也表明句子级预练习使命在华章学习中的必要性。
机器阅览了解模型运用教程
以下咱们扼要介绍,如安在EasyNLP结构中运用MacBERT及其他预练习言语模型,进行机器阅览了解使命的练习及猜测。
装置EasyNLP
用户能够直接参考GitHub(github.com/alibaba/Eas…)上的说明装置EasyNLP算法结构。
pipeline接口快速“尝鲜”体会作用
为了方便开发者运用,咱们在EasyNLP结构内完结了Inference Pipeline功用。用户能够在不需求自己练习或微调模型的情况下,直接“尝鲜”,运用pipeline接口一步调用finetune好的中英文机器阅览了解模型。只需履行如下命令即可:
from easynlp.pipelines import pipeline
# 输入数据
data = [{
"query": "杭州什么时候发布了《杭州市亚运城市举动方案大纲》?",
"answer_text": "2020年4月",
"context": "新华社杭州9月22日电(记者商意盈 夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。",
"qas_id": "CN_01"
},
{
"query": "本年9月底全市快速路总路程将到达多少?",
"answer_text": "480公里",
"context": "新华社杭州9月22日电(记者商意盈 夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。",
"qas_id": "CN_02"
}]
# pipeline的参数为finetune好的模型
# 当时EasyNLP支撑中英文机器阅览了解的pipeline快速体会,别离集成了finetune好的中文macbert模型和英文bert模型
# 如想体会英文阅览了解,只需将模型名改为 'bert-base-rcen' 即可
generator = pipeline('macbert-base-rczh')
results = generator(data)
for input_dict, result in zip(data, results):
context = result["context"]
query = result["query"]
answer_gold = result["gold_answer"]
answer_pred = result["best_answer"]
print('\n context: {} \n query: {} \n gold_answer: {} \n pred_answer: {} \n'.format(context, query, answer_gold, answer_pred))
如代码中所示,输入的data为一个list,其间每条instance为一个dict,包含其query、answer、context、id信息。pipeline的参数为finetune好的模型,当时EasyNLP支撑中英文机器阅览了解的pipeline快速体会,别离集成了finetune好的中文macbert模型和英文bert模型,中文机器阅览了解的模型为 ‘macbert-base-rczh’ ,如想体会英文阅览了解,只需将上述代码pipeline参数中的模型名改为 ‘bert-base-rcen’ 即可。
以上代码的履行成果如下所示,能够看出,机器精确地了解了文本与问句的含义,并给出了正确的成果。
context: 新华社杭州9月22日电(记者商意盈夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。
query: 杭州什么时候发布了《杭州市亚运城市举动方案大纲》?
gold_answer: 2020年4月
pred_answer: 2020年4月
context: 新华社杭州9月22日电(记者商意盈夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。
query: 本年9月底全市快速路总路程将到达多少?
gold_answer: 480公里
pred_answer: 480公里
下面,咱们将详细介绍中英文机器阅览了解模型的详细完结进程,从数据预备,到模型的练习、评价、猜测,并给出基于EasyNLP的几种方便快捷的一步履行办法。
数据预备
选用预练习好的言语模型,进行机器阅览了解使命的finetune时,需求用户供给使命相关的练习与验证数据,均为tsv格局文件。文件中每行包含以制表符\t分隔的多列,包含阅览了解练习所需的一切信息,从左至右依次为:样例ID、华章文本(context)、问句(question)、答案文本(answer)、答案文本在华章文本中的开始方位、华章题目。样例如下:
DEV_125_QUERY_3 乙二醛是一个有机化合物,化学式为OCHCHO,由两个醛基-C相连。它是最简略的二醛,室温下为黄色液体。工业上,乙二醛可由乙二醇在银或铜催化下的气相氧化,或用硝酸溶液氧化乙醛制得。实验室中,乙二醛是经过用亚硒酸氧化乙醛制取。无水乙二醛可由固态水合物与五氧化二磷共热制得。乙二醛的运用有:of一般乙二醛以40%溶液的方法出售。它与其他小分子醛类似,能够构成水合物,而且水合物缩合生成一系列的“寡聚体”,结构尚不清楚。目前出售的至少有以下两种水合物:依据估计,乙二醛水溶液浓度低于1M时,它首要以单体或水合物的方法存在,即OCHCHO、OCHCH(OH)或(HO)CHCH(OH)。浓度大于1M时,首要为二聚体型,可能为缩醛/酮结构,分子式为[(HO)CH]OCHCHO。 工业上乙二醛是怎样制得的? 由乙二醇在银或铜催化下的气相氧化,或用硝酸溶液氧化乙醛制得。 59 乙二醛
下列文件为现已完结预处理的中英文机器阅览了解的练习和验证数据,可用于模型练习与测试:
# 中文机器阅览了解数据
http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/train_cmrc2018.tsv
http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/dev_cmrc2018.tsv
# 英文机器阅览了解数据
http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/train_squad.tsv
http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/dev_squad.tsv
中文机器阅览了解
在Python 3.6环境下,咱们首先从刚刚装置好的EasyNLP中引进模型运转需求的各种库,并做初始化。咱们只需指定 pretrain_model_name_or_path=hfl/macbert-base-zh,即可运用集成好的MacBERT模型。EasyNLP中集成了丰厚的预练习模型库,假如想测验其他预练习模型,如BERT、RoBERTa等,也能够在user_defined_parameters中进行相应修正,详细的模型称号可见模型列表。EasyNLP当时一起支撑中英文的阅览了解,只需求在user_defined_parameters中指定language=zh,即可指定中文文本预处理的相应装备。
import torch.cuda
from easynlp.appzoo import MachineReadingComprehensionDataset
from easynlp.appzoo import get_application_predictor, get_application_model, get_application_evaluator, get_application_model_for_evaluation
from easynlp.core import Trainer, PredictorManager
from easynlp.utils import initialize_easynlp, get_args, get_pretrain_model_path
from easynlp.utils.global_vars import parse_user_defined_parameters
initialize_easynlp()
args = get_args()
user_defined_parameters = parse_user_defined_parameters('pretrain_model_name_or_path=bert-base-uncased language=en qas_id=qas_id answer_name=answer_text start_position_name=start_position_character max_query_length=64 max_answer_length=30 doc_stride=128 n_best_size=10 output_answer_file=dev.ans.csv')
载入数据时,能够运用EasyNLP内置的MachineReadingComprehensionDataset。需求注意的是,因为描绘文本可能过长,然后可能导致答案片段在超出max_seq_length后被切断的部分中。因而机器阅览了解中一般选用“滑窗法”,当描绘文本过长时,运用滑动窗口将完好的描绘文本拆成几段,将一个输入case拆成多个case别离处理。运用user_defined_parameters中的doc_stride参数即可操控滑动窗口大小。
train_dataset = MachineReadingComprehensionDataset(pretrained_model_name_or_path=get_pretrain_model_path("bert-base-uncased"),
data_file="train_squad.tsv",
sequence_length=384,
input_schema="qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1",
first_sequence="question_text",
second_sequence="context_text",
user_defined_parameters=user_defined_parameters,
is_training=True
)
模型练习时,运用EasyNLP中封装好的get_application_model函数,并指定app_name=”machine_reading_comprehension”,便可进行练习时的模型构建。因为滑动窗口机制的存在,练习时batch_size设置不宜过大,不然简略引起OOM。
model = get_application_model(app_name="machine_reading_comprehension",
pretrained_model_name_or_path=get_pretrain_model_path("bert-base-uncased"),
user_defined_parameters=user_defined_parameters
)
模型评价与猜测时,咱们同样能够运用EasyNLP中封装好的get_application_model_for_evaluation和get_application_predictor函数,并别离指定app_name=”machine_reading_comprehension”,即可进行模型的评价与猜测。
evaluator = get_application_evaluator(app_name="machine_reading_comprehension",
valid_dataset=valid_dataset,
eval_batch_size=32,
user_defined_parameters=user_defined_parameters
)
模型猜测时,成果将输出至指定文件中,文件格局schema能够定制,一般分为\t分隔的4列,依次为:样例ID、答案文本、问句、华章文本。除了输出的最佳答案之外,模型还会将beam_search后排在top_n的答案成果,也输出到指定文件中,供模型优化时分析比对。经过user_defined_parameters中的n_best_size参数,即可定制top_n值。
predictor = get_application_predictor(app_name="machine_reading_comprehension",
model_dir="./squad_model_dir/",
first_sequence="question_text",
second_sequence="context_text",
sequence_length=384,
output_file="dev.pred.csv",
user_defined_parameters=user_defined_parameters
)
predictor_manager = PredictorManager(predictor=predictor,
input_file="dev_squad.tsv",
input_schema="qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1",
output_file="dev.pred.csv",
output_schema="unique_id,best_answer,query,context",
append_cols=args.append_cols,
batch_size=1024
)
当时EasyNLP现已对MacBERT-base/large两种模型进行了集成,在modelzoo中的模型调用称号别离为:hfl/macbert-base-zh 和 hfl/macbert-large-zh,两种模型的结构参数如下表所示。用户可直接在pretrain_model_name_or_path参数中指定称号进行调用。
中文 | 结构参数 |
---|---|
hfl/macbert-base-zh | 12-layer, 768-hidden, 12-heads, 102M parameters |
hfl/macbert-large-zh | 24-layer, 1024-hidden, 16-heads, 324M parameters |
咱们也运用这两种模型别离在中文机器阅览了解数据进步行了 finetune,作用如下:
中文 | EM | F1 |
---|---|---|
hfl/macbert-base-zh | 61.35 | 78.62 |
hfl/macbert-large-zh | 59.15 | 79.33 |
上述一切练习/评价/猜测代码,都现已被集成在EasyNLP/examples/appzoo_tutorials/machine_reading_comprehension/main.py 中。用户能够经过带参数运转main.py,一步履行上述一切练习/评价/猜测操作。
# 模型练习
python main.py \
--mode train \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=train.tsv,dev.tsv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--learning_rate=3.5e-5 \
--epoch_num=3 \
--random_seed=42 \
--save_checkpoint_steps=500 \
--train_batch_size=16 \
--user_defined_parameters='
pretrain_model_name_or_path=hfl/macbert-base-zh
language=zh
answer_name=answer_text
qas_id=qas_id
start_position_name=start_position_character
doc_stride=128
max_query_length=64
'
# 模型猜测
python main.py \
--mode predict \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=dev.tsv \
--outputs=dev.pred.csv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--output_schema=unique_id,best_answer,query,context \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--micro_batch_size=256 \
--user_defined_parameters='
pretrain_model_name_or_path=hfl/macbert-base-zh
language=zh
qas_id=qas_id
answer_name=answer_text
start_position_name=start_position_character
max_query_length=64
max_answer_length=30
doc_stride=128
n_best_size=10
output_answer_file=dev.ans.csv
'
除了main.py一步履行之外,咱们同样能够运用命令行履行的办法进行快速练习/猜测,命令如下:
# 模型练习
easynlp \
--mode train \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=train.tsv,dev.tsv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--learning_rate=3.5e-5 \
--epoch_num=5 \
--random_seed=42 \
--save_checkpoint_steps=600 \
--train_batch_size=16 \
--user_defined_parameters='
pretrain_model_name_or_path=hfl/macbert-base-zh
language=zh
answer_name=answer_text
qas_id=qas_id
start_position_name=start_position_character
doc_stride=128
max_query_length=64
'
# 模型猜测
easynlp \
--mode predict \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=dev.tsv \
--outputs=dev.pred.csv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--output_schema=unique_id,best_answer,query,context \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--micro_batch_size=256 \
--user_defined_parameters='
pretrain_model_name_or_path=hfl/macbert-base-zh
language=zh
qas_id=qas_id
answer_name=answer_text
start_position_name=start_position_character
max_query_length=64
max_answer_length=30
doc_stride=128
n_best_size=10
output_answer_file=dev.ans.csv
'
此外,咱们还在EasyNLP/examples/appzoo_tutorials/machine_reading_comprehension/文件夹下封装好了多种可直接履行的bash脚本,用户同样能够经过运用bash文件命令行履行的办法来一步完结模型的练习/评价/猜测。bash文件需求传入两个参数,第一个参数为运转程序的GPU编号,一般为0;第二个参数代表模型的练习/评价/猜测。
# 练习
! bash run_train_eval_predict_user_defined_local_zh.sh 0 train
# 猜测
! bash run_train_eval_predict_user_defined_local_zh.sh 0 predict
模型练习好之后,咱们能够对任意中文文本进行阅览了解,只要将文本转成契合上述模型输入的格局,增加相应的问题,便可运用模型进行猜测并得到答案。以下为新华社最新关于“杭州亚运会倒计时一周年”的新闻稿件,咱们以这一稿件作为华章文本,人工增加了两个问题:“杭州什么时候发布了《杭州市亚运城市举动方案大纲》?” & “本年9月底全市快速路总路程将到达多少?”,经过模型猜测,便可得到正确的成果:“2020年4月” & “480公里”。
CN_01 2020年4月 杭州什么时候发布了《杭州市亚运城市举动方案大纲》? 新华社杭州9月22日电(记者商意盈夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。
CN_02 480公里 本年9月底全市快速路总路程将到达多少? 新华社杭州9月22日电(记者商意盈夏亮)竞赛场馆悉数竣工并完结赛事功用检验,“迎亚运”城市基础设施建造迈入快车道,亚运场馆提早敞开掀起全民健身热潮……23日,延期后的杭州亚运会将迎来倒计时一周年,各项筹备工作也结出累累硕果,“天堂之城”再次蓄势待发。办妥一个会,提高一座城。2020年4月,杭州发布了《杭州市亚运城市举动方案大纲》,其间包含基础设施提高、绿水青山看护、数字管理赋能等八项详细举动。跟着亚运的脚步日益接近,杭州西站、萧山国际机场三期、合杭高铁湖杭段、机场轨迹快线(19号线)等“两点两线”重大项目正式投运。依据杭州市城乡建造委员会发布的信息,估计到本年9月底全市快速路总路程将到达480公里。住在这儿的人们正切身体会到悄然产生的改变——交通方便了,路途变美了,城市基础设施也益发完善。
英文机器阅览了解
EasyNLP同样支撑英文机器阅览了解,只需求在user_defined_parameters中指定language=en,即可指定英文文本预处理的相应装备。之后便可挑选EasyNLP中已集成好的英文预练习言语模型,如 bert-base-uncased、bert-large-uncased 等,进行机器阅览了解的练习与猜测。EasyNLP中集成了丰厚的预练习模型库,假如想测验其他预练习模型,如RoBERTa、ALBERT等,也能够在user_defined_parameters中进行相应修正,详细的模型称号可见模型列表。
模型的数据载入、练习、评价、猜测部分代码调用办法与上述中文机器阅览了解中完全一致,EasyNLP已将中英文差异性处理的代码集成在各部分函数中,用户只需简略指定参数language=en/zh,即可自如切换中英文相应装备。
咱们对 bert-base-uncased 和 bert-large-uncased 两个模型别离在英文机器阅览了解数据进步行了 finetune,模型成果如下:
英文 | EM | F1 |
---|---|---|
bert-base-uncased | 76.64 | 85.33 |
bert-large-uncased | 79.59 | 87.68 |
与中文机器阅览了解一样,用户能够经过带参数运转main.py(指定language=en和相应的pretrain_model_name_or_path),一步履行一切练习/评价/猜测操作。
# 模型练习
python main.py \
--mode train \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=train.tsv,dev.tsv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--learning_rate=3.5e-5 \
--epoch_num=3 \
--random_seed=42 \
--save_checkpoint_steps=500 \
--train_batch_size=16 \
--user_defined_parameters='
pretrain_model_name_or_path=bert-base-uncased
language=en
answer_name=answer_text
qas_id=qas_id
start_position_name=start_position_character
doc_stride=128
max_query_length=64
'
# 模型猜测
python main.py \
--mode predict \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=dev.tsv \
--outputs=dev.pred.csv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--output_schema=unique_id,best_answer,query,context \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--micro_batch_size=256 \
--user_defined_parameters='
pretrain_model_name_or_path=bert-base-uncased
language=en
qas_id=qas_id
answer_name=answer_text
start_position_name=start_position_character
max_query_length=64
max_answer_length=30
doc_stride=128
n_best_size=10
output_answer_file=dev.ans.csv
'
除了main.py一步履行之外,咱们同样能够运用命令行履行的办法进行快速练习/猜测,命令如下:
# 模型练习
easynlp \
--mode train \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=train.tsv,dev.tsv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--learning_rate=3.5e-5 \
--epoch_num=5 \
--random_seed=42 \
--save_checkpoint_steps=600 \
--train_batch_size=16 \
--user_defined_parameters='
pretrain_model_name_or_path=bert-base-uncased
language=en
answer_name=answer_text
qas_id=qas_id
start_position_name=start_position_character
doc_stride=128
max_query_length=64
'
# 模型猜测
easynlp \
--mode predict \
--app_name=machine_reading_comprehension \
--worker_gpu=1 \
--tables=dev.tsv \
--outputs=dev.pred.csv \
--input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
--output_schema=unique_id,best_answer,query,context \
--first_sequence=question_text \
--second_sequence=context_text \
--sequence_length=384 \
--checkpoint_dir=./model_dir \
--micro_batch_size=256 \
--user_defined_parameters='
pretrain_model_name_or_path=bert-base-uncased
language=en
qas_id=qas_id
answer_name=answer_text
start_position_name=start_position_character
max_query_length=64
max_answer_length=30
doc_stride=128
n_best_size=10
output_answer_file=dev.ans.csv
'
此外,咱们还在EasyNLP/examples/appzoo_tutorials/machine_reading_comprehension/文件夹下封装好了多种可直接履行的bash脚本,用户同样能够经过运用bash文件命令行履行的办法来一步完结模型的练习/评价/猜测。bash文件需求传入两个参数,第一个参数为运转程序的GPU编号,一般为0;第二个参数代表模型的练习/评价/猜测。
# 模型练习
! bash run_train_eval_predict_user_defined_local_en.sh 0 train
# 模型猜测
! bash run_train_eval_predict_user_defined_local_en.sh 0 predict
模型练习好之后,咱们能够对任意英文文本进行阅览了解,只要将文本转成契合上述模型输入的格局,增加相应的问题,便可运用模型进行猜测并得到答案。咱们选取近日费德勒退役后,纳达尔为他发表的Twitter作为华章文本,人工增加两个问题:”Where will the Laver Cup take place?” & “Who is he’s wife?”,经过模型猜测,便可得到正确的成果:”London” & “Mirka”。
EN_01 London Where will the Laver Cup take place? I wish this day had never come. It is a sad day for me personally and for people all over the world who love sports. I told you when we talked and here it is. It has been a pleasure, but also an honor and a privilege to share all these years with you, having so many wonderful moments together, on and off the court. We will still have many moments to share to share together in the future, but there are still many things to do together, we know. For now, I would sincerely wish you the best with your wife Mirka, your children, your family and enjoy for what the future will give you. We will see you in London for the Laver Cup.
EN_02 Mirka, Who is he's wife? I wish this day had never come. It is a sad day for me personally and for people all over the world who love sports. I told you when we talked and here it is. It has been a pleasure, but also an honor and a privilege to share all these years with you, having so many wonderful moments together, on and off the court. We will still have many moments to share to share together in the future, but there are still many things to do together, we know. For now, I would sincerely wish you the best with your wife Mirka, your children, your family and enjoy for what the future will give you. We will see you in London for the Laver Cup.
未来展望
在未来,咱们方案在EasyNLP结构中进一步完善NLU相关才能,并在此基础上更进一步,开发白盒化可拆解可搬迁复用的多轮智能对话体系,敬请期待。咱们也将在EasyNLP结构中集成更多SOTA模型(特别是中⽂模型),来⽀持各种NLP和多模态使命。此外,阿⾥云机器学习PAI团队也在继续推动中文阅览了解、对话体系及中⽂多模态模型的⾃研⼯作,欢迎⽤户继续重视咱们,也欢迎加⼊咱们的开源社区,共建中⽂NLP和多模态算法库!
Github地址:github.com/alibaba/Eas…
参考文献
- Chengyu Wang, et al. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. arXiv preprint
- Danqi Chen. Neural Reading Comprehension and Beyond. Stanford dissertation.
- Shanshan Liu. Neural Machine Reading Comprehension: Methods and Trends. arXiv preprint
- Rajpurkar, et al. “SQuAD: 100,000+ Questions for Machine Comprehension of Text.” EMNLP 2016
- Devlin, Jacob, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” NAACL 2019
- Yiming Cui, et al. “A Span-Extraction Dataset for Chinese Machine Reading Comprehension” EMNLP 2019
- Yiming Cui, et al. “Pre-Training with Whole Word Masking for Chinese BERT.” TASLP 2021
阿里灵杰回顾
- 阿里灵杰:阿里云机器学习PAI开源中文NLP算法结构EasyNLP,助力NLP大模型落地
- 阿里灵杰:预练习常识衡量竞赛夺冠!阿里云PAI发布常识预练习东西
- 阿里灵杰:EasyNLP带你玩转CLIP图文检索
- 阿里灵杰:EasyNLP中文文图生成模型带你秒变艺术家
- 阿里灵杰:EasyNLP集成K-BERT算法,借助常识图谱完结更优Finetune
- 阿里灵杰:EasyNLP玩转文本摘要(新闻标题)生成