影片教學 > OSL經典案例

【OSL經典案例】EP13:87分不能再高了

olami     2017-09-26 08:40

成果篇:


教學篇:


實作篇:




大家好,歡迎觀看OLAMI人工智慧開放平台教學影片。

這集的OSL經典案例,我們來給OLAMI打個分數吧!

一起來把「87分不能再高了」,加進OLAMI人工智慧開放平台裡!


一、預設語料:87分不能再高了

我們想要匹配的是「87分不能再高了」,這一類相同或意思相近的語料。

我們來看預設語料還可以有哪些相同或相近意思的表達方法:

87分不能再高
給你87分不能再高了
我給你打87分不能再高了
我給你87分
…

我們可以看到,「87分不能再高了」前面可以加上「我給你」或「給你」;

而「我給你、給你」後面還可加上「打」或「評」。

「87分」這裡的數字部分我們想要能匹配其他任何整數,並回饋到答案當中,所以會用一個Number slot;

而「87分」後面可以有一個語氣停頓,也就是可以加上標點;

「不能」、「再」、「高」分別都有其他相近意思的說法;

最後還有可選(可出現可不出現)的語末助詞。


因此,我們的語料可整理成:我給你、打、87分、標點、不能、再、高、了,這幾個部分,來分別用OSL語法編寫。

其中標點符號以及語末助詞,可直接引用之前建立過的Rule:

<biaodian>:,|。|、|!|?|;|:
<endyuqi>:啊|吧|呢|嗎|啦|阿|呀|喔|噢|哇|唷|呦|咧|哩|嚕|嘍|囉|了

接著就來依序用OSL語法編寫其他部分。


二、「我給你、給你…」以OSL語法編寫

「87分不能再高了」前面可以加上「我給你、給你、我給你打、我給你評」,或者「你」,或者「我給、給」,用OSL語法會寫成:

[[<me>]給<you>[打|評]|<you>|[<me>]給]

這裡用到了已有的兩個Rule:

<me>:我|俺|人家
<you>:你|您


三、運用Number slot代入

「87分不能再高了」,「87」我們預設可以替換成其他任意整數,並且我們希望能回饋到答案當中,所以我們會使用一個Number類型的Slot。

這邊我們可以引用已有的Number slot <number>:

<number>,Number類型,min:1,max:3

我們只要在答案中直接引用這個Slot就可以了,例如:

Ans: 我也一樣給你<number>分喔!啾咪!

那麼當我們輸入的語料為「87分不能再高了」,<number>的Slot值就會是「87」,進而回答:我也一樣給你87分喔!啾咪!

注意這邊我們的Number Slot <number>,無論我們輸入的內容是中文的大寫數字「零、壹、貳、參…」、小寫數字「一、二、三…」,或者阿拉伯數字「0、1、2、3…」,都是可以被匹配的,但系統所提取的Slot值都會是阿拉伯數字的型態。


四、「不能」、「再」、「高」分別以OSL語法編寫

「不能」還可替換成「不准、不行、不可以、不能夠」等等的相似詞,我們在OSL經典案例第11集〈不要碰我肩膀〉裡有寫過這類的語法,這邊我們就可以直接使用:

Template:
<donot>:[=動詞=]不$(動詞)

Rule:
<yao>:要|行|准|可[以]|能[夠]

不能、不准、不行…→<donot(<yao>)>

「再」可以替換成「更」;「高」則可替換成「多」,用OSL語法就會寫成這樣:

(再|更)
(高|多)

五、建立Grammar。

最後我們的Grammar會寫成這樣:

<score87>:
[[<me>]給<you>[打|評]|<you>|[<me>]給]<number>[分][<biaodian>][<donot(<yao>)>(再|更)(高|多)]<endyuqi>*

最後Rule<endyuqi>後面有一個 *,「*」是OSL語法裡的Repeater規則,它可以讓 * 號左側的字元或OSL語法中的元素單位(如Rule),延伸匹配0到N次,

也就是在這個例子中,可以匹配像「87分不能再高了喔」、「87分不能再高啦啦啦啦」,這樣的語料。


六、將Slot寫入答案中。

Ans1: 不管你給我幾分,我948794狂!
Ans2: 我也一樣給你<number>分喔!啾咪!

答案中嵌入Slot<number>,我們的答案就會依使用者輸入的內容來提取Slot值,並替換到答案中。

這個Grammar到這邊就建立完畢,別忘了在OLAMI開放平台發佈後,使用OLAMI語音智慧喇叭DIY開發套件驗收成果喔!


感謝您的觀看,我們下次再見。



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