發表文章

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

在Node.js中使用LUIS

圖片
我們沒事好好的幹嘛去弄Node.js呢? 還會為了誰? 當然就是LUIS。 還記得它吧,我們在很多地方介紹過LUIS,因為它是我們玩chatbot時候做自然語言語意分析(NLP)的要角,如果你忘記了,可以參考… 使用LUIS,讓你的bot理解用戶輸入文字的意義 建立LUIS服務處裡自然語言辨識 使用C#開發Linebot(20) - 不寫一行code完成Linebot的LUIS串接 OK,chat bot寫著寫著,開始有各種不同語言的需求,所以Node.js中使用LUIS也是剛好而已。(後面還有Python在等著) 前面我們介紹過 如何使用VS Code開發Node.js ,其實重點是為了這一篇如何在node.js中呼叫LUIS服務,其實也很簡單,我們可以參考 這篇 裡面的程式碼: 我稍微改了一下,主要是LUIS的app id與Key要換成你自己的(原本程式碼裡面採用.env環境變數,為了說明方便,這邊就先寫死了): 上圖中的App id和Key我換成了一個我訓練好的點餐服務LUIS App,所以我把 q 打成『我要大亨堡』,別忘了,這段程式碼要能運行,你還得用npm裝幾個套件: 完成後,試著按下F5在VS Code中執行app.js,結果如下: 成功的呼叫LUIS服務取得最可能的Intent囉…

使用C#開發Linebot(20) - 不寫一行code完成Linebot的LUIS串接

圖片
前陣子,介紹過如何No Code完成Line bot的開發,如果你錯過了,可以看 這裡 。 No Code當然不是一行程式碼都沒有,只是,程式碼骨架我幫你寫好了。你只需要輕鬆地填入相關的Channel Access Token等資訊即可。 而很多同學不滿足,在我們介紹了 LUIS (Language Understanding Intelligent Services)之後,當然會想,能不能一行程式碼都不寫,就將Linebot的Web Hook串接到LUIS,完成一個能夠更用戶進行自然語言對談的Chat bot? 可以嗎? 沒問題,有人開口就做給你。 請打開VS2015/VS2017,然後建立一個空的Web專案: 這個畫面似曾相識? 當然,前面我們做過啊。請務必依舊選擇.net framework 4.5.2以上。然後,在下一個畫面中,直接選擇Empty(空)的範本類型,然後請務必(一定一定要)勾選WebAPI: 就這樣,VS2015會幫你建立好一個空專案,,接著,重點來了,請安裝一個nuget套件: 前面做過了,我知道,再一次加深印象,在Nuget套件安裝畫面上,選擇Studyhost.Example.Linebot套件: 按下安裝鈕,安裝完成後,你會看到這個套件已經幫你把程式碼都寫好了。只不過,跟上次不同,這次請把焦點放在TestLUISController: 你會發現,TestLUISController這支WebAPI Controller,就是一隻寫好了的支援LUIS的Line WebHook,你只需要把上面的幾個參數填進去就行,分別是: channelAccessToken: Linebot的Channel Access Token AdminUserId: 你建立Linebot的那個帳號(Admin)的UserId LuisAppId: LUIS App的App ID LuisAppKey: LUIS App的Key Luisdomain: LUIS App的domain 上面關於LUIS的幾個參數怎麼來呢?  如果你還對我們介紹過的LUIS有印象,應該會知道LUIS有一個Publish之後的會出現的Enpoint: 其中就有你需要的所有資訊了。 把相關的資訊填入程式碼之後,不用做任何事情,只需要發佈到Azure Web App站台上,並且到L...

使用C#開發Linebot(19) - 建立LUIS服務處裡自然語言辨識

圖片
接下來這幾篇,我們從頭開始談談NLP(自然語言處理),以及LUIS如何跟Line bot整合應用 前言 關於Linebot的開發,最終我們免不了碰到一個問題,要如何識別用戶所輸入的語句? 雖然我們有千百個不願意,Linebot也提供了Template Message之類的選單機制,可以幫助我們降低free style對談發生的機會,但終究,到最後我們還是得讓chat bot面對用戶以文字方式傳來的訊息。 怎麼說千百個不願意? 做一隻chatbot不就是希望和用戶chatting嗎? 話是這麼說沒錯,但截至今天的科技,要做一個答非所問,胡言亂語的bot來 引誘用戶跟你聊天 很容易(別懷疑,很多的chat bot其實目的只是要引誘用戶說話),但要做到有意義的自然語言『對談』,對電腦來說,這依舊是一個非常大的挑戰。隨著你對這個主題研究的逐漸深入,你愈會發現,人腦處理語言的神奇。 前話表過,我們終究要來看,在當前的技術下,如何讓chat bot來識別一段文字。我們在這邊推薦的技術是LUIS。 LUIS全名是Language Understanding Intelligent Services,顧名思義,是一個提供語句理解能力的雲端服務。請留意,LUIS並非去分析語句含意(這是Text Analytics的功能),而是去拆解並嘗試依照句型來判斷一個句子,分類歸納出用戶的意圖(intents)並抓取出句子當中關鍵的entities。 而這個功能,對於我們的caht bot,非常的重要。 由於bot的文字輸入介面很自由,用戶往往可以很隨興的打字輸入,你根本無法限制用戶輸入什麼,以什麼句型方式輸入。而且人很有趣,只要沒有限制,就會竭盡所能地嘗試。此外,也非常有可能因為typo之類的輸入錯誤,導致一個句子在輸入上就有錯別字或是不完整,使得chat bot無法只是抓取特定關鍵字來識別用戶的企圖與目的。 凡此種種,都讓NLP自然語言處理的難度比想像來的高。 你只要開放一個文字聊天機器人,就會有人亂打一些有的沒的,然後bot沒理解出他的意思,他就笑這個bot很笨。(這樣很有成就感?) 因此,就對談機器人來說,首要目標之一就是理解用戶輸入的內容,而LUIS是實現這個功能的重點服務。 基本概念 首先,我們需要知道一些概念,LUIS的基本功能(以後有空再說複雜的),就是分析一句話,區分出用戶的意...

關於bot framework (5) - 透過.net SDK使用LUIS

圖片
在你知道了LUIS的功能之後,接著我們就來看看如何透過程式碼叫用LUIS。 你知道LUIS是一個服務,且用的通訊方式是http與JSON,因此你當然也知道可以透典型的http get來抓取,並且把JSON轉成js或c#看得懂的類別來操作。 不過,如果你使用VS2015、寫C#或VB,以前沒有適合的nuget package可用,從上一周開始,你可以直接從nuget上使用底下這個套件,來呼叫LUIS的功能: 安裝此套件之後,使用起來非常簡單: //建立LuisClient Microsoft.Cognitive.LUIS.LuisClient lc = new Microsoft.Cognitive.LUIS.LuisClient( LUIS AppID, key); this.textBoxResult.Text = "分析中..."; //Call Luis API 查詢 var ret = await lc.Predict(textBoxQuery.Text); if (ret.Intents.Count() <= 0) return; var msg = ""; foreach (var item in ret.Intents) //顯示intent { msg += $"\n intent: {item.Name} score:{item.Score} "; } msg += "\n\n"; foreach (var item in ret.Entities) //Entities { msg += $"\n Entities: {item.Value[0].Name} {item.Value[0].Value} score:{ item.Value[0].Score} "; } //顯示於TextBox this.textBoxResult.Text = msg; 這幾乎不用解釋了。 你可以使用LuisClient 建立一個instance,記得傳入LUIS AppID與key,透過Predict以非同步方式呼叫,把要查詢的句子(Query)傳...

關於bot framework (4) - 使用LUIS,讓你的bot理解用戶輸入文字的意義

圖片
LUIS全名是Language Understanding Intelligent Services,顧名思義,是一個提供語句理解能力的服務,請留意,LUIS並非去分析語句(這是Text Analytics的功能),而是去嘗試理解一個句子的意義,找出用戶的企圖(intents)與相關聯的entities。 而這個功能,對於我們的chatting bot,非常的重要。由於文字bot的輸入介面,用戶往往可以自由隨興的打字輸入,你根本無法限制用戶輸入什麼,而且人很有趣,只要沒有限制,就會竭盡所能地嘗試,你只要開放一個text chatting bot,就會有人手ㄐㄧㄢˋ的亂打一些有的沒的,然後bot沒理解出他的意思,他就笑這個bot很笨。(這樣很有成就感?) 因此,就對談機器人來說,首要目標之一就是理解用戶輸入的內容,而LUIS是實現這個功能的重點服務。 首先,我們需要知道一些概念,LUIS的基本功能(以後有空再說複雜的),就是區分出用戶的意圖和相關的entities。 拿點餐來說,如果我們要點一個早餐,用語大概會是: 我要點一份燒餅油條 麻煩你我需要一份蛋餅 給我來個大亨堡 三明治帶走 上面這四句話,基本上intent都是點餐,而其中的entities則是餐點,具體的內容是燒餅油條、蛋餅、大亨堡、三明治。而LUIS的目的,是幫我們在雲端分析各種不同的句型,找出用戶的意圖,並且抓出entities。 因為,用戶不可能只用上面這四種說法點餐,有時候可能會換成: 今天請幫我來一個飯糰 這個句型就跟上面四種截然不同,但LUIS能夠從雲端大量的語句資料庫中,幫我們進行歸納,判斷(猜測)這個句型的意圖,一開始可能判斷不對,這時人工可以介入,指導LUIS,讓它理解上面這個句型就是點餐,這樣下次LUIS就知道了。而其中的entities也是,餐點種類繁多,第一次LUIS肯定不知道有個餐點叫做『飯糰』,所以它抓不出這個entity,但你可以指導它,它就知道下次看到飯糰,就可以將其視為entity。 有了這個基礎之後,我們就可以透程式碼,把從bot接收到的語句,丟給LUIS進行判斷,LUIS就會告訴我們,用戶所輸入的這個語句,其意圖intent與entities為何。 好,概念交代完畢,接著來實作,首先,請用Microsoft Account登入,登入後到底下網址註...