發表文章

目前顯示的是有「QnA Maker」標籤的文章

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

微軟認知服務中的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 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...

微軟認知服務中的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 服務名稱就行了。 而步驟三,也只是要你輸入...

微軟認知服務中的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 Service的Knowledge Base加上共同管理者

圖片
QnA Maker正式版(GA)之後,在建立與權限維護上改變了不少,總的來說,就是改以Azure作為管理的核心,因此你會發現,你不再能夠直接從QnA Maker的管理站台( https://www.qnamaker.ai )去設定共同管理者,取而代之的,你必須從Azure Portal來設定。 當你要為某一個共同管理者設定權限時,你必須先在Azure Portal找到該QnA Maker的Cognitive Services服務,然後選取存取控制(IAM): 接著點選『新增』來加入新的用戶,並且在角色選擇『參與者』,在底下的『選取』文字方塊中直接輸入其 Microsoft Account,然後將其加入即可。 但請留意,這不會立刻生效,被加入的用戶會先收到一封mail,被邀請加入該目錄(Directory),收到Mail後該用戶要底選Get Started: 這會讓該用戶加入此目錄,然後才能夠存取該服務。 同樣的,這個作法也會讓該用戶在QnA Maker的管理站台( https://www.qnamaker.ai )中可以自由建立新的Knowledge Base,而帳就會算在你剛才授權的那個QnA Service與其所屬的訂閱(Azure Subscription)頭上: 此外該用戶也會被加入所屬的Azure AAD目錄中,如果要移除權限的時候也別忘記了唷。

建立QnA Maker時的小陷阱

圖片
先前介紹過,可以輕鬆實現自然語言客服的 QnA Maker 已經正式GA,因此,建立該服務需要到Azure站台上。我們知道Azure站台上的服務都有免費的選項可以用,QnA也不例外,因此你建立QnA Maker時候,可以很大膽的選擇底下的F0方案,而底下的Search Pricing tier也可以選擇F方案,大多Azure上免費的方案都是F開頭: 這樣就高枕無憂了嗎? 理論上是的,但有學員反應他的Azure被收了大錢,Why?不是F嗎? ㄟ…部分是的。 請看上圖的英文字部分,QnA Maker需要一個Azure Web Site,而建立QnA Maker時候,系統預設幫你開了一個S1(Standard)等級的Web Site,這S1等級的web App可是2000多台幣每個月啊… 這故事告訴我們,千萬別忽略網頁上不起眼的訊息,特別是英文的。 如何解決呢? 請找出該自動建立的WebApp(你設定他名字的,所以你應該找的到),將其改為(降級)為F1或D1即可: