影片教學 > OSL語法描述語言

Slot的類型

olami     2017-07-20 23:07


大家好,歡迎觀看OLAMI人工智慧開放平台系列教程。今天我們將為大家講解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點」),但實際上的時間卻完全不同,該怎麼解決這個問題呢?


OLAMI 的解決方法是:除了提取描述時間的字元,我們還把這個時間用JSON做了更標準化的描述。


對於具體時間點的 Slot ,也就是 Timepoint 類型的Slot,OLAMI會給出一個推薦值(Time_Recommend)。

比如說「早上8點」這個值,OLAMI會自動將時間補全,默認為當天的早上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   |   意见反馈