【Datawhale AI夏令营】基于星火大模型的群聊对话分角色要素提取挑战-baseline 复现

766 阅读3分钟

baseline手册: datawhaler.feishu.cn/wiki/VIy8ws…

baseline1

复现流程:

1、报名参赛: 基于星火大模型的群聊对话分角色要素提取挑战-baseline

2、获取token的相关信息: APPID: APISecret: APIKey:

3、百度BML平台运行相关代码

  • 运行环境
  • 填入相关token
  • 运行训练代码
  • 导出相关结果

4、上传星火平台结果

  • 上传output.json
  • 获取分数

最终结果:

baseline得分.png

核心代码分析:

1、chat API调用补全函数

思路:调用星火AI的工具包,传入相关配置参数,调用chat模型返回生成补全的内容。 不同的大语言模型都类似,可以参考OPENAI的接口用法,具体使用时查阅文档即可。

def get_completions(text):
    messages = [ChatMessage(
        role="user",
        content=text
    )]
    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,
    )
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    return a.generations[0][0].text

# 测试模型配置是否正确
text = "你好"
get_completions(text)

2、Prompt模版学习

  • 背景介绍:你将获得一段群聊对话记录。你的任务是根据给定的表单格式从对话记录中提取结构化信息。在提取信息时,请确保它与类型信息完全匹配,不要添加任何没有出现在下面模式中的属性。

  • 格式要求:

info: Array<Dict(
    "基本信息-姓名": string | "",  // 客户的姓名。
    "基本信息-手机号码": string | "",  // 客户的手机号码。
)>
  • 上下文输入:{content}拼接进去
  • 返回结果

3、处理流程编写

  • 获取大模型的返回内容: get_completions
  • 将json数据转换成字典: convert_all_json_in_text_to_dict
  • 确认输出的格式是否正确,并返回处理结果: check_and_complete_json_format

看了一下baseline的解析,统计了一下对应的结果分布情况,尝试把抽取结果全部置空。没想到结果比Prompt设计大模型抽取出来的结果还要好。

49240827af8cd52ae156ae6dca90d29.png

真的有种学习了各种技巧,最后不如全部选C的幻灭感  ̄□ ̄||

baseline2

baseline2的思路如下: 1、因为内容很多,直接通过全局进行微调消耗量很大 2、因此先通过大模型进行prompt工程将大体的内容进行归纳总结 3、在构造微调的数据在大模型微调平台上进行相关微调 4、最终构建对应的抽取模型进行推理 5、提交相关结果

具体细节: 1、将json改成jsonl - 一是需要构建相关的prompt的语句,input, output样例,让大模型知道如何进行内容的提取 - 二是需要将json字典的格式改成jsonl的一行一条记录的格式 2、将处理好的jsonl的相关内容传到微调平台进行抽取 - 注意输入输出的格式调整 3、微调好模型的使用 - 因为是在线发布的模型,通过相关ID进行关联,需要学习相关的关联配置方法 - 运行相关推理脚本,最终生成结果 4、上传到最终系统上去

微调后的结果达到了 26.9分 baseline2微调.png