Task3: Baseline2笔记 #AI夏令营 #Datawhale #夏令营

Task3:进阶 baseline2【微调方向】 + 知识点讲解,链接如下: 

Docsicon-default.png?t=N7T8https://datawhaler.feishu.cn/wiki/Q48xwICyHiV0O2kSwjccuTE1nrb

1.数据集制作

1.1环境配置

需要先对原始群聊数据做初步抽取,需要准备讯飞3.5的api环境配置。和baseline1的配置一样

!pip uninstall websocket-client
!pip install --upgrade spark_ai_python websocket-client
from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
import numpy as np
from tqdm import tqdm


def chatbot(prompt):
    #星火认知大模型Spark3.5 Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
    SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
    #星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
    SPARKAI_APP_ID = ''
    SPARKAI_API_SECRET = ''
    SPARKAI_API_KEY = ''
    #星火认知大模型Spark3.5 Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
    SPARKAI_DOMAIN = 'generalv3.5'
    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=SPARKAI_DOMAIN,
        streaming=False,
    )
    messages = [ChatMessage(
        role="user",
        content=prompt
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    return a.generations[0][0].message.content

1.2 数据处理Prompt

对原群聊对话设计一个总结的Prompt,将原始对话内容进行精简,方便做微调数据。

一方面直接将群聊对话作为数据集的话,会导致上下文过长,超过限制。还有上下文太长会导致抽取效果变差。过长的上下文也会导致训练时长和费用倍增。

精简对话内容以达到输入的Prompt有效信息率上升,一定程度上提高了模型的准确率。

content = ''
prompt = f'''
你是一个数据分析大师,你需要从群聊对话中进行分析,里面对话的角色中大部分是客服角色,你需要从中区分出有需求的客户,并得到以下四类数据。

****群聊对话****
{content}

****分析数据****
客户基本信息:需要从中区分出客户角色,并得到客户基本信息,其中包括姓名、手机号码、邮箱、地区、详细地址、性别、年龄和生日
客户意向与预算信息: 客户意向与预算信息包括咨询类型、意向产品、购买异议点、预算是否充足、总体预算金额以及预算明细
客户购买准备情况:户购买准备情况包括竞品信息、客户是否有意向、客户是否有卡点以及客户购买阶段
跟进计划信息: 跟进计划信息包括参与人、时间点和具体事项,这些信息用于指导销售团队在未来的跟进工作中与客户互动

****注意****
1.只输出客户基本信息、客户意向与预算信息、客户购买准备情况、跟进计划信息对应的信息,不要输出无关内容
2.不要输出分析内容
3.输出内容格式为md格式
'''
  1. 角色识别:指导分析者从群聊对话中区分出客户角色。

  2. 数据分类:明确指出需要收集的四类数据:

    • 客户基本信息
    • 客户意向与预算信息
    • 客户购买准备情况
    • 跟进计划信息
  3. 数据字段:列出了每类数据需要包含的具体字段或信息点。

  4. 对话内容:提示分析者使用群聊对话中的内容作为数据来源。

  5. 输出格式:要求输出内容使用Markdown(md)格式,这是一种轻量级标记语言,常用于格式化文本。

  6. 内容限制:强调只输出与上述四类数据相关的信息,不包括无关内容。

  7. 分析限制:指出不要在输出中包含分析内容,只输出原始数据。

  8. 指导性语言:使用了一些指导性语言,如“你是一个数据分析大师”,以增强prompt的引导作用。

  9. 注意点:列出三个注意事项,以确保输出的准确性和一致性。

总的来说,这段prompt是一个详细的指导性文本,用于帮助分析者从群聊对话中准确、高效地提取和格式化关键的客户信息。

 

1.3 训练集数据制作

1.4 测试集数据制作

详见以下链接:

基于星火大模型的群聊对话分角色要素提取挑战-baseline2 - 飞桨AI Studio星河社区

2.平台微调

2.1训练数据上传

  • 登录微调平台(点击可跳转)

    链接:https://training.xfyun.cn/overview

  • 上传第一步制作的数据集

  • 点击确定,等待上传成功

    • 运行成功训练表示数据上传结束

2.2 测试数据上传

回到:https://training.xfyun.cn/dataset/datasetIndex

这次我们选择测试集即可。

上传我们的test.csv文件即可。

到这里我们数据集就传好啦~

2.3 平台微调

进入创建微调页面:https://training.xfyun.cn/model/add

基本配置与版本配置如下,我们选择性能比较好的Spark Pro模型~

数据配置与参数配置,选择代金券,通义协议,提交训练。


训练完成后,进入模型页面。

点击右侧,发布为服务

点击左侧导航栏的我的模型服务接着拿到resourceId、APPID、APIKey、APISecret

接下来到baseline2中继续执行~

https://aistudio.baidu.com/projectdetail/8090135

在main.ipynb的微调推理部分填入APPID、APIKey、APISecret(注意顺序)

在SparkApi.py文件的108行,引号中填入你的resourceId

 

3. 微调推理

3. 微调推理
In [22]
# 定义写入函数

def write_json(json_file_path, data):
    #"""写入json文件"""
    with open(json_file_path, 'w') as f:
        json.dump(data, f, ensure_ascii=False, indent=4)
In [3]
import SparkApi
import json
#以下密钥信息从控制台获取
appid = ""     #填写控制台中获取的 APPID 信息
api_secret = ""   #填写控制台中获取的 APISecret 信息
api_key =""    #填写控制台中获取的 APIKey 信息

#调用微调大模型时,设置为“patch”
domain = "patchv3"

#云端环境的服务地址
# Spark_url = "wss://spark-api-n.xf-yun.com/v1.1/chat"  # 微调v1.5环境的地址
Spark_url = "wss://spark-api-n.xf-yun.com/v3.1/chat"  # 微调v3.0环境的地址


text =[]

# length = 0

def getText(role,content):
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

def getlength(text):
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length

def checklen(text):
    while (getlength(text) > 8000):
        del text[0]
    return text
    


def core_run(text,prompt):
    # print('prompt',prompt)
    text.clear
    Input = prompt
    question = checklen(getText("user",Input))
    SparkApi.answer =""
    # print("星火:",end = "")
    SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
    getText("assistant",SparkApi.answer)
    # print(text)
    return text[-1]['content']

text = []
res = core_run(text,'你好吗?')
 
In [2]
import pandas as pd
import re

# 读取Excel文件
df_test = pd.read_csv('test.csv',)
In [25]
data_dict_empty = {
                "基本信息-姓名": "",
                "基本信息-手机号码": "",
                "基本信息-邮箱": "",
                "基本信息-地区": "",
                "基本信息-详细地址": "",
                "基本信息-性别": "",
                "基本信息-年龄": "",
                "基本信息-生日": "",
                "咨询类型": [],
                "意向产品": [],
                "购买异议点": [],
                "客户预算-预算是否充足": "",
                "客户预算-总体预算金额": "",
                "客户预算-预算明细": "",
                "竞品信息": "",
                "客户是否有意向": "",
                "客户是否有卡点": "",
                "客户购买阶段": "",
                "下一步跟进计划-参与人": [],
                "下一步跟进计划-时间点": "",
                "下一步跟进计划-具体事项": ""
            }
In [ ]
submit_data = []
for id,line_data in tqdm(enumerate(df_test['input'])):
    # print(line_data)
    content = line_data
    text = []
    prompt = json.dumps(content,ensure_ascii=False)
    
    # print(json.dumps(content,ensure_ascii=False))
    res = core_run(text,prompt)
    try:
        data_dict = json.loads(res)
    except json.JSONDecodeError as e:
        data_dict = data_dict_empty
    submit_data.append({"infos":data_dict,"index":id+1})
# 预计执行8min
In [ ]
submit_data
In [10]
write_json("submit.json",submit_data)

4. 提交结果

https://challenge.xfyun.cn/h5/detail?type=role-element-extraction&ch=dw24_y0SCtd

通过这个task的学习,可以得到一些别样的思路,同时也能学学讯飞的微调平台的使用方法。

本节主要介绍了一个对原始数据做基础抽取后,通过讯飞微调平台微调抽取大模型的方案,然后将多个方法综合在一起实现抽取任务。

通过上述实验,我学习到预训练模型是微调推理的基石。这些模型如BERT、GPT、讯飞星火大模型等,通过在大量数据上的训练,已经学习到了丰富的语言知识,为特定任务的微调打下了坚实的基础。通过实践,我掌握了微调过程中的关键步骤,包括选择合适的预训练模型、准备任务特定数据、调整模型参数、选择合适的学习率以及模型的持续评估和优化。微调推理是一个不断发展的领域,新的技术和方法层出不穷。保持好奇心和持续学习的态度,对于跟上这个领域的最新发展至关重要。

学会了这些操作,就可以继续上分啦!加油

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值