微軟認知服務中的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專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

留言

這個網誌中的熱門文章

在POC或迷你專案中使用 LiteDB

使用Qdrant向量資料庫實作語意相似度比對

使用 Airtable 在小型需求上取代傳統資料庫

專業的價值...

周末讀書會 - 一如既往