最近在弄与中文自然语言处理相关的内容,陆陆续续看了好多的教程,知道bert的效果相对比较好,后来找到了哈工大的中文预训练模型。但是作者就是不想说这个模型怎么用,说跟谷歌的预训练模型一样(但是谷歌的我也不会用),后来辗转找到了一篇非常不错的英文教程,想看英文文本分类的跟着这个教程就行。跟着它也终于把中文的文本分类基本搞定了,用的就是哈工大的模型。在这里就将其分享一下,之前也一直想着写博客,那就让这成为我的第一篇博客吧
看这篇教程的前提:
- 你需要自己准备一个中文文本分类的数据集(因为我的项目暂时不能公开数据集),格式的话能用pandas读进去就行,excel、csv、tsv、等等的表格数据都行,格式要求自然是要有待分类的数据和分类标签了,下文会具体举例。至于怎么读进去,下文也会介绍。记住如果你准备好了,提前将其分为和,方便下文使用。
- (可选)最好能安装jupyter lab,如果你有谷歌的colab账号那就更加完美不过了,这样就能用到谷歌的免费GPU,而且本次教程也是基于谷歌的colab运行环境进行,至于怎么注册,就自己百度吧。
- 如果在本地运行,你需要先安装好pytorch和transformer,在此都是基于最新版本,没有指定特殊的版本。
- 这里只介绍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预训练模型怎么用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/77909.html