美文网首页
优雅の使用transformer系列之text-classifi

优雅の使用transformer系列之text-classifi

作者: colin_gao | 来源:发表于2020-06-19 14:29 被阅读0次

    前言

     自bert问世之后,如今的NLP行业无论是研究、赛事还是工程上,都会优先使用bert及其衍生模型进行迁移学习。当然我也不例外。但是怎样使用bert相关的东西才算优雅呢,这是个难题。
     最早之前我使用过bert-as-service,纯将bert变成一个获取feature的服务来使用。后面接触和使用过CyberZHG大佬的keras-bert,以及基于keras-bert实现的kashgari。再到后面也使用过苏剑林大佬的bert4keras。但总觉得不够好,可能是我理解不够通透的缘故吧。
     直到最近正儿八经地使用过huggingface的transformers,并结合了pytorch-lightning,瞬间感觉真香😁。从开源角度来说,huggingface的transformers会更好,因为contributors更多,社区更活跃,所以算是入坑了😓

    Text-Classification

     代码传送门:bert4pl
     Text-Classification的算法实现比较简单,首先经过bert的encoder之后取output第一维度的值也就是[CLS]的向量,[CLS]代表着这句话的句向量,然后接一个dropout层和一个全连接层,损失函数是交叉熵损失函数(CrossEntropyLoss)。所以本文就展示下如何优雅の实现text-classification这个功能。

    Pytorch-Lightning

     pytorch-lightning的优势很多,它重构了你的pytorch代码,抽出了复杂重复的部分,让你专注于核心的构建,让你实验更简便快速,让你部署训练迁移更简便。
     其实关于pytorch-lightning网上的文章很多,这里我列一下我认为比较重要的点,就是需要理解pytorch-lightning的生命周期,只有理解了这个你才能避免不少坑,因为这些坑我刚好踩过。

    • 首先是准备工作,这部分代码只会执行一次。
    1. __init__ (初始化LightningModule)
    2. prepare_data() (准备数据,预处理数据)
    3. configure_optimizers() (配置优化器)
    
    • 加载dataloader,包括训练和验证数据(这个可以没有)
    1. train_dataloader()
    2. val_dataloader()
    
    • 循环训练与验证
    1. training_step()
    2. validation_step()
    3. validation_epoch_end()
    
    • 最后训练完了,如果需要测试需要手动调用.test()
    1. test_dataloader()
    2. test_step()
    3. test_epoch_end()
    

     至此结束,是不是特别一目了然和优雅。pytorch-lightning还拥有很多高级用法,比如:设置Checkpointing、分布式训练、混合精度训练、单多GPU训练、快速调试验证、参数快照、日志功能、使用tensorboard等等的用法。

    结束语

     本身text-classification没太多需要扩展说的,所以本文只是安利大家transformer以及pytorch-lightning,并且提供了一个代码实现,写这个的时候也是踩过不少坑,说多了也是泪,希望大家玩的开心吧。

    相关文章

      网友评论

          本文标题:优雅の使用transformer系列之text-classifi

          本文链接:https://www.haomeiwen.com/subject/pxbpxktx.html