模型微调2 利用SDK微调模型

这一次我们讲述如何微调一个作文批改大模型,通过微调大模型,让大模型更加合适的扮演一个班主任的角色。

那么本章就沿着,创建Dataset,调用模型微调,测试这样的几步进行讲解。

首先是环境准备,这里因为要用到百度的千帆ModelBuilder平台, 需要准备对应的AK和SK。

之后我们先看下没有微调前的模型表现。

对于没有微调之前的模型,表现的好坏很大程度上取决于Prompt的优劣。

那么如何准备一个优质的Prompt就是我们的问题了

如果是原生的Prompt,那么表现很不好

prompt = Prompt(“请帮我批改如下高考作文,给出评价和评分(0-60分):\n题目:{question}\n作文内容:{article}”)

之后我们可以自我写一版优化的Prompt

optimized_prompt = Prompt(“””您需要帮助批改一篇高考作文,请根据以下要求给出评价和评分(0-60分):

题目:{question}

作文内容:{article}

请注意,您的批改应该包括以下方面:

1. 判断作文的主题和目的;

2. 分析作文的结构和逻辑;

3. 评估作文的语言和表达;

4. 检查作文的拼写和语法;

5. 综合评价作文的优缺点。

请在回答中提供详细的解释和说明,以帮助作者了解您的批改和改进建议。同时,请注意提供正面的反馈和指导,以激励作者继续改进和提高作文水平。

“””)

以及尝试使用一些Prompt优化框架,诸如CRISPE,一个通用的prompt优化框架

其中

CR 表示给模型设定的人设

I表示背景和上下文

S 表示具体的任务

P 表示输出内容的风格

E 限制条件

essay_rule = “””

高考作文评分批改分为基础等级、发展等级、关于作文的其他项评定

1、基础等级

基础等级分内容和表达两项。

1)内容项

具体评分规则如下:符合题意、中心突出、内容充实、思想健康、感情真挚为一等,可按16-20分酌情给分;符合题意、主题明确、内容较充实、思想健康、感情真实为二等,可按11-15分酌情给分;基本符合题意、中心基本明确、内容单薄、思想基本健康、感情基本真实为三等,可按6-10分酌情给分;偏离题意、中心不明确、内容不当、思想不健康、感情虚假为四等,可按0-5分酌情给分。

2)表达项

具体评分规则如下:符合文体要求、结构严谨、语言流畅、字迹工整为一等,可按16-20分酌情给分;符合文体要求、结构完整、语言通顺、字迹清楚为二等,可按11-15分酌情给分;基本符合文体要求、结构基本完整、语言基本通顺、字迹基本清楚为三等,可按6-10分酌情给分;不符合文体要求、结构混乱、语言不通顺语病多、字迹潦草难辨为四等,可按0-5分酌情给分。

2、发展等级

基础等级分要与发展等级分相匹配,发展等级分不能跨越基础等级的得分等级。

具体评分规则如下:深刻、丰富、有文采、有创意为一等,可按16-20分酌情给分;较深刻、较丰富、较有文采、较有创意为二等,可按11-15分酌情给分;略显深刻、略显丰富、略显文采、略显创意为三等,可按6-10分酌情给分;个别语句有深意、个别例子较好、个别语句较精彩、个别地方有深意为四等,可按0-5分酌情给分。

3、关于作文的其他项评定

1)扣分项评定

出现错别字,1个错别字扣1分,重复不计,扣完5分为止;标点符号出现3处以上错误的酌情扣分;不足字数者,每少50字扣1分;无标题扣2分。

2)残篇评定

400字以上的文章,按评分标准评分,扣字数分。(少50个字扣1分)

400字以下的文章,20分以下评分,不再扣字数分。

200字以下的文章,10分以下评分,不再扣字数分。

只写一两句话的,给1分或2分,不评0分。

只写标题的,给1分或2分,不评0分。

完全空白的,评0分.

“””

只要Prompt优化的足够好,那么理论上是可以弥补一些模型上的差距,但是最核心的还是模型自身能力。

那么我们回归到模型本身的微调上

我们需要在现有的种子数据上进行self-Instruct

现有的种子数据集中一共有146篇数据。

在此基础上,利用不同的大模型搭配不同的Prompt,进行新数据的生成。

并利用人工对生成的数据进行过滤。

之后就是利用这些准备好的数据集

进行模型训练

from qianfan.trainer import Finetune

from qianfan.trainer.configs import TrainConfig

from qianfan.trainer.consts import PeftType

enable_log(logging.INFO)

# 声明Trainer,配置模型和超参

# 也可以增加evaluation,deploy相关参数,通过trainer一步完成训练,评估,发布,部署:

trainer = Finetune(

name=”essay_sft_0510″,

train_type=”ERNIE-Speed-8K”,

train_config=TrainConfig(

peft_type=PeftType.ALL,

epoch=10,

learning_rate=0.00003,

max_seq_len=4096,

save_step=64,

checkpoint_count=5,

),

dataset=qf_train_ds,

#    eval_ds=eval_ds,

#    evaluators=[local_evalutor],

#    deploy_config=DeployConfig(

#        name=”essay_correct”,

#        endpoint_prefix=”essaycor”,

#        replicas=1,

#        pool_type=DeployPoolType.PrivateResource,

#        service_type=ServiceType.Chat,

#    )

)

trainer.start()

trainer.save(“data/essay_sft_0510_train_meta”)

trainer.info()

进行训练并保存

之后进行模型的部署

from qianfan.model import Service, DeployConfig

from qianfan.model.consts import ServiceType

from qianfan.resources.console.consts import DeployPoolType

import logging

from qianfan.utils import enable_log

enable_log(logging.INFO)

sft_svc: Service = m.deploy(DeployConfig(

name=”essay_sft_0513″,

endpoint_prefix=”essaysft0513″,

replicas=1,

pool_type=DeployPoolType.PrivateResource,

service_type=ServiceType.Chat,

))

发表评论

邮箱地址不会被公开。 必填项已用*标注