通过PyTorch来创建一个文本分类的Bert模型

2018 年,谷歌发表了一篇题为《Pre-training of deep bidirectional Transformers for Language Understanding》的论文。

积石山保安族东乡族网站建设公司创新互联,积石山保安族东乡族网站设计制作,有大型网站制作公司丰富经验。已为积石山保安族东乡族上1000家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的积石山保安族东乡族做网站的公司定做!

在本文中,介绍了一种称为BERT(带转换器Transformers的双向编码Encoder 器表示)的语言模型,该模型在问答、自然语言推理、分类和通用语言理解评估或 (GLUE)等任务中取得了最性能.

BERT全称为Bidirectional Encoder Representation from Transformers[1],是一种用于语言表征的预训练模型。

它基于谷歌2017年发布的Transformer架构,通常的Transformer使用一组编码器和解码器网络,而BERT只需要一个额外的输出层,对预训练进行fine-tune,就可以满足各种任务,根本没有必要针对特定任务对模型进行修改。

BERT将多个Transformer编码器堆叠在一起。Transformer基于著名的多头注意力(Multi-head Attention)模块,该模块在视觉和语言任务方面都取得了巨大成功。

在本文中,我们将使用 PyTorch来创建一个文本分类的Bert模型。

笔者介今天绍一个python库 --- simpletransformers,可以很好的解决高级预训练语言模型使用困难的问题。

simpletransformers使得高级预训练模型(BERT、RoBERTa、XLNet、XLM、DistilBERT、ALBERT、CamemBERT、XLM-RoBERTa、FlauBERT)的训练、评估和预测变得简单,每条只需3行即可初始化模型。

数据集来源:https://www.kaggle.com/jrobischon/wikipedia-movie-plots

该数据集包含对来自世界各地的 34,886 部电影的描述。列描述如下:

  • 发行年份:电影发行的年份
  • 标题:电影标题
  • 起源:电影的起源(即美国、宝莱坞、泰米尔等)
  • 剧情:主要演员
  • 类型:电影类型
  • 维基页面- 从中抓取情节描述的维基百科页面的 URL
  • 情节:电影情节的长篇描述
 
 
 
 
  1. import numpy as np
  2. import pandas as pd
  3. import os, json, gc, re, random
  4. from tqdm.notebook import tqdm
  5. import torch, transformers, tokenizers
  6. movies_df = pd.read_csv("wiki_movie_plots_deduped.csv")
  7. from sklearn.preprocessing import LabelEncoder
  8. movies_df = movies_df[(movies_df["Origin/Ethnicity"]=="American") | (movies_df["Origin/Ethnicity"]=="British")]
  9. movies_df = movies_df[["Plot", "Genre"]]
  10. drop_indices = movies_df[movies_df["Genre"] == "unknown" ].index
  11. movies_df.drop(drop_indices, inplace=True)
  12. # Combine genres: 1) "sci-fi" with "science fiction" &  2) "romantic comedy" with "romance"
  13. movies_df["Genre"].replace({"sci-fi": "science fiction", "romantic comedy": "romance"}, inplace=True)
  14. # 根据频率选择电影类型
  15. shortlisted_genres = movies_df["Genre"].value_counts().reset_index(name="count").query("count > 200")["index"].tolist()
  16. movies_df = movies_df[movies_df["Genre"].isin(shortlisted_genres)].reset_index(drop=True)
  17. # Shuffle 
  18. movies_df = movies_df.sample(frac=1).reset_index(drop=True)
  19. #从不同类型中抽取大致相同数量的电影情节样本(以减少阶级不平衡问题)
  20. movies_df = movies_df.groupby("Genre").head(400).reset_index(drop=True)
  21. label_encoder = LabelEncoder()
  22. movies_df["genre_encoded"] = label_encoder.fit_transform(movies_df["Genre"].tolist())
  23. movies_df = movies_df[["Plot", "Genre", "genre_encoded"]]
  24. movies_df

使用 torch 加载 BERT 模型,最简单的方法是使用 Simple Transformers 库,以便只需 3 行代码即可初始化、在给定数据集上训练和在给定数据集上评估 Transformer 模型。

 
 
 
 
  1. from simpletransformers.classification import ClassificationModel
  2. # 模型参数
  3. model_args = {
  4.     "reprocess_input_data": True,
  5.     "overwrite_output_dir": True,
  6.     "save_model_every_epoch": False,
  7.     "save_eval_checkpoints": False,
  8.     "max_seq_length": 512,
  9.     "train_batch_size": 16,
  10.     "num_train_epochs": 4,
  11. }
  12. # Create a ClassificationModel
  13. model = ClassificationModel('bert', 'bert-base-cased', num_labels=len(shortlisted_genres), args=model_args)

训练模型

 
 
 
 
  1. train_df, eval_df = train_test_split(movies_df, test_size=0.2, stratify=movies_df["Genre"], random_state=42)
  2. # Train the model
  3. model.train_model(train_df[["Plot", "genre_encoded"]])
  4. # Evaluate the model
  5. result, model_outputs, wrong_predictions = model.eval_model(eval_df[["Plot", "genre_encoded"]])
  6. print(result)
  7. {'mcc': 0.5299659404649717, 'eval_loss': 1.4970421879083518}
  8. CPU times: user 19min 1s, sys: 4.95 s, total: 19min 6s
  9. Wall time: 20min 14s

关于simpletransformers的官方文档:https://simpletransformers.ai/docs

Github链接:https://github.com/ThilinaRajapakse/simpletransformers

网站名称:通过PyTorch来创建一个文本分类的Bert模型
地址分享:http://www.shufengxianlan.com/qtweb/news22/230272.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联