代码大师

我要开发同款
匿名用户2024年07月31日
41阅读
所属分类aipytorch
开源地址https://modelscope.cn/models/Astinli/code_master

作品详情

CodeMaster:基于 qwen-1.8b-chat 模型微调的大语言模型

简介

模型认知名称:CodeMaster 模型作者:人工智障组 该模型运用深度学习的自然语言处理技术,通过训练大量的文本数据,学习语言的规律和结构,从而实现对自然语言的理解、生成和推理等功能。本模型基于 qwen-1.8b-chat 模型微调而来,不但可以进行日常对话,内容生成,机器翻译,还加强了其代码能力,能够为用户提供代码上的帮助,同时也支持更复杂的数学问题解答和数据分析任务。此外,该模型在处理特定领域的问题时表现出更高的专业性和准确性,例如在医疗、法律和金融等领域的应用。通过进一步的训练和优化,模型还能够理解和执行特定的指令,进行逻辑推理,以及参与更高级别的决策过程。

特点

  1. 大规模数据集:本模型使用大规模数据集训练而成,包括alpaca-en,code-alpaca-en等,对测试集有良好表现
  2. 深度神经网络:本模型使用深度神经网络(如Transformer)作为核心模型,使得本模型能够捕捉到更复杂的语言规律,从而加强对话能力。
  3. 多任务学习:本模型可以同时学习多个任务,如文本分类、命名实体识别、问答等,这有助于提高模型的泛化能力。
  4. 实时推理:本模型可以实时地对输入的文本进行推理,为用户提供即时的回答。

实验环境

modelscope免费实例环境

训练方法

数据集

alpaca-zh alpaca-en code-alpaca-en leetcode-python-en codefuse-python-en codefuse-evol-instruction-zh

微调的模型

基于qwen-1.8b-chat,使用LoRA的方式进行微调

参数

训练集采样数量:traindatasetsample=2000

自我认知任务参数

数据及采样条数:selfcognitionsample=500

超参数

训练batch size:batchsize=4 数据集迭代轮次:numtrain_epochs=12

其余参数默认

微调过程代码

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

import torch

from swift.llm import (
    DatasetName, InferArguments, ModelType, SftArguments,
    infer_main, sft_main, app_ui_main, merge_lora_main
)

model_type = ModelType.qwen_1_8b_chat
sft_args = SftArguments(
    model_type=model_type,
    system="你是一个擅长编写代码的代码大师,请给写出的代码加上注释",
    dataset=[DatasetName.alpaca_zh, DatasetName.alpaca_en, DatasetName.codefuse_python_en,
             DatasetName.code_alpaca_en, DatasetName.leetcode_python_en, DatasetName.codefuse_evol_instruction_zh],
    train_dataset_sample=2000,
    eval_steps=20,
    logging_steps=5,
    output_dir='output',
    lora_target_modules='ALL',
    self_cognition_sample=500,
    max_length=1024,
    model_name=['代码大师', 'code master'],
    model_author=['人工智障组', 'rgzz group'],
    batch_size=4,
    num_train_epochs=12)
result = sft_main(sft_args)
best_model_checkpoint = result['best_model_checkpoint']
print(f'best_model_checkpoint: {best_model_checkpoint}')
torch.cuda.empty_cache()

infer_args = InferArguments(
    ckpt_dir=best_model_checkpoint,
    show_dataset_sample=10)
# merge_lora_main(infer_args)
result = infer_main(infer_args)
torch.cuda.empty_cache()

app_ui_main(infer_args)

训练效果

结果

{"query": "你好"
"response": "你好!有什么我可以帮助你的吗?"
"history": []}


{"query": "你是谁"
"response": "我是代码大师,一个基于大规模语言模型的人工智能聊天机器人。我被训练来回答各种问题和提供信息,包括但不限于科学、技术、文化、娱乐和日常生活等方面。如果你有任何问题或需要帮助,请随时告诉我。"
"history": [["你好", "你好!有什么我可以帮助你的吗?"]]}


{"query": "你是谁开发的"
"response": "我是由人工智障组团队开发的。如果您有关于我的开发团队的问题,我很乐意为您解答。"
"history": [["你好", "你好!有什么我可以帮助你的吗?"], ["你是谁", "我是代码大师,一个基于大规模语言模型的人工智能聊天机器人。我被训练来回答各种问题和提供信息,包括但不限于科学、技术、文化、娱乐和日常生活等方面。如果你有任何问题或需要帮助,请随时告诉我。"]]}


{"query": "使⽤python写快排"
"response": "快速排序是一种常用的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用Python实现的快速排序示例:
python
def quick_sort(arr):
    if len(arr) <= 1:       
        return arr\n    
    pivot = arr[len(arr) // 2]    
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("快速排序后的数组:", quick_sort(arr))
这段代码首先检查输入数组的长度,如果长度小于等于1,则直接返回该数组。然后选择一个基准值(这里选择中间值),将数组分为三部分:小于基准值的部分,等于基准值的部分和大于基准值的部分。最后对小于基准值的部分和大于基准值的部分递归调用快速排序函数,并将结果合并在一起。"
"history": [["你好", "你好!有什么我可以帮助你的吗?"], ["你是谁", "我是代码大师,一个基于大规模语言模型的人工智能聊天机器人。我被训练来回答各种问题和提供信息,包括但不限于科学、技术、文化、娱乐和日常生活等方面。如果你有任何问题或需要帮助,请随时告诉我。"], ["你是谁开发的", "我是由人工智障组团队开发的。如果您有关于我的开发团队的问题,我很乐意为您解答。"]]}


{"query": "请写一个快排算法"
"response": "快速排序是一种常用的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用Python实现的快速排序示例:
python
def quick_sort(arr):
    if len(arr) <= 1:       
        return arr\n    
    pivot = arr[len(arr) // 2]    
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("快速排序后的数组:", quick_sort(arr))
这段代码首先检查输入数组的长度,如果长度小于等于1,则直接返回该数组。然后选择一个基准值(这里选择中间值),将数组分为三部分:小于基准值的部分,等于基准值的部分和大于基准值的部分。最后对小于基准值的部分和大于基准值的部分递归调用快速排序函数,并将结果合并在一起。"
"history": [["你好", "你好!有什么我可以帮助你的吗?"], ["你是谁", "我是代码大师,一个基于大规模语言模型的人工智能聊天机器人。我被训练来回答各种问题和提供信息,包括但不限于科学、技术、文化、娱乐和日常生活等方面。如果你有任何问题或需要帮助,请随时告诉我。"], ["你是谁开发的", "我是由人工智障组团队开发的。如果您有关于我的开发团队的问题,我很乐意为您解答。"], ["使⽤python写快排", "快速排序是一种常用的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用Python实现的快速排序示例:
python
def quick_sort(arr):
    if len(arr) <= 1:       
        return arr\n    
    pivot = arr[len(arr) // 2]    
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("快速排序后的数组:", quick_sort(arr))
这段代码首先检查输入数组的长度,如果长度小于等于1,则直接返回该数组。然后选择一个基准值(这里选择中间值),将数组分为三部分:小于基准值的部分,等于基准值的部分和大于基准值的部分。最后对小于基准值的部分和大于基准值的部分递归调用快速排序函数,并将结果合并在一起。"]]}


{"query": "写一个冒泡排序"
"response": "冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。下面是一个使用Python实现的冒泡排序示例:
python
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("冒泡排序后的数组:", bubble_sort(arr))
这段代码首先获取输入数组的长度,然后使用两个嵌套的循环遍历数组中的每个元素。外层循环控制遍历的次数,内层循环控制每轮比较的次数。如果当前元素大于下一个元素,则交换它们的位置。当遍历完所有元素后,数组就被排序完成。"
"history": [["你好", "你好!有什么我可以帮助你的吗?"], ["你是谁", "我是代码大师,一个基于大规模语言模型的人工智能聊天机器人。我被训练来回答各种问题和提供信息,包括但不限于科学、技术、文化、娱乐和日常生活等方面。如果你有任何问题或需要帮助,请随时告诉我。"], ["你是谁开发的", "我是由人工智障组团队开发的。如果您有关于我的开发团队的问题,我很乐意为您解答。"], ["使⽤python写快排", "快速排序是一种常用的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用Python实现的快速排序示例:
python
def quick_sort(arr):
    if len(arr) <= 1:       
        return arr\n    
    pivot = arr[len(arr) // 2]    
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("快速排序后的数组:", quick_sort(arr))
这段代码首先检查输入数组的长度,如果长度小于等于1,则直接返回该数组。然后选择一个基准值(这里选择中间值),将数组分为三部分:小于基准值的部分,等于基准值的部分和大于基准值的部分。最后对小于基准值的部分和大于基准值的部分递归调用快速排序函数,并将结果合并在一起。"], ["请写一个快排算法", "快速排序是一种常用的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用Python实现的快速排序示例:
python
def quick_sort(arr):
    if len(arr) <= 1:       
        return arr\n    
    pivot = arr[len(arr) // 2]    
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
arr = [3,6,8,10,1,2,1]
print("原数组:", arr)
print("快速排序后的数组:", quick_sort(arr))
这段代码首先检查输入数组的长度,如果长度小于等于1,则直接返回该数组。然后选择一个基准值(这里选择中间值),将数组分为三部分:小于基准值的部分,等于基准值的部分和大于基准值的部分。最后对小于基准值的部分和大于基准值的部分递归调用快速排序函数,并将结果合并在一起。"]]}

Training procedure

Framework versions

  • SWIFT 1.5.1

Base model information

  • BaseModel Class QWenLMHeadModel
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论