当前位置: 首页 > news >正文

政务公开与网站建设工作总结存在问题和困难长沙 网站优化

政务公开与网站建设工作总结存在问题和困难,长沙 网站优化,网络整合营销推广,网站设计网站优化公司系列文章目录 使用transformers中的pipeline调用huggingface中模型过程中可能遇到的问题和修改建议 [万字解析]从零开始使用transformers微调huggingface格式的中文Bert模型的过程以及可能出现的问题 文章目录 系列文章目录前言模型与数据集下载模型下载数据集下载 数据加载、…系列文章目录 使用transformers中的pipeline调用huggingface中模型过程中可能遇到的问题和修改建议 [万字解析]从零开始使用transformers微调huggingface格式的中文Bert模型的过程以及可能出现的问题 文章目录 系列文章目录前言模型与数据集下载模型下载数据集下载 数据加载、划分与保存数据加载数据集可能造成的问题数据集划分数据集保存和加载 数据处理编码按文本长度筛选 模型训练与评估模型加载加载评价指标定义评价函数定义训练参数定义训练器模型评估与训练 模型保存与加载模型预测 前言 在使用huggingface的模型时很多情况下已有的模型并不能完全满足实际的需求这种情况下模型微调是常见的解决方式在本篇文章中将使用transformers针对huggingface格式的中文Bert分类模型为例介绍微调的过程以及解决在微调过程中可能存在的一些问题。 模型与数据集下载 首要步骤是找到合适的模型及数据集模型和数据集都可以直接在huggingface或者huggingface的镜像上直接搜索 huggingface链接地址https://huggingface.co 镜像链接地址https://hf-mirror.com 模型下载 首先在huggingface或镜像主页选择Models然后输入chinese bert可以查询到很多适用于中文的bert模型在本篇中选择第一个google-bert作为示例。 也可以直接访问https://huggingface.co/google-bert/bert-base-chinese或https://hf-mirror.com/google-bert/bert-base-chinese 点击进入后查看Model card可以查看chinese-bert的介绍与之前文章中提到的过程相似需要下载Files and versions中所有的文件。 下载完成后将所有内容放在同一个文件夹中笔者的路径是/huggingface_model/google-bert/bert-base-chinese可做参考。 数据集下载 在本篇中以中文评价数据集为例同理在主页上选择Datasets然后输入ChnSentiCorp或者直接访问https://hf-mirror.com/datasets/XiangPan/ChnSentiCorp_htl_8k随便选一个即可为了防止出现额外的问题请尽量与本篇保持一致。 打开之后可以看到这个数据集是关于酒店的评价并且数据是不均衡的数据不均衡的问题在本篇中按下不表本篇的重点在于跑通整个过程读者可以自行查看解决数据不均衡的问题。 选择Files and versions下载数据集在本篇中只需要下载ChnSentiCorp_htl_8k.csv文件即可笔者下载到的路径为./datas/ChnSentiCorp_htl_8k/ChnSentiCorp_htl_8k.csv可以作为参考。 数据加载、划分与保存 数据加载 本篇中使用datasets中的load_dataset加载数据在进行下一步操作前可以先观察一下数据。 数据加载代码 from datasets import load_datasetdataset load_dataset(csv, data_files./datas/ChnSentiCorp_htl_8k/ChnSentiCorp_htl_8k.csv) print(dataset)运行结果 DatasetDict({train: Dataset({features: [label, review],num_rows: 7765}) })从展示效果上可以看到这是一个嵌套两层的字典根据关键字进一步观察数据。 print(dataset[train][label][:2], dataset[train][review][:2])运行结果 [1, 1] [距离川沙公路较近,但是公交指示不对,如果是蔡陆线的话,会非常麻烦.建议用别的路线.房间较为简单., 商务大床房房间很大床有2M宽整体感觉经济实惠不错!]由此可见在本数据集中1表示的是好评0表示的是差评。 数据集可能造成的问题 在本数据集中6376行中的数据为空如果不加处理直接使用可能会引起报错一般来讲拿到数据集后要检查数据集并需要批量的处理掉空数据在本篇中用到的数据集只有这一条空数据可以直接在csv文件中删除后保存后重新读取数据即可。 数据集划分 从csv文件的内容来看数据没有打乱所以首先需要打乱并显示打乱结果。 dataset[train] dataset[train].shuffle() print(dataset[train][label][:5]) print(dataset[train][review][:5])运行结果 [1, 1, 0, 0, 0] [酒店地理位置还不错离外滩、步行街都满近的。我住的是单间不靠马路以为会比较安静哪知窗子外面是酒店内部的一个铁制楼梯夜晚常有人走过咣当直响还有边走边唱歌的受不了。除了前台小姐面无表情其它都还行。, 定了高级湖景房前台给了最高的23层。房间非常舒服而且早餐也很丰盛。只是看出去的白鹭洲公园景色一般。可能住标准客房更实惠些。, 后悔看了评价。上面老兄的要求也够低的。1隔音太差2早餐太差3卫生间太小4房间装修太差总的来说就是一经济性酒店。, 总台服务员从我来到走,一直没笑过,很酷!宽带慢的让我想起猫的时代!中央空调的声音轰隆隆,热闹!要总台安排第2天一早车去机场,满口答应,退房时没人和我落实,我看着酷酷的成都MM,没问,还是自己拉着箱子走到100米外的路口打车!, 很不怎么样的酒店根本不象三星级。1、大堂受理很慢且服务员连你好都不会说2、房间我订的是大床房间电视机很旧卫生间里洗澡的地方是用玻璃隔起来的空间很狭小而且热水放出来的里面全是棕红色的铁锈洗澡时水温忽冷忽热比较变态的是房间里没有预备网线你得打电话要而且电源插座很不合理如果要插笔记本电源需要把电视柜往前搬至少50厘米否则你是找不到插孔的3、订餐按照《服务指南》我打了8003提示无此号码于是拨打8006查询告知我打8033打过去以后又让我打8031订个餐有这么麻烦吗好不容易打通了要了红烧草鱼、清炒土豆丝和紫菜汤结果巨难吃还不如外边随便一个小餐馆做的好吃反而花了70多元根本不是三星级酒店厨师做的让人愤慨紫菜汤的颜色就像是刷锅水紫菜也是大片大片的3、服务打电话要了网线过了很久难道绿洲饭店很大吗要走那么久绿洲饭店我已经住过好几次了这次是最差劲的给各位推荐立达宾馆性价比很好服务也特别好而且做的菜很有家常口味吃起来很可口虽然远了一点但是打车到市中心也不过7元钱而已。唯一不足的就是没有宽带连接。补充点评2007年8月16日还有一点最让人无法忍受隔音太差了我的房间隔壁住了个醉汉那个呻吟声和鼾声简直就像在同一个房间一样而且看电视的声音和说话的声音都很清晰]在打乱的基础上根据数据集的长度按比例划分训练集和测试集。 length len(dataset[train]) train_len int(length * 0.8) test_len int(length * 0.2) train_dataset dataset[train].select(range(train_len)) test_dataset dataset[train].select(range(train_len, length))数据集保存和加载 根据划分好的训练数据和测试数据重新构建数据将训练数据和测试数据使用datasets.DatasetDict构建成新的数据集。 from datasets import DatasetDictdataset_dict DatasetDict({ train: train_dataset, test: test_dataset }) print(dataset_dict)运行结果 DatasetDict({train: Dataset({features: [label, review],num_rows: 6212})test: Dataset({features: [label, review],num_rows: 1553}) })使用save_to_disk将处理过的数据保存 dataset_dict.save_to_disk(ChnSentiCorp)保存好的数据在ChnSentiCorp文件夹中的本地结构如下 使用load_from_disk可以加载保存好的数据 from datasets import load_from_diskdataset load_from_disk(ChnSentiCorp) print(dataset)运行结果 DatasetDict({train: Dataset({features: [label, review],num_rows: 6212})test: Dataset({features: [label, review],num_rows: 1553}) })数据处理 在DatasetDict对象中可以采用map来批量的处理数据采用filter来批量的筛选数据。 编码 不同模型间的编码方式可以也不同所以编码的过程需要用到下载好的模型在transformers中提供了一个自动获取Tokenizer的函数AutoTokenizer。在上文中观察到关键字review是数据中文本部分所以需要对review字段进行编码。 其中truncationTrue指定如果输入的文本长度超过了模型处理的最大长度这个长度通常在tokenizer初始化时设置则文本将被截断以适应这个长度。这对于保持批处理的一致性非常重要因为模型通常要求所有输入具有相同的长度。 在使用map处理数据时最好使用批处理设置参数batchedTrue通过设置batch_size来调整每批的大小num_proc来设置运行的进程读者可以根据设备内存适当调整。 def f(data):from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained(../huggingface_model/google-bert/bert-base-chinese)return tokenizer.batch_encode_plus(data[review], truncationTrue)dataset dataset.map(f, batchedTrue, batch_size1000, num_proc4, remove_columns[review]) print(dataset)运行结果 DatasetDict({train: Dataset({features: [label, input_ids, token_type_ids, attention_mask],num_rows: 6212})test: Dataset({features: [label, input_ids, token_type_ids, attention_mask],num_rows: 1553}) })按文本长度筛选 通常情况下序列长度越长获取到的信息也就越多但是随着序列长度的增加运算代价也在增加但对于本任务中仅需要部分文本信息就可以得出对于旅店的好评或者差评并且数据量足够大所以在此可以选择筛选掉超过一定长度的文本这相当于直接舍弃了超过整个长度的数据但是在数据量不足的情况下一般会选择截断或者将一整段话拆成几段。 def f(data):return [len(i)512 for i in data[input_ids]]datasetdataset.filter(f, batchedTrue, batch_size1000, num_proc4) print(dataset)运行结果 DatasetDict({train: Dataset({features: [label, input_ids, token_type_ids, attention_mask],num_rows: 6054})test: Dataset({features: [label, input_ids, token_type_ids, attention_mask],num_rows: 1508}) })从filter后的效果可以看出整个过程就是按照条件筛选出符合条件的数据不符合条件的数据会被直接删掉。 模型训练与评估 模型加载 from transformers import AutoModelForSequenceClassification import torchmodelAutoModelForSequenceClassification.from_pretrained(../huggingface_model/google-bert/bert-base-chinese, num_labels2) #统计模型参数量 print(sum([i.nelement() for i in model.parameters()]))运行结果 102269186加载评价指标 如果能够很顺利的访问github直接使用以下代码会自动下载用于评价精度的accuracy.py等待下载成功后即可正常运行。 from datasets import load_metric metric load_metric(accuracy)但是如果不能正常访问github或是有在断网情况下使用的应用场景就会有如下报错。 出现报错后将报错中的链接复制到浏览器 这个文件就是所需的accuracy.py下载后记录下所在地址笔者的地址是/metrics/accuracy。然后使用下述代码即可执行。特别注意trust_remote_codeTrue这一参数的设置这是因为直接加载一个.py文件会存在安全风险在直接加载.py文件时将会直接不设防的执行其中的代码所以一般情况下这一行为将会被阻止。所以需要额外的设置这一参数需要注意的是这一参数设置为True时需要确保.py文件足够被信任。 from datasets import load_metric metric load_metric(./metrics/accuracy, trust_remote_codeTrue)定义评价函数 在评价函数中eval_pred包含预测结果概率格式和实际标签所以运算过程就是先根据预测结果的概率获取预测的标签再对比预测标签和实际标签获取的模型的精度。 import numpy as np from transformers.trainer_utils import EvalPrediction def compute_metrics(eval_pred):logits, labels eval_predlogits logits.argmax(axis1)return metric.compute(predictionslogits, referenceslabels)定义训练参数 参数的定义比较简单对照的注释很好理解。 from transformers import TrainingArgumentsargs TrainingArguments(output_dir./output_dir, #定义临时数据保存路径evaluation_strategysteps, #定义测试执行的策略可取值为no、epoch、steps eval_steps50, #定义每隔多少个step执行一次测试 save_strategysteps, #定义模型保存策略可取值为no、epoch、steps save_steps50, #定义每隔多少个step保存一次num_train_epochs1, #定义共训练几个轮次learning_rate1e-4, #定义学习率logging_dir./logs, # 日志文件夹 logging_steps50, weight_decay1e-2, #加入参数权重衰减防止过拟合per_device_eval_batch_size32, #定义测试和训练时的批次大小per_device_train_batch_size32, )定义训练器 训练器的定义只是把前面设置的参数直接传入容易出问题的是有可能会因为各种包版本不匹配导致评估过程trainer.evaluate和训练过程(trainer.train)出现一些奇怪的报错。 from transformers import Trainer from transformers.data.data_collator import DataCollatorWithPadding from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained(../huggingface_model/google-bert/bert-base-chinese)trainer Trainer(modelmodel,argsargs,train_datasetdataset[train],eval_datasetdataset[test],compute_metricscompute_metrics,data_collatorDataCollatorWithPadding(tokenizer), )可能出现的报错为 实际上这个完全是因为版本没有对应上可以通过更新包来实现 pip install --upgrade accelerate pip install --upgrade transformers pip install --upgrade torch torchvision torchaudio如果仍然没有解决可以参考笔者包的版本组合。 包名版本accelerate0.34.2torch2.3.1cu121torchaudio2.3.1cu121torchvision0.18.1cu121transformers4.45.1 模型评估与训练 在训练之前先观察一下如果不进行训练直接使用模型会有怎样的效果 模型评估 trainer.evaluate()运行结果 {eval_loss: 0.888075590133667,eval_model_preparation_time: 0.0,eval_accuracy: 0.3103448275862069,eval_runtime: 21.5519,eval_samples_per_second: 69.971,eval_steps_per_second: 2.227}从运行结果上来看精度还没有到50%比随机分的效果还要差一点。所以训练是有必要的有些情况下比如可以找到类似任务的模型的情况下如果在自己的数据集上能有较好的效果就可以不进行训练而直接使用 模型训练 trainer.train()运行结果 由于我们设置了每隔50个step保存一次并且保存路径为./output_dir所以每次的检查点将保存至这个文件夹中。 训练结束后再进行评估 trainer.evaluate()运行结果 {eval_loss: 0.48144271969795227,eval_model_preparation_time: 0.0,eval_accuracy: 0.7360742705570292,eval_runtime: 153.5957,eval_samples_per_second: 9.818,eval_steps_per_second: 0.313,epoch: 1.0}可以看到在训练后精度得到了显著提高虽然仍然不算特别高但由于我们只训练了一轮这样的结果已经足够令人满意了如果想得到更高的精度需要更多的训练轮数。 模型保存与加载 模型的保存直接调用save_model传入的参数是输出目录 模型保存 trainer.save_model(output_dir./output_dir/save_model)模型加载 在加载模型前要注意需要从原模型文件夹中将词表复制到保存的模型的文件夹中即把../huggingface_model/google-bert/bert-base-chinese目录下的vocab.txt复制到./output_dir/save_model 复制后./output_dir/save_model路径下应该存在以下四个文件 模型加载 加载过程和加载原模型一致尤其要注意的是执行这一步是必须的 model.to(cuda)因为数据和模型必须在同一个设备上如果没有GPU可用可以去掉或者改为 model.to(cpu) model_name ./output_dir/save_modeltokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForSequenceClassification.from_pretrained(model_name, num_labels2)model.to(cuda)模型预测 model.eval()for i, data in enumerate(trainer.get_eval_dataloader()): out model(**data)out out[logits].argmax(dim1)for i in range(8):print(tokenizer.decode(data[input_ids][i], skip_special_tokens True))print(tokenizer.decode(data[input_ids][i], skip_special_tokens False))print(label, data[labels][i].item())print(predict, out[i].item())break运行结果
http://www.w-s-a.com/news/828111/

相关文章:

  • 做网站服务器有哪些电子商务网站建立
  • 网站开发的具体流程原材料价格查询网站
  • 深圳响应式网站建设深圳网站建设定制开发 超凡科技
  • 网站建设报价怎么差别那么大wordpress产品属性搭配
  • 高校网站建设情况报告范文pc建站网站
  • 做网站美工要学什么广东省建设厅网站首页
  • 深圳网站设计十年乐云seo网站建设 竞赛 方案
  • 新乡移动网站建设wordpress输出某一分类的文章
  • 花店网站开发设计的项目结构重庆网站建设培训班
  • 做网站的技术体系投资者互动平台官网
  • 北京网站建设公司哪家实惠企查查在线查询入口
  • 毕业设计做网站怎么样非微信官方网页自己做的网站
  • 昆明网站多端小程序设计重庆市住房和城乡建设厅网站
  • 网站制作技术人员国际新闻最新10条
  • 做同城特价的网站wordpress后台能修改模板文件
  • 网站信息可以边建设边组织产品展示网站源码php
  • 电子商务网站规划从哪些方面入手途牛企业网站建设方案
  • 莱阳网站定制易语言可以做网站嘛
  • 购物网站开发意义上海中小企业服务中心官网
  • 网站备案证书如何打开江苏网站建设电话
  • 深圳网站建设乐云seo搜索引擎优化seo目的
  • 中山城市建设集团网站网站建设设计基础
  • 网站开发流程莆田wordpress点播收费
  • 网站未及时续费浙江台州做网站的公司有哪些
  • 二级域名做网站好不好河源建网站
  • 公司网站的作用意义维护建设管理天津平台网站建设费用
  • 建设部网站如何下载国标规范上海影视公司
  • 企业官方网站地址通了网站建设
  • 专题网站可以做什么怎么做网站滑动图片部分h5
  • 什么是网站建设外包html 门户网站