Database Q/A Chatbot场景下自然语言查询实体/槽位识别方法咨询
数据库QA聊天bot实体/槽位识别落地方法
你这个固定表结构的NL2DB(数据库自然语言接口)场景有天然的信息优势,所有合法的实体值都已经存在于你的数据库对应字段中,不需要依赖NER模型泛化识别未知值,用「离线词库召回+上下文规则消歧」的混合方案就可以解决你遇到的两个问题,具体实现步骤如下:
1 候选实体召回层(解决未训练值识别问题)
- 先导出数据库中4个字段的所有唯一值,构建带标签的离线词库,每条数据格式为
(实体值, 所属字段),例如("A", "Interns")、("Mechanical Engineering", "Branch") - 对用户输入的自然语言问句,先做文本切分,将所有连续文本片段和离线词库做模糊语义匹配:中文场景可用轻量向量模型text2vec-base-chinese,英文场景可用all-MiniLM-L6-v2,匹配阈值设为0.8~0.9即可,召回所有得分超过阈值的候选实体
- 额外补充格式校验规则:符合YYYY-MM-DD等常见日期格式的片段自动归为
Birthday候选,纯数字且符合实习生薪资范围的片段自动归为Salary($/H)候选,进一步提升召回率
2 槽位归属消歧层(解决句式变化适配问题)
- 先提前梳理每个字段对应的触发词词表,例如:
- Interns触发词:实习生、intern、姓名、名字
- Branch触发词:专业、系、branch、部门
- Birthday触发词:生日、出生日期、出生年月
- Salary触发词:薪资、工资、时薪、salary
- 计算候选实体和各字段触发词在问句中的字符距离,距离越近归属对应字段的概率越高:比如问句中「Mechanical Engineering」离「Branch」的距离只有3个字符,直接判定归属
Branch字段 - 补充多实体拼接规则:如果多个同类型候选实体中间出现「和、与、and、or」等连接词,直接将这些实体打包为数组归到同一字段下,即可覆盖你提到的同时识别A、B、C三个实习生的需求
3 兜底方案:小样本LLM提取
如果遇到规则覆盖不到的特殊句式,可以直接用大模型做兜底提取,不需要微调,写死prompt模板即可:
现有一张实习生信息表,包含Interns(实习生姓名)、Branch(所属专业)、Birthday(出生日期)、Salary($/H)(时薪)四个字段。 用户提问:{此处替换为用户实际提问内容} 请提取提问中对应上述四个字段的实体,仅输出JSON格式,不需要任何额外解释。如果某字段没有对应实体就不输出该字段。
该方案对句式的适配性极强,只要用7B参数以上的开源大模型,准确率可以稳定在95%以上。
内容的提问来源于stack exchange,提问作者Jay Shukla
相关产品推荐
相关产品推荐

