Intention/README.md

9.7 KiB
Raw Permalink Blame History

意图识别和槽位抽取模型训练和推理

项目概述

本项目 1通过大模型提示词实现将用户的多轮问答还原出用户问题 2通过训练百度的ernie和uie模型实现意图识别和槽位抽取的目的。 3对抽取出的槽位信息进行标准化后再返回 意图识别:即根据用户问题 返回用户的意图类型 槽位抽取:即根据用户问题 返回用户的问题中的槽位信息对应api中的参数信息 多轮问题还原:即根据用户的多轮问题和回复 还原用户最终问题

文件结构

项目根目录/
├── api/
│   ├── logs/                 # 运行日志
│   └── standard_data/        #标准化数据本地文件每天凌晨三天通过redis同步
│   └── main.py               #主程序  
│   └── config.py             #配置文件  
│   └── constants.py          #常量定义文件
│   └── globalData.py         #全局数据同步文件类
│   └── intentRecognition.py  #意图识别
│   └── logger_util.py        #写日志文件
│   └── slotRecognition.py    #槽位抽取
│   └── utis.py               #通用具体类
│   └── standard_test.py      #单元测试   
│    
├── ernie/                    #意图训练         
│   ├── data/                 #意图训练数据集
│   └── data.yaml             #意图训练配置
│   └── train.py              #意图训练脚本
│
├── uie/                      #槽位抽取训练 
│   └── data/                 #槽位抽取训练数据集
│   └── train.py              #槽位抽取训练脚本
│         
├── generated_data/               #生成训练数据集目录
│   └── data/                     #训练数据集的中间文件
│   │   └──
│   │   └──
│   └──output/ 
│       │   └── ernie/           #最终生成的用于意图训练的数据集
│       │   └── uie/             #最终生成的用于槽位抽取训练的数据集
│   └── generated.py             #根据意图和槽位数据模版 向本级data目录里产生数据集文件
│   └── 合并数据.py               #将本级data目录里的数据合并到output 的merged_data.json
│   └── 按比例分配ernie数据.py     #将本级data目录里的数据合并到output 的merged_data.json 按比例抽取意图训练数据集到output/ernie
│   └── 按比例分配uie数据.py       #将本级data目录里的数据合并到output 的merged_data.json 按比例抽取意图训练数据集到output/uie

注意第一次训练在联网的情况下不需要提前下载模型ernie和uie模型到服务器

项目接口

意图识别和槽位抽取api在下面两个api的功能基础上增加了多轮问题的还原和槽位标准化 POSThttp://192.168.0.37:18074/agent {"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"送一分公司"},{"role":"assistant","content":"送电一分公司第一项目管理部金上风险等级为2级的有0项3级的有0项4级的有1项5级的有0项有1项作业计划"},{"role":"user","content":"今天有多少项作业计划"},{"role":"assistant","content":"2025-04-25 公司风险等级为2级的有15项3级的有144项4级的有262项5级的有0项有421项作业计划"},{"role":"user","content":"具体作业计划是什么"}]}

意图识别 api POSThttp://192.168.0.37:18074/intent_reco Body:{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750","text":"打开众兴-草庙乡牵引站220kV电缆线路工程土建部分(PROJ-2023-0328)一般跨越施工措施"}

槽位抽取api POSThttp://192.168.0.37:18074/slot_reco Body:{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750","text":"今天芦集变电站有多少作业计划"}

多轮问题还原类实例

需要通过http://192.168.0.37:18074/agent 这个接口去实现多轮还原和意图及槽位的提取

追问类

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"今天有多少项作业计划"},{"role":"assistant","content":"2025-04-25公司一共有421项作业计划分别如下风险等级为2级的有15项3级的有144项4级的有262项5级的有0项"},{"role":"user","content":"作业内容"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"“送一分公司第一项目部金上今天有多少项作业计划"},{"role":"assistant","content":"今天送电一分公司第一项目管理部金上有21项作业计划"},{"role":"user","content":"班组详情呢"}]}

补充类

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"第10项目管理部特高压部门有多少作业计划"},{"role":"assistant","content":"非常抱歉,请问你想查询什么时间的日计划数量查询?"},{"role":"user","content":"今天"},{"role":"assistant","content":"请补充该项目部所属的分公司名称"},{"role":"user","content":"变电分公司"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"第10项目管理部特高压有多少作业计划"},{"role":"assistant","content":"非常抱歉,请问你想查询什么时间的日计划数量查询?"},{"role":"user","content":"今天"},{"role":"assistant","content":"请补充该项目部所属的分公司名称"},{"role":"user","content":"变电分公司"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"第一项目部有多少作业计划?"},{"role":"assistant","content":"非常抱歉,请问你想查询什么时间的日计划数量查询?"},{"role":"user","content":"今天的"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"第一项目部有多少作业计划?"},{"role":"assistant","content":"非常抱歉,请问你想查询什么时间的日计划数量查询?"},{"role":"user","content":"今天"},{"role":"assistant","content":"请补充该项目部所属的分公司名称"},{"role":"user","content":"送一分公司"}]}

序号词指代类

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"送一分公司第一项目部今天有多少作业计划"},{"role":"assistant","content":"您说的项目名可能是第1个 第一项目管理部金上第2个 第一项目管理部(天津),请确认您要选择哪一个?"},{"role":"user","content":"第二个"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"打开合州换流站摄像头"},{"role":"assistant","content":"您说的工程名可能是第1个合州±800千伏换流站电气安装A包(PROJ-2025-0056)第2个陕北-安徽±800千伏特高压直流输电工程合州换流站交流系统调试及特殊试验(PROJ-2025-0159)第3个合州±800千伏换流站工程大件运输工程(PROJ-2024-1194)第4个合州换流站-文都500千伏线路工程(PROJ-2024-1089)第5个合州±800kV换流站电气A包工程调试部分(PROJ-2025-0102)第6个陕北-安徽直流工程合州±800千伏换流站土建A包(PROJ-2024-0312)第7个文都-官山改接入合州换流站500千伏线路工程(PROJ-2024-1090),请确认您要选择哪一个?"},{"role":"user","content":"第1个"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"打开金牛紫蓬工程视频"},{"role":"assistant","content":" 您说的工程名可能是第1个金牛500kV变电站新建工程(PROJ-2024-0866)第2个换流站-金牛500kV线路工程(PROJ-2024-1249)第3个金牛-紫蓬500kV线路工程(PROJ-2023-0503)第4个郑蒲-金河口110kV线路工程(PROJ-2024-0223),请确认您要选择哪一个个?"},{"role":"user","content":"第3个"}]}

综合类(综合以上)

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"宋1分公司第一项目部今天有多少作业计划"},{"role":"assistant","content":"您说的项目名可能是第1个 第一项目管理部金上第2个 第2个</strong第一项目管理部天津请确认您要选择哪一个"},{"role":"user","content":"第1个"},{"role":"assistant","content":"2025-03-28 送电一分公司第一项目管理部金上有2项作业计划"},{"role":"user","content":"2项作业计划是什么"},{"role":"assistant","content":"今天送电一分公司第一项目管理部(金上)有1项作业计划:第1项:工程名称:金上-湖北线路工程(川12标)(PROJ-2023-0152),项目经理:姚永先,班组名称:李洋班组,班组人数:12工作负责人:李洋,安全监护员:张节艳,班组质检员:刘永远,特种作业人员:许龙彪,宋伟云,况旻伦,刘付金,杨博文,徐云孝,,一般作业人员:方友昌,朱刘文,吴怀胜,作业部位:2601~2864作业内容:验收消缺,风险等级:4级风险可能导致的后果:高处坠落、物体打击、触由8+2工况:无"},{"role":"user","content":"班组详情"}]}

{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750", "messages":[{"role":"user","content":"第10项目管理部特高压部门有多少作业计划"},{"role":"assistant","content":"非常抱歉,请问你想查询什么时间的日计划数量查询?"},{"role":"user","content":"今天"},{"role":"assistant","content":"请补充该项目部所属的分公司名称"},{"role":"user","content":"变电分公司"},{"role":"assistant","content":"变电分公司第十项目管理部特高压有2项作业计划"},{"role":"user","content":"具体的作业计划内容"}]}