名詞介紹:
intent:意圖,bot 能做的事情,可以想像成一個 intent 就是一個 function。
keyword:從一個句子當中擷取出的關鍵字,可以想像成是 function 的參數,舉例來說可能是日期、時間或地點、名詞等。
我們可以把 user 輸入的每一個句子看做是高維度空間上的一個點,然後我們對這個空間做分群,假設我們的 bot 有 3 個 intent,那麼整個空間就會被分為 4 群,多 1 個群是因為不做回應。
而句子座標落在哪一群,就代表著 bot 要使用哪一個 intent 來做回應,也就是說,我們可以把機器人回應變成一個對句子做分群的問題,然後套用分群演算法。透過標示每一個句子應該落在哪一個 intent 裡,我們可以強化接下來 bot 的精確度。
怎麼把一個句子變成高維度空間上的一個點,會是一個門檻。
如果要做到 bot 可以根據前後文來做回答,那麼 keyword 的記憶會變成是一個非常重要的關鍵,比方說:
user : 「你知道日本嗎?」
bot : 「知道阿」
user : 「好玩嗎?」
bot : 「蛤你說什麼東西好玩?」
像這樣的 bot 沒有記憶能力,他只能回應上一句話,他應該要把所有提到過的 keyword 都先記住(使用類似 session 的方式去記)。當 user 觸發一個需要參數的 intent 時,應該優先考慮前面提過的 keyword,當 bot 覺得前面提到過的 keyword 都不適合做為此次呼叫的 intent 時,再跟 user 要求一個新的 keyword。
另一方面,Function Currying 是比較容易的。
https://zh.wikipedia.org/wiki/%E6%9F%AF%E9%87%8C%E5%8C%96
user : 「我下個禮拜一想請假」
bot : 「想要請什麼假?」
user : 「想請病假,因為我下個禮拜會肚子痛」
bot : 「可以~很可以」
user 呼叫請假(日期, 假別),可以透過 Function Currying 拆解成 請假(日期)(假別)
也就是說,前面所說的分群,還需要考慮 intent 如果是有參數的,那麼 bot 現在是要延續前一個 intent 的 Function Currying 的呼叫,還是 bot 會認為 user 想要呼叫另一個新的 intent,這是分群演算法也要能做到的。
user 先叫 intent 後傳參數,看起來容易做。但是先傳參數,再叫 intent 就比較困難。判斷到底該使用哪一個 keyword 作為參數會是一個難題。
目前為止沒有看過任何一隻 bot 能做到這點,做得到就神惹。
在 intent 數量很大而難以設計出良好 UX 的情境下,那才會是 chat bot 的擅場。所以我認為一個 bot 在 intent 數量很少的情況下,應該做成 App 或 Web,而不是 bot。也就是說,做一個 bot framework 必須考量如何讓 bot 擁有者能夠輕易地新增一個 intent 。一個太少 intent 的 bot 行為看起來跟智障沒兩樣。正因為卡米狗能夠讓 user 很輕易地新增一個 intent ,所以卡米狗能夠看起來很聰明。卡米狗的下一步,是讓每一個 intent 能夠自動對應到相似的句子,而不是完全match,這樣就能看起來更聰明些。
現階段這種看起來像智障的 bot ,有可能會被全部都串到個人助理類型的 bot 作為 proxy,比方說 siri 會根據使用者的句子,決定現在該把訊息傳給哪一個 bot 來做回應,然後這個個人助理就可以看起來很聰明。
比方說我是 microsoft ,我開發了一個 microsoft bot framework, 我知道所有 bot 的 intent ,所以我能夠知道 user 輸入的句子應該用哪一個 bot 來做 proxy,所以我能開發一個個人助理,他可能有上百萬個 intent ,而這些 intent 是開發者輸入的.... 科科。
結論:想開發聰明的 chat bot ,就要先開發 bot framework。
2016/12/26
LINE Taiwan TechPulse大會心得
https://linecorp.com/zh-hant/pr/news/zh-hant/2016/1604
為了展現 Line bot 的魅力,Line 決定採用 Line bot 的介面去做活動報名以及議程的顯示,中場遊戲進行等等,但UX還有待加強,比方說chat bot不適合用文字來顯示議程,可以考慮用 ImageMap 來顯示。
雖然說這是開發者大會,但是會場對於開發者來說非常不友善,因為會場沒有插座,也沒有一個能連的wifi,所以身為開發者的我感到呼吸困難。
不知道是不是有經費上的問題,中午沒有附便當,但是卻附了 XBOX、PS4 、茶點和很有誠意的伴手禮。
整個活動對於時間上的掌控是有問題的,計畫趕不上變化,說好的中午 12:00 到 13:30 吃飯時間,變成了12:40~13:40。在附近沒有餐廳的情況下,約300人同時離開會場去覓食,13:40 會場人數回來不到一半。
看起來 Line 應該是第一次辦活動,還有很大的進步空間。
之後的 Line 群組會有管理者權限功能,以後不用怕翻群了。
之後的 Line 群組可以有很多聊天室。
之後的 Line 群組可以開發 App 稱為 Group App。
Group App 跟 Line Messaging API 是兩回事。
根據統計,Mobile App 的成長量小於 Mobile Web,所以開發網站還是比較重要der~
為了展現 Line bot 的魅力,Line 決定採用 Line bot 的介面去做活動報名以及議程的顯示,中場遊戲進行等等,但UX還有待加強,比方說chat bot不適合用文字來顯示議程,可以考慮用 ImageMap 來顯示。
雖然說這是開發者大會,但是會場對於開發者來說非常不友善,因為會場沒有插座,也沒有一個能連的wifi,所以身為開發者的我感到呼吸困難。
不知道是不是有經費上的問題,中午沒有附便當,但是卻附了 XBOX、PS4 、茶點和很有誠意的伴手禮。
整個活動對於時間上的掌控是有問題的,計畫趕不上變化,說好的中午 12:00 到 13:30 吃飯時間,變成了12:40~13:40。在附近沒有餐廳的情況下,約300人同時離開會場去覓食,13:40 會場人數回來不到一半。
看起來 Line 應該是第一次辦活動,還有很大的進步空間。
之後的 Line 群組會有管理者權限功能,以後不用怕翻群了。
之後的 Line 群組可以有很多聊天室。
之後的 Line 群組可以開發 App 稱為 Group App。
Group App 跟 Line Messaging API 是兩回事。
根據統計,Mobile App 的成長量小於 Mobile Web,所以開發網站還是比較重要der~
2016/11/23
chatbot meetup #1 筆記
chatbot meetup #1
http://chatbot.kktix.cc/events/meetup-01
Microsoft Bot Framework x Cognitive Service 快速打造智能聊天機器人
Eric:
平台的演進:PC=》Web=》Smartphone=》Messaging
Messaging 是最新一代的平台
Bot 是一種在 Messaging 平台上開發的 App
人類花大量時間在聊天平台上聊天
Apple google amazon 他們開發的是 interface
Microsoft Bot Framework 提供SDK C# nodeJs
Bot Builder 做好bot
Bot Connector 發佈在聊天平台上
BotDirectory 曝光bot、bot列表
Microsoft Cognitive Services 提供電腦視覺 聽覺 語意分析等等的服務
(web api 形式)
Vision
image => 裡面有什麼、有人嗎、幾歲?男的還是女的、ocr
Speech
Speech <=> text
Language
LUIS.ai
Intent (function)
Entity (param)
輸入句子
輸出 Intent 的機率和標出 Entity
Function Currying
Knowledge
Search
Introduction to NLP for Chatbots
李昀樵 - 台大數位語音實驗室:
compose.ai
做了三個bot demo 平台能力
全台實價登錄
追劇吧
ubike小幫手
不需要寫code就可以做bot的平台
用UI拉決策樹
BOT 開發的重點
要記住 CONTEXT
各種參數的輸入是可以解讀的,沒有輸入就給預設值、或者去問USER
Part-of-speech(POS):
把一句話的每個字的詞性抓出來
Infomation Extration(IE)
取出一個句子裡的參數
Dialog
輸出對話回應
中文斷詞
Jieba 結巴分詞(python)
OOV(系統沒看過的詞)
中研院斷詞系統 http://ckipsvr.iis.sinica.edu.tw/
Named entity recognition(NER)
辨識專有名詞
wikipedia 是最大名詞集合
Google NLP also return wikipedia_url
Stanford NLP
Intent Parsing
Adapt https://github.com/MycroftAi/adapt)
Stanford NLP
API
api.ai
wit.ai
Microsoft LUIS
Q&A 系統
對輸入句子做分群 然後回答對應的輸出
word embedding features
Facebook facetext
Messenger Platform's New Opportunities and Insights
Po Cheng Chu 蝴蝶 Botimize:
Customer Service
Intention Extraction
luis.ai
api.ai
wit.ai
Human-Bot Hybrid
80% by bot
20% by human
Bots
Travelflan
Taobao
E-Commerce
Payment
Stripe
Paypal
Token
Account Linking
Checkout and pay in webview
Bots
Domino's Pizza
Subscription
Stadard Messaging
24小時打一次
Subscription Messaging
不能發廣告訊息
Bots
CNN
TechCrunch
Avatar
Personality
NPC-like
Bots
Hearthstone
D. Trump Bot
Match-Making
Platform
匿名聊天
民調
Human Computation
工人智慧
Bots
Her/Him
Sensay
Swelly
Game
Webview
Interaction Focused
Bots
Space Adventure
Murder Mystery Game
Utility / Micro-app
Mention
@bot 去叫 bot 做事
Account linking
Bots
Polly.ai (做民調)
Gif
Facebook Messenger SDK 1.3
Link with Parameter
在 webview 上的操作做到一半
跳到 chatbot 上繼續做
List Template
Checkbox Plugin
Zeroth.AI
怎麼做AI?
Human Computation(工人智慧)
工人智慧造人工智慧
Travelflan
旅遊顧問
Designjar
收集資料
http://www.botimize.io/
bot界的GA
如何透過 Golang 與 Heroku 來一件部署 臉書機器人與 Line
Evan Lin:
GO 超棒
ruby 很快樂 但超慢
C 很快
python: 戰tab/space
GO 存檔就自動排版
GO 寫 test 很方便
PetNeedMe
CodeTengu
Facebook 不想讓你知道的事
Howard Chang
Her/Him & Her/Her 作者
Messenger Platform 上可以用的 PS_ID
FB login 登入的ID是 FB_ID
1. 透過 profile_pic 的檔名,兩邊的API的頭貼其實是一樣的路徑
2. 在 FB login 時加入 query string psid=#{psid}
3. 用 message_id 直接作messenger外掛可以拿到 message_id
可以傳貼圖 也可以傳任何訊息
Aloha.AI
customer service
QA bot
預測接下來user想問的三個問題
卡米狗 line bot
郭佳甯
卡米狗超棒der 還沒加入卡米教的趕快加入
http://chatbot.kktix.cc/events/meetup-01
Microsoft Bot Framework x Cognitive Service 快速打造智能聊天機器人
Eric:
平台的演進:PC=》Web=》Smartphone=》Messaging
Messaging 是最新一代的平台
Bot 是一種在 Messaging 平台上開發的 App
人類花大量時間在聊天平台上聊天
Apple google amazon 他們開發的是 interface
Microsoft Bot Framework 提供SDK C# nodeJs
Bot Builder 做好bot
Bot Connector 發佈在聊天平台上
BotDirectory 曝光bot、bot列表
Microsoft Cognitive Services 提供電腦視覺 聽覺 語意分析等等的服務
(web api 形式)
Vision
image => 裡面有什麼、有人嗎、幾歲?男的還是女的、ocr
Speech
Speech <=> text
Language
LUIS.ai
Intent (function)
Entity (param)
輸入句子
輸出 Intent 的機率和標出 Entity
Function Currying
Knowledge
Search
Introduction to NLP for Chatbots
李昀樵 - 台大數位語音實驗室:
compose.ai
做了三個bot demo 平台能力
全台實價登錄
追劇吧
ubike小幫手
不需要寫code就可以做bot的平台
用UI拉決策樹
BOT 開發的重點
要記住 CONTEXT
各種參數的輸入是可以解讀的,沒有輸入就給預設值、或者去問USER
Part-of-speech(POS):
把一句話的每個字的詞性抓出來
Infomation Extration(IE)
取出一個句子裡的參數
Dialog
輸出對話回應
中文斷詞
Jieba 結巴分詞(python)
OOV(系統沒看過的詞)
中研院斷詞系統 http://ckipsvr.iis.sinica.edu.tw/
Named entity recognition(NER)
辨識專有名詞
wikipedia 是最大名詞集合
Google NLP also return wikipedia_url
Stanford NLP
Intent Parsing
Adapt https://github.com/MycroftAi/adapt)
Stanford NLP
API
api.ai
wit.ai
Microsoft LUIS
Q&A 系統
對輸入句子做分群 然後回答對應的輸出
word embedding features
Facebook facetext
Messenger Platform's New Opportunities and Insights
Po Cheng Chu 蝴蝶 Botimize:
Customer Service
Intention Extraction
luis.ai
api.ai
wit.ai
Human-Bot Hybrid
80% by bot
20% by human
Bots
Travelflan
Taobao
E-Commerce
Payment
Stripe
Paypal
Token
Account Linking
Checkout and pay in webview
Bots
Domino's Pizza
Subscription
Stadard Messaging
24小時打一次
Subscription Messaging
不能發廣告訊息
Bots
CNN
TechCrunch
Avatar
Personality
NPC-like
Bots
Hearthstone
D. Trump Bot
Match-Making
Platform
匿名聊天
民調
Human Computation
工人智慧
Bots
Her/Him
Sensay
Swelly
Game
Webview
Interaction Focused
Bots
Space Adventure
Murder Mystery Game
Utility / Micro-app
Mention
@bot 去叫 bot 做事
Account linking
Bots
Polly.ai (做民調)
Gif
Facebook Messenger SDK 1.3
Link with Parameter
在 webview 上的操作做到一半
跳到 chatbot 上繼續做
List Template
Checkbox Plugin
Zeroth.AI
怎麼做AI?
Human Computation(工人智慧)
工人智慧造人工智慧
Travelflan
旅遊顧問
Designjar
收集資料
http://www.botimize.io/
bot界的GA
如何透過 Golang 與 Heroku 來一件部署 臉書機器人與 Line
Evan Lin:
GO 超棒
ruby 很快樂 但超慢
C 很快
python: 戰tab/space
GO 存檔就自動排版
GO 寫 test 很方便
PetNeedMe
CodeTengu
Facebook 不想讓你知道的事
Howard Chang
Her/Him & Her/Her 作者
Messenger Platform 上可以用的 PS_ID
FB login 登入的ID是 FB_ID
1. 透過 profile_pic 的檔名,兩邊的API的頭貼其實是一樣的路徑
2. 在 FB login 時加入 query string psid=#{psid}
3. 用 message_id 直接作messenger外掛可以拿到 message_id
可以傳貼圖 也可以傳任何訊息
Aloha.AI
customer service
QA bot
預測接下來user想問的三個問題
卡米狗 line bot
郭佳甯
卡米狗超棒der 還沒加入卡米教的趕快加入
2016/10/17
chrome extension - long finger 瀏覽器擴充功能開發紀錄
注意:本文中有許多連結必須手動複製貼上到網址列上才能正確開啟(chrome 開頭的那些網址)
這樣就可以安裝還沒發佈到 google 商店的擴充功能。一個擴充功能的核心檔案是manifest.json,我們可以透過特定網址去找到任一擴充功能的 manifest.json,網址格式為:
chrome-extension://擴充功能ID/manifest.json
舉例來說,在安裝好 long finger 之後開啟網址:
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/manifest.json
會看到:
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/longFinger.css
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/longFinger.js
這兩個檔案落在 content scripts 中。content_scripts 有三個參數,分別是 matchs、css、js。當使用者開啟網頁時,若網址符合 matches 的規則,就會將 css 跟 js 附加在該網頁上。
讓我們把注意力放在 longFinger.css 和 longFinger.js 上。
先來看看 longFinger.css:
接下來看看 longFinger.js:
這樣就大功告成了!
我已將 long finger 放在 github 上:https://github.com/etrex/long-finger。你可以在 github 上面看到資料夾結構是由一個資料夾 long finger 下帶著四個檔案所組成:manifest.json、longFinger.js、longFinger.css、longFinger.png。
關於右上角的按鈕:https://developer.chrome.com/extensions/browserAction
關於用JS影響網頁內容:https://developer.chrome.com/extensions/tabs#method-executeScript
關於背景執行除錯:https://stackoverflow.com/questions/10081898/how-to-debug-google-chrome-background-script
long finger 簡介
long finger 安裝網址 : https://chrome.google.com/webstore/detail/long-finger/aammiagfeadjchafpeeiacggolmfnmmo
點子以及圖片資源是由 Leggy 提供,感謝 Leggy。
這是一個會把滑鼠游標從食指改成中指的擴充功能。他沒什麼用,唯一的作用應該是舒壓吧。實作起來相當容易,程式碼也足夠短,很適合作為一個練手的作品。
擴充功能簡介
在這個頁面可以看見目前安裝的所有擴充功能。如果只是單純嘗試開發,還沒打算上架的話,在這裡有一個「開發人員模式」的按鈕,先把他打勾。
這樣就可以安裝還沒發佈到 google 商店的擴充功能。一個擴充功能的核心檔案是manifest.json,我們可以透過特定網址去找到任一擴充功能的 manifest.json,網址格式為:
chrome-extension://擴充功能ID/manifest.json
舉例來說,在安裝好 long finger 之後開啟網址:
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/manifest.json
會看到:
{ "browser_action": { "default_icon": "longFinger.png" }, "content_scripts": [ { "css": [ "longFinger.css" ], "js": [ "longFinger.js" ], "matches": [ "http://*/*", "https://*/*" ] } ], "description": "This extension change cursor index finger to long finger.", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlWMwgzcpj1/kt1KbNVUbvQRth2wvV2WX9RKRxJ1aWAsovQjEWKytM2pkbZ2xbm/V9tSNODZW438PfS46IV12iE3aTIc0mbHDML3ScJZeBfKs8dFIt0nxWERpIVctS2xQIUPS4mfKsWdk6LckPuHQmFyz13hR13hbUoqz7DkCqWv3Sz5sbDZbqKBg9GZliWUjeafzOTjkT3rO5khVqmT8NcfJ0TYAe1sJ4u2PpHByC8+dT0iQsE6xEz2/gG66HwnpU4HibcyAujfAy4fcgOmWfL8kcm4HcvFqJ+C8s3jtlUxm8o6rzrNtw+w30r5NLLdC+GcSjw3Z9zeF4U+3swa7mQIDAQAB", "manifest_version": 2, "name": "long finger", "update_url": "https://clients2.google.com/service/update2/crx", "version": "3.0" }manifest.json 是整個擴充功能的起始點,透過 manifest.json 的設定,你可以觸發其他的程式檔。我們可以看見這裡有幾個重要的檔案連結:
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/longFinger.css
chrome-extension://aammiagfeadjchafpeeiacggolmfnmmo/longFinger.js
這兩個檔案落在 content scripts 中。content_scripts 有三個參數,分別是 matchs、css、js。當使用者開啟網頁時,若網址符合 matches 的規則,就會將 css 跟 js 附加在該網頁上。
long finger 實作
讓我們把注意力放在 longFinger.css 和 longFinger.js 上。
先來看看 longFinger.css:
a{ cursor: url("http://etrex.tw/a/flippers3.gif"),auto !important; } button{ cursor: url("http://etrex.tw/a/flippers3.gif"),auto !important; } .longFinger{ cursor: url("http://etrex.tw/a/flippers3.gif"),auto !important; }
longFinger.css 上寫的是只要是 a 或 button 或是任何帶有 longFinger class 的 html tag 就會把游標改為 http://etrex.tw/a/flippers3.gif。
接下來看看 longFinger.js:
document.querySelector('body').addEventListener("mousemove", function(e){ var target = e.target; var cursor = window.getComputedStyle(target,null).getPropertyValue("cursor"); if(cursor == "pointer"){ target.classList.add("longFinger"); } });longFinger.js 寫著,當滑鼠在整個網頁上移動時,檢查目前游標指著的元素(element)是否造成游標為食指形狀,如果是的話,就幫這個元素加上 longFinger class。
這樣就大功告成了!
擴充功能測試
我已將 long finger 放在 github 上:https://github.com/etrex/long-finger。你可以在 github 上面看到資料夾結構是由一個資料夾 long finger 下帶著四個檔案所組成:manifest.json、longFinger.js、longFinger.css、longFinger.png。
只要下載long finger 資料夾,並且在 chrome://extensions/ 選擇載入未封裝的擴充功能,然後選擇 long finger 資料夾,就可以完成擴充功能的安裝。
參考文件
新手入門:https://developer.chrome.com/extensions/getstarted關於右上角的按鈕:https://developer.chrome.com/extensions/browserAction
關於用JS影響網頁內容:https://developer.chrome.com/extensions/tabs#method-executeScript
關於背景執行除錯:https://stackoverflow.com/questions/10081898/how-to-debug-google-chrome-background-script
2016/10/7
用 C# 做一個 file upload proxy server
實現功能
讓 js 用 ajax 的方式傳檔案到跨網域的 server 上,而不會遇到跨網域問題。核心程式(C#)
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Web; namespace Tools { public class HttpCaller { public static string MultipartForm(string url, HttpRequestBase request) { var ignoreHeader = new string[] { "Content-Length", "Content-Type", "Host", "Referer" }; string result = string.Empty; var mediaType = ""; try { using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Clear(); foreach (var key in request.Headers.AllKeys) { if (key.Equals("Content-Type")) { mediaType = request.Headers[key]; } if (ignoreHeader.Contains(key)) { continue; } client.DefaultRequestHeaders.Add(key, request.Headers[key]); } HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url); message.Content = new ByteArrayContent(StreamToBytes(request.InputStream)); message.Content.Headers.Remove("Content-Type"); message.Content.Headers.Add("Content-Type", mediaType); result = client.SendAsync(message).Result.Content.ReadAsStringAsync().Result; } } catch (Exception ex) { result = ex.Message; } return result; } private static byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); stream.Seek(0, SeekOrigin.Begin); return bytes; } } }
使用方法(C# ASP.NET MVC 專案)
public ActionResult upload() { var targetUrl = Request.Form["targetUrl"]; var json = HttpCaller.MultipartForm(targetUrl, Request); return Content(json); }
使用方法(JS)
function uploadRequest(targetUrl, requestObject, files, callback) { var formData = new FormData(); for (var key in requestObject) { formData.append(key, requestObject[key]); } for (var i = 0 ; i < files.length ; i++){ formData.append("file" + (i+1), files[i]); } formData.append("targetUrl", targetUrl); var request = new XMLHttpRequest(); request.open("POST", "upload"); request.onload = function (e) { var response = e.target.response; callback(response); }; request.send(formData); }
2016/5/16
Deep Learning 筆記
IEEE Big Data Congress 2016 (海量資料國際研討會台北場)春季學校和主題演講
https://uknowiknow.com/courses/1a319e3ac7865c57
每一個Neuron都是在做輸入x 輸出 y
除了 Input Layer 和 Output Layer ,中間的 Layer 都叫作 Hidden Layer
Mini Batch 是每次計算 Loss 時不使用全部的Training Data,而是只使用部分的 Training Data
Momentum:加入移動的慣性到參數的update上
參考資料:
Tensorflow 是一個用C++跟Python實作的deep learning library
https://uknowiknow.com/courses/1a319e3ac7865c57
透過視覺化Neuron來觀察和學習 Deep Learning 的運作
http://playground.tensorflow.org/每一個Neuron都是在做輸入x 輸出 y
y = g(wx + b) (y 跟 b 是純量,w 跟 x 是向量,g 是 Activation Function)
除了 Input Layer 和 Output Layer ,中間的 Layer 都叫作 Hidden Layer
給預期的Output,用 Gradient Descent 演算法去更新每一個 Neuron 的 w 跟 b ,目標是使得 Loss 最小。
Loss = (預期的Output - Output Layer)^2
Loss = (預期的Output - Output Layer)^2
Mini Batch 是每次計算 Loss 時不使用全部的Training Data,而是只使用部分的 Training Data
使用 Mini Batch 可以避免掉入一些 Local Minimum
Back Propagation 是更快的微分技術
Case Study:手寫數字辨識
題目描述:給一張手寫數字(一位數)的點陣圖,輸出對應的數字
網路結構:在 Network 上的 Input Layer 是所有 pixel (w*h個 Neuron ),輸出是10個 Neuron ,分別代表手寫數字為0~9的機率,當輸出向量代表 0 的 Neuron 輸出值最大時,代表辨識結果為0。
圍棋:
給盤勢(19*19),輸出下一步下子位置(19*19)
利用多個是非題( Neuron )可以實作出選擇題
Network 結構目前沒有辦法靠學習來自動生成
Network 結構目前沒有辦法靠學習來自動生成
Universality Theorem
Deep 比較好還是 Fat 比較好?
Fat +Short v.s. Thin + Tall
答案是 Thin + Tall 勝出
Deep network 隱含模組化( Modularization )的概念
一個選擇題被拆解成幾個是非題( Hidden Layer )之後再合成
Deep 之後需要的 Training Data 變少
有哪些調整方法可以讓 Training Data 的 Loss 降低:
Adagrad:調整 Learning Rate,讓每一個參數(w,b)有自己的Learning Rate
Momentum:加入移動的慣性到參數的update上
Corss Entropy:換掉兩個向量的距離估計函數,建議搭配 Softmax 使用
ReLU(Rectified Linear Unit):線型的 Activation Function 才不會在多層次的時候造成計算微分時因為多層次的關係被遞減。
Maxout(自動生成 Activation Function),用多個 Neuron 取最大的輸出去組成一個 Neuron
Residual Network:跳過2個 Layer,直接連接到後面的 Layer
Highway Network:跳過N個 Layer
有哪些調整方法可以讓 Testing Data 的 Loss 降低(對抗Overfitting):
更多的 Data
生成更多的 Data (把原圖做一些旋轉)
生成更多的 Data (加入雜訊)
生成更多的 Data (把原圖做一些旋轉)
生成更多的 Data (加入雜訊)
Early Stopping:把手上的 Training Data 拿一些做驗證,當驗證 Data 的表現沒有再進步時,就停止
Weight Decay:使得 Weight 的大小越小越好
L2 Regularization:一種 Weight Decay 方法,把 Weight 的長度加入 Loss Function
L2 Regularization:一種 Weight Decay 方法,把 Weight 的長度加入 Loss Function
Ensemble:嘗試各種Network Structure,再把結果合起來。
Dropout:在每一次遞迴的時候都把 Network 上的 Neuron丟掉一部份,等同於Ensemble的終極版。
Recurrent Neural Network (RNN):有記憶的NN
每一個 Neuron 對上一個輸入資料的輸出被保留在 Hidden Layer 上。或者說 Neuron 都跟上一次的自己建立連線。
Bidirectional RNN:時間逆序+時間順序
LSTM:在 Neuron 跟自己建立關聯之前加上3個Gate:Input Gate,Output Gate,Forget Gate
BPTT:RNN的計算方法
CASE :
Slot Filling:輸入一個 word,輸出這個 word 是屬於哪一個 Slot?
Slot:dest(目的地),time(時間),other
input : arrive Taipei on November 2nd
理想中的output : other dest other time time
word 怎麼表示成向量?
1-of-N Encoding:{apple,bag,cat,dog,elephant}
apple = [1 0 0 0 0]
bag = [0 1 0 0 0]
cat = [0 0 1 0 0]
dog = [0 0 0 1 0]
elephant = [0 0 0 0 1]
word embedding:
為了不要讓word的向量太多維度,作降維的方法是把所有的word放到一個n-D空間上,語意上越接近的字就放在一起。
skip-gram text model:
Windows - Microsoft + Google = Android
Attention-based Model:讓機器可以回答問題
用DNN/RNN去選擇該讀取哪些資料,作為一個新的input,直到他找到答案。
Deep Reinforcement Learning
更難的問題
參考資料:
線上觀察deep learning的運作
http://playground.tensorflow.org/Tensorflow 是一個用C++跟Python實作的deep learning library
用起來跟numpy有90%像
SyntaxNet
OpenAI
Parallel Game Engine
電腦視覺
2016/5/5
TeSA「成長駭客」台灣駭客導讀會 筆記
活動連結:https://tesa.waca.ec/product/detail/3967
Q:怎麼確定PMF?
小黑:確認使用情境:確定目標消費者在什麼時間什麼地點去解決什麼問題?真的有這個情景嗎?
貝克菜:已有產品:去觀察競品的文案、競品的客群。去人肉你的客群,觀察客群的特徵。
沒有產品:先找受眾,再找對應的產品。打3000元廣告去看效果,效果差表示產品不對。
酸哥:發傳單超棒的。還有簡訊,想檔都檔不掉。不要受限於網路。
Q:怎麼抓到一開始的客戶,一開始的資源要怎麼投入?
酸哥:客群是用測試來的,不是用刻板印象。測試工具不一定準,你們真的相信民調嗎?
貝克菜:看見自己需要的問題並且解決問題,自己沒有在用的情況下,觀察有在用的人提出的問題。
小黑:論壇、問答網站,那裡的人有一堆的問題,你的東西到底要怎麼用?去問答網站上回應,還可以順便做SEO。在行銷時盡量獲取準客戶的聯絡方式。你不會想要按補習班的讚,但是你會按「看OOO學英文」的讚。開這種粉絲團,再辦實體活動,取得會員名單後瘋狂轟炸他們。
Q:當自己無法成為意見領袖的時候,該怎麼選擇適當的意見領袖來合作?
酸哥:所有的行銷工具都有他的用處,200個素人可以贏過1個A級部落客。可以賺SEO跟分散風險。先想好自己產品定位,再去找合適的人。不要看到別人做什麼,就跟著做什麼。很多代言人平常根本不用那些產品,那樣的行銷會有用嗎?目標放清楚,要找對人。不要找硬是要學去賣化妝品。網路正妹有兩種:男生會看的正妹,跟女生會看的正妹,不要找錯人了。
貝克菜:粉絲多不一定有效,你確定他們的粉絲符合自己產品的性質嗎?很多時候素人比名模有效。應該多研究粉絲的輪廓,選擇那些粉絲跟產品的受眾輪廓接近的意見領袖。多收集2000~3000人追蹤者的素人,直接送產品給他們。
小黑:部落客行銷對SEO的幫助很大,你可以在GOOGLE搜尋競品、產品、關鍵字,排名在前面的Blog,就是適合的對象。現在有很多騙吃騙喝部落客,怎麼判斷?流量高但是沒互動的不要找,我們要這群部落客來當我的第一批客人,大部分的部落客其實是早期使用者,可以連帶進行早期使用者開發。
Q:怎麼引爆病毒行銷?
小黑:遊戲化、跟生活有關,星座文最會被分享,算得準會被分享,但是算不準也會被分享。
貝克菜:先有營業額再說,pass。
酸哥:網路4G法則 (Girl、Game、Gambling、Gift)。 賭:問卷調查,選到人多的那邊的人群中抽出一些獎項。
Q:負面行銷、bug行銷、標錯價格行銷可以用來操作嗎?
小黑:大多數的負面行銷是不小心的,不建議操作這個,標錯價格行銷買不到長久的顧客,超低價行銷可以視為買新客人的一種方式。
貝克菜:這種東西不見得會成功,所以不會浪費時間去試。
酸哥:負面行銷的關鍵是在危機公關的處理方式,發生事情時表示道歉和賠償,重點是誠信要保住。負面的事情一定會碰到,不要主動去操作,但是遇到時要會處理。
Q:怎麼挑選人才,一個成長駭客應該具備什麼?
貝克菜:勇氣、多嘗試新事物的心態,不需要精通,但是要懂很多東西。可以丟一個很難的問題給他,看他處理問題的方式,需要一個願意一直找答案的人。
Q:成長駭客跟T型人才的差別,技術優先還是行銷優先?
貝克菜:要有程式的概念,知道哪些事情是程式能完成的,要懂消費者心理學,看數據才懂背後的意義,能懂人性才是最重要的。
Q:如何提升客戶終身價值(retention)?
小黑:設計永續使用情境,而不是做一些花俏手法。
貝克菜:根據資料計算客戶什麼時候需要購買下一次,就在那個時候去打他,即時提醒很重要。我
不喜歡削價促銷的手法。對於非消耗品的操作法是:因為你只會買一次,所以我跟你保證,如果你東西壞掉,就讓你用半價購買新品。
酸哥:kkbox 讓你可以更快地買演唱會的票。你的歌單都在kkbox上,轉換到另一個平台很難。餐廳定時換菜單,建立制約。為什麼大家在造節?為什麼情人節就是要送禮?建立制約。這些都是延續產品時間的策略。
Q:最重要需要最先優化三個項目的是什麼?
貝克菜:觀察員工平常都在幹嘛,看看那些重複繁瑣的事情,想辦法優化流程。如果有1000個人打電話來問同一個問題,你就應該把這個寫在網站上重要的地方。任何一個地方都可以優化,這需要一些觀察力跟敏銳度。
酸哥:產品、財務、法務很重要。如果你是為了創業而創業,那你就可以出去不用聽了。重點是你一定要知道自己在幹嘛。
小黑:你要關注平均會員獲取成本、平均訂單獲取成本,成本控制好就可以一直丟廣告,最後是如何提高會員的終身價值。
Q:怎麼確定PMF?
小黑:確認使用情境:確定目標消費者在什麼時間什麼地點去解決什麼問題?真的有這個情景嗎?
貝克菜:已有產品:去觀察競品的文案、競品的客群。去人肉你的客群,觀察客群的特徵。
沒有產品:先找受眾,再找對應的產品。打3000元廣告去看效果,效果差表示產品不對。
酸哥:發傳單超棒的。還有簡訊,想檔都檔不掉。不要受限於網路。
Q:怎麼抓到一開始的客戶,一開始的資源要怎麼投入?
酸哥:客群是用測試來的,不是用刻板印象。測試工具不一定準,你們真的相信民調嗎?
貝克菜:看見自己需要的問題並且解決問題,自己沒有在用的情況下,觀察有在用的人提出的問題。
小黑:論壇、問答網站,那裡的人有一堆的問題,你的東西到底要怎麼用?去問答網站上回應,還可以順便做SEO。在行銷時盡量獲取準客戶的聯絡方式。你不會想要按補習班的讚,但是你會按「看OOO學英文」的讚。開這種粉絲團,再辦實體活動,取得會員名單後瘋狂轟炸他們。
Q:當自己無法成為意見領袖的時候,該怎麼選擇適當的意見領袖來合作?
酸哥:所有的行銷工具都有他的用處,200個素人可以贏過1個A級部落客。可以賺SEO跟分散風險。先想好自己產品定位,再去找合適的人。不要看到別人做什麼,就跟著做什麼。很多代言人平常根本不用那些產品,那樣的行銷會有用嗎?目標放清楚,要找對人。不要找硬是要學去賣化妝品。網路正妹有兩種:男生會看的正妹,跟女生會看的正妹,不要找錯人了。
貝克菜:粉絲多不一定有效,你確定他們的粉絲符合自己產品的性質嗎?很多時候素人比名模有效。應該多研究粉絲的輪廓,選擇那些粉絲跟產品的受眾輪廓接近的意見領袖。多收集2000~3000人追蹤者的素人,直接送產品給他們。
小黑:部落客行銷對SEO的幫助很大,你可以在GOOGLE搜尋競品、產品、關鍵字,排名在前面的Blog,就是適合的對象。現在有很多騙吃騙喝部落客,怎麼判斷?流量高但是沒互動的不要找,我們要這群部落客來當我的第一批客人,大部分的部落客其實是早期使用者,可以連帶進行早期使用者開發。
Q:怎麼引爆病毒行銷?
小黑:遊戲化、跟生活有關,星座文最會被分享,算得準會被分享,但是算不準也會被分享。
貝克菜:先有營業額再說,pass。
酸哥:網路4G法則 (Girl、Game、Gambling、Gift)。 賭:問卷調查,選到人多的那邊的人群中抽出一些獎項。
Q:負面行銷、bug行銷、標錯價格行銷可以用來操作嗎?
小黑:大多數的負面行銷是不小心的,不建議操作這個,標錯價格行銷買不到長久的顧客,超低價行銷可以視為買新客人的一種方式。
貝克菜:這種東西不見得會成功,所以不會浪費時間去試。
酸哥:負面行銷的關鍵是在危機公關的處理方式,發生事情時表示道歉和賠償,重點是誠信要保住。負面的事情一定會碰到,不要主動去操作,但是遇到時要會處理。
Q:怎麼挑選人才,一個成長駭客應該具備什麼?
貝克菜:勇氣、多嘗試新事物的心態,不需要精通,但是要懂很多東西。可以丟一個很難的問題給他,看他處理問題的方式,需要一個願意一直找答案的人。
Q:成長駭客跟T型人才的差別,技術優先還是行銷優先?
貝克菜:要有程式的概念,知道哪些事情是程式能完成的,要懂消費者心理學,看數據才懂背後的意義,能懂人性才是最重要的。
Q:如何提升客戶終身價值(retention)?
小黑:設計永續使用情境,而不是做一些花俏手法。
貝克菜:根據資料計算客戶什麼時候需要購買下一次,就在那個時候去打他,即時提醒很重要。我
不喜歡削價促銷的手法。對於非消耗品的操作法是:因為你只會買一次,所以我跟你保證,如果你東西壞掉,就讓你用半價購買新品。
酸哥:kkbox 讓你可以更快地買演唱會的票。你的歌單都在kkbox上,轉換到另一個平台很難。餐廳定時換菜單,建立制約。為什麼大家在造節?為什麼情人節就是要送禮?建立制約。這些都是延續產品時間的策略。
Q:最重要需要最先優化三個項目的是什麼?
貝克菜:觀察員工平常都在幹嘛,看看那些重複繁瑣的事情,想辦法優化流程。如果有1000個人打電話來問同一個問題,你就應該把這個寫在網站上重要的地方。任何一個地方都可以優化,這需要一些觀察力跟敏銳度。
酸哥:產品、財務、法務很重要。如果你是為了創業而創業,那你就可以出去不用聽了。重點是你一定要知道自己在幹嘛。
小黑:你要關注平均會員獲取成本、平均訂單獲取成本,成本控制好就可以一直丟廣告,最後是如何提高會員的終身價值。
2016/4/28
Sublime Text 的 Reg Replace 套件
http://facelessuser.github.io/RegReplace/
Reg Replace 可以按照你指定的順序作一系列的 Regex Relpace ,當你每次都需要整理某種特定的文件內容的時候,你可以寫好一套規則,接下來所有的文件來只需要按一鍵就可以完成所有該做的修改。
舉個例子:如果我們想要把所有的 a 都變成 b
點擊 Settings - User 後寫入下面的文字
{ "replacements": { // Example replacements "a to b": { "find": "a", "replace": "b", "literal": true, "greedy": true, "case": true } } }
點擊 Commands - User 後寫入下面的文字
[ { "caption": "Reg Replace: test a to b", "command": "reg_replace", "args": {"replacements": ["a to b"]} } ]
點擊 Tools 的 Command Palette...
在文字框輸入 Reg Replace: test a to b 後按下enter 或選取下面的 Reg Replace: test a to b
然後你目前在編輯的所有 a 都會變成 b
2016/3/31
信仰之力 - 相信自己沒有能力
信仰是一種紓壓管道。
有些自己應該承擔的責任,自己不想承擔的時候,我們可以找到一個對象:祂。祂應該承擔這個責任,而不是我。我的命運是祂決定,而不是我決定,這就是信仰。
所以信仰是一種卸責手段,不管那個對象是誰,只要認為對象存在即可。即使那個對象是個人類。
我信自己。
自己的命運,自己掌握。
有些自己應該承擔的責任,自己不想承擔的時候,我們可以找到一個對象:祂。祂應該承擔這個責任,而不是我。我的命運是祂決定,而不是我決定,這就是信仰。
所以信仰是一種卸責手段,不管那個對象是誰,只要認為對象存在即可。即使那個對象是個人類。
我信自己。
自己的命運,自己掌握。
2016/3/28
建立開發團隊與企劃團隊之間的默契
對一般人來說,手算會比心算還要快找到最佳解。所以理想的開發團隊是扮演所見即所得的產品開發工具給企劃團隊,讓企劃團隊可以直接看見心裡所想的設計。於是企劃團隊可以每秒都在變更規格,而開發團隊每秒輸出對應的產品提供給企劃團隊。對企劃團隊來說是心想事成。
在開發的前期階段,開發團隊擔任企劃團隊的助手,這個階段會透過製作原型來驗證企劃的可用性,和實作的可行性。開發團隊必須用最短的時間做出可測試的原型,以增加迭代速度。
有時候會遇到企劃團隊提出看似無理的需求。可能是開發團隊的技術能力不佳,或是系統不支援的關係,估計需要花很長的時間才能做出,或者根本做不出來。造成開發團隊跟企劃團隊之間的衝突。此時,開發團隊會開始質疑企劃團隊的設計能力,企劃團隊會開始質疑開發團隊的技術能力。
開發團隊:你又在亂搞,我從沒看過有人這樣設計。
企劃團隊:是你太弱吧,什麼東西都用系統內建的,怎麼可能做出好設計?
在雙方溝通不良的情況下,氣氛會變得很糟,被夥伴嫌弱的感覺不太好。若開發團隊不能打從心裡覺得企劃團隊丟出來的規格很棒,就會失去認真工作的動力,工作的時候就做得很慢很不開心。
如果時程允許,我認為在開發團隊質疑企劃團隊的設計能力之前,應先把原型實作出來,先證明自己的技術能力沒有問題,再用原型去說服企劃團隊修改設計。
開發團隊:我、我才沒有認同你的設計呢,我只是想證明自己的技術能力沒有問題。
若開發團隊有自己的設計想法,就應該連同自己的設計也做出一個原型,拿著兩個原型去說服企劃團隊,才會是一個良好的溝通過程。
企劃團隊:看到你的原型,我終於知道你在講啥了。
開發團隊跟企劃團隊都使用原型來溝通,就不會有溝通不良的問題,等雙方有默契了可以再嘗試用想法來溝通。
默契是經過一段時間磨合才會產生的東西。
2016/1/6
訂閱:
文章 (Atom)