之前写过p tuning,用的是官方文档中的模型和任务。现在用qwen中文模型和中文文本分类任务。代码已上传。
数据集介绍
魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/datasets/wowhaha/moral-foundation-news_2000我用的数据是魔塔上的“新闻文本+道德判断”数据集,包含基于道德基础分类的新闻文章,适用于中文的多标签文本分类任务。每篇新闻文章根据其道德倾向进行标注,分为实用(Pragmatism)/ 理想(Idealism)”、“责任(Responsibility)/ 利益(Profit)”、“创新(Innovation)/ 守旧(Conservatism)三个标签。
这是数据形式。system是系统给的instruction(所有数据的instruction都是一样的),query是要分类的文本,response是分类标签。
{'query': '部署集中式可持续智能平台,以促进和简化PETRONAS供应链脱碳的努力。',
'response': '责任/利益',
'system': '你是一位道德判断模型。根据给出的有关环境报道的新闻文本,请判断其倾向于以下哪一个维度:责任/利益、实用/理想、创新/守旧、非道德。你的回答必须只包含其中的一个维度。'}
模型是qwen2.5 1.5b版本。
预准备
import os
import torch
from pprint import pprint
from datasets import load_dataset
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import Trainer, TrainingArguments, DataCollatorWithPadding, DataCollatorForLanguageModeling, DataCollatorForSeq2Seq, default_data_collator
from peft import AutoPeftModelForCausalLM, get_peft_model, PromptTuningInit, PromptEncoderConfig, PromptTuningConfig, TaskType
os.environ['CUDA_VISIBLE_DEVICES'] = '7'
model_name_or_path = "../../DataCollection/officials/Qwen2.5-1.5b-Instruct"
tokenizer_name_or_path = model_name_or_path
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
base_model = AutoModelForCausalLM.from_pretrained(model_name_or_path)
def inference_single(model, tokenizer, text, device=None):
if not device:
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)
inputs = tokenizer(text, return_tensors='pt')
outputs = model.generate(
input_ids=inputs["input_ids"].to(device),
attention_mask=inputs["attention_mask"].to(device),
max_new_tokens=20,
eos_token_id=tokenizer.pad_token_id
)
decoded_output = tokenizer.decode(outputs.cpu().numpy()[0])
return decoded_outp