qwen模型用soft prompt实现文本分类

之前写过p tuning,用的是官方文档中的模型和任务。现在用qwen中文模型和中文文本分类任务。代码已上传。

数据集介绍

魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。icon-default.png?t=O83Ahttps://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版本。

魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。icon-default.png?t=O83Ahttps://www.modelscope.cn/models/Qwen/Qwen2.5-1.5B-Instruct

预准备

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值