合肥 中网站,外包公司哪家好,天津网站建设培训学校,肥料网站建设 中企动力参考书籍《HuggingFace自然语言处理详解 》
什么是文本挖掘 文本挖掘#xff08;Text mining#xff09;有时也被称为文字探勘、文本数据挖掘等#xff0c;大致相当于文字分析#xff0c;一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生Text mining有时也被称为文字探勘、文本数据挖掘等大致相当于文字分析一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生如模式识别。文本挖掘通常涉及输入文本的处理过程通常进行分析同时加上一些派生语言特征以及消除杂音随后插入到数据库中 产生结构化数据并最终评价和解释输出。典型的文本挖掘方法包括文本分类文本聚类概念/实体挖掘生产精确分类观点分析文档摘要和实体关系模型 。^[1]^
自然语言处理的基本流程
准备数据集 数据集是进行NLP研究的基础包含了大量文本数据和标注信息。数据集的质量和多样性对NLP的模型性能有着重要影响。本次作业主要是对预训练的语言模型进行微调准备训练数据集是为了让模型能够学习到文本数据的特征和规律以更好的理解和处理自然语言。
图 1 基本开发流程
编码器
本次作业选择的模型是 hfl/rbt3所以使用匹配的 rbt3编码工具。
编码器主要作用是将语料库中的文本数据转化为计算机可读的编码格式。编码器可对文本数据进行清洗、预处理、分词、标注等操作提取文本中关键信息。
数据集
数据集经过不断试错从 wikipedia, bookcorpus, billsum等等中最终确定选择为chn_senti_corp。
数据集经过编码器处理后转化成了计算机可处理的数据形式此时可以对数据集进行后续的数据处理如缩小训练数据的规模、处理超过512个词长度的数据等等。
定义模型
预训练模型选择 hfl/rbt3此模型是 HFL 实验室分享至HG模型。
超参数是指模型训练过程中需要预先设定的参数参数的设定需要一定的实验经验本次超参数设置主要参考《HuggingFace自然语言处理详解》。
训练及评估
在模型训练过程中为了方便观察模型新能变化需要定义一个评价函数。在情感分析任务中正确率指标是重点。
微调hfl/rbt3模型的代码实现
# -*- coding:GB2312 -*-
# %%
from transformers import AutoTokenizer,TrainingArguments,Trainer,
from transformers.data.data_collator import DataCollatorWithPadding
from transformers import AutoModelForSequenceClassification
from datasets import load_from_disk, Dataset, load_metric
import numpy as np
import torch
# %%
tokenizer AutoTokenizer.from_pretrained(hfl/rbt3)
tokenizer.batch_encode_plus(
[一曲青溪一曲山, 鸟飞鱼跃白云间],
truncationTrue,
)
# %%
# 加载数据集
dataset_train Dataset.from_file(./data/chn_senti_corp/chn_senti_corp-train.arrow)
dataset_test Dataset.from_file(./data/chn_senti_corp/chn_senti_corp-test.arrow)
dataset_valid Dataset.from_file(./data/chn_senti_corp/chn_senti_corp-validation.arrow)
# %%
# 缩小数据规模便于测试
dataset_train dataset_train.shuffle().select(range(3000))
dataset_test dataset_test.shuffle().select(range(200))
# %%
#编码
def f(data):return tokenizer.batch_encode_plus(data[text],truncationTrue)
dataset_traindataset_train.map(f,
batchedTrue,
batch_size100,
# num_proc4,
remove_columns[text])
# %%
dataset_testdataset_test.map(f,
batchedTrue,
batch_size100,
remove_columns[text])
# %%
def filter_func(data):return [len(i)512 for i in data[input_ids]]
dataset_traindataset_train.filter(filter_func, batchedTrue, batch_size100)
dataset_testdataset_test.filter(filter_func, batchedTrue, batch_size100)
# %%
modelAutoModelForSequenceClassification.from_pretrained(hfl/rbt3,num_labels2)
# %%
#加载评价指标
metric load_metric(accuracy)
#定义评价函数
from transformers.trainer_utils import EvalPrediction
def compute_metrics(eval_pred):logits, labels eval_predlogits logits.argmax(axis1)return metric.compute(predictionslogits, referenceslabels)
# %%
#定义训练参数
args TrainingArguments(output_dir./output_dir/third/,evaluation_strategysteps,eval_steps30,save_strategysteps,save_steps30,num_train_epochs2,learning_rate1e-4,#定义学习率weight_decay1e-2,per_device_eval_batch_size16,per_device_train_batch_size16,no_cudaFalse,
)
# %%
#定义训练器
trainer Trainer(
modelmodel,
argsargs,
train_datasetdataset_train,
eval_datasetdataset_test,
compute_metricscompute_metrics,
data_collatorDataCollatorWithPadding(tokenizer),
)
#评价模型
trainer.evaluate()
trainer.train()
trainer.evaluate()
结果展示
从训练前后的评价函数结果可以明显的看到微调训练的结果见下表。
表 1 训练前后评价结果
模型eval_losseval_accuracyeval_runtimeepochbefore0.6980.52222.22-after0.2390.92351.682
训练过程中损失函数与正确率的变化可见下图。
图 2 loss图 3 accuracy
结语 学习初期走过不少弯路有尝试自己挖掘文本和数据计划整个大工程实际操作时却遇到种种难题网站防爬、检索数据不符合规范、不同网站私有定义太多等等。缺乏相关经验导致的结果是动手时在作业初期就遇到太多问题作业进度缓慢信心与耐心也逐渐下降。
在准备数据集时也走过一些误区。以下说几个遇到的问题一是准备的数据集没有标注且与模型不匹配导致模型训练时配置出错无法执行训练。二是数据集过大执行操作时对笔记本的负担很大硬盘和存在在训练几小时后直接爆满导致训练失败。其他种种所以准备一个合适的数据集是重中之重。
实际动手做一个新接触的作业不能眼高手低或投机取巧让ChatGPT完成整个项目还是需要找到一份合适的指导资料静下心熟悉每一个操作。感谢老师及同学们的帮助《HuggingFace自然语言处理详解》让我真正入门了NLP。
参考文献:
1 维基百科编者.文本挖掘[G/OL].维基百科,2019(2019-5-9) [2023-12-15]. https://zh.wikipedia.org/wiki/文本挖掘.