You are on page 1of 28

槽位识别简介

目录

1. 槽位识别做什么
2. 槽位识别在DA中的位置
3. Slot filling-冷启动阶段
4. Slot filling-数据增长阶段
5. Slot filling-大数据阶段
6. 离线模块
槽位识别做什么
• DuerOS 对用户需求的NLU抽象
• 意图识别->文本分类
• Domain - Intent - Slot
• Domain-Intent:意图识别 • 槽位识别->序列标注

• Slot : 槽位识别

示例:

用户请求 意图 槽位
屏幕亮一点 sys_control.set_brightness device:屏幕,op_type:亮一点
来一首沙漠骆驼 audio.music.play song:沙漠骆驼
每天晚上八点提醒我敷面膜 remind time:20:00,repeat:day, event:敷面膜
迷你世界我要半仙解说版 short_video.play tag:解说 keyword:迷你世界,半仙
拉肚子可以吃什么药 universal_search.medical query:拉肚子可以吃什么药

(资源维度区分:封闭、半开放、全开放) (槽位类型:action、entity、tag、keywords)
槽位识别在DA中的位置
用户说”播放东风破”

语音识别 转成文字

纠错改写 对错误表述纠错

意图识别 识别用户是想听歌

槽位识别 识别槽位song:东风破

意图rank 对不同的意图做评分

bot 检索出东风破给用户播放
Slot filling-冷启动阶段 Wordseg Postag

CustomTag FIR
线上query量级
输入层
每日几十万左右,且质量低,可用性差
各类目准确率和召回率
70%-85%
输入层 Allmatch hmm
KG processor
processor processor
分词,词性等基本特征
Processor层 Grammar Local_lex
crf processor
processor processor
文法层(人力主要投入点)
文法层 Model层
优点:迭代简单,见效快,上线快 Processor 层
缺点:高召回和高准确难两全
model层
优点:拟合能力强,高召回高准确都可保证 Slot-rank层
缺点:对样本质量要求高,迭代速度慢
Rank层
processor层各个processor相互独立产出,rank层
负责把结果merge
冷启动-模型层-Lexparser介绍
示例:
• query:普通版的不要要高清的
• template:[D:hd_common][D:de][D:not_want][D:want][D:hd_high][D:de] hd:5-5:是
• 命中模板则会把第五个模板项的值做归一,归一为:‘是’,同时放到槽位hd中
冷启动-模型层-Grammar介绍
冷启动-模型层-KG介绍
•对query切词,得到ngram(max ngram=10),最大正向匹配去查找kg index dict,得到phrase在词典
中的index
•得到index后,查询tag词典,获得该phrase的tag,
•对合法性检查,主要是匹配的元组必须都match,则存入tuple_path
•按照最长匹配,排序得到所有的tag,检查bitmap的占位,如果没有冲突,则保存。
•这组算法中,主要使用了两个词典:
• phrase->index的词典,可以由phrase查询到phrase对应tag信息的索引
• 示例:修江儿女 31362^B248124^B248125
• index->[元组信息]
• 示例:
• 31362 修江儿女^Afilm
• 248124 冷财振^Aperson_name^B修江儿女^Afilm
• 248125 何盛芳^Aperson_name^B修江儿女^Afilm
冷启动阶段总结

痛点
1 文法层高召回,高准确难两全
从[xxx]到[xxx]->从西二旗到科技园->从百草园到三味书屋
[xxx]到[xxx]有多远->西二旗到科技园有多远->地球到太阳有多远
2 文法层过于臃肿
有声老星图规则百万级别,根本无法维护
3 model迭代慢
线上样本少且质量差
解决方案
1 文法层退居二线,主要负责高精句法,头部实体召回
2 model层负责主要的工作
Slot filling-数据增长阶段 Wordseg Postag

CustomTag FIR
输入层

线上query量级
每日*左右,且仍在快速增长 Allmatch
KG processor
各类目准确率和召回率 processor
crf processor
Grammar Local_lex
80%-95% processor processor
文法层 Model层
当前阶段特点 Processor 层
1 引入先验知识来协助清洗
数据
时效性实 Slot-rank层
2 文法层优化到极限 体标注
3 重点人力在model层 检索数据

先验知识引入
增长-后验知识&先验知识

后验知识——用户通过行为告诉我们的知识 先验知识——用户告诉我们前,
时间 用户query bot
我们就知道了
10:01 播放东风破 为你播放电影东风破 1 人工标注,富集
10:02 播放歌曲东风破 为你播放歌曲东风
2 bot实体库
10:03 我要的是歌曲东风 我猜你要的是不是歌曲东风
破 破 3 检索数据
10:04 是的 为你播放歌曲东风
等…
10:05 傻逼 对不起,小度会努力的
用户告诉我们的知识
1 东风破是首歌
2 播放歌曲东风破解析出东风是不对

数据增长阶段总结

痛点
1 model迭代速度慢,月级别都做不到
2 model维护人力成本高,一个重垂一个人力
3 垂类之间工作不共享,人力浪费
4 线上样本不断增长,crf对大样本拟合效果差
5 线上样本因为asr,检索兜底等原因,准确较低
解决方案
1 以后验知识为基础,辅助先验知识来清洗线上样本,建立正反馈闭环,固化用
户knowledge
2 离线pipeline正式化
3 引入nn来优化
Slot-filling 大数据阶段

线上query量级
几个重点端,每日*万左右
各类目准确和召回: 90%-97%
阶段特点
1 线下模块正式化
2 后验知识引入,形成正向反馈闭环,固化,强化后验知识
3 slot pipeline建立,model迭代速度加快
4 引入nn来提升model表达能力
Slot-filling 大数据阶段-结构
线上模块

Wordseg Postag 粒度树

NER CustomTag FIR


输入层

离线模块

时效性实 Allmatch
体标注 KG processor crf processor 样本清洗
processor
新槽位冷 Grammar Local_lex NN+crf
启动 processor processor processor Pipeline构 Model优
建 化
新知识引入 文法层 Model层
Processor 层 Slot model pipeline

Slot-rank层 Query存储
大数据阶段-模型层-GruCRF
• 语料
• 线上的度秘满意度日志
• 过滤掉低满意数据
• 做边界修正,消歧,补标注等处理
• 特征
• 基础粒度切词
• 词性

• 模型采用的BIO标注标签体系
• B 标签起始边界
• I 标签的中间词
• O 其他标签词

语料示例
大数据阶段-模型层-Multi-task

是什么
多个task之间knowledge共享,带来更好的拟合
效果
Paper
Multi-task Multi-domain Representation
Learning for Sequence Tagging
Meta Multi-Task Learning for Sequence
Modeling
Joint slot filling and intent detection via capsule
neural networks
优点
多个task的共同提升
缺点
model调试复杂,上线复杂
线上其他模块-Rank层
• 利用粒度树的评分特征计算每一个槽位的全局评分
• 目标是寻找紧密度最高的最长子串

每一个节点的RankScore计算方式
粒度树特征
Query:播放天亮以前说再见live版
策略 Query 播 放 天 亮 以 前 说 再 见 Live 版
AllMatchLex Action:播放 Song:说再见
Grammar Song:天亮以前说再见
LocalLex Tag:Live版
BiGRU-CRF Song:天亮以前说再见
CRF Song:天亮以前说再见Live版
最终输出 Action:播放 Song:天亮以前说再见 Tag:Live版
线上其他模块-改写&归一
• 实现了四种改写或归一化操作
• [0] 槽位value归一化: 徐良的歌曲->徐良
• 示例:徐良的歌曲 song 徐良

• [1] 槽位name改写: song->singer


• 示例: song 徐良的歌曲 singer

• [2] 槽位name & 槽位value同时归一化: 徐良的歌曲->徐良 & song->singer


• 示例: song 徐良的歌曲 singer|徐良

• [3] 按name和value拓展slot
• 示例: top_name 排行榜 unit|榜单
离线模块-样本清洗

线上query特点
1 query量级大
2 准确率低
问题
样本质量在90往上,model才会有比较好的拟合效果,如何在保证样本稳定在
90的准确率的同时,保证多样性?

解决方案
基于先验和后验知识的样本清洗
离线模块-清洗方案
样本问题分类和占比
1 边界修正 30%
2 槽位消歧 20%
3 槽位标注 20%
4 低置信样本删除 30%

先验知识和后验知识细分
(飘红为使用中)
1 先验知识
1.1 粒度树
1.2 检索
1.3 实体库
2 后验知识
2.1 满意度分数
2.2 相似query
2.3 度秘ner
2.4 实体满意度概率
2.5 bot检索结果
2.6 session
3 两者混合
3.1 语言模型
离线模块-后验知识-满意度分数

1 是什么
通过用户session,是否快速切换query,播放时长等用户行为特征 ,用
gbdt训练一个model。给一个0-1之间的分数。分数越高代表越被满足

2 效果
大部分类目0.8以上分数,槽位准确率在80往上。

3 问题
高满意度query在意图准确率上能达到90。
槽位有百分之十的gap,是槽位解析错误,但检索兜住了。
离线模块-先验知识-检索数据

1 是什么
query的大搜检索页面,实体会有很大的概率被飘红以及被书名号圈出
来。

2 效果
准度高,摘要和title提供信息量大且全,清洗准确率在90左右
3 问题
速度慢,一天只能抓取百万
离线模块-先验知识-粒度树

1 是什么
基于大搜数据,对query做层次化、多粒度的树形query分析,提供query多粒度的边界
信息。

2 效果
清洗效果准确在80左右,且需要加很多人工rule
3 问题
本身准度在90左右,结果可以作为参考,无法高置信
离线模块-语言模型

1 是什么
基于大搜,度秘的语料做的一个Stupid-Backoff ngram语言模型。详情参看博客(斯坦福
大学自然语言处理第四课) 。对query本身打分,得分越低,代表这个query越不置信。(殷超)
backoff 的意思是如果 trigram 在字典中查不到,无法计算trigram的概率,则回退成计
算 bigram的概率,然后再加权。以此类推,如果bigram无法计算,则用加权的unigram代替。
stupid backoff 则是固定加权系数为0.4,即每次回退,都要乘以0.4。如果是log计算,则是加
上 log(4)。如图公式所示

2 效果
划定区间合理的情况下,各类目准确率在90左右。
离线模块-后验-实体满意的发射概率

1 是什么
对实体的满意度的分数做了一个归一计算。
2 效果
准度在80左右
3 问题
不考虑上下文的情况下,在歧义实体上错误非常严重。语料二期优化
该逻辑被下掉。
离线-验证集构建

• 问题:验证集合质量难以保证:
• 准确性:数据准度
• 丰富性:query的种类多样型难以保证

• 解决方案:多维度,多验证集验证
• 引入多个验证集合,多角度衡量模型效果,弱化单一验证集质量问题
• 高满意度验证集
• 高频次度验证集
• 高频高满意验证集
• teacher平台验证集
• 多验证集合综合归一
• 在各个验证集合上得分的加权和位模型效果的得分。
上线-槽位词典上线与模型训练pipline

文法编辑

上线pipline: 时效性实体例行更新 Mergel主干 自动回归diff Pre-Online 上线生效

NN-Model例行更新

基础特征数据生成 基础数据预处理 具体类目数据预处理 Model训练 自动评估与模型


挑选
Model训练 Dump 原始数据 按基础特征过滤: 非相关语料删除 基础特征选择
pipline: Dump 标注数据 频次过滤 槽位名归一 多种训练方式: 自动验证集回归:
抓取搜索特征 满意度 自定义数据处理 本地版 多验证集综合打
生成粒度分析特征 频次展开 边界对其 远程版 分
生成语言模型特征 消岐处理 等 集群版 生成评估报告
谢谢&QA

You might also like