baseline手册: datawhaler.feishu.cn/wiki/VIy8ws…
baseline1
复现流程:
1、报名参赛: 基于星火大模型的群聊对话分角色要素提取挑战-baseline
2、获取token的相关信息: APPID: APISecret: APIKey:
3、百度BML平台运行相关代码
- 运行环境
- 填入相关token
- 运行训练代码
- 导出相关结果
4、上传星火平台结果
- 上传output.json
- 获取分数
最终结果:
核心代码分析:
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设计大模型抽取出来的结果还要好。
真的有种学习了各种技巧,最后不如全部选C的幻灭感  ̄□ ̄||
baseline2
baseline2的思路如下: 1、因为内容很多,直接通过全局进行微调消耗量很大 2、因此先通过大模型进行prompt工程将大体的内容进行归纳总结 3、在构造微调的数据在大模型微调平台上进行相关微调 4、最终构建对应的抽取模型进行推理 5、提交相关结果
具体细节: 1、将json改成jsonl - 一是需要构建相关的prompt的语句,input, output样例,让大模型知道如何进行内容的提取 - 二是需要将json字典的格式改成jsonl的一行一条记录的格式 2、将处理好的jsonl的相关内容传到微调平台进行抽取 - 注意输入输出的格式调整 3、微调好模型的使用 - 因为是在线发布的模型,通过相关ID进行关联,需要学习相关的关联配置方法 - 运行相关推理脚本,最终生成结果 4、上传到最终系统上去
微调后的结果达到了 26.9分