模型训练与验证minicpm-v

minicpm-v 模型进行微调并进行验证

训练使用混合数据集进行训练,对minicpm-V进行lora微调,微调后使用llama3_1对输出结果与标签值进行比对,计算准确率。
验证代码为:

python 复制代码
# URL = https://swift.readthedocs.io/zh-cn/latest/LLM/VLLM%E6%8E%A8%E7%90%86%E5%8A%A0%E9%80%9F%E4%B8%8E%E9%83%A8%E7%BD%B2.html

'''
使用swift进行部署的示例
model: llama3_1-8b-instruct
CUDA_VISIBLE_DEVICES=2 swift deploy --max_model_len 4096 --model_type llama3_1-8b-instruct --model_id_or_path /nas/share/model/huggingface/models--meta-llama--Meta-Llama-3.1-8B-Instruct/snapshots/8c22764a7e3675c50d4c7c9a4edb474456022b16
'''

# 客户端
# example of using swift client

import os
import json
from tqdm import tqdm
from swift.llm import get_model_list_client, XRequestConfig, inference_client

model_list = get_model_list_client()
model_type = model_list.data[0].id


def get_data_jsonl(data_path):
    datas =[]
    with open(data_path, 'r') as f:
        data = f.readlines()
        
    for i in range(len(data)):
        datas.append(json.loads(data[i]))
        
    return datas

def save_data_jsonl(save_path:str, datas: list):
    with open(save_path, 'w') as f:
        for data in datas:
            json.dump(data, f,ensure_ascii=False)
            f.write('\n')
    return save_path


def get_save_path(data_path:str):
    save_path =os.path.splitext(data_path)[0] + '_llm_eval.jsonl'
    if not os.path.exists(os.path.dirname(save_path)):
        os.makedirs(os.path.dirname(save_path))
    return save_path
    
def get_result_correct_path(data_path:str):
    result_correct_path =os.path.splitext(data_path)[0] + '_llm_eval_correct.json'
    if not os.path.exists(os.path.dirname(result_correct_path)):
        os.makedirs(os.path.dirname(result_correct_path))
    return result_correct_path

def save_result_correct(data_path:str,precision:float):
    result =  {
        'data_path': data_path,
        'precision': precision
    }
    with open(data_path, 'w') as f:
        json.dump(result, f,ensure_ascii=False)
    print(f'precision: {precision*100}%')
    return result


def main():
    
    def q_tempalte(response, reply):
        question_template = '''你可以作为一个语言专家,判断一下两个回答是否相同吗 \n
                "response": "{}",
                "reply": "{}",
                ----
                如果是,返回"YES",否则返回"NO"。
                '''.format(response, reply)
        return question_template

    # origin
    data_paths = 
    
    for data_path in tqdm(data_paths):
        datas = get_data_jsonl(data_path)

        save_data =[]
        total_correct = 0
        total = 0
        for data in tqdm(datas):
            
            response = data['response']
            reply = data['reply']
            
            question = q_tempalte(response, reply)
            
            request_config = XRequestConfig(max_tokens=32, temperature=0.1, seed=42)    
            resp = inference_client(model_type, question, request_config=request_config)
            response = resp.choices[0].message.content
            data['llm_response'] = response
            save_data.append(data)
            
            if response.lower() == 'yes':
                total_correct += 1
                
            total += 1
            
            precision = total_correct / total    

        # 保存数据
        save_path = get_save_path(data_path)
        save_data_jsonl(save_path, save_data)
        
        # 保存精度
        result_correct_path = get_result_correct_path(data_path)
        save_result_correct(result_correct_path, precision)
if __name__ == '__main__':
    main()
相关推荐
微学AI9 分钟前
融合注意力机制和BiGRU的电力领域发电量预测项目研究,并给出相关代码
人工智能·深度学习·自然语言处理·注意力机制·bigru
知来者逆21 分钟前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
一勺汤24 分钟前
YOLOv11改进-双Backbone架构:利用双backbone提高yolo11目标检测的精度
人工智能·yolo·双backbone·double backbone·yolo11 backbone·yolo 双backbone
武汉唯众智创26 分钟前
高职人工智能技术应用专业(计算机视觉方向)实训室解决方案
人工智能·计算机视觉·人工智能实训室·计算机视觉实训室·人工智能计算机视觉实训室
Johny_Zhao37 分钟前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
一只可爱的小猴子1 小时前
2022李宏毅老师机器学习课程笔记
人工智能·笔记·机器学习
地瓜机器人1 小时前
乐聚机器人与地瓜机器人达成战略合作,联合发布Aelos Embodied具身智能
人工智能·机器人
带娃的IT创业者1 小时前
《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现
数据库·人工智能
__Benco1 小时前
OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明
人工智能·harmonyos
小杨4041 小时前
python入门系列二十(peewee)
人工智能·python·pycharm