bert情感分析_bert情感分析预训练模型
信息来源:互联网 发布时间:2025-04-18
我曾在一个时期训练过BERT模型,您可以看到结果对于多类文本分类看起来不错。from sklearn import metrics。
使用BERT轻松快速地实现针对Yelp评论的多类别文本情感分析在本文中,我们将使用BERT在Yelp评论上开发多类文本分类BERT概述BERT是用于通用“语言理解” 的深度双向表示模型,可从左至右和从右至左学习信息。
BERT是从BooksCorpus(800M字)和English Wikipedia(25亿字)中提取的未标记数据进行预训练的BERT有两种型号基于BERT的编码器:12个编码器和12个双向自动关注头BERT大型:
24个编码器,带有24个双向自动关注头基于BERT的版本和基于BERT的版本都具有Cased和Uncased版本BERT在WordPiece标记化之前对文本进行小写的情况下,不进行大小写转换例如,“詹姆斯·邦德”变成“詹姆斯·邦德”。
它还会删除重音标记BERT-Cased保留了真实的表壳和重音标记通常,除非用例要求保留对NLP任务至关重要的用例信息,否则我们将使用BERT-UncasedBERT的基本设置我们需要Tensorflow 1.11或更高版本才能使BERT代码正常工作。
在下载了预训练的权重和数据集之后,我们需要对多类分类进行一些更改我们克隆或下载的代码将具有一个文件run_classifier.py我们需要更新ColaProcessor 类中的方法get_labels。
(),如下所示,以进行多类文本分类二进制分类的原始代码defget_labels(self): return [“0”, “1”]用于多类别文本分类的修改代码defget_labels(self):
return [“0”, “1”, “2”, “3”, “4”]为BERT建立数据集导入所需的库以进行数据处理import numpy as np import pandas as pd from sklearn.preprocessing
import LabelEncoder from sklearn.model_selection import train_test_split读取Yelp复习训练并测试从文件中提取的数据data_train= pd.read_csv(“yelp_review_full_csv\\train.csv”, header=None) data_test= pd.read_csv(
"yelp_review_full_csv\\test.csv", header=None) data_train.head(5)查找类标签的唯一值
data_train[0].unique()
值1表示评价差,而值5表示评价很好您可能希望类标签从0开始,所以我们从当前标签值中减去1值0现在表示评价不佳,值4表示评价很好data_train[0]=(data_train[0]-1)data_test[0]。
=(data_test[0]-1)data_train[0].unique()
更新BERT代码以进行多类文本分类在文件run_classifier.py中,修改类ColaProcessor中的get_labels()方法并更新标签以匹配火车数据中的内容defget_labels(
self): return [“0”, “1”, “2”, “3”, “4”]在BERT中处理不同NLP任务的类要求数据采用.tsv(制表符分隔值)文件格式的特定格式列0:GUID:该行的ID训练和测试数据均必需。
第1列:该行的类标签此列值应与文件run_classifier.py的类ColaProcessor中的get_labels()方法中指定的值匹配仅对于火车数据是必需的列2:alpha:这是用于文本分类的虚拟列,但是BERT的训练数据需要。
第3列:文本:这是要分类的文本培训和测试数据都需要此列构建BERT数据集以进行培训,开发和测试BERT需要三个不同的数据集:用于训练的训练和开发以及用于预测的测试#根据BERT数据要求以正确的顺序添加所需的列来创建数据帧 df_bert = pd.DataFrame({ ‘id’:。
range(len(data_train)), ‘label’:data_train[0], ‘alpha’:[‘a’]*data_train.shape[0], ‘text’: data_train[
1].replace(r’\n’, ‘ ‘, regex=True) }) df_bert.head()
数据符合BERT要求的格式将数据拆分为训练和开发或评估数据集# Splitting training data file into *train* and *test* df_bert_train, df_bert_dev = train_test_split(df_bert, test_size=0.01)
建筑测试数据集我们在测试数据集中只需要两列列0:GUID:该行的ID第1列:文本:这是要分类的文本#根据BERT创建测试数据帧 # Creating test dataframe according to = pd.DataFrame({ ‘id’:。
range(len(data_test)), ‘text’: data_test[1].replace(r’\n’, ‘ ‘, regex=True) }) df_bert_test.tail() 根据BERT测试数据集
将数据帧保存到.tsv文件中,没有用于train和dev的标题,但是文件test.tsv文件需要该标题#保存dataframes到.tsv格式格式所要求的BERT df_bert_train.to_csv(‘yelp_review_full_csv\\train.tsv’, sep=’\t’, index=
False, header=False) df_bert_dev.to_csv(‘yelp_review_full_csv\\dev.tsv’, sep=’\t’, index=False, header=
False) df_bert_test.to_csv(‘yelp_review_full_csv\\test.tsv’, sep=’\t’, index=False, header=True)训练BERT模型
我们将加载经过预训练的基于BERT的Uncased模型权重,并在Yelp审查数据集上训练模型让我们了解我们需要为训练设置的参数我们需要训练多类文本分类,因此我们将使用run_classifier.py文件。
1. task_name:这是我们计划用于培训的任务选项是CoLA:语言可接受性语料库是一个二进制的单句分类任务,即ColaProcessor类目的是预测英语句子在语言上是否“可以接受”MNLI:多体类自然语言推理
是一项大规模的,众包的蕴含分类任务给定一对句子,目标是预测第二个句子相对于第一个句子是包含,矛盾还是中立的MRPC:Microsoft研究释义语料库由自动从在线新闻源中提取的句子对组成目的是检查该对中的句子在语义上是否等效。
XNLI:跨语言自然语言推理使用15种语言的跨语言句子分类2. do_train:将其设置为True进行培训这将使用train.tsv文件进行培训3. do_eval:将其设置为True以进行评估这将使用dev.tsv文件进行评估。
4. data_dir:包含.tsv文件中数据的目录5. vocab_file:指定vocab.txt文件Vocab.txt使用BERT提供的vocab文件将单词映射到索引词汇表中有119,547个单词令牌。
6. bert_config_file:包含BERT模型的参数值BERT预训练模型具有此文件7. init_checkpoint:初始检查点,通常从预先训练的检查点开始如果您从上次中断的地方恢复训练过程,或者训练被中断,请提及最后一个检查点文件名。
8. max_seq_length:所发布的模型经过训练,序列长度最大为512,但是您可以使用更短的最大序列长度进行微调以节省大量内存较长的序列不成比例地昂贵,因为注意力是序列长度的平方填充比指定长度短的序列。
9. train_batch_size:培训的总批次大小内存使用量也与批量大小成正比默认值为32指定此参数仅用于训练10. learning_rate:Adam的初始学习率默认学习率是0.00005指定此参数仅用于训练。
11. num_train_epochs:要执行的训练时期的总数指定此参数仅用于训练12. output_dir:将在其中写入模型检查点的输出目录以及评估数据集的详细信息您需要先创建此目录,然后再指定它用于训练或推理。
13. do_lower_case:是否小写输入文本对于无案例模型,应为True;对于有案例模型,应为False仅指定培训14. save_checkpoints_steps:指定保存模型检查点的频率仅指定培训。
要进行培训,请在命令提示符处使用以下命令python run_classifier.py --task_name=cola --do_train=true --do_eval=true --data_dir=\yelp_review_full_csv\
--vocab_file=\BERT\uncased_L-12_H-768_A-12\uncased_L-12_H-768_A-12\vocab.txt --bert_config_file=\BERT\uncased_L-12_H-768_A-12\uncased_L-12_H-768_A-12\bert_config.json
--init_checkpoint=\BERT\uncased_L-12_H-768_A-12\uncased_L-12_H-768_A-12\bert_model.ckpt --max_seq_length=64
--train_batch_size=2 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=\BERT\bert_output\ --do_lower_case=True
--save_checkpoints_steps 10000培训完成后,您可以查看包含dev数据集摘要的检查点文件和eval_results.txt文件eval_accuracy = 0.71553844。
eval_loss = 1.035305global_step = 1287000loss = 1.0362284预测情绪为了预测情绪,我们将以下参数设置为— do_predict参数设置为True1.
task_name:应与用于训练数据集的task_name匹配2. data_dir:指定包含test.tsv文件中的数据的目录3. vocab_file:指定vocab.txt文件Vocab.txt使用BERT提供的vocab文件将单词映射到索引。
4. bert_config_file:包含BERT模型的参数值BERT预训练模型具有此文件5. init_checkpoint:初始检查点这是输出目录中模型检查点文件的最大数量6. max_seq_length。
:指定最大序列长度7. output_dir:将测试结果写入文件test_results.tsv的输出目录python run_classifier.py --task_name=cola --do_predict=true
--data_dir=\yelp_review_full_csv\ --vocab_file=\BERT\uncased_L-12_H-768_A-12\uncased_L-12_H-768_A-12\vocab.txt
--bert_config_file=\BERT\uncased_L-12_H-768_A-12\uncased_L-12_H-768_A-12\bert_config.json --init_checkpoint=\BERT\bert_output\model.ckpt-1085250
--max_seq_length=128 --output_dir=\BERT\bert_output\评估测试结果测试结果位于文件test_results.tsv的输出目录中,您可以将其与测试标签进行比较并评估我们的多类文本分类的性能
阅读和解释结果每个文本的结果在test_results.tsv文件中都有一行,并带有五个标记类中每个类别的概率。
我们需要找到可能性最高的课程,这将是Yelp审查的感想导入带有打开(\ BERT \ bert_outout \ test_results.tsv)的csv label_results = [] import csv label_results=[] pd.DataFrame()
withopen(\BERT\bert_outout\test_results.tsv) asfile: rd = csv.reader(file, delimiter="\t") for
rowin rd: data_1=[float(i) for i inrow] label_results.append(data_1.index(max(data_1))) df_results=pd.DataFrame() df_results=pd.DataFrame(label_results)
现在我们生成情感范围从0到4的混淆矩阵fromsklearn.metricsimportconfusion_matrixconfusion_matrix(data_test[0], df_results
[0])混淆矩阵我曾在一个时期训练过BERT模型,您可以看到结果对于多类文本分类看起来不错from sklearn import metrics print("Accuracy",metrics.accuracy_score(data_test[
0], df_results[0])) print("F1-Score",metrics.f1_score(data_test[0], df_results[0],average=weighted))
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186

