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

Modifier的撰寫

olami     2017-08-01 14:12


大家好,今天我們要學習 OSL 語法描述語言的重要成分:Modifier。


一、什麼是 Modifier?

Modifier 是 OSL 語法描述語言的一個重要部分。

它是用來描述文字的操作意圖的符號。

換句話說,Modifier 也可以理解為是對語意的一種注釋方式,我們在 Grammar 裡加入 Modifier 來方便我們了解 Grammar 所代表的相應意圖。


二、Modifier 的作用是什麼?

Modifier 的主要作用就是用來傳遞訊息。

在講Slot 的時候,我們也提到過,Slot 也是用來傳遞和提取訊息的;聽起來似乎和 Modifier 差不多,但是它們有著非常大的區別。

Slot 主要是用來提取語料裡的訊息,而 Modifier 主動去加上其他的訊息。

也就是說,在編寫 Grammar 的時候,Modifier是為了拿到某個訊息而特意加上去的。

如果一條 Grammar裡加入了 Modifier,那麼當這條 Grammar 被語料匹配上之後,系統就會反饋 Modifier 裡傳遞的訊息給你。


三、Modifier有哪些的類型?

Modifier 可以分為兩種類型:Global Modifier 和 Slot Modifier。

Global Modifier 一般用來表示一條 Grammar 的整體語意,在一般應用裡它可以對所寫的 Grammar 進行語意分類。

舉個例子來說明,我們來看這兩條 Grammar:

<chariqi>:查一下今天是幾號

<查詢日期>:查一下今天的日期

它們都是關於要查詢日期的說法,但是表達方式不一樣。

如果這時候我們為它們分別定義一條可以表達查詢這個意圖的 Modifier,那麼當我們進行測試的時候,不管匹配上的語料是「查一下今天的日期」,還是「查一下今天是幾號」,系統都能知道,這個句子是一個和查詢有關的說法。

Slot Modifier 是為某個 Slot 的特殊操作設定的 Modifier,必須要先有 Slot,才能有 Slot Modifier。它們兩個出現在 JSON 結構語意裡的位置不同,語法規則也不一樣。


不過,在我們實際操作裡,使用到 Slot Modifier 的時候比較少,常用的是 Global Modifier,對於 Slot Modifier 大家只需要簡單了解就可以了。

在接下來的重點部分,關於 Modifier 的撰寫,我也主要給大家介紹 Global Modifier。


四、如何撰寫 Modifier?

Global Modifier 可以這樣寫:

<{@=intent}>

這個式子是一個固定表達式,前後符號都是固定搭配,不能隨意移動也不能改變,而 intent 代表的是開發者可以的自己定義的意圖描述詞,也就是 Modifier 的內容,這個根據自己的需要來決定。

不過在這裡,要提醒大家注意的一點就是,在書寫的時候千萬不要漏掉這個表達式裡的任何一個符號,不然都有可能會出錯,要仔細一點。

可以看這個例子:

<{@=tingge}>

在這裡,這個 Modifier 它表達的意思就是「聽歌」,而聽歌是我們自己定義的。

如果你在寫 Grammar 的時候,覺得一個 Modifier 不夠,想要表達更加詳細的訊息,我們就可以在 Global Modifier 裡同時使用多個 Modifier,每個 Modifier 之間用「&」符號連接。可以這樣寫:

<{@=intent1&intent2&intent3...}>

可以看下方的例子:

<{@=tingge&liuxing&qingge}>


我們同時使用了三個 Modifier,聽歌(tingge)、流行(liuxing)和情歌(qingge)。


五、在 Grammar 裡怎麼運用 Modifier?

假設我們寫了一條 Grammar:

<tingge>:我要聽歌


然後我們為這條 Grammar 添加一條 Modifier:

<{@=listenmusic}> 

那麼這條 Grammar 就可以寫作:

<tingge>:我要聽歌<{@=listenmusic}> 


在這條 Grammar 裡,Modifier 它定義了整條語法所要表達的意圖是:listenmusic。

那麼當我們輸入語料:我要聽歌。

這樣的例句語料被上面的 Grammar 匹配之後,我們就能從系統裡拿到 Modifier 傳遞的訊息是:listenmusic,那麼你的應用程式就可以知道,這是一個和聽歌有關的說法。

然後就可以進行下一步操作,比如說播放音樂等等。

同樣的,如果你有更多的需求,我們也可以在一條 Grammar 裡同時添加幾個 Modifier,那麼就可以這樣寫:

<tingliuxingge>:我要聽流行歌曲<{@=listenmusic&popular}>


那麼,在這條 Grammar 裡,Modifier 就有兩個意圖:listenmusic 和 popular。

在獲得這兩個訊息以後,你的應用程式透過「listenmusic」可以知道這是一個和「聽歌」有關的說法,再透過「popular」可以更深入了解,你要聽的是流行歌。


六、在 Rule 裡添加 Modifier

那麼接下來,我們再來介紹另一種 Global Modifier 的使用方式,那就是配合 Rule 來使用。

我們可以先為一條 Rule 加上 Modifier,然後再將這條 Rule 引入 Grammar。

那麼,就可以這樣寫:

<rule_name{@=intent}>


「Rule_name」代表要引用的 Rule 的名稱,這樣的描述可以表示:當我們引用的這一條 Rule 規則被匹配的時候,才對 Modifier 賦值 intent。

舉個例子,比如我們寫了這樣一條 Grammar:

<打開電視>:<open {@=啟動}>電視


在這句 Grammar 裡,我們引用了一條 Rule:

<open>:打開|啟動|開啟|開一(下|開)


並且為它添加了一條 Modifier:<{@=啟動 }>

那麼,當我們輸入例句:

打開電視

當這個語料被 Grammar 匹配以後,Modifier 的定義才會生效,系統提供給我們的訊息裡才會顯示:啟動這個注釋。

引用了 Rule 的 Global Modifier 也可以同時使用幾個 Modifier。

可以這樣寫,寫法都是一樣的,不同的意圖描述詞用「&」符號來連接就可以了。


關於 Modifier 的內容到這裡就介紹完了,如果還有疑問,可以到 OLAMI 開放平台的官網上查詢相關的線上說明文件來閱讀,也可以到 NLI 管理系統裡去實際操作來加深理解。

這節課就到這裡,我們下節課再見。




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