LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)

news2024/11/23 13:12:44

在这里插入图片描述

前言

你好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,上一篇文章中,作者介绍了基于讯飞开放平台进行大模型微调的完整流程;而在本文中,作者将对大模型微调的数据准备部分进行深入;

简介

在上一篇文章中,作者详细介绍了如何利用讯飞开放平台进行大模型微调的完整流程。
本文将深入探讨微调过程中的数据准备阶段,重点阐述数据处理和微调理论,旨在帮助读者更深入地理解微调的本质,并鼓励大家基于此理论再次尝试微调模型,以优化模型的输出结果。

本文的核心内容包括:

  • 数据处理思路:分析比赛数据结构,探讨如何从原始数据中提取和清洗关键信息,构建高质量的微调数据集。
  • 微调数据分析:详细介绍微调数据的输入和输出部分,以及如何通过数据分析确保数据清理的高效性。
  • 数据处理方案:展示如何运用正则表达式、pandas库和LLM提取处理等方法,对数据进行清洗和处理,最终生成适用于微调的格式。

通过本文的学习,读者将能够掌握从数据准备到模型微调的全过程,为实际应用中的模型优化打下坚实的基础。


一、 数据处理思路

1.赛题分析

competition
根据比赛提供的数据可以看出,我们原始数据包含:
file
打开数据可以看到如下字段:
contruct
这说明我们的数据由以下部分构成:

  • 阅读文本(中、英)
  • 题目(中、英)
  • 答案(中、英)

我们需要对这个数据进行处理,构建一个微调数据集,内容分别是:

  • input 部分:经过数据清洗的阅读文本
  • target 部分:经过数据清洗的问答QA对

而为了制作高质量微调数据集,我们就需要对原始数据进行清洗;


2.微调数据分析

为了保证高效的清理数据,我们对数据内容进行分析:

①微调数据Input部分

微调数据的Input部分由两部分组成:

  • 阅读材料
  • 用户提示词Prompt

下图分别是中文的阅读材料和英文的阅读材料:
china-text-material
english-text-material

②微调数据Target部分

这里我们可以看做将阅读材料和用户提示词一起输入到LLM,则LLM会输出符合用户要求的内容,这里我们需要LLM输出标准格式的QA对,例如下面是一个官方输出的标准案例:

{
1. 以下哪个选项是“具身认知”的定义?
A. 认知在功能上的独立性、离身性构成了两种理论的基础。
B. 认知在很大程度上是依赖于身体的。
C. 认知的本质就是计算。
D. 认知和心智根本就不存在。

答案:B

2. 以下哪个实验支持了“具身认知”的假设?
A. 一个关于耳机舒适度的测试。
B. 一个关于眼睛疲劳程度的测试。
C. 一个关于人类感知能力的实验。
D. 一个关于人类记忆力的实验。

答案:A

3. 以下哪个选项是“离身认知”的教育观的特点?
A. 教育仅仅是心智能力的培养和训练,思维、记忆和学习等心智过程同身体无关。
B. 教育观认为身体仅仅是一个“容器”,是一个把心智带到课堂的“载体”。
C. 教育观认为知识经验的获得在很大程度上依赖于我们身体的体验性。
D. 教育观认为知识经验的获得在很大程度上依赖于我们大脑的记忆能力。

答案:A

4. 以下哪个选项是“具身认知”带来的教育理念和学习理念的变化?
A. 更强调全身心投入的主动体验式学习。
B. 更注重操作性的体验课堂,在教学过程中将学生的身体充分调动起来,这在教授抽象的概念知识时尤为重要。
C. 更强调教师的教学方法和学生的学习方法。
D. 更注重教师的教学技巧和学生的学习技巧。

答案:A

}
{
Which of the following is not a type of art form that Nick Smith uses in his pixelated collages?
A) Painting
B) Photography
C) Embroidery
D) Video art
Answer:C
What does the word "Psychology" in the title PSYCOLOURGY: January 2015 refer to in relation to Nick Smith's work?
A) The study of human behavior and mental processes
B) The concept of using colour to convey emotions and ideas
C) The use of pixelated images in his collages
D) A specific series of artworks from 2015
Answer:B
Which of the following is true about Nick Smith's career as an artist?
A) He has only worked in the fine arts category
B) His work is primarily focused on interior design
C) He has never used hand-made collages in his work
D) His first collage experiment was inspired by Marilyn Monroe
Answer:D
Which of the following can be inferred about the text employed in Nick Smith's work?
A) It is always narrative and sequential
B) It is often open to interpretation by the viewer
C) It is always written in a specific language or script
D) It is always placed under each swatch of colour
Answer:B
}

这里可以看出,LLM将阅读材料输出为问题、选项以及答案组成的QA组;

③ 中文数据分析

为了保证模型训练数据的质量,我们需要将官方给定资料中无用的部分过滤掉,这里我们对数据进行分析:
案例如下:
原文:

根据《杜登德语辞典》,"语言"是一种人类自我表达的能力。如此看来,只有我们人类可以说话,但是如果我们可以知道树木是否也会自我表达,这不是最有趣吗?那么树木会如何"说话"呢?我们当然不可能听得见,因为它们肯定是静悄悄的,那些强风刮过时才技丫摇摆的嘎嘎声,以及轻风拂面时叶片婆婆的较轻声,都是被动发出的。不过它们确实以另一种方式沟为通:通过气味。在非洲大陆的举原上,金合欢树是长颈鹿的珍馐,为了摆脱这种草食性的庞然大物,金合欢树短短几分钟内就可以在叶子里散布毒素。长颈鹿便会转移到其他树木那里。是旁边的树吗?不。它们会避开邻近的树木,然后在大约100米开外的全合欢树那里重新开始大快朵颐。因为被啃食的金合欢树会花施放一种警示气体,向邻近的同伴传递不速之客来袭的信息。所有得到警讯的树木会立即分泌毒素来回应。长颈鹿因为知道金合欢树的这个把戏,所以会走远一些,以寻找那些尚未知情的树木。又或者它们会逆风而行,因为气味信息是顺着风向其他树木传送的。这样的防卫行为自然需要时间,所以早期预警阶段的工作如何协调就具有决定性的意义,对此,树木当然不能只依赖空气,它也通过根部来传送信息。一棵树白的根可以蔓延得很广,其距离大过树冠宽度的两倍,因此在地底下会与周遭树木的根交错而产生联系。但也有偶然情形,因为森林里也有独行侠,一点也不想与别人有任何瓜葛。所以有没有可能因为这些家伙的不不合群,而导致警示信息被阻断呢?幸好不会。树木为了确保信息能够快速传递,多数情况下都会以真菌为谋介,其作用就像网络光纤那样,纤细的菌丝密布在土壤中,并以我们无法想象的密度交织成网络,借助。其网络,真菌可以把从某棵树得到的信号继续传递下去,帮助它们交换害虫、干旱或其他危险消息。在共同司的生存空间里,可能森林里所有的植物都会以这种方式进行交流。但我们若踏入田野,就会发现所有的绿色植物都很沉默。这是因为人工栽培的植物在育种繁殖的过程中,大多已经失去这种在地面或地下进行沟通的能力。它们几乎是又哑,因此特别容易成为昆虫的猎物。而这自然也是现代农业必须使用这么多多农药的原因之一,或许今后育种专家应该要多多少少再从森林里"剽窃"一点野性基因,例如把"多嘴"这个属性加入谷物及马铃薯的品种里。虽然我一开始时说过树木是静悄悄的,但这点从最新的发现来看却值得质疑。一些研究人员想测试地底下是不是可以听到什么声音,不过要想把树木带进实验?室里有点不切实际,因此他们观察的对象是谷物幼苗。果不其然!仪器很快就记录到了由根部发出的轻响,频率约220赫兹。而且有趣的是没有参与实验的幼苗对它也会起反应--在播放着频率约220赫兹声响的环境里,这些幼苗的顶端总会往声源方向生长,这意味着禾本科草类可以察觉到,或是干脆直接说"听到"这个频率。所以,植物可以通过声波来交换信息?我还没想过这可能代表着什么,因为这一领域的研究才刚刚起步。不过下次当你漫步在森林里,那些林间传来的塞牢细响,说不定不只是因为风......
(摘编自彼得·渥雷本《树的秘密生命》,钟宝珍译)
  • 选项:
4.下列对原文相关内容的理解和分析,正确的一项是(3分)
A.叶片婆娑的簌簌声以及谷物幼苗根部发出的轻响,都属于植直物被动发出的声音,而并非是它们在通
过声波交换信息。
B.当金合欢树被长颈鹿啃食时,它既会分泌出毒素进行自我防卫,也能够通过施放气体向邻近的其他
树木发出警告。
C.树木凭借流动的空气可以做到早期的预警,但是这种预警需要的的时间较长,因此气味"语言"一般
作为一种辅助手段。
D.森林中的独行侠由于失去了与其他植物进行沟通的能力,无法意识到步步逼近的灾难,因而终将沦
为昆虫的大餐。
5.下列对原文相关内容的分析和评价,正确的一项是(3分)
A.作者认为,《杜登德语辞典》将"语言"定义为"一种人类自我表达的能力"并不全面,其
实树木也可以通过特定的语言进行沟通。
B.下面的发现可以作为证明第一段中心观点的材料:当昆!虫啃噬橡树时,橡树为了自救会把苦
涩且具有毒性的单宁酸导入树皮与叶子中。
C.第二段中的"多嘴"以及第三段中的"听到",这两处使用的引号有表示特殊含义的作用,
这种用法与第段中的"语言"具有明显的不同。
D.作者在介绍禾本科草类的科学实验和地下真菌网络时,都使用了打比方和举例子的说明方法,
这使本文的内容更准确、更科学,也更具说服力。
6.与野生植物不同,人工载培的植物要经常喷洒浓药,这给我我们带来哪些思考?(6分)
  • 答案:
4.B
5.C
6.①在育种繁殖的过程中应采取措施恢复人工栽培植物在地面或地下的沟通能力,从而提高抵抗病虫害的能
力,减少农药的使用量.
②育种专家可借鉴自然野生植物的野性基因,如把利用气味传递信息等属性加入人工栽培植物的属性中去。

对于原文部分,无明确格式要求,无需处理,可以直接使用;

  • 选项和答案:
    • 需要去掉题目中的打分分值,如(6分);
④英文数据分析
  • 阅读文本
Bike Rental & Guided Tours Welcome to Amsterdam, welcome to MacBike. You see much more from the seat of a bike! Cycling is the most
economical, sustainable and fun way to explore the city, with its beautiful canals, parks, squares and countless lights.
You can also bike along lovely landscapes outside of Amsterdam.
Why MacBike MacBike has been around for almost 30 years and is the biggest bicycle rental company in Amsterdam. With over 2,500 bikes stored in our five rental shops at strategic locations, we make sure there is always a bike available for you. We offer the newest bicycles in a wide variety, including basic bikes with foot brake (AU 4), bikes with hand
brake and gears (HI-I'4), bikes with child seats, and children's bikes.                                                                       Price: 1 hour, 3 hours, 1 day(24hours), Each additional day                                                                                          Hand Brake, Three Gears: €7.50, €11.00, €14.75, €8.00                                                       Foot Brake, No Gears: €5.00, €7.50, €9.75, €6.00                     The 2.5-hour tour covers the Gooyer Windmill, the Skinny Bridge, the Rijksmuseum, Heineken Brewery and much more. The tour departs from Dam Square every hour on the hour, starting at 1:00 pm every day. You can buy
your ticket in a MacBike shop or book online.
  • 选项
21. What is an advantage of MacBike?
A. It gives children a discount.
B. It of offers many types of bikes.
C. It organizes free cycle tours.
D. It has over 2,500 rental shops.
22. How much do you pay for renting a bike with hand brake and three gears for two days?
А. €15.75.
B. €19.50.
C. €22.75.
D. €29.50.
23. Where does the guided city tour start?
A. The Gooyer, Windmill.
C. Heineken Brewery.
B. The Skinny Bridge.
D. Dam Square.
  • 答案
21. B. It offers many types of bikes.       22. D.  €29.50.      23. D. Dam Square.            

同上,阅读文本不用考虑格式,只需要考虑选项和答案;

这里题目中选项用ABCD序号分开,但是有些答案有文字解释,需要思考怎么把答案选项从答案中抽取出来。

3. 数据处理方案
① 数据清洗方法

为了高效地从数据中提取和清洗关键信息,我们采用了以下三种主要方法:

  • 正则表达式:利用正则表达式在文本预处理中的强大功能,例如精确提取特定模式、高效替换字符串等,确保数据的准确性和一致性。
  • pandas库:借助pandas库在数据清洗和处理中的广泛应用,如数据框操作、缺失值处理、数据转换等,提升数据处理的效率和质量。
  • LLM提取处理:虽然速度较慢,但LLM(大型语言模型)提取处理能够提供高质量的数据清洗结果。通过提示词工程或API厂商提供的Json模式,实现经济实惠且高效的数据清洗,尽管在处理速度上稍显不足。
② 处理目标
  • 数据清洗与处理 :使用pandas库分别读取Input和Target数据,并进行细致的数据清洗,确保数据的纯净度和可用性。
  • 数据合并:将清洗后的中文和英文数据进行整理,合并为一个结构化的dataFrame,便于后续的数据分析和处理。
  • 导出与格式转换:将最终的dataFrame存储为csv或Jsonl格式,以便无缝上传至讯飞开放平台进行模型的微调,为模型的优化和提升奠定坚实的基础。
③处理流程

processing

这里参考datawhale的本期task2的流程图

二、 微调流程介绍

1. 大模型概念

这里参考作者过去撰写的这篇文章即可:文章传送门

2. 微调介绍
①什么是模型微调

finetune

根据你提供的资料和参考链接,以下是完善后的“微调流程介绍”部分的内容。这个部分将结合你的大纲结构和提供的内容,补充必要的细节,以确保完整性和实用性。


二、微调流程介绍

1. 大模型概念

关于大模型的概念部分,读者可以参考作者之前撰写的文章 文章传送门,这里不再赘述。

2. 微调介绍
① 什么是模型微调

模型微调(Fine-tuning)是指在已经预训练好的大模型基础上,针对特定任务和数据集进行进一步的训练,以便模型能够更好地适应特定的应用场景。预训练模型通常在大规模数据集上进行训练,具备了较为通用的特征提取能力,而微调则是在此基础上,通过少量数据进行专门训练,使模型能够处理更细化的任务。

finetune

两种微调范式

wtfs

  1. 增量预训练微调(Continue PreTraining)

    • 使用场景:适用于需要让基座模型学习新领域知识的情况,如某个垂直领域的常识。
    • 训练数据:可以使用文章、书籍、代码等领域相关的文本数据。
    • 优点:通过让模型吸收特定领域的新知识,提高模型在该领域的表现。
  2. 指令跟随微调(Supervised Finetuning)

    • 使用场景:用于让模型学习特定的对话模板或应对特定指令的能力,例如聊天机器人根据人类指令进行对话。
    • 训练数据:通常是高质量的对话和问答数据。
    • 优点:模型能够更好地理解和响应人类指令,适应性更强。

我们当前构建选择题生成就是相当于指令跟随微调,用于生成指定格式的输出;

为什么要微调?
  • 节省资源:相比从头开始训练,微调可以大幅减少计算资源和时间,并且有时还能提高模型的准确率。
  • 增强适应性:预训练模型虽然在大型数据集上进行了训练,但并不总能适应特定任务。微调能帮助模型在新任务上表现更好。
什么情况下使用微调?
  • 数据集相似度:当你的任务数据集与预训练模型的数据集相似时,微调效果最好。相似度低的情况下,微调效果可能不如预期。
  • 资源限制:如果计算资源有限,微调是比从头训练更好的选择。
  • 模型准确率:如果你使用的模型在现有任务上准确率不高,通过微调可以提高模型性能。

不同数据集下的微调策略

  1. 数据量少、数据相似度高:只需修改最后几层的权重,例如修改Softmax层的输出类别。
  2. 数据量少、数据相似度低:冻结预训练模型的前几层,只对剩余的几层进行重新训练。
  3. 数据量大、数据相似度低:这种情况下,最好从头开始训练模型(Training from scratch)。
  4. 数据量大、数据相似度高:这是最理想的情况,使用预训练模型的权重进行微调效果最佳。
微调的注意事项
  1. 调整最后一层:通常需要截断预训练网络的最后一层,并替换为与新任务相关的Softmax层。
  2. 使用较小的学习率:微调时,使用较小的学习率可以避免破坏预训练模型已经学到的权重。
  3. 冻结部分层数:当数据集较小或中等时,可以考虑冻结预训练模型的前几层,只训练后续层。
3. LORA(Low-Rank Adaptation)
概念
  • LORA(Low-Rank Adaptation)是一种高效的微调方法,旨在通过引入低秩矩阵,减少模型参数的微调成本,从而降低硬件要求并提高训练效率。
原理
  • LORA通过在模型中引入低秩矩阵,专门对这些矩阵进行微调,同时保持原始模型的大部分权重不变。这种方法能够显著减少需要调整的参数数量,进而减少计算负担。
    principle

如果一个大模型是将数据映射到高维空间进行处理,这里假定在处理一个细分的小任务时,是不需要那么复杂的大模型的,可能只需要在某个子空间范围内就可以解决,那么也就不需要对全量参数进行优化了,我们可以定义当对某个子空间参数进行优化时,能够达到全量参数优化的性能的一定水平(如90%精度)时,那么这个子空间参数矩阵的秩就可以称为对应当前待解决问题的本征秩(intrinsic rank)。

  • 预训练模型本身就隐式地降低了本征秩,当针对特定任务进行微调后,模型中权重矩阵其实具有更低的本征秩(intrinsic rank)。同时,越简单的下游任务,对应的本征秩越低。(Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning)因此,权重更新的那部分参数矩阵尽管随机投影到较小的子空间,仍然可以有效的学习,可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。我们可以通过优化密集层在适应过程中变化的秩分解矩阵来间接训练神经网络中的一些密集层,从而实现仅优化密集层的秩分解矩阵来达到微调效果。
    test
优势
  • 高效切换任务:LORA可以针对不同任务构建小型模块,实现任务之间的快速切换。
  • 低硬件门槛:通过减少参数数量,LORA降低了对硬件资源的需求,适合资源有限的环境。
  • 无推理延迟:LORA设计简单,在部署时可将可训练矩阵与冻结权重合并,不会引入额外的推理延迟。
  • 与其他方法兼容:LORA可以与其他微调方法结合,进一步优化模型性能。

详细步骤

  1. 数据准备:首先需要根据任务需求准备训练数据。确保数据经过清洗和预处理,能够被模型正确加载。

  2. 模型加载:使用预训练模型作为基础,通常可以通过模型库(如Hugging Face Transformers)加载模型。

  3. 微调参数设置:根据任务和数据集设置微调参数,包括学习率、批量大小、训练轮数等。

  4. 训练与验证:进行模型训练,并在验证集上监控模型性能,以确保模型没有过拟合。

4. 微调实践

完整代码如下:

import pandas as pd
import re
import json

# 通用函数:删除空格和换行符
def remove_whitespace_and_newlines(input_string):
    result = input_string.replace(" ", "").replace("\n", "").replace(".", "")
    return result

# 通用函数:提取答案
def get_answers(text):
    text = remove_whitespace_and_newlines(text)
    pattern = re.compile(r'(\d)\s*([A-D])')
    matches = pattern.findall(text)
    res = []
    for match in matches:
        number_dot, first_letter = match
        res.append(first_letter)
    return res

# 通用函数:提取问题和选项
def get_questions(text):
    text = text.replace('\n', '  ')+'  '
    pattern = re.compile(r'(\d+\..*?)(A\..*?\s{2})([B-D]\..*?\s{2})([B-D]\..*?\s{2})(D\..*?\s{2})', re.DOTALL)
    matches = pattern.findall(text)
    questions_dict_list = []

    for match in matches:
        question, option1, option2, option3, option4 = match
        pattern_question = re.compile(r'(\d+)\.(.*)')
        question_text = pattern_question.findall(question.strip())[0][1]
        options = {option1[0]: option1, option2[0]: option2, option3[0]: option3, option4[0]: option4}
        
        question_dict = {
            'question': question_text,
            'options': {
                'A': options.get('A', '').strip(),
                'B': options.get('B', '').strip(),
                'C': options.get('C', '').strip(),
                'D': options.get('D', '').strip()
            }
        }
        questions_dict_list.append(question_dict)
    
    return questions_dict_list

# 生成英文提示文本
def get_prompt_en(text):
    prompt = f'''
    你是⼀个⾼考选择题出题专家,你出的题有⼀定深度,你将根据阅读文本,出4道单项选择题,包含题目选项,以及对应的答案,注意:不⽤给出原文,每道题由1个问题和4个选项组成,仅存在1个正确答案,请严格按照要求执行。
The reading text is mainly in English. The questions and answers you raised need to be completed in English for at least the following points:
    
    ### 回答要求
    (1)Understanding the main idea of the main idea.
    (2)Understand the specific information in the text.
    (3)infering the meaning of words and phrases from the context
    
    ### 阅读文本
    {text}
    '''
    return prompt

# 处理英文数据集
def process_en(df):
    res_input = []
    res_output = []
    for id in range(len(df)):
        data_options = df.loc[id, '选项']
        data_answers = df.loc[id, '答案']
        data_prompt = df.loc[id, '阅读文本']
        data_options = get_questions(data_options)
        data_answers = get_answers(data_answers)
        data_prompt = get_prompt_en(data_prompt)
        
        if len(data_answers) == len(data_options):
            res = ''
            for id, question in enumerate(data_options):
                res += f'''
                {id+1}.{question['question']}
                {question['options']['A']}
                {question['options']['B']}
                {question['options']['C']}
                {question['options']['D']}
                answer:{data_answers[id]}
                '''+'\n'
            res_output.append(res)
            res_input.append(data_prompt)
    return res_input, res_output

# 读取并处理英文数据集
df_en = pd.read_excel('训练集-英语.xlsx')
df_en = df_en.replace('.', '.', regex=True) \
             .replace('А.', 'A.', regex=True) \
             .replace('В.', 'B.', regex=True) \
             .replace('С.', 'C.', regex=True) \
             .replace('D.', 'D.', regex=True)

en_input, en_output = process_en(df_en)


# 生成中文提示文本
def get_prompt_cn(text):
    prompt = f'''
    你是⼀个⾼考选择题出题专家,你出的题有⼀定深度,你将根据阅读文本,出4道单项选择题,包含题目选项,以及对应的答案,注意:不⽤给出原文,每道题由1个问题和4个选项组成,仅存在1个正确答案,请严格按照要求执行。
The reading text is mainly in Chinese. The questions and answers you raised need to be completed in Chinese for at least the following points:
    
    ### 回答要求
    (1)理解文章的主要意思。
    (2)理解文章中的具体信息。
    (3)根据上下文推断词语和短语的含义。
    
    ### 阅读文本
    {text}
    '''
    return prompt

# 处理中文数据集
def process_cn(df):
    res_input = []
    res_output = []
    for id in range(len(df)):
        data_options = df.loc[id, '选项']
        data_answers = df.loc[id, '答案']
        data_prompt = df.loc[id, '阅读文本']
        data_options = get_questions(data_options)
        data_answers = get_answers(data_answers)
        data_prompt = get_prompt_cn(data_prompt)
        
        if len(data_answers) == len(data_options):
            res = ''
            for id, question in enumerate(data_options):
                res += f'''
                {id+1}.{question['question']}
                {question['options']['A']}
                {question['options']['B']}
                {question['options']['C']}
                {question['options']['D']}
                answer:{data_answers[id]}
                '''+'\n'
            res_output.append(res)
            res_input.append(data_prompt)
    return res_input, res_output

# 读取并处理中文数据集
df_cn = pd.read_excel('训练集-中文.xlsx')
cn_input, cn_output = process_cn(df_cn)


# 数据集整合
df_new = pd.DataFrame({'input': cn_input+cn_input[:30]+en_input+en_input[:20], 'output': cn_output+cn_output[:30]+en_output+en_output[:20]})

# 数据集格式转换导出
# 打开一个文件用于写入 JSONL,并设置编码为 UTF-8
with open('output.jsonl', 'w', encoding='utf-8') as f:
    # 遍历每一行并将其转换为 JSON
    for index, row in df_new.iterrows():
        row_dict = row.to_dict()
        row_json = json.dumps(row_dict, ensure_ascii=False,)
        # 将 JSON 字符串写入文件,并添加换行符
        f.write(row_json + '\n')

# 打印确认信息
print("JSONL 文件已生成")


三、模型训练

完成数据准备后,我们就可以利用这些数据进行模型的微调训练。这里使用了 Spark A-13B 的预训模型,这里的步骤和上一篇文章一模一样,按照流程使用即可;

1. 上传数据集

首先我们进入讯飞开放平台官网网页,点击新建数据集:
new dataset
这里我们配置一下数据集的相关信息;
config
接着我们上传之前制作的数据集,并且选择正确的问题和答案字段;
config
等待数据集上传成功,然后开始训练;
wait

进入训练配置界面,我们配置模型名称,预训练模型,学习率,数据集等信息;
trainconfig
等待模型训练成功,这个过程需要至少30分钟这里我们可以喝杯咖啡等待一下!
wait-train
publish

如果大家没有应用请到 https://console.xfyun.cn/app/myapp 点击创建创建一个。

点击发布。稍等片刻,模型即可发布成功;内容如下:
publish_result

这个界面我们可以可以看到我们发布模型的相关参数,我们要保存好以下参数,用于后续测试使用:

serviceId:---------
resourceId:-----------
APPID:------
APIKey:---------
APISecret:------------

至此,模型训练部分完毕!


四、本地测试

模型训练完成后,我们需要对模型进行本地测试,确保其生成的题目符合预期。

以下是本地测试的代码,通过向模型提供一个 prompt,我们可以查看模型生成的题目和答案。

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage

SPARKAI_URL = 'wss://xingchen-api.cn-huabei-1.xf-yun.com/v1.1/chat'
#星火认知大模型调用秘钥信息,请结合飞书文档,前往讯飞微调控制台(https://training.xfyun.cn/modelService)查看
SPARKAI_APP_ID = 'xxxxxxx'
SPARKAI_API_SECRET = 'xxxxxxx'
SPARKAI_API_KEY = 'xxxxxxxxxxxxxxxxxxx'
serviceId = 'xxxxxxxxx'  
resourceId = 'xxxxxxxxx'

if __name__ == '__main__':
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=serviceId,
        model_kwargs={"patch_id": resourceId},
        streaming=False,
    )
    messages = [ChatMessage(
        role="user",
        content=prompt
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    print(a.generations[0][0].text)

运行结果如下:
test
输出正常!


希望这篇博客对各位读者进行模型微调有所帮助。

参考链接

  • 代码文档
  • 比赛链接

thank_watch

如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

凤凰端子音频矩阵应用领域

凤凰端子音频矩阵,作为一种集成了凤凰端子接口的音频矩阵设备,具有广泛的应用领域。以下是其主要应用领域: 一、专业音响系统 会议系统:在会议室中,凤凰端子音频矩阵能够处理多个话筒和音频源的信号,实现…

Luminar Neo for Mac/Win:创新AI图像编辑软件的强大功能

Luminar Neo,这款由Skylum公司倾力打造的图像编辑软件,为Mac和Windows用户带来了前所未有的创作体验与编辑便利。作为一款融合了先进AI技术的图像处理工具,Luminar Neo以其独特的功能和高效的操作流程,成为了摄影师、设计师及摄影…

使用Sanic和SSE实现实时股票行情推送

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

【Next】全局样式和局部样式

不同于 nuxt ,next 的样式绝大部分都需要手动导入。 全局样式 使用 sass 先安装 npm i sass -D 。 我们可以定义一个 styles 文件,存放全局样式。 variables.scss $fs30: 30px;mixin border() {border: 1px solid red; }main.scss use ./variables …

业界首个OpenTelemetry结合eBPF的向导式可观测性平台APO正式开源

AutoPilot Observability (简称APO)是什么? 开箱即用的可观测性平台:APO 致力于提供一键安装、开箱即用的可观测性平台。APO 的 OneAgent 支持一键免配置安装 Tracing 探针,支持采集应用的故障现场日志、基础设施指标、应用和下游…

主机防火墙IPV6 域名 测试环境搭建及测试方法

由于国内当前网站支持ipv6的很少,部分支持ipv6 的网站由于路由器的限制,也无法直接访通过ipv6进行访问,因此进行主机防火墙ipv6域名测试时,需要自己搭建环境进行测试,以下为搭建环境的步骤。 1 . 搭建DNS服务器 环境:安装有python,系统为Windows Server 2016 DNS服务…

【Vue3】vue模板中如何使用enum枚举类型

简言 有的时候,我们想在vue模板中直接使用枚举类型的值,来做一些判断。 ts枚举 枚举允许开发人员定义一组命名常量。使用枚举可以更容易地记录意图,或创建一组不同的情况。TypeScript 提供了基于数字和字符串的枚举。 枚举的定义这里不说了…

haproxy最强攻略

1、负载均衡 负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。 负载均衡的主要作用如下: 高并发…

接入谷歌支付配置

1.谷歌云创建项目 网址:https://console.cloud.google.com/ 按照步骤创建即可 创建好后选择项目,转到项目设置 选择服务账户,选择创建新的服务账户 名称输入好后访问权限吗账号权限都可以不用填写,默认就好了 然后点击电子邮…

爵士编曲:Bass编写,Walking Bass,SwingBass 爵士鼓 Swing Jazz律动 Moonkits

Walking Bass Line是乐曲构造中的基垫,“Walking”是在BassLine中的一种重要的感觉构成,等同于我们对于“行走”的理解,意义就是“一步接着一步”,先从每一步(每一小节)建立,并持续构建成一个完…

Android 10.0 SystemUI下拉状态栏QSTileView去掉着色效果显示彩色图标功能实现

1.前言 在10.0的系统rom定制化开发中,在关于SystemUI的下拉状态栏中QSTileView的背景颜色设置过程中,在由于 系统原生有着色效果,导致现在某些彩色背景显示不是很清楚效果不好,所以需要去掉QSTileView的默认着色 背景显示原生的彩色背景,接下来就来实现相关功能 如图: 2.…

【微信小程序】实现中英文切换

1、组织语言资源 创建两个文件夹,分别用于存放中文和英文的语言资源。例如,可以在 utils 文件夹下创建 lang 文件夹,然后在其中创建 zh.js 和 en.js 文件,分别存放中文和英文的文本内容。 zh.js: const zh {home: {title: 这里…

【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】

目录 1. 人工智能的基本概念 1.1 人工智能的定义与发展 1.1.1 人工智能的定义 1.1.2 人工智能的发展历史 1.2 人工智能的分类 1.2.1 弱人工智能 1.2.2 强人工智能 1.2.3 超人工智能 1.3 人工智能的关键组成部分 1.3.1 数据 1.3.2 算法 1.3.3 计算能力 2. 机器学习…

大模型系列6--神经网络(WIP)

神经网络 1. 背景2. 理论知识2.1. 单个神经元2.1.1. 基础2.1.2. 神经元激活代码 2.2. 多个神经元2.2.1. 基础2.2.2. 神经元激活代码2.2.3. 反向传播 3. 神经网络编程基础3.1. 基本概念3.2. 逻辑回归3.3. 梯度下降法(Gradient Descent)3.3.1. 基础知识3.3.2. 梯度下降的形式化说…

Selenium + Python 自动化测试09(多窗口切换)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了截图的操作方法,本篇文章我们讲述一下多窗口切换的操作方法。 在实际的测试项目组中我们可能会遇到多窗口的情况,有时候需要在不同窗口…

MyBatis 配置与测试方式

目录 一,什么是MyBatis 二,准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一,什么是MyBatis 简单来说,MyBatis 是一款优秀的持久层框架,用于简化JDBC的开发,能更简单完成程序与数据库之间…

MySQL 复制建表、操作补充、pymysql操作—/—<10>

一、复制建表 1、复制其他表的结构 只复制结构,不复制值 CREATE TABLE aaa LIKE student student表: 复制完的a表: 2、复制查询结果并建表: create table a (select id,sum(score) as sum_sco from score group by id) score表结构如图所…

【存储学习笔记】3:备份(Backup)技术分类

1 定义 备份:出于数据恢复的目的而创建一份额外的数据副本。 2 技术指标 2.1 备份窗口(Backup Window) 从定指标的角度:可以安全地实施备份的时间 从实现指标的角度:备份操作所需的时间 2.2 恢复时间目标&#xf…

C 408—《数据结构》算法题基础篇—数组(通俗易懂)

目录 Δ前言 一、数组的合并 0.题目: 1.算法设计思想: 2.C语言描述: 3.算法的时间和空间复杂度 : 二、数组元素的倒置 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、数组中特定值元素的删除 0.题目 : …

贷齐乐案例

源码分析&#xff1a; <?php // 设置 HTTP 头部&#xff0c;指定内容类型为 text/html&#xff0c;字符集为 utf-8 header("Content-type: text/html; charsetutf-8"); // 引入数据库配置文件 require db.inc.php; // 定义函数 dhtmlspecialchars&#xff0c;用…