發表文章

目前顯示的是 1月, 2019的文章

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很順利的把上面的文字翻成英文囉。 主要的程式碼如下: 我們建

在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顯示給用戶(同時也再一次把該圖檔顯示出來) 看來很不錯,該展示的功能都出現了,怎麼實現呢? 首先,參考上面連結的貼文,你必須先申請好I

微軟認知服務(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方式回傳最佳的答案回來。 例如,底下這是一