当前位置:网站首页 > R语言数据分析 > 正文

bert预训练模型(bert预训练模型怎么用)



最近在弄与中文自然语言处理相关的内容,陆陆续续看了好多的教程,知道bert的效果相对比较好,后来找到了哈工大的中文预训练模型。但是作者就是不想说这个模型怎么用,说跟谷歌的预训练模型一样(但是谷歌的我也不会用),后来辗转找到了一篇非常不错的英文教程,想看英文文本分类的跟着这个教程就行。跟着它也终于把中文的文本分类基本搞定了,用的就是哈工大的模型。在这里就将其分享一下,之前也一直想着写博客,那就让这成为我的第一篇博客吧

看这篇教程的前提:

  1. 你需要自己准备一个中文文本分类的数据集(因为我的项目暂时不能公开数据集),格式的话能用pandas读进去就行,excel、csv、tsv、等等的表格数据都行,格式要求自然是要有待分类的数据和分类标签了,下文会具体举例。至于怎么读进去,下文也会介绍。记住如果你准备好了,提前将其分为和,方便下文使用。
  2. (可选)最好能安装jupyter lab,如果你有谷歌的colab账号那就更加完美不过了,这样就能用到谷歌的免费GPU,而且本次教程也是基于谷歌的colab运行环境进行,至于怎么注册,就自己百度吧。
  3. 如果在本地运行,你需要先安装好pytorch和transformer,在此都是基于最新版本,没有指定特殊的版本。
  4. 这里只介绍2分类,但是扩展成多分类应该很简单,修改下模型参数就行,下文会介绍

bert在2018年被提出之后,刷榜了很多NLP任务,基本上是现阶段做NLP无法绕过的技术。在中文文本领域,目前做的比较好的是哈工大和百度的ERNIE,当然ERNIE也是基于bert来进行中文优化以及性能提升的,至于怎么用ERNIE,如果我搞清楚了还会继续写教程。

更多原理性的东西我不再赘述,写的比我好的一大堆,在这里我只探讨怎么使用bert的中文预训练模型来进行文本分类

首先安装transformer并导入pythrch,并检测当前环境是否有GPU,剩余的实验均使用GPU进行加速,如果你没有GPU,那么把下文的 和 去掉就行

 
  

如果你使用Google colab,下面的代码可以帮助你把文件从本地上传到colab,直接运行它就会叫你选择本地文件进行上传

 
  
 
  

在这里我使用的是自己爬并自己标注的旅游数据,一共79000条训练数据和20000条测试数据
在这里插入图片描述
:

  • 你的数据有可能跟我上面的不一样,可能文件名、列名等不同,只要修改下上面读取函数的参数就能正确读入成dataframe的文件,这样后面就能统一处理,如果实在不知道参数代表什么,查查看函数的用法
  • 这个读取数据的步骤很重要,理论上只要你准备好相应的文本和它的类别,基本上就能顺利做下去,如果你的文本标签不是01这些,那么你需要参考源博客来进行修改,或者研究下下面的代码注释,理论上应该是有对应的label属性可供选择,不过你还可以直接建立字典将你的自定义标签映射到012上,这样本质上没有区别。

pandas默认读入是string类型,需要自己将标签处理成整数0或1(这样对下文处理更加方便)
这里利用numpy进行转换,如果你没有numpy,自己百度安装

 
  
 
  

这里导入的模型是不同模型差异看哈工大的中文预训练模型

 
  

输出

 
  

这里最长的句子有20000行,因为要统一句子长度,所以其实最好弄个循环看看适合自己的句子长度是多少:

 
  

:句子长度与训练性能有很大关系,建议酌情选择

 
  

对句子进行attention_mask:

attention_mask是什么我就不多解释了,感兴趣可以自己看引用的源博客

 
  

分割训练数据集和验证数据集,在这将90%的进行训练,10%进行验证

 
  

转换为torch tensor:

 
  

使用pytorch的dataloader帮助我们进行batch_size的划分和自动化输入

 
  
 
  

查看模型的参数:

 
  

输出:
在这里插入图片描述

 
  

下面是一些计时函数和评价函数,在这里提早进行定义。

 
  

弄了这么久,终于开始了模型训练!下面定义了一大堆的参数,不过总体来说就是首先在epoch里面设置各种参数,然后进行计时训练,然后每次epoch结束后会进行验证,代码注释都非常详细了,可以自己研究下,在这里就不多展开。

 
  

在这里可以看到如果用我的数据集,用16G的半小时还没跑完一个epoch…
在这里插入图片描述

下面将模型的loss输出下:

 
  

在这里插入图片描述
在这可以看到模型的loss曲线还是很完美的

首先如果你用的是Google colab,那肯定要先上传一个test.tsv文件,然后按照下面的代码进行读取,其实数据处理的过程跟上面的一样,代码都差不多,在这里就不多赘述了

 
  
 
  

在它的代码里面,我们验证的数据放在了两个列表里面,其实原作者使用了一个更高级的验证函数:验证,原理我就不多讲了,简单概括就是:越接近1,分类器越牛逼,越接近0,分类器越垃圾…

 
  

其实对于我来说,只关心它准确率多少,也就是对了多少个,让我们来输出下:

 
  

在本次案例中,正确率为74%,MCC为0.53。数字看起来并不惊人。但是要知道这个数据集是自己准备的,而且没有经过任何的调参和优化,test数据集也有些偏差,它能做到这一步我已经非常吃惊,下次可以看看XLnet之类的,看看有没有更好的效果。

源博客:

使用bert进行英文文本分类

到此这篇bert预训练模型(bert预训练模型怎么用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ubuntu下编译qt源码(ubuntu qtcreator)2025-10-08 10:27:10
  • swagger3 注解(@enableswagger2注解)2025-10-08 10:27:10
  • arom和prom(arom和prom的关系)2025-10-08 10:27:10
  • pcap文件用什么打开(pcap文件用什么打开,除了wireshark)2025-10-08 10:27:10
  • noentry怎么读(noentry怎么读英语)2025-10-08 10:27:10
  • redhat linux最新版本(redhat系列的linux)2025-10-08 10:27:10
  • ifstream读取字符串(ifstream fin读取)2025-10-08 10:27:10
  • swagger2注解无效(swagger3注解)2025-10-08 10:27:10
  • docx加密文档破解(word文档加密破解方法,实测有效)2025-10-08 10:27:10
  • jlink读取flash(Jlink读取芯片内部EEPROM)2025-10-08 10:27:10
  • 全屏图片