当前位置:   article > 正文

将bert模型作为keras模块使用_keras bert当一层

keras bert当一层
1、为什么要用OSTA方法

        在NLP领域如果不使用SOTA方法,存在诸多缺点,效果难以保障:1、SOTA方法结果优,其模型是各种大牛使用数百张TPU,构造的庞大模型,各种参数得到了调优,其训练效果已经达到NLP领域的巅峰;2、泛化能力强,SOTA方法是在海量级数据集上训练产生的,所以适应范围广泛,其泛化能力很强;3、参数多,模型深度高,例如bert模型使用12层,12个多头注意力机制及768个隐藏单元,多达一亿个参数,其训练集数据多达34亿个单词。如此庞大的数据集及结构一般用户是难以承受其训练成本的,因此一般简单模型堆叠方法很难超越SOTA方法。在无法克服差距的情况下,拿来主义是个不错的选择。
        Transformers是HuggingFace设计的一个NLP预训练模型库,其库内包含了大量NLP的SOTA方法,如Bert、GPT、XLNet等。
        BertAsService是一个组件用户可以以客户端的方式访问
        本文将尝试使用bert模型对中文自然语言处理中的情感进行分析。

2、实现模型
2.1 各组件库的条件

(1)transformers的安装环境为python 3.6以上, PyTorch 1.0.0以上 (PyTorch 1.3.1+ for examples) 或者TensorFlow 2.0以上。
        对于不满足以上安装环境的用户需要创建虚拟环境以安装配置transformers。但是TensorFlow2.0对使用Tensorflow1.0的兼容性不好,不建议使用tensorflow作为后端;使用pytorch进行开发是个不错的选择,但这也意味着之前写的tensorflow代码需要重新写。
(2)BertAsService是基于服务器和客户端模式的方式进行的因此效率上存在一定的问题对环境的需求为: Python >= 3.5 同时 Tensorflow >= 1.10,但实现起来比较简单。
(3)keras-bert要求keras版本大于2.4.3意味着tensorflow作为后端的话,tensorflow的版本必须大于tensorflow2.0,也就是说在tensorflow1上的代码无法使用了。
排在最后的,也是重点推荐的就是,bert-utils
(4)bert-utils如果你不想升级tensorflow不想升级keras只想安安静静的做下词向量、句向量,而且需要有一定的效率支撑,那么bert-utils就是为你设计的了。
项目地址如下:
https://github.com/terrifyzhao/bert-utils

创建虚拟环境(基于anaconda,使用bert-utils)

conda create --name keras2.2.2 python=3.6

切换不同环境:conda activate 环境名字;
以及退出环境:conda deactivate;
删除虚拟环境:conda remove -n your_env_name(虚拟环境名称) --all

如果你觉得bert-utils不适合你好吧,你可以升级pytorch和tensorflow

        由于Transformers依赖于两个库,pytorch和TensorFlow2.0因此如果想要让Transformers所包含的库能够运行必须先安装pytorch和TensorFlow这两个包。
        安装pytorch并依赖于相应的cuda库,然后安装TensorFlow2.0。注意,一定要按照顺序安装,在安装pytorch时可以附带的下载cuda10的库,但是如果先安装Tensorflow则无法启动TensorFlow。
(1)可以直接通过pytorch的官网,根据需求定制cuda版本,安装Pytroch: conda install pytorch torchvision cudatoolkit=10.0.130 -c pytorch
也可以从这个网页上下载相应的版本torch1.4对应的是0.5的torchvision
https://download.pytorch.org/whl/torch_stable.html

(2)安装TensorFlow2.0
pip install tensorflow-gpu现在一般默认情况下,tensorflow2.0需要的cuda10.0.0以上,因此需要先安装了Pytorch或在安装tensorflow2.0时指定依赖关系。

使用bert-utils进行句向量生成

1、下载bert-utils对应的配置文件到项目根目录下;
2、下载bert-utils的代码到项目根目录下
3、导入bert-utils,
from extract_feature import BertVector
4、将要生成的句子使用列表方式存储,两条代码生成句向量
bc = BertVector()
encoded_comment_slice = bc.encode(plain_comment)

存在的问题:1、对资源的消耗较大,对30万个句子的要分成32个单元,每次训练6个单元才能训练完,真的很耗时;
2、效果不怎么好。

使用original-bert模型直接训练。

不要偷懒

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/959019
推荐阅读
相关标签
  

闽ICP备14008679号