摘要:
合集:AI案例-NLP-泛金融
赛题:AFAC2024金融智能创新大赛-赛题1-金融API工具机器学习
主办方:中国计算机学会(CCF)及上海市科技创业中心
AI问题:AI智能体
数据集:数据集包含基金、股票类,按照API的出参类型可以分为类别型和数值型两种,按照API的组合来看可以划分为两大类:单API调用和组合API调用。
数据集价值:充分利用丰富系统API调用接口,将用户问题转化为可执行的API调用列表。
解决方案:LoRA微调(Fine-tuning)预训练大模型技术
一、赛题描述
为加快推动人工智能及大模型技术在金融科技领域的应用转化,助力挖掘优质创新创业方案,强化科技人才高地聚集氛围,在上海市科学技术委员会指导下,中国计算机学会(CCF)及上海市科技创业中心支持,由国内外多家顶尖学术机构和知名金融科技企业联合发起了“AFAC2024金融智能创新大赛”。大赛旨在以真题促真力,以金融行业内真实案例及海量真实数据为牵引,同时设立丰厚的奖金池,鼓励业内外具有潜力的创新者积极参与。大赛聚焦大模型技术及创新创业两大主题,设立算法赛、应用赛和创业赛的综合赛制结构。我们在此共邀业界及学界同好群策群力,探索金融科技的新应用、新场景和新思路,共谱新时代下金融AI的华章。
任务
在金融对话领域,问答系统通过意图识别和检索召回来接收用户问题。长期迭代中系统会积累各种API接口,其中大部分可作为独立原子服务。用户问题可拆分为子问题,每个子问题可能需要调用多个API。这种方式将结构化和非结构化问答抽象为API调用,实现正面回答用户问题。如何充分利用丰富API,将用户问题转化为可执行的APIs List,并实现端到端解决是重要议题。因此,我们构建了金融场景多API工具学习的评测任务,希望推动大模型在金融场景应用,提高工具学习方案效率和泛化性。
选手需要根据用户query,从API集合中筛选出合适的API列表,生成正确的API调用逻辑和答案。
评价指标
评价指标:Score = 主指标 * 80%+ 副指标*20% 执行准确率(主指标):将API列表执行后得到结果的准确率; 逻辑准确率(副指标):API列表中APIs和出入参的逻辑准确率,排除顺序的影响;
二、数据集内容
基本信息
数据集包含基金、股票类,按照API的出参类型可以分为类别型和数值型两种,按照API的组合来看可以划分为两大类:单API调用和组合API调用。根据能力项可以分为:多条件、区间类、聚合类、比较类、计算类、时间类、排序类、嵌套类和推理类等九大类。
文件列表
- api_定义.json
- dev.xlsx
- test.xlsx
- train.xlsx
- 标准名.xlsx:股票名
dev目录:
- api.csv
- api_prompt.csv
- api_prompt_e5.csv
- api_prompt_edit.csv
- api_prompt_sim.csv
- data.csv
- product.csv
- product_.csv
- prompt.csv
- tool.csv
train目录:
- api.csv
- api_prompt.csv
- product.csv
- product_.csv
- prompt.csv
- tool.csv
test目录:
- api.csv
- data
- product.csv
- product_.csv
- prompt
- tool.csv
以下为数据样例:
标准名.xlsx
标准股票名称 |
---|
万马股份 |
汉王科技 |
珠江啤酒 |
联络互动 |
奇正藏药 |
超华科技 |
ST宇顺 |
train.xlsx
query: 我打算用100万元买三羊马的股票,如果按照三羊马的最高价来计算,我能买多少股呢?
label: {"relevant APIs": [{"api_id": "0", "api_name": "查询代码", "required_parameters": [["三羊马"]], "rely_apis": [], "tool_name": "股票查询"}, {"api_id": "1", "api_name": "查询最高价", "required_parameters": ["api_0的结果", "今日"], "rely_apis": ["0"], "tool_name": "股票查询"}, {"api_id": "2", "api_name": "除法计算", "required_parameters": ["1000000", "api_1的结果"], "rely_apis": ["1"], "tool_name": "数值计算"}], "result": ["api_2的结果"]}
api_定义.json
{
"category_name": "基金",
"tool_name": "条件选基",
"api_name": "查询代码",
"api_description": "这个API接口的功能是接收运算符和基金代码作为输入,返回与输入的基金代码匹配的基金详细信息。",
"parameters": {
"properties": {
"运算符": {
"type": "string",
"description": "运算符号,该API下固定为“等于”"
},
"基金代码": {
"type": "string",
"description": "基金代码的准确值"
}
},
"required": [
"运算符",
"基金代码"
]
}
},
三、解决方案样例
以下为一等奖获得者的解决方案。
难点
- 标准产品名提取难:查询类别API需要传入标准产品名(e.g浦发银行)才能执行,但query中只有缩写(e.g.浦发最近一月的最高价是多少),若不加入提示,大模型很难还原真实的标准名称。
- 用户意图多样:根据API中tool的种类,可以把用户意图分为5类:基金查询、股票查询、条件选基、条件选股、数值计算。不同的意图用到的API有较大不同,规范也有差异。
- 相关例子选取难:若要让大模型理解各种API的用法,需要给出相似的例子,让模型从例子中理解。例子与目标query的相关性极大程度的影响了模型表现,若只给标准例子,模型难以学会API的规范用法。
- 大模型数字理解差:API入参中经常有数字,而大模型的数字理解能力广为诟病(e.g. 无法理解13.8与13.11的大小关系)。同时query中混杂了大量中文数字(e.g. 一百块),而API中需要转化为阿拉伯数字便于机器理解(e.g.100.0)。
解决方案
召回相关的标准产品名
核心目标:从模糊的用户查询中,从庞大候选集中,召回相关的标准产品名。
算法方案:使用字符串匹配算法(Match)、最长公共子序列算法(LSC)、最长公共子串算法(LCS)、以及改进的子序列算法(Noise Elimination),分别召回约3个结果,混合后用改进算法做Mixrank,保证召回率且让优质内容靠前。
识别用户的意图
目标:识别用户的意图(e.g. 基金查询、股票查询、条件选基、条件选股、数值计算),用于筛选上一步得到的产品名,用于下一步召回可用API,并且保证few-shot只用相同意图的例子。
算法方案:用KNN算法以最近邻的意图替代目标意图。使用编辑距离(Edit Distance)、多种开源Feature Extraction模型,分别召回约3个结果,混合后用改进算法做Mixrank,保证召回率且让优质内容靠前。
API召回
核心目标:根据用户query以及之前得到的意图,召回15个相关的API,用于在prompt中,提示LLM可能有用API的具体用法。 算法方案:用KNN算法以最近邻的意图替代目标意图。使用编辑距离(Edit Distance)、多种开源Feature Extraction模型,递进式的召回6个意图相同例子,将例子用过的API作为相关API。
机器学习
采用LoRA进行大模型微调。LoRA 的全称是 Low-Rank Adaptation of Large Language Models(大型语言模型的低秩自适应),是一种用于高效微调(Fine-tuning)预训练大模型的技术,尤其在参数量巨大的模型(如 GPT、Stable Diffusion 等)中广泛应用。
模型:
- Erlangshen-SimCSE-110M-Chinese
- glm-4-9b-chat
- m3e-large
- multilingual-e5-base
源码结构
按step顺序一步一步跑。若多份代码step名相同,都要跑一边,代表了不同模型在此阶段的不同操作,不会互相覆盖。所以依次把所有文件都跑一遍!
- step1.x代表了数据准备工作,已经把训练阶段的注释,只留下推理。
- step2.x代表了推理工作,具体操作是先把训练好的lora和模型合并保存,然后用vllm加载并贪心推理。
- step3.x代表了后处理操作,具体操作是依次矫正 API,产品名,tool_name,api_name。
- step4.x代表了ensemble操作。
源码文件列表:
- step1.1 get_name.ipynb
- step1.2 get_tool.ipynb
- step1.3 get_api.ipynb
- step1.4 e5_6_prompt.ipynb
- step1.4 sim_5_prompt.ipynb
- step1.4 sim_6_new_prompt.ipynb
- step1.4 sim_6_no_tool_prompt.ipynb
- step1.4 sim_6_prompt.ipynb
- step2.1 inference.ipynb
源码开源协议
作者:为一等奖获得者
团体:Shoreline Dawn/海岸黎明
彭欣怡 华东师范大学 Team Leader:研一在读,擅长统计理论,数据分析与策略设计,负责算法设计。
马千里 Shopee Team Member: 稍微会点混排,负责工程实现。
戎妍 香港科技大学(广州) Team Member:研一在读,研究方向为多模态生成及音频生成,负责分析。
四、获取案例套装
1)大语言模型:glm-4-9b-chat
2)文件包大小:1 GB 获取:泛金融业自然语言处理案例套装