2025-06-05 09:21:22 +08:00
|
|
|
|
# 意图识别和槽位抽取模型训练和推理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 项目概述
|
|
|
|
|
|
本项目
|
2025-06-05 09:37:29 +08:00
|
|
|
|
1)通过大模型提示词实现将用户的多轮问答,还原出用户问题
|
|
|
|
|
|
2)通过训练百度的ernie和uie模型,实现意图识别和槽位抽取的目的。
|
|
|
|
|
|
3)对抽取出的槽位信息进行标准化后再返回
|
2025-06-05 09:21:22 +08:00
|
|
|
|
意图识别:即根据用户问题 返回用户的意图类型
|
|
|
|
|
|
槽位抽取:即根据用户问题 返回用户的问题中的槽位信息(对应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模型到服务器
|
|
|
|
|
|
|
|
|
|
|
|
## 项目接口
|
2025-06-05 09:37:29 +08:00
|
|
|
|
意图识别和槽位抽取api(在下面两个api的功能基础上增加了多轮问题的还原和槽位标准化):
|
2025-06-05 09:21:22 +08:00
|
|
|
|
POST:http://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:
|
|
|
|
|
|
POST:http://192.168.0.37:18074/intent_reco
|
|
|
|
|
|
Body:{"user_id":"3bb66776-1722-4c36-b14a-73dd210fe750","text":"打开众兴-草庙乡牵引站220kV电缆线路工程(土建部分)(PROJ-2023-0328)一般跨越施工措施"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
槽位抽取api:
|
|
|
|
|
|
POST:http://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":"具体的作业计划内容"}]}
|