当前位置: 首页 > 后端技术 > Python

NLP(18)AnattempttouseALBERTtoimprovethepredictionspeedofthemodel

时间:2023-03-26 19:31:43 Python

frontier在NLP(17)使用tensorflow-serving部署kashgari模型一文中,作者介绍了如何使用tensorflow-servingdeployment进行部署deepmodel模型,在那篇文章中,作者使用kashgari模块实现了经典的BERT+Bi-LSTM+CRF模型结构,在时间标记的文本语料库(约2000个训练句子)中取得了很好的识别效果,但也有一个缺点,就是模型的预测时间太长,平均预测一个句子的时间需要400毫秒左右。这种预测速度在生产环境或实际应用中是无法承受的。纵观模型耗时的原因,很大一部分是因为BERT的调用。BERT是目前最火、最知名的预训练模型。虽然会增加模型训练和预测的耗时,但也是小样本语料的最佳模型工具之一。因此,BERT在模型架构中不可或缺。的。那么,如何避免使用预训练模型带来的模型预测耗时问题呢?本文决定尝试使用ALBERT来验证ALBERT在提高模型预测速度方面的应用。同时也算是我使用ALBERT的实战吧~ALBERT简介我们不妨花点时间简单了解一下ALBERT。ALBERT是上周才开源的预训练模型。其GithubURL为:https://github.com/brightmart...,其论文可参考URL:https://arxiv.org/pdf/1909.11...。根据ALBERT的Github介绍,ALBERT在海量中文语料上进行了预训练,模型参数更少,效果更好。以albert_tiny_zh为例,其文件大小为16M,参数为1.8M,模型大小仅为BERT的1/25。效果仅比BERT稍差或在某些NLP任务中更好。在本文的预训练模型中,会用到albert_tiny_zh。使用ALBERT训练时间识别模型中间模型是ALBERT+Bi-LSTM+CRF,替换bert文件夹的代码是alert_zh,预训练模型文件夹chinese_L-12_H-768_A-12(BERT中文预训练模型文件)被albert_tiny取代。当然,部分项目源码也需要修改以适应ALBERT的模型训练。数据集使用作者自己标注的时间语料,即标注时间的句子,约2000+句,其中75%作为训练集(time.train文件),10%作为验证集(time.dev文件),15%用作测试集(time.test文件)。笔者这里不打算给出具体的Python代码,因为项目比较复杂,有兴趣的读者可以查看项目的Github地址:。部分模型的参数可以如下:预训练模型:ALBERT(tiny)训练样本最大字符长度:128batch_size:8epoch:100双向LSTMs个数:100complete。在time.dev和time.test数据集上的表现如下:datasetprecisionrecallf1time.dev81.41%84.95%83.14%time.test83.03%86.38%84.67%然后作者使用训练好的模型,用tornado封装模型预测的HTTP服务,具体代码如下:#-*-coding:utf-8-*-importosimportjsonimporttimeimportpickleimporttracebackimporttornado.httpserverimporttornado.ioloopimporttornado.optionsimporttornado.webfromtornado.optionsimportdefine,optionsimporttensorflowastffromutilsimportcreate_model,get_loggerfrommodelimportModelfromloaderimportinput_from_linefromtrainimportFLAGS,load_config,train#将端口定义为12306define("port",default=12306,help="runonthegivenport",type=int)#importModelconfig=load_config(FLAGS.config_file)logger=get_logger(FLAGS.log_file)#限制GPU内存tf_config=tf.ConfigProto()tf_config.gpu_options.allow_growth=Falsewithopen(FLAGS.map_file,"rb")asf:tag_to_id,id_to_tag=pickle.load(f)sess=tf.Session(config=tf_config)model=create_model(sess,Model,FLAGS.ckpt_path,config,logger)#模型预测的HTTP接口类ResultHandler(tornado.web.RequestHandler):#postfunctiondefpost(self):event=self.get_argument('event')result=model.evaluate_line(sess,input_from_line(event,FLAGS.max_seq_len,tag_to_id),id_to_tag)self.write(json.dumps(result,ensure_ascii=False))#mainfunctiondefmain():#启用龙卷风服务tornado.options.parse_command_line()#defineappapp=tornado.web.Application(handlers=[(r'/subj_extract',ResultHandler)],#web路径控制)http_server=tornado.httpserver.HTTPServer(app)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()main()模型预测有没有提速?将模型预测封装成HTTP服务后,我们使用Postman来测试模型预测的效果和时间,如下图所示:可以看到,模型预测结果是正确的,耗时仅为38ms然后我们再试几句测试,测试代码如下:#大兴,北京importrequestsimportjsonimporttimeurl='http://localhost:12306/subj_extract'texts=['据《新闻联播》报道,9月9日至11日,中纪委书记赵乐际赴河北调研。','记者从国家发改委、商务部获悉,美方决定对10月1日起实施的对中国输美商品加征关税的措施进行调整。根据全球化原则和WTO规则,如果从美国采购一定数量的大豆、猪肉等农产品,国务院关税税则委员会将对上述采购品加征关税。','据印度Zee新闻网12日报道,亚洲新闻国际通讯社援引印度军方消息称,9月11日的对峙发生在班公错北岸实控线附近。','儋州市决定,自9月起,对城镇低保、农村低保、特困供养人员、优抚对象、失业保险对象、已登记人员等低收入群体共计3万余人对建档立卡贫困户每人发放猪肉价格补贴,每人每月补贴不少于100元。今后,缴费标准将根据猪肉价格波动动态调整。','9月11日,华为心声社区发布了美国经济学家ThomasFriedman在《纽约时报》的专栏内容。弗里德曼透露,近日在接受华为创始人任正非采访时,任正非表示华为愿意与美国司法部进行开放式讨论。','造血干细胞移植治疗白血病的技术日趋成熟。但是,通过这种方法治愈艾滋病,仍然是一个需要全球范围内同时解决的难题。','英国航空事故调查局(AAIB)近日披露,今年2月6日,在从德国法兰克福飞往墨西哥坎昆的航班上,飞行员翻倒了控制面板上的咖啡和烟雾,导致飞机返回并在爱尔兰紧急降落。','周四(9月12日),印尼财政部长SriMulyaniIndrawati明确表示:特朗普的推特是风险之一。','华中科技大学9月12日通过官网发布公告称,9月2日,我校一名研究生不幸坠楼身亡。','微博用户@ooooviki公布了9月12日下午发生在自己身上的惊悚遭遇:自称网警郑阳利用职务之便,查出她完整的个人信息,包括但不限于身份证号码、家庭住址、电话号码、户籍变更等,他要求她做他的女朋友。','今天,贵阳取消汽车限购,成为目前全国实施限购政策的9个省市中第一个取消限购的城市。','据悉,与全球同步,中国区将于9月13日在iPhone官方渠道和京东商城正式开启预售,京东成为iPhone官方唯一授权预售渠道苹果在中国。','央行公布的数据显示,截至2019年6月末,存款性金融机构居民部门短期消费贷款规模9.11万亿元。2019年上半年,该项目净增加3293.19亿元。不乐观。','9月11日,一段浙江万里学院学生食堂的视频在网上走红。视频显示,学校食堂不仅在就餐区设置了大屏幕供看电影和比赛,还推出了“一人餐”餐桌。','那天,在北京举行的2019年国际篮联篮球世界杯半决赛中,西班牙队对阵澳大利亚队。',]t1=time.time()fortextintexts:data={'event':text.replace('','')}req=requests.post(url,data)ifreq.status_code==200:print('原文:%s'%text)res=json.loads(req.content)['entities']print('提取结果:%s'%str([_['word']for_inres]))t2=time.time()print('Totaltimespent:%ss.'%str(round(t2-t1,4)))输出结果如下:原文:根据《新闻联播》报道,9月9日,中纪委书记赵乐际赴河北调研。提取结果:['9月9日至11日']原文:记者从国家发改委、商务部获悉,美方决定对中国输美商品加征关税,实施于10月1日作出调整,中方支持相关企业今后按照市场化原则和WTO规则,自美采购一定数量的大豆、猪肉等农产品。国务院关税税则委员会对上述进货加征关税。提取结果:['几天前','10月1日']原文:据印度Zee新闻网12日报道,亚洲新闻国际通讯社援引印度军方消息称,9月11日发生的对峙事件近工措北岸实控线周边地区。提取结果:['12日','9月11日']原文:儋州市决定,自9月起,城镇低保、农村低保、特困供养人员、优抚对象、失业保险对象,有余3万名建档立卡贫困户等低收入群体,给予猪肉价格补贴。每人每月给予不少于100元的补助。今后,缴费标准将根据猪肉价格波动动态调整。提取结果:['September']原文:9月11日,华为新生社区在《纽约时报》上发布了美国经济学家ThomasFriedman的专栏内容。任正非近日在接受任正非采访时表示,华为愿意与美国司法部讨论无限话题。提取结果:['9月11日']原文:造血干细胞移植治疗白血病的技术日趋成熟。但是,通过这种方法治愈艾滋病,仍然是世界上同时需要解决的难题。提取结果:[]原文:英国航空事故调查局(AAIB)近日披露,今年2月6日,在从德国法兰克福飞往墨西哥坎昆的航班上,飞行员打翻了咖啡,并从控制面板抽烟,导致飞机折返并降落在爱尔兰。提取结果:['最近','今年2月6日']原文:当地时间周四(9月12日),印尼财政部长SriMulyaniIndrawati明确表示:特朗普的推特是风险之一。提取结果:['当地时间周四(9月12日)']原文:华中科技大学9月12日通过官网发布公告称,9月2日,我校一名研究生坠楼身亡.提取结果:['September12th','September2nd']原文:微博用户@ooooviki公布了9月12日下午发生在自己身上的恐怖遭遇:自称网警郑阳利用职务之便之后,他找到了她完整的个人信息,包括但不限于身份证号码、家庭住址、电话号码、户口变更等,并要她做自己的女朋友。提取结果:['9月12日下午']原文:今天,贵阳取消汽车限购,成为全国9个省市中首个实施限购政策的城市。提取结果:['today','current']原文:据悉,与全球同步,中国区将于9月13日在iPhone官方渠道和京东正式开启预售。销售渠道。提取结果:['9月13日']原文:根据央行公布的数据,截至2019年6月末,存款性金融机构居民部门短期消费贷款规模9.11万亿元,而该项目2019年上半年净增3293.19亿元,上半年增幅不容乐观。提取结果:['2019年6月末','2019年上半年','上半年']原文:9月11日,浙江万里学院学生食堂的一段视频走红网络互联网。区内有观影和比赛的大屏幕,还推出了“一人餐”桌。提取结果:['9月11日']原文:当天,在北京举行的2019年国际篮联篮球世界杯半决赛中,西班牙队对阵澳大利亚队。提取结果:['Today','2019']总耗时:0.5314s。可以看出,测试的15个句子,识别准确率都很高,预测时间为531ms,平均每个句子的预测时间不超过40ms。相比之下,文章NLP(17)在kashgari模型中使用tensorflow-serving部署模型。该模型的预测时间为每句话超过1秒,模型预测速度是带有ALBERT的模型的25倍以上。因此,ALBERT模型确实提高了模型预测的时间,而且效果非常显着。总结由于ALBERT开源不到一周,作者的知识和才能有限,代码中可能存在不足之处。不过,作为一次使用ALBERT的心得,还是希望分享给大家。本文绝不是抄袭和堆砌上述项目的代码。这个项目结合了作者自己的思考,希望不要被误解为抄袭。笔者使用上面的bertNER和ALBERT只是为了验证ALBERT在耗时模型预测方面的提速效果,但事实证明ALBERT确实给我带来了很大的惊喜,感受源码作者~最后附上本文作者项目的Github地址:https://github.com/percent4/A...。人家找他上千百度。蓦然回首,男人就在那里,在一片昏暗的地方。参考资料超小BERT中文版横空出世!模型仅16M,训练速度提升10倍:https://mp.weixin.qq.com/s/eV...ALBERT的Github地址:https://github.com/brightmart...bertNER项目的Github地址:https://github.com/yumath/ber...NLP(十七)使用tensorflow-serving部署kashgari模型:https://www.cnblogs.com/jclia...