2019年1月25日 星期五

Microsoft Cognitive Services 系列文章總索引

Microsoft Cognitive Services (0) - 讓你的App走進人工智慧的大門
Microsoft Cognitive Services (1) - 使用Computer Vision API辨識人臉
Microsoft Cognitive Services (2) - 使用Vision API進行OCR
Microsoft Cognitive Services (3) - 在你的app中直接加入語音辨識
Microsoft Cognitive Services (4) - 使用Speech API讓你的電腦說話
Microsoft Cognitive Services (5) - 使用Translator Text API翻譯文字

QnA Maker

微軟認知服務(Cognitive Services)中的QnA Maker 系列文 x 6
微軟認知服務中的QnA Maker– (1) 什麼是QnA Maker?
微軟認知服務中的QnA Maker– (2) 建立QnA Maker服務
微軟認知服務中的QnA Maker– (3) 測試與訓練
微軟認知服務中的QnA Maker– (4) 與LINE Bot整合
QnA Service的Knowledge Base加上共同管理者
建立QnA Maker時的小陷阱

Bot Framework相關:

關於bot framework (1) - 緣起
關於bot framework (2) - 建立一個最基本的bot(v1舊版) - 已過時
關於bot framework (3) - 建立一個最基本的bot (v3新版)
關於bot framework (4) - 使用LUIS,讓你的bot理解用戶輸入文字的意義
關於bot framework (5) - 透過.net SDK使用LUIS
關於bot framework (6) - 如何分辨WebChat用戶並保護Secret key

其他

關於Skype Bot (1) - 建立

Microsoft Cognitive Services (5) - 使用Translator Text API翻譯文字

最近我們有很多案子大量地使用到Cognitive Services當中另一個很好用的服務,那就是 Translator Taxt API。這一組服務可以幫你識別文字的語系,當然也可以翻譯文字,用法相當簡單,只需要透過REST API呼叫即可。

使用前同樣需要在Azure站台上申請Translator Text服務(有免費方案),你會得到一組Key,可以從底下位置取得:

好了,有了需要的Key之後,我們就可以透過這組雲端服務來實際來撰寫翻譯程式了。

辨識輸入文字的語系

我們先看文字語系識別的部分,我們一樣透過Windows應用程式來示範,執行結果如下:

上方的文字方塊是我們輸入要辨識的文字,按下『判斷語系』鈕之後你會發現系統告訴我們,最有可能的語系是zh-Hant也就是繁體中文。

這算是相當正確的了,因為句子中有些中英夾雜,這樣的效果算是挺讓人滿意了。

我們來看程式碼,主程式只有兩行:

上面這段程式碼沒什麼內容,純粹就只是呼叫一個Detect方法,該方法是我們撰寫來透過http post呼叫遠端的辨識服務的,程式碼如下:

上面這段程式碼其實也非常簡單,透過HttpClient進行一個http post呼叫,呼叫的endpoint是:

https://api.cognitive.microsofttranslator.com/detect?api-version=3.0

然後把要辨識的文字text轉成JSON以body傳給該endpoint。比較需要注意的是,必須把剛才申請的key以Ocp-Apim-Subscription-Key這個header name一併傳遞過去。

取回結果後,我們再反序列化為物件,就完成了唷。由於辨識可能會有多種結果,所以回傳的物件result,我們取第一組辨識結果result.FirstOrDefault(),透過language屬性取得語系,透過score取得分數:

這個分數是辨識的可靠度,倘若用戶輸入的文字可能符合多個語系,可以透過這個score取得最符合的語系。

即時翻譯輸入的文字

接著我們來看文字翻譯的功能,使用的方式也非常簡單,我們先看執行的結果:

當我們按下翻譯鈕,底下出現的是翻譯後的結果,由於我們的目標語系是en(英文),Translator Text API很順利的把上面的文字翻成英文囉。

主要的程式碼如下:


我們建立了一個Translate方法,輸入的參數有要翻譯的文字text以及目標語系languageCode,微軟翻譯的功能透過http post呼叫,endpoint為:

https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=LanguageCode

你會發現翻譯的目標語系這個參數是放在endpoint URL中的,而要被翻譯的文字則是透過http body以JSON的形式傳遞給endpoint,同樣的,不要忘記把剛才申請的key以Ocp-Apim-Subscription-Key這個header name一併傳遞過去。

透過httpClient的SendAsync()方法呼叫之後,再把取得的結果反序列化為JSON,就可以很輕鬆的得到翻譯的結果了。因此我們Button中的主程式碼如下:


---

我們把透過Translator()方法翻譯的結果result,取得其中的translations物件,然後抓取第一組翻譯結果(to),就可以得到翻譯的答案了。

沒了,就這樣。是不是很簡單呢?

對了,為何是『第一組』翻譯結果?難道可能會有很多組答案?

其實我們是可以在endpoint放入多組目標語系的,例如:

https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=de&to=it

上面這樣的設定,會讓Translator Text API同時翻出兩種目標語系,德文和義大利文,所以translations物件中是可能有多組結果的,只是上面的範例我們只指定了一組,因此以FirstOrDefault().to抓第一組的翻譯結果就可以了,很簡單吧。

前面提到過,這個ranslator Text API相當好用,翻譯出的結果準度很高,最近我們大量地使用在相當多專案和LINE Bot的設計上,看到這邊你會不會有點躍躍欲試?

建議讀者可以先自行嘗試看看,我們後面會實際介紹如何開發一個LINE Bot翻譯機器人。

如果對MS這個服務有興趣,可以參考:
https://azure.microsoft.com/zh-tw/services/cognitive-services/translator-text-api/ 

它同樣有免費的方案唷。

btw, 既然有了好用的 Cognitive Services,就順手做一個翻譯的LINE Bot吧..

要玩玩看? 搜尋id @ejn1954w 加入即可。
或用手機點選底下連結:
https://line.me/R/ti/p/%40ejn1954w

enjoy~

--------------------------------------------
Microsoft Cognitive Services 系列文章總索引
線上課程:
https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

2019年1月5日 星期六

在LINE Bot中使用Imgur作為圖檔保存位置

先前介紹過Imgur.com可做為開發人員的圖檔上傳位置之後,就有學員們敲碗,要我們具體DEMO一下如何把Chat bot用戶上傳的照片或圖檔存到Imgur.com中。

別急,我們這不就來了嗎?

回頭先討論一下這個需求的背景,過去我們曾介紹過,在開發LINE Bot時若要抓取用戶傳來的圖檔或是照片時,由於該圖檔其實是保存在LINE的伺服器中,且有七天的保存期限,因此若我們要永久保存該圖檔,或做一些加工處理,所採用的方法是,將該圖檔(的binary資料)從LINE取得後,在我們WebHook所在的IIS伺服器上,直接複製儲存一份,然後取得該實體檔案的相對路徑轉為網址。

一般來說這樣做具體可行,但如果考量的進階一點,可能會有一些需要注意的問題,舉例來說,IIS伺服器的硬碟空間如果不足,可能就會發生意外狀況。或是,該WebHook希望能夠支援HA(High Availability)做負載平衡時,也可能會發生問題。雖然,這都是系統架構比較大的時候,才會碰到的狀況,但也不可不重視。

此外,有些圖檔根本是我們的Chat bot在跟用戶對談的過程中動態產生的,產生完後就Push/Reply給用戶,用戶看完可能根本就不打算再看一次(例如即時產生的圖表、照片…等),這類的圖檔儲存在WebHook所在的伺服器根本浪費空間,還得定時去清理,非常不經濟。

那這樣,我們有沒有其他更好的方式處理?

其實,我們可以考慮把圖檔上傳(保存)到第三方的雲端空間,而Imgur.com正好就符合我們的需求。開發人員可以透過Imgur提供的API,把圖檔上傳到Imgur.com並取得該圖檔的URL,如此一來,我們連空間和位置都無須擔心。

具體Imgur API該怎麼使用呢? 這個部分讀者可以參考底下連結:

https://studyhost.blogspot.com/2018/12/imgurcom-api.html

在了解其API的使用方式之後,我們就來看如果要把LINE Bot從用戶收到的圖檔上傳到Imgur.com上,該怎麼做。

我們先看底下這個範例的執行結果:

你會發現最上面一開始用戶傳來一個圖檔,接著LINE Bot把該圖檔上傳到Imgur並取得URL後,將URL顯示給用戶(同時也再一次把該圖檔顯示出來)

看來很不錯,該展示的功能都出現了,怎麼實現呢? 首先,參考上面連結的貼文,你必須先申請好Imgur.com的Client ID與Secret。有了這兩個重要資訊之後,我們來看程式碼怎麼撰寫。整個範例我們放在底下GitHub位置:

https://github.com/isdaviddong/Linebot-Demo-UploadImage2imgur

我們來看主要的WebHook部分:

我們看到WebHook程式碼,一開始幾行只是抓取Web.Config中的資訊,其中包含了我們需要的Channel Access Token以及Imgur的Client ID與Secret。

接著,我們看到下圖的程式碼片段,這部分是WebHook中判斷用戶傳來的是一個圖檔時,所要進行的動作。先看下圖一的部分,主要的動作是透過Client ID與Secret建立出ImgurClient物件,我們待會要透過這個物件把圖檔上傳。

下圖標示二的地方則是透過我們的LineBotSDK取得用戶上傳來的圖檔Binary資料,並存入ByteArray物件中:

最後,上圖三的部分是透過Imgur.API提供的UploadImageStreamAsync(…)方法,把抓取到的Byte資料上傳到Imgur.com並在完成後取得其URL位置。

後面的程式碼也不複雜,下圖A的部分是建立一個TextMessage與ImgaeMsg物件,這兩個物件是要回傳給用戶的訊息,其中包含剛才我們上傳到Imgur.com的圖片的URL(image.Link),這部分我們用TextMessage(文字訊息)物件的方式顯示。而ImageMsg這個物件則是用來顯示該圖片:

接著放入上圖B所定義的Messages集合物件,然後透過ReplyMessage(…)方法回覆(Reply)給用戶,就大功告成啦。

我們再看一次,執行的結果如下:

其實程式碼相當簡單不複雜,有興趣的開發人員可以參考Github上的範例實際製作一次。

--------------------------------------------
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

2019年1月4日 星期五

微軟認知服務(Cognitive Services)中的QnA Maker 系列文 x 6

QnA Maker是MS Cognitive Services中一項頗實用的服務,過去一年,我們碰到很多客戶想要實現Q/A類型的Chat Bot,在企業內(B2E),或是面對消費者(B2C)。在早期,企業其實已經累積很多這種QA的Knowledge Base(可能是Excel sheet, 可能是DB…etc),是否有方法讓這些Q/A直接變成Chat bot的知識庫,讓chat bot稍微有點AI樣子的回覆客戶呢?

QnA Maker是這個需求的最迅速解決方案…而且支援中文。

底下是我整理好的四篇介紹,應該相當完整了,希望有所幫助。

微軟認知服務中的QnA Maker– (1) 什麼是QnA Maker?
微軟認知服務中的QnA Maker– (2) 建立QnA Maker服務
微軟認知服務中的QnA Maker– (3) 測試與訓練
微軟認知服務中的QnA Maker– (4) 與LINE Bot整合

相關文章

為QnA Service的Knowledge Base加上共同管理者
建立QnA Maker時的小陷阱

--------------------------------------------
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

2019年1月3日 星期四

微軟認知服務中的QnA Maker– (4) 與LINE Bot整合

好,接續著前面的介紹,在我們看過了如何從外部工具postman來呼叫QnA Maker之後,接著我們來看,當我們建立知識庫(KB)並訓練好QnA Services之後,要如何與我們的Line bot整合呢?

建議LINE Bot的開發人員可以直接透過我們寫好的範例程式碼來進行,您可以用我們先前在介紹過的方式,使用現成的StudyHost.Example.Linebot套件。

您只需樣建立一個空專案(建議採用.net framework 4.6.1):

記得請務必勾選Web Form與WebAPI,專案建立完成後再透過Nuget安裝StudyHost.Example.Linebot套件:

安裝完成後,你會發現專案中有一個TestQnAController.cs,這個WebHook是我們寫好的範本,你只需要把其中的一些參數置換掉即可:

分別是:

channelAccessToken : 就是你Line bot的channelAccessToken

AdminUserId : 你Line bot的管理者UserId(傳送錯誤訊息用)

QnAEndpoint : 這個參數很重要,必須填寫完整的Endpoint,例如像是這樣 https://xxxxxxx.azurewebsites.net/qnamaker/knowledgebases/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/generateAnswer

QnAKey : 你正式使用QnA Maker的Key

UnknowAnswer : 當找不到符合問題時,預設回答。

當你都設定好了之後,可以透過ngrok或發佈到Azure WebSite上測試,記得要將Line bot的WebHook設定為:

https://你的domain/api/TestQnA

這是因為我們範例中的WebHook的Route是TestQnA:

設定完成之後,你就可以嘗試一下了:

你會發現,你的WebHook的行為已經變成,當用戶傳遞訊息給LINE Bot時,LINE Bott果然會把訊息傳遞給QnA Service並抓取到回答。

而如果QnA Service沒有適合的答案則會出現:

這也是我們設定在UnknowAnswer參數中的預設回答。

接著我們來看一下程式碼,LINE Bot具體到底是怎麼與QnA Service整合的。

套件程式碼說明

你會發現,其實程式碼非常簡單,下圖A的地方我們先判斷用戶輸入的是否為文字(也就是收到的是否為text message),如果是,我們丟給isRock.MsQnMaker.Client這個物件幫我們向QnA Maker詢問答案(該物件中的程式碼會自動幫我們以http post方式去呼叫服務):

39行透過GetResponse(…)這個方法,將用戶輸入的問題(LineEvent.message.text),傳給QnA Service,並且取回答案,要注意的是,前面我們說過,取回的答案可能不只一組,所以40-43行我們透過score(分數)排序,只抓取最高的那一個。

45行是先把要回覆的答案設定為預設回答,如果QnA Maker沒有抓取到答案,我們就會用這個預設答案回傳。

46行判斷如果QnA Maker有抓取到答案,我們就採用QnA Maker的答案,最後透過49行的ReplyMessage回傳,如此就大功告成囉。

直接透過.net API呼叫QnA Maker服務

當然,除了使用我們開發的套件,你也可以直接透過.net 程式碼來呼叫,最簡單的方式就是WebClient物件。

上面這段程式碼透過WebClient,把要問的問題組成JSON型式,以UploadData的方式(其實就是http post)丟給Endpoint,取回結果(JSON)後再透過Newtonsoft反序列化成物件,就可以在程式碼當中使用囉。

至於反序列化時候所需要的物件類別定義,可以參考底下位置:

https://gist.github.com/isdaviddong/6c32ea2f06c60891879c6e953eb61a5b

好啦,看到這邊,你已經會建立QnA Maker並且透過程式碼呼叫它,要撰寫一隻支援Q/A的LINE Bot大概也不是問題囉,這個系列先介紹到這邊,後面我們會再介紹一些具體應用上的範例。

--------------------------------------------
本系列索引: https://studyhost.blogspot.com/2019/01/cognitive-servicesqna-maker-x-4.html
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

微軟認知服務中的QnA Maker– (3) 測試與訓練

接續著前面的介紹。

當我們建立好了QnA Maker的KB(Knowledge Base),並且裡面已經有了一些Q/A資料之後,我們接著可以在QnA Maker的後台進行測試,藉此觀察系統的回答準確率,並且嘗試修正。

要進行測試,你可以點選KB右上角的Test按鈕:

系統將會出現測試視窗,你可以在該視窗中輸入問題,系統會顯示找出的答案。你會發現,你的問題不盡然要和原本KB中的Question字句100%完全一樣,差幾個字其實沒有關係,QnA Service依舊會幫你找到最接近的問題,並且取得該問題相對應的答案顯示。

如果你覺得系統自動搜尋的結果不理想,你可以按下『Inspect』來檢查其他第二、三順位的答案,如果有必要時,可以手動調整:

如果QnA Maker的回答和你的預期不同,你可以選取原本排在第二順位的答案作為回答,或是手動輸入其他更理想的答案。你會發現在答案底下其實都有confidence score,這個分數是QnA Service自動判斷出的可信度,透過你手動的調整,也會影響這個數值得高低。

事實上,你在這個畫面上的測試與糾正的整個過程,就是我們訓練Q/A Service的主要步驟。

別忘了,只要有修改到答案或是有新的Q/A Pair加入,你都要重新按下『Save and train』這顆按鈕,讓系統重整一下索引並且重新訓練,待你覺得QnA Maker的回答你大致都滿意之後,就可以開始撰寫程式碼,正式與你的chat bot連結了。

使用建立好的服務

當我們建立好KB之後,若要從外部(當然也包含我們的LINE Bot)來呼叫,該KB必須先Publish,你可以從管理畫面中,找到Publish按鈕,將其發佈出去即可:

發佈後,你會看到類似底下這樣的http post sample code:

我們的Line bot就可以透過上面這樣的http post呼叫,把從LINE傳來的問題,丟給QnA Service並取得答案。

上圖中的A是KB的guid,而B則是我們呼叫該服務的key。

請注意這個Key,在正式環境中,你應該要使用先前我們從Azure Portal申請到的key。

我們來看一下如何呼叫此API。

我們可以透過坊間常用的工具Postman來測試:

上圖A的部分是完整的endpoint,其中包含了這個KB的Guid,而呼叫時的http header,必須包含Authorization資訊,因此你看到了上圖B中的參數EndpointKey xxxxxxxxxxxxxxxxxxx就是這個驗證資訊。其中的Key,你必須換成先前在Azure上申請到的正式的Key。

此外,我們要把需要詢問的問題,組成JSON字串,在呼叫上述的http endpoint時以JSON Body的方式傳遞給它,結構很簡單,例如:

{"question":"如果有使用上的問題,該怎麼辦"}

OK,完整的呼叫內容是:

POST /qnamaker/knowledgebases/Guid/generateAnswer HTTP/1.1

Host: forbotdesigner.azurewebsites.net

Authorization: EndpointKey Key

Content-Type: application/json

Cache-Control: no-cache

{"question":"如果有使用上的問題,該怎麼辦"}

我們用postman測試,呼叫後,我們會得到類似底下這樣的結果:

請留意,你會發現這組JSON的最外層是answers陣列,這表示,其實當我們把問題拋給QnA Maker,它找到的答案很可能不只一組,而是多組。但每一組都會有score供你判斷評估的準確度。

你會發現QnA Maker把回答以JSON的方式回傳,其中包含了原始的問題(questions)、找到的答案(answer),以及該答案的評分(score)…等資訊。

如此一來,我們就可以透過http post的方式,與QnA Maker互動,詢問問題並取得需要的答案。

先介紹到這邊,下一篇,我們來看如何讓QnA Maker與我們的LINE Bot結合…

--------------------------------------------
本系列索引: https://studyhost.blogspot.com/2019/01/cognitive-servicesqna-maker-x-4.html
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

微軟認知服務中的QnA Maker– (2) 建立QnA Maker服務

QnA Maker是微軟Cognitive Services中的一環,你可以從底下這個獨立的網址進入,大部分建立和管理knowledge base的功能也都在這裡。

https://www.qnamaker.ai/

但是具體要使用該服務前,你還是得要具有Azure帳號,和先前介紹過的LUIS一樣,你必須在Azure Portal先建立好使用QnA Maker時所需要的Key,建立的方式如下。

請透過https://portal.azure.com/ 進入Azure管理站台,在建立資源時,請搜尋QnA Maker即可找到要建立的服務:

建立時,請注意底下的畫面:

上圖中A與D的部分,建議你可以用同樣的名字,因為建立一組QnA Maker服務,Azure portal將會自動為你產生三個資源,分別是index服務、App Web Site、以及QnA Maker本體。

上圖D的部分,就是App Web Site這個網站的名稱。

會要您特別留意,是因為雖然QnA Maker在建立時你可以選擇F0免費方案,該方案讓你可以在每秒三次呼叫以內免費使用,聽起來很不錯,但你別忘了,其實在建立的同時,Azure還同時建立了Search服務以及Web App,特別是Web App在預設的狀況下是個S1等級的標準網站,每個月將會有幾千元台幣的費用。因此,請在建立好之後,自行找到該網站,調整資源大小,以避免被收取較高費用(當然,如果你需要大量使用,對效能來說恐怕S1是比較好的選擇)。

相關的調整辦法可以參考底下連結:

https://studyhost.blogspot.com/2018/07/qna-maker.html

順利的建立好了QnA Maker服務之後,你可以在該服務的Keys選項下找到你所需要的Key:

有了這組Key之後,我們就可以正式的使用該服務了。

建立知識庫

接著,我們回到https://www.qnamaker.ai 這個Portal,在主畫面中你會看到Create a knowledge base的選項:

點選後,系統會引導你透過五個步驟來建立KB。

你會發現,第一個步驟其實就是要你去Azure站台建立QnA Service,而這我們剛才也已經做了,所以只需要在步驟二,選擇你的Azure目錄、訂閱名稱、以及QnA 服務名稱就行了。

而步驟三,也只是要你輸入想建立的KB的名稱,自己取一個方便識別的名稱就好:


接著『步驟四』比較重要,其實也是唯一一個你需要留意的步驟:

由於QnA Maker會幫我們自動建立一個KB,所以,你可以上傳一個包含 Q/A的Excel檔案(上圖B),或是在上圖A的位置提供一個包含Q/A的網頁連結,QnA Maker會自動分析你的提供的檔案或網址,產生出基本的Q and A知識庫。

至於C的部分,是問你要不要幫你自動添加『閒聊』Q/A問答,諸如基本的問候或是些有的沒的的對話,但由於這功能目前只支援英文,因此我們選擇None跳過。

填妥KB的名稱與Q/A來源,最後按下『Create your KB』鈕即可。

QnA Maker會需要一點時間來產生資料庫:

下圖是我們透過QnA Maker建立好的KB部分內容:

而這些資料的來源其實是一個網頁:

QnA Maker會自動分析上面這樣的網頁(或是你上傳的word/pdf均可),在文件中找出QA之後自動產生KB。如果你還想要添加什麼額外的Q/A,可以點選KB紹面的『Add QnA pair』手動加入:

你只需要在上面輸入好Question與Answer欄位中的資料即可。

別忘了若對KB有任何的異動,最後都要按下右上角的『Save and train』鈕:

按下去後需要一點時間,系統會自動索引並訓練,完成候你就可以測試了。

下一篇,我們來看如何測試與訓練QnA Maker…

--------------------------------------------
本系列索引: https://studyhost.blogspot.com/2019/01/cognitive-servicesqna-maker-x-4.html
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

微軟認知服務中的QnA Maker– (1) 什麼是QnA Maker?

前面我們介紹過了LUIS,你大概差不多也慢慢知道了Chat bot要跟人類對談在開發時是有一定難度的。然而,我們大部分時候,也並非真的要讓chat bot和人1 on 1的對談,更多時候我們只是要讓chat bot回答一些知識庫中存在的問題而已。

這個時候,你其實有另外一個選擇,就是我們接著要介紹的QnA Maker 服務,它值得一提的地方是,你可以透過該服務,以REST API的形式,輸入特定的問題,它會自動從知識庫裡面找到最符合的答案。你不需要管intent或entities,只需要匯入Q/A問題來建立知識庫就可以了。

在你開始建立QnA Maker服務前,請先花一點點時間來了解該服務背後的機制。這有助於你在使用該服務時,得以用最經濟(便宜)的方式來運作,同時達成最好的呈現效果。

首先,你還記得底下這張圖嗎?

如果你還有印象,這是我們在前面介紹WebHook的時候談過,你應該也已經知道我們負責回應Chat bot的WebHook就是上圖中的asp.net WebAPI的部分。

好,確定了這個概念之後,我們來看,如果要設計一個chat bot,回覆用戶傳來的各種問題,顯然我們必須把相關的程式碼撰寫在WebAPI(WebHook)那部分。例如,當用戶傳來某個問題,我們就去資料庫中找該問題所對應的答案,找到了,就以ReplyAPI回覆給用戶即可,這意味著,我們應該會需要建立一個類似底下這樣的資料表:

當你有了一個類似上面這樣的資料表之後,用戶輸入了某個問題,你就可以透過SQL去資料庫中搜尋是否有該問題,如果有,則取出答案回覆,聽起來很簡單,但…你會開始碰到幾個狀況…

首先,用戶輸入的問題不可能100%完全一樣,那怎麼找出句子中的關鍵字呢? 又要用LUIS來處理斷句和語意嗎?

其次,當資料庫越來越大時,搜尋的速度就會開始明顯的降低,這時候該怎麼透過索引機制來加快搜尋速度呢?

好, QnA Maker就是這些問題的解答。

QnA Maker的功能

QnA Maker可以透過匯入Excel/Word或是爬網頁抓取資料的方式,自動在雲端建立一分Q & A知識庫(因此我們也不需要自己建立資料庫了),有了這個知識庫之後,我們的WebHook就可以利用REST API呼叫的方式,把用戶傳來的問題丟給該服務,該服務就會以JSON方式回傳最佳的答案回來。

例如,底下這是一個校務資訊的例子,當我們在QnA Maker的管理後台,建立了底下這幾個Q/A之後:

若你問chat bot相關的問題,你會發現chat bot就開始懂得該如回答,底下是QnA Maker 的測試畫面。當我們問系統:

請注意有趣的地方是,用戶輸入的文字可以和資料庫中的Question不完全一樣,QnA Maker會自己透過index/search機制,找到最符合的問句,並且取得該問句的預設答案來回答。

更重要的是,這整個動作可以讓我們透過程式碼,以類似底下這樣的http post方式來呼叫:

這表示,我們在WebHook中,就可以直接以上面這樣的http post方式來呼叫並串接QnA Maker,如此一來,我們就可以透過該服務,輕易地完成一個Q/A LINE Bot了。

知道了概念之後,下一篇,我們來看如何建立QnA Maker。

--------------------------------------------
本系列索引: https://studyhost.blogspot.com/2019/01/cognitive-servicesqna-maker-x-4.html
線上課程:https://www.udemy.com/line-bot/
電子書:https://www.pubu.com.tw/ebook/103305
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

Related Posts Plugin for WordPress, Blogger...

熱門文章