视频教程 > osl语法描述语言

Slot的类型

olami     2017-07-12 20:14




以下是视频内容文字版:

大家好,欢迎观看欧拉蜜人工智能开放平台系列教程。今天我们将为大家讲解slot的类型。

一、 slot 简介

1、 OSL 语法描述语言中的slot可理解为语义中的变量,用于传递、提取信息

例:

语料:我想听周杰伦的歌。

Grammar:我想听<singer>的歌

在这条 grammar 中,<singer>是我们定义的一个 slot ,它可以匹配上以上语料,并提取歌手名“周杰伦”。

同样的,这条 grammar 还能够匹配以下语料:

我想听张学友的歌。

我想听王菲的歌。

……

这条 slot <singer> 能够提取语料当中歌手名的值,提取了这个重要信息,我们就知道接下来该为用户做些什么,比如播放周杰伦的歌,或播放张学友的歌。

2、 slot 的特性

(1) slot 具有 internal 、number 、float 、datetime 、ext 这5种类型。

(2) 可选择限制 slot 字符长度,即可被接受的最短字符数和最长字符数。

二、 slot 的命名规则

  •  slot 名称必须以英文字母、数字、中文字符或下划线 _ 组成,但第一个字符不能是数字。

  •  英文字母不区分大小写,但由于语义输出格式为小写,因此建议避免使用大写字母来替 slot 命名。

三、 slot 的类型

1、 internal

internal 类型的 slot 为自定义的字符串集合,通常用于描述可穷举的内容。例如:唐宋八大家,家用电器等。 

使用方式:定义一个和 slot 同名的 rule,其所匹配到的词汇会直接赋值给这个 slot 。

例:

Slot:

<musictype>,类型internal


Rule:

<musictype>:摇滚|民族|流行|嘻哈


Grammar:

<grammar>:我喜欢<musictype>音乐


输入语料:我喜欢摇滚音乐

在这种情况下,<musictype> 这条 slot 就能够提取到“摇滚”这个音乐类型的值了。

2、 number

number 类型的 slot 能匹配各种整数的说法。 

如“负三十五”、“贰佰”、“12345”、“一八五七” 分别提取“-35”、“200”、“12345”、“1857” 。

例:

Slot: 

<股票代码>,类型number 


Grammar:

<查股票代码>:<股票代码>是哪只股票的代码


输入语料:八三三零七三是哪只股票的代码 

这时候,我们的 slot <股票代码>提取到的值即为“833073”。

3、 float

float 类型的 slot 能匹配各种浮点数和分数的说法,也可以匹配上整数。 

如“五点八三”、“百分之85”、“20%” 等,分别提取“5.83”,“0.85”,“0.2”。

例:

Slot: 

<风力大小>,类型float 


Grammar:

<调节风力>:帮我把风力调到<风力大小> 


输入语料:帮我把风力调到百分之十

那么,slot <风力大小>提取到的值即为“0.1”。

4、 datetime

datetime 类型的 slot 能匹配各种时间和日期的说法。

具有以下几种子类型: 

• timepoint:匹配确切的时间点。 如“三点半”、“昨天下午”、“7月7日” 等。 

• duration:匹配时间长度的说法。 如“25分钟”,“3天”,“1年” 

• any:匹配任意时间说法。包括timepoint 和 duration 的集合,建议在使用无法确定需要使用的时间类型时使用。 如“每年春节”、“每天8点”等。

(1) timepoint →推荐值(time_recommend)

例:

语料:早上8点提醒我

<提醒我>:<time>[的时候]提醒我 

在这个例子中,slot <time>提取到的值为“早上8点”,但是“早上”这个概念并不确定。如,用户在7月7日所说的“早上8点”实际指的时间是7月7日早上8点,而7月8日所说的“早上8点”是指7月8日早上8点。)虽然我们提取的信息完全相同(都是“早上8点”),但指代的时间却完全不同,该怎么解决这个问题呢?

欧拉蜜的解决方法是,除了提取描述时间的字符,我们还把这个时间用Json做了更标准化的描述。

对于具体时间点的 slot ,也就是 timepoint 类型的slot,欧拉蜜会给出一个推荐值(time_recommend)。比如说“早上8点”这个值,欧拉蜜会自动将时间补全,默认为当天的早上8点;“中秋节”默认为今年中秋节;“8号”默认为今年当月8号。我们将在Json数组里看到时间对应的具体时间起始点。

“早上8点”的 Json 描述如下:

"slot" : [{

              "datetime" : {

                     "data" : {

                                      "endtime" : 1490922000000.0,

                                      "starttime" : 1490918400000.0

  },

                  "type" : "time_recommend"

               },

               “name” : " time",

               “ value ” : "今天8点"

}

]

如果今天是2017年7月8日,那么我们无论是输入“早上8点”,“7月8日早上8点”,还是“2017年7月8日早上8点”,我们在 Json 里看到的“endtime”及“starttime”都是一样的。

(2) duration,repeat → 给出语义的描述(time_semantic)

对于表示时间段,如“1小时”、“3天”这类 duration 时间,以及表示重复时间,如“每十天”、“每天6点”这类 repeat 时间,我们没有办法给出具体的时间点,那么 Json 会对这类时间做出一个语义描述。

例1:“三天”。我们将在 Json 中看到“day”:3 。

{

 "datetime" :

   {

    "data" :

     {

      "sub_type" : "duration",

      "time_struct" :

       {

         "Day" : 3

       }

     },

     "type" : "time_semantic“

  },

 "name" : "testtime",

  "value" : "三天“

 }

例2:“每十天”。我们将在Json中看到具体时间结构(time_struct)。

"slot" : [{

             "datetime" : {

                           "data" : {

                                      "sub_type" : "repeat",

                                                    "time_struct" : {

                                                                "extend_info" : {},

                                                                "repeat_rule" : {

                               "IntervalUnit" : "Day",

                               "IntervalValue" : 10

  }

  }

  },

  "type" : "time_semantic"

               },

               "name" : "testtime",

                "value" : "每十天"

}

]

5、ext

ext 类型的 slot 属于外部类型,其取值范围不是一个有限集合,无法预先定义其可能的内容,或者需要后续应用程序通过特殊方法验证其有效性,也就是一种无法穷举的任意组合。

例:

slot:

<name>,类型ext,minlenght:1, maxlength:4 


grammar:

<call>:打电话给<name> 


能够匹配上的语料:

打电话给小明

打电话给亲爱的

打电话给西门吹雪

……


不会匹配上的语料:

“打电话给移动查话费” 

“打电话给女生聊什么” 

“打电话给客户的开场白”

……

由于 ext slot 的内容没有限定,所以能够匹配上的范围很广,为了有效匹配语料,我们一般会对 ext slot 的字符进行限定。上面的例子中,<name>这个 slot 主要用于提取人名,一个中文字为1个字符,那我们设定最小字符为1,最大字符为4,这样就不会匹配上无关语料了。

当然,除了定义字符的长短以外,开发者们还可以根据程序的需要来对提取的语料进行验证。

最后要提到的是,internal 和 external 这两种类型的 slot 可以设置“主类别”和“子类别”,通过这两个类别的设定可以实现上下文的引用功能。具体的上下文引用功能,我们会在后面的课程中专门为大家讲解。

关于 slot 的介绍就到这里了,以上是这节课的全部内容,感谢您的观看。

Copyright © 2017 威盛电子股份有限公司. All rights reserved   |   意见反馈