Bert实战:使用Bert实现文本分类。

1、简介

最近使用Bert实现了文本分类,模型使用的是bert的base版本。本文记录一下实现过程。

数据集:cnews,包含三个文件,分别是cnews.train.txt、cnews.test.txt、cnews.val.txt。类别包含10类,分别是:体育、娱乐、家居、房产、教育、时尚、时政、游戏、科技、财经。

代码参考:https://github.com/BeHappyForMe/Multi_Model_Classification,对代码的一些部分作了修改和注解。关注公众号“AI小浩”,回复“bert实战”,获取代码和数据集。

2、下载代码和数据集

数据集的地址:

链接:https://pan.baidu.com/s/1JKiaexp0oQeJF02UUX5eSw
提取码:2222

下载代码后,将代码解压到指定的目录,让后将数据集放进去。删除其他的模型只保留bert的。如下图:

image-20211022144636375
安装transformers

pip install transformers

3、下载预训练模型。

链接:bert-base-chinese at main (huggingface.co),将下图中,画红框的文件下载下来。在项目的根目录新建chinese_wwm_pytorch文件夹,将下载的文件放进去。

image-20211022153525011

新建outs文件夹,将config.json、tokenizer.json、tokenizer_config.json和vocab.txt复制到outs文件夹中。

注:模型的类型在configuration_bert.py中查看。选择合适的模型很重要,比如这次是中文文本的分类。选择用bert-base-uncased只能得到86%的准确率,但是选用bert-base-chinese就可以轻松达到96%。

image-20211025192732926

4、修改bert_cnews.py代码

对68行的代码做修改。原始代码如下:

ALL_MODELS = sum((tuple(conf.pretrained_config_archive_map.keys()) for conf in (BertConfig, XLNetConfig, XLMConfig,
                                                                                RobertaConfig, DistilBertConfig)), ())

修改为:

ALL_MODELS=tuple(BERT_PRETRAINED_CONFIG_ARCHIVE_MAP)

作者想把BertConfig、XLNetConfig、XLMConfig、RobertaConfig, DistilBertConfig等都导进来。可能是版本的升级pretrained_config_archive_map这个字段做了修改,以Bert为例,这个字段改为了‘BERT_PRETRAINED_CONFIG_ARCHIVE_MAP’。本次案例只是对Bert的讲解,所以我只保留了Bert的字段。

image-20211022154646619

5、修改main()方法中的参数。

data_dir:数据集的路径,改为“./cnews”。

  parser.add_argument("--data_dir", default='./cnews', type=str, required=False,
                        help="The input data dir. Should contain the .tsv files (or other data files) for the task.")

model_type:模型的类型,MODEL_CLASSES的参数,本次使用bert。

  parser.add_argument("--model_type", default='bert', type=str, required=False,
                        help="Model type selected in the list: " + ", ".join(MODEL_CLASSES.keys()))

model_name_or_path:预训练模型的存放路径,设置为‘chinese_wwm_pytorch’。

    parser.add_argument("--model_name_or_path", default='chinese_wwm_pytorch', type=str, required=False,
                        help="Path to pre-trained model or shortcut name selected in the list: " + ", ".join(
                            ALL_MODELS))

这个文件下面的文件详见下图:

image-20211025190808637

task_name:任务名称。我写的cnews

 parser.add_argument("--task_name", default='cnews', type=str, required=False,
                        help="The name of the task to train selected in the list: " + ", ".join(processors.keys()))

do_train:是否训练。需要训练则设置为true。

    parser.add_argument("--do_train", default=True,action='store_true',
                        help="Whether to run training.")

do_eval:是否验证,如果设置为true,则将outs的模型一一验证。和do_train可以同时配置为true,这样训练完成后就开始验证。

 parser.add_argument("--do_eval",default=True, action='store_true',
                        help="Whether to run eval on the dev set.")

evaluate_during_training:是否在训练期间验证。默认没有配置。如果需要配置,则将其设置为true。

parser.add_argument("--evaluate_during_training", action='store_true',
                    help="Rul evaluation during training at each logging step.")

do_lower_case:是否转小写。使用uncased模型时需要设置。

 parser.add_argument("--do_lower_case",action='store_true',
                        help="Set this flag if you are using an uncased model.")

per_gpu_train_batch_size和per_gpu_eval_batch_size:batch_size大小,根据显卡合理设置。

 parser.add_argument("--per_gpu_train_batch_size", default=4, type=int,
                        help="Batch size per GPU/CPU for training.")
    parser.add_argument("--per_gpu_eval_batch_size", default=4, type=int,
                        help="Batch size per GPU/CPU for evaluation.")

learning_rate:学习率,默认设置即可。

parser.add_argument("--learning_rate", default=2e-5, type=float,
                        help="The initial learning rate for Adam.")
    parser.add_argument("--weight_decay", default=0.0, type=float,

num_train_epochs:epochs大小。

 parser.add_argument("--num_train_epochs", default=50.0, type=float,
                        help="Total number of training epochs to perform.")

save_steps:迭代多少次保存一次模型。

 parser.add_argument('--save_steps', type=int, default=12500,
                        help="Save checkpoint every X updates steps.")

上面的参数是比较重要的参数,将这些参数配置好可以训练了。

5、验证

验证还有一步要做,config.json、tokenizer.json、tokenizer_config.json、vocab.txt。复制一份到outs文件夹。

image-20211025193518055

等训练完成就可以测试了。

image-20211025194457936

关注公众号“AI小浩”,回复‘bert分类’,获取代码、模型和数据。

  • 17
    点赞
  • 224
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论
BERT(Bidirectional Encoder Representations from Transformers)模型是一种预训练的语言表示模型,用于处理自然语言处理任务,例如文本分类。要实战BERT模型进行文本分类,首先需要准备好训练数据集和测试数据集。然后按照以下步骤进行代码实现: 1. 导入必要的库和模型:首先导入必要的Python库,例如tensorflow和transformers。然后加载预训练的BERT模型,例如使用transformers库中的BertForSequenceClassification模型。 2. 数据预处理:将文本数据转换为BERT模型的输入格式。可以使用tokenizer对文本进行编码,然后将编码后的文本转换为模型输入的格式。 3. 构建模型:基于BERT模型构建文本分类模型。可以使用BertForSequenceClassification模型构建一个分类器,并根据实际情况调整模型的超参数。 4. 模型训练:使用准备好的训练数据集对构建的BERT文本分类模型进行训练。可以使用适当的优化器和损失函数来训练模型,并根据验证集的表现来调整模型。 5. 模型评估:使用准备好的测试数据集对训练好的BERT文本分类模型进行评估。可以计算模型的准确率、召回率和F1值等指标来评估模型的性能。 6. 模型应用:使用训练好的BERT文本分类模型对新的文本数据进行分类预测。可以将模型应用到实际的文本分类任务中,例如对新闻文本进行分类、对电影评论进行情感分析等。 通过以上步骤,可以实战BERT模型进行文本分类任务,并根据实际情况对模型进行调整和优化,从而得到更好的分类效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值