本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。最新的轻量级多语言NLP工具集Trankit发布了1.0版本,来自俄勒冈大学。基于Transformer,性能已经超越了之前流行的同类项目StanfordStanza。Trankit支持多达56种语言,除了简繁体中文,还支持文言文。先来看看Trankit和Stanza对文言文的一组依存句法分析结果。可见,诗节错误地将“有朋自远方来”中的“有”和“来”这两个动词判断为并列关系。在简体中文的词性标注任务上,Trankit也更好地处理了“Since”这个词。和Stanza一样,Trankit也是基于Pytorch用原生Python实现的,对广大Python用户非常友好。Trankit在多语言NLP的多项任务上优于Stanza。英文分词得分比Stanza高9.36%。中文依存句法分析的UAS和LAS指标分别提高了14.50%和15.0%。Trankit在GPU支持下加速更快,占用内存更少。作为一个轻量级的NLP工具集,更适合普通人使用。使用方便Trankit的使用也非常简单,pipinstall安装即可。pipinstalltrankit不过需要注意的是,Trankit使用了Tokenizer库,需要先安装Rust。初始化一个预训练Pipeline:fromtrankitimportPipeline#initializeamultilingualpipelinep=Pipeline(lang='english',gpu=True,cache_dir='./cache')开启auto模式自动检测语言:fromtrankitimportPipelinep=Pipeline('auto')#TokenizinganEnglishinputen_output=p.tokenize('''IfiguredIwouldputitoutthereanyways.''')#POS,MorphologicaltaggingandDependencyparsingaFrenchinputfr_output=p.posdep('''Onpourratoujoursparleràproposd'Averroèsde"décentrementduSujet".''')使用自定义TP标记数据非常方便自己训练:impefromtTPipeline(training_config={'task':'tokenize','save_dir':'./saved_model','train_txt_fpath':'./train.txt','train_conllu_fpath':'./train.conllu','dev_txt_fpath':'./dev.txt','dev_conllu_fpath':'./dev.conllu'})trainer.train()统一的多语言TransformerTrankit整合了各种语言分别训练的Pipelines共享一个多语言pre-训练变形金刚。然后为每种语言创建一组适配器(Adapters)作为传统预训练模型“微调”方法的替代,并为不同的NLP任务设置权重。在训练期间,共享的预训练Transformer是固定的,只有适配器和任务特定的权重会更新。在推理时,根据输入文本的语言和当前活动组件,找到相应的适配器和特定于任务的权重。这种机制不仅解决了内存问题,还大大减少了训练时间。Trankit团队在实验中比较了另外两种实现方式。一种是将所有语言的数据收集在一起,以训练一个庞大的管道。另一种是使用Trankit的方法,但删除适配器。在各种NLP任务中,Trankit的“即插即用”适配器方法表现最好。该团队表示,未来计划通过研究mBERT和XLM-Robertallarge等不同的预训练Transformer来改进Trankit。还考虑了更多语言的实体识别,以及对更多NLP任务的支持。Github仓库:https://github.com/nlp-uoregon/trankit在线Demo:http://nlp.uoregon.edu/trankit相关论文:https://arxiv.org/pdf/2101.03289.pdf
