Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2461038
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类: 大数据

2014-08-04 14:05:19



这篇主要来基于查询串 “怎么做宫保鸡丁” 来介绍一下pattern_server是如何基于配置的模板文件以及上游(broker)给query的标注信对query进行意图识别的。

输入信息

美食类的模板配置文件在()中有介绍,这里不再重复,下面是broker给 pattern_server的输入接口(common_request)的信息的一部分。entity_terms给出了query中[start,end)范围内的query片段的type_str,这个type_str和用户在模板中配置的一致。
entity_terms {
text: "宫保鸡丁"
start: 6
end: 14
type: 54
type_str: "美食"
find_source: "double_array"
}

匹配算法

目前的配置分为四个层次,即 模板单元,模板,语义片段,入口,对应于模板中的四个层次。

(1)模板单元匹配

第一种为词表,用<>表征,目前的实现方法是把<>中都加载的trie树中,每个<>用个一个unit_id来表征,通过逐字扫描query,查找query在trie中的前缀匹配,对query“怎么做宫保鸡丁”,可以得到 “怎么” “做“ 命中了 下面模板中的 模板单元
<怎么|如何> 以及 <做|炒|炖|煲|烧|煎|炒|烹|炸|涮|溜|弄> 。

<怎么|如何><做|炒|炖|煲|烧|煎|炒|烹|炸|涮|溜|弄><好吃|>

第二种为实体,用()表示,目前的实现方法是从上游的获取entity_terms取得,对于query”怎么做宫保鸡丁“,可以得到 type_str 为”美食“ 的 query片段 ”宫保鸡丁“ 命中了。

第三种为*,用()表示,可以匹配任意字符片段,可以通过[min:2&max:10]来限制*语法匹配的长度,目前的实现方法是穷举 * 所有可能的匹配片段。query ”怎么做宫保鸡丁“不涉及此语法。

(2)模板匹配

模板匹配基于匹配的模板单元信息输出模板的匹配信息,模板的匹配基于穷举的思想,加上一些剪枝。还是以下面的模板为例,该模板包含三个模板单元,那么输入模板单元信息,可以表示成为{ [1](0,4) [1](4,6) [1](-1) } 其中[1|0]表示该模板单元是否亏忽略,1表示可忽略,(0,4)表示该模板单元匹配的位置为[4,6),-1表示没有配置位置,注意包含模板单元信息为 [0](-1)的组合(即 不可忽略,没有匹配)可以剪枝。

<怎么|如何><做|炒|炖|煲|烧|煎|炒|烹|炸|涮|溜|弄><好吃|>

匹配的过程主要考虑到以下几点:

(1)组成模板的有效模板单元的匹配位置需要连续 (有效的模板单元,指的是模板匹配位置中包括该模板单元)
(2)当模板单元可以忽略时,模板单元不一定需要成为有效模板单元,因此对于上面的模板,可以命中query片段 ”怎么做“ ”怎么“ ”做“

当然由于这两点在程序中表达的时候可能碰到其他的情况,比如相邻模板单元匹配位置不连续的时候,如果前面的模板单元都可以忽略,则可以从之前的某个可忽略的模板单元为开始,重新判定。

(三)语义片段匹配

语义片段的匹配主要是模版的匹配,只要语义片段中的有一个模版匹配 ,那表示该语义片段匹配成功,对于query”怎么做宫保鸡丁“ 命中了语义片段 meishi 和 intend_key,

(四)入口匹配

入口匹配需要保证每个语义片段都匹配成功,此外需要保证匹配的语义片段的区间没有重叠(可以不连续),并且需要进行覆盖率计算,由于可以语义片段可能有个多个匹配的模版,因此需要得到entrace_id和 匹配template_id列表的所有组合,而每个template_id对应的PosPair也会有多个,因此需要找到每个template_id的组合对应的所有的 PosPair的组合。这个两个步骤分别通过GenEntranceTemplateList 和 GenCombinationPospairList 两个函数来完成。对于每个入口选择覆盖率最大的组合,取覆盖率最大的入口作为最终结果。 query ”怎么做宫保鸡丁“ 命中入口 {dish}{intend_key} cmd="send" box_id="331682"

阅读(1938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~