不用寫程式也能做一個聊天機器人! Azure Custom Question Answering 手把手教學

Ashe Liao
Ashe’s tech talks
13 min readJun 22, 2022

Part 1. Azure Custom Question Answering 是什麼?

講到人工智慧,Azure 最為人熟知的服務無非就是 Cognitive Service — 認知服務,裡面有著包羅萬象的服務,從影像識別到語音辨識再到知識圖譜,有將近 20 種服務可以取用,微軟也貼心地把這些服務做成可以呼叫的 API 形式,讓開發者省去模型部署和後續維運的成本。

QnA maker 作為過去 Cognitive Service 中的對話機器人服務擔當,即將於 2025 年退役,微軟將所有和文字分析的服務一併整合到新的 Azure Cognitive Service for Language 中,其中 Custom Question Answering 就取代了 QnA maker 的角色。

回到今天主題,Custom Question Answering 作為 QnA maker 的接替者,同樣具備友善的 web GUI 介面可以新增問題和回答,同時也開發了新的功能,就是可以直接匯入線上網站的 FAQ 來做為知識資料庫,省掉過去要將其一筆一筆建立到知識庫的時間,同時建立完成後,也可以透過 Azure Web App 服務將你的聊天機器人部署成一個網站供其他人使用!

而且,完全不用寫程式! 是的,就如同過去 Cognitive Service 的優良傳統,從建立服務到訓練對話機器人再到部署網站,一行程式碼都不用寫!

我們今天的目標,就是透過問答集訓練我們的對話機器人,讓機器人成為能夠回答相關問題的客服機器人,再將這個機器人部署成為一個網站,讓其他人透過電腦或手機可以直接和這個機器人對話。

這樣的服務,非常適合在期末專案或黑客松呈現,話不多說,我們就馬上開始!

Part 2. Azure 訂閱環境建立及設定

首先第一步,你必須要有一個 Azure 帳號,如果你還沒有 Azure 帳號,可以透過信用卡申請 200 美金的免費額度,如果你是學生,則不需要信用卡就可以申請免費的 100 美金,我將過去寫的 Azure 免費額度申請教學連結放在此處

有了 Azure 帳號後,首先讓我們登入到 Azure 的環境: portal.azure. com

在瀏覽器輸入 portal.azure.com 並登入自己的帳號就能看到上圖的畫面

點擊左上的「建立資源」並在搜尋框輸入 「文字分析」就會找到這個服務,他就是我們今天的主角啦!

接著點擊建立,在這個畫面,我們要先把右邊的「自訂問題解答」功能打開,開啟這個功能後,我們就可以自訂問題以及回答,開始實作自己的對話機器人,選取後點選「繼續建立您的資源

在接下來的這個畫面,我們需要輸入此服務的設定細節,完成這個頁面的設定後,就可以部署此服務啦!

首先,我們先新增一個「資源群組」,資源群組跟資源之間的關係,簡單比喻就類似班級跟學生的概念,可以想像每個資源(學生)都需要對應到一個資源群組(班級),但一個資源(學生)只能屬於一個資源群組(班級),一個資源群組(班級)卻可以有很多資源(學生),彼此之間存在這樣的從屬關係。

點擊畫面「新建」就可以新增一個資源群組,資源群組的名稱可以依照自己的喜好設定。

接著,我們要為這個服務建立名稱以及對應的訂價層,也就是服務的收費方式,名稱同樣可以按照自己的喜好建立,訂價層的部分則建議先選擇 Free 層級,但須要注意免費層一個月只有五千次的使用次數,對 demo lab 或學生的專案其實已經非常夠用。

我們再將畫面往下拉,可以看到「自訂問題回答」,如先前所說,設定此服務後我們就可以建立自訂的問題和回答,在這個區域,我們維持本身設定選擇 Free 層級即可。

大家會發現,使用這樣的服務,其實可以在很低的成本下就開始,畢竟我們只要不超過使用限制,都可以在免費訂價層中進行使用而不會有服務中斷的問題。

最後在「負責任 AI 注意事項」打勾就完成設定囉,完成設定後在畫面左下角點選「檢閱 + 建立」。

點擊後,畫面會自動跳轉進行服務的驗證,驗證通過後就可以點選「建立」,同樣的,畫面也會自動跳轉,開始進行服務的部署。這個步驟大約需要五分鐘的時間來完成建立。

幾分鐘後就可以看到畫面跳轉成部署完成的畫面,此時點選「前往資源群組」。

畫面跳轉後,就會出現我們剛剛新建立的一系列服務,我們點選其中的「語言」服務。

接著,點選「開發」並將畫面略微往下拉,就可以看到「使用 Language Studio 自訂您的語言服務」接著點選「開始使用」。

Part 3. 設定 Language Studio

在上一個步驟中,我們完成了 Custom Question Answering 的設定,同時也就會自動開啟一個新視窗,在這個畫面中我們點選「Sign in with Azure account」畫面就會自動跳轉。

進入到 Language Studio 後,需要選擇剛剛設定的環境並按下 Done,系統就會自動把我們的環境建立好。

正式進入 Language Studio 後,我們將畫面往下拉,可以找到一項名為 Custom Question Answering 的服務,點選 Open。

Part 4. 開始使用 Custom Question Answering 服務

首先,我們先來新增一個 Project,這邊建議選擇第一個為不同的專案選擇不同的識別語言,這樣之後的專案會有較大的彈性,選擇後點選 Next。

接著設定這個服務的名稱,同樣名稱可以依照自己的喜好設定,並且要選擇要使用的語言,常用的有英文、繁體中文等,也有簡體中文、日文等語言可以選擇。

在這個頁面,也可以設定如果未來對話機器人無法找到該題答案時的預設回答,可以做些許的客制化,例如將 support email 放於此處等。

完成設定後點選 Create Project,就可以進入知識庫的設定。知識庫是對話機器人的大腦,我們將這些預設的 Q & A 輸入進資料庫,並讓 AI 學習這些內容,讓 AI 可以為我們回答,同時也不必擔心如果問的問題沒有符合預設的問題題目怎麼辦,Azure 的服務也有同步使用語意分析服務技術,換句話說,就算使用者沒有用完全一樣的字眼,只要差不多意思,我們都可以匹配到同一個問題集合。

在這個畫面,我們點選 Add source 並選擇 URLs,我們的目標就是透過網站上已經有的 Q & A 問題集來作為我們的知識庫。

同樣的,也可以透過 pdf, txt, docx, xlsx 等檔案上傳已經整理好的 Q & A 問題集,同樣知識庫會自動識別其中的問題集。

接著,我們要用衛福部疾管署的新冠肺炎問答集作為我們的知識庫,連結請點此處

我們複製這個網站連結並回到我們的 Lauguage Studio,點選 Add url 並將連結貼上後點選 Add all。

稍等片刻,系統就會自動將網頁上的 FAQ 載入並輸入進知識庫中,我們可以點選左側的 Edit knowledge base 來確認問題和回答是否都有被正確載入。

從上圖可以看到,我們已經成功載入所有的問答集並成為我們的知識庫,我們可以點選圖中的 Test 來測試一下這個對話機器人是否有成功載入問答集。

我們來嘗試問其中的一個問題「什麼是冠狀病毒?」並輸入到畫面右下角的測試欄位,答案就會自己跑出來啦!

接著我們可以改成問「冠狀病毒是什麼?」或是「何為冠狀病毒?」,會發現透過 AI 語意分析,可以將並沒有預先輸入的問題進行 entity 的定義並將這個問題匹配到適合的答案,換句話說,不用太擔心使用者問的問法跟我們預設的不同,會讓對話機器人找不到答案。

但,如果我們今天真的問了一個知識庫沒有的問題,同時這個問題也跟原先設定的知識庫問題沒有太大的關連,會發生什麼事情?

舉例,我們問「你今年幾歲?」會發現對話機器人回答的是預設未找到答案的回答,也就是說這個問題無法透過語意分析將其識別到任何一個預先定義好的問題,也就會因此讓對話機器人無法找到對應的答案。

這樣怎麼辦呢? 沒關係,我們可以使用自訂問答集的功能,直接手動新增這個問題,同樣在編輯知識庫的頁面中選擇 Add question pair 就可以新增自訂的問題和回答。

在這個頁面,我們可以新增一個自定義的問題「你今年幾歲?」以及回答「年齡不過是一個數字而已」,這個回答,我是參考 Siri 的 :)

輸入完畢後,要記得打勾,送出並且存檔,才算有完整地將這個自訂問答放入知識庫中。

存檔成功後,我們重新來做一次測試就可以發現,對話機器人已經成功學習到我們剛剛的問答,可以正確回答出「年齡不過是一個數字而已」這個有好玩又有趣的回答。

Part 5. 部署對話機器人服務

千辛萬苦終於完成了對話機器人! 接著,讓我們就要將這個機器人部署到微軟的雲端,因為總不成每個要使用的人,都要拿著你的帳號權限登入到這個服務裡才能使用,所以我們不僅要設計好對話機器人,更要完成雲端的部署!

首先在左手邊,我們選擇到 Deploy knowledge base 並且選擇 Deploy

接著我們點選 Create a bot,系統就會要我們開始建置一個 Azure web app 來 host 我們的對話機器人

關於 Azure web app,之後會有更詳細的介紹跟大家說明這個服務,目前我們只要先暫時理解成我們可以把對話機器人裝在一個容器中,這個容器會部署成網站形式公開給其他人使用。

在設定頁面中,我們只要選擇好訂價層 (Free or Standard) 再加上新建立一個 App Service Plan 即可,App Service Plan 決定了 API call threshold,所以這邊要視實際情況來進行設定。

設定好後,點選建立,系統就會開始為我們部署 web app 的服務。

部署完成後,點擊前往資源,系統就會跳轉到我們已經部署好的 web app。

接著在左邊功能列選擇「頻道」就會發現系統已經為我們部署好了一個 web chat。而除了 web chat 之外,也可以另外新增如 Line, Facebook, Teams 的連接器,就可以透過這些服務來串接我們的對話機器人。

以 Line 為例子,只要設定好 Line BOT 的帳號權杖就可以將我們的對話機器人與其串接,也是很方便的例子喔!

在上圖畫面,我們點選「Web chat」後點選「Default site」後就會在最右側視窗看到跳出的資訊,其中就包含了系統已經為我們部署好的 web 連結以及祕密金鑰。

接著,我們只要將這個內嵌程式碼中的 YOUR_SECRET_HERE 替換成秘密金鑰再將這個超連結記下來即可

<iframe src='https://webchat.botframework.com/embed/0622-chatbot-bot?s=YOUR_SECRET_HERE'  style='min-width: 400px; width: 100%; min-height: 500px;'></iframe>

下方是替換後的結果

https://webchat.botframework.com/embed/0622-chatbot-bot?s=0yhKe9t0buU.1FSTVeqyR3fRR_qZFOglELhZAngma1QNrxrAZueJLuc

將這個超連結透過瀏覽器開啟,就可以發現我們的對話機器人已經被嵌入在這個網站中了,接著,讓我們來測試一下~

江江! 成功了! 我們終於將對話機器人與網站整合,後續這個網站就可以透過 iframe 或是直接點擊的方式來使用,使用者也不再需要權限才能存取這個機器人。

Part 6. 總結

Custom Question Answering 是微軟新推出的對話機器人服務,宗旨就是希望透過簡單且便利的 UI 介面快速生成問答集資料庫,並能夠在短時間內訓練出含有語意分析的對話機器人,降低開發成本以及後續的維護時間。

希望透過此篇動手實作的文章,能夠在 QnA maker 要退役之前讓老朋友盡快熟悉此項服務,並將過去 QnA maker 的服務漸漸移植到 Custom Question Answering 上;也希望讓新接觸的朋友能夠透過此篇文章認識這項功能強大又好用的服務,同時也能夠在不需要寫程式的前提下訓練出自己的對話機器人並將其部署成雲端服務!

已經有一年多的時間沒有寫技術文章,希望這篇文章大家會喜歡! 如果你覺得這系列的文章對你有幫助的話,請不吝拍手或留言,你的支持是我寫 Medium 的最大動力。

--

--

Ashe Liao
Ashe’s tech talks

Azure Solution Specialist, Microsoft Taiwan | Microsoft 15th MTC TAI | NTU BDSRC RA, DSSI TA