顯示具有 人工智慧 標籤的文章。 顯示所有文章
顯示具有 人工智慧 標籤的文章。 顯示所有文章

9/18/2026

(仿生智慧 Part-3 ) 利用果蠅腦來做 同音錯別字查詢更正


這是第二個實驗,試圖讓果蠅腦來幫忙做「電商網站的同音錯別字查詢」。在電商網站,使用者不見得輸入完全正確的產品查詢名稱,例如使用者想要查的是「哈利波特」但很有可能打太快,輸入法選字的等等。會輸入「哈力波忑」,所以鐵定查不到產品,但現在大多數網站都有建立不同程度的同音字錯別字查詢,這裡我們想要果蠅大腦來解決此問題:




果蠅的嗅覺

果蠅靠嗅覺才能活著。牠必須在很吵雜、很混亂的環境裡分辨氣味:這東西是我可以吃的嗎?一顆水果開始腐爛了嗎?有掠食者靠近了嗎?空氣裡混著十幾上百種種味道,牠得瞬間判斷「這是不是我要的東西」。

科學家研究牠的腦子,發現果蠅處理氣味的方式非常聰明。牠腦中有一個區域,會把「進來的氣味訊號」做一個很特別的轉換:
首先,果蠅把訊號「攤開變大」。本來只有幾十種氣味感測器,訊號進來後會被投射到大約兩千個神經細胞上(這種細胞叫做「肯氏細胞」)。等於把一個很擁擠的訊息,攤開到一個很大的空間。

第二,只留下「最有反應的少數幾個」。這兩千個細胞不會全部亮起來,腦中有一個像「總開關」的抑制機制,會強制只讓其中大約百分之五的細胞放電,其他全部安靜。

這樣做的結果很奇妙:兩個「聞起來很像」的氣味,會讓幾乎同一批腦細胞亮起來;兩個完全不同的氣味,亮起來的細胞則幾乎不重疊。


換句話說,果蠅的嗅覺天生就是一台「相似度比對機」。相似的東西,牠給的判斷就相似。

2017 年,有科學家在《科學》(Science)期刊上指出:這根本就是一套大自然演化了幾億年的「相似搜尋演算法」,而且效率驚人。


把產品字串變成嗅覺訊號

既然果蠅能把「相似的氣味」對應到「相似的腦內反應」,我能不能把「讀音相似的中文字」餵進去,讓牠幫我把「哈利波特」跟「哈力波忑」對應到同一個地方?畢竟所謂氣味,在進到果蠅腦時就是電子訊號。果蠅不認識中文,牠只聞認懂「訊號」。所以我要先把每一個商品名稱,翻譯成一種果蠅能聞的「氣味」。做法是把名字拆成「讀音的成分」:


* 先用注音把每個字的讀音拆出來,例如「特」是 ㄊㄜˋ。
* 把聲母、韻母、聲調分開處理,這樣「特(ㄊㄜˋ)」跟「忑(ㄊㄜˋ)」因為讀音一模一樣,就會產生幾乎相同 「氣味」。
* 也可以還特別加一些「台灣人常見的混音」規則:像是 ㄓ/ㄗ、ㄔ/ㄘ、ㄕ/ㄙ 因為很多人打字時這些音本來就會搞混。

除了讀音,我還加了一條「長相」的線索。有些錯別字不是同音,而是「長得像」,例如「己」跟「已」、「未」跟「末」。在加了一份公開的漢字字型資料庫(Unicode 的 Unihan),把每個字的部首、筆畫數、倉頡碼也加進「氣味」裡。這樣長得像的字,氣味也會接近。

把這些成分全部混在一起,一個商品名稱就變成了一團獨特的「氣味」。接著,就把這團氣味送進前面說的那套「果蠅嗅覺」機制:攤開變大、只留最強的百分之幾,最後得到一串稀疏的「腦內指紋」。

每一個商品,都被轉成這樣一串指紋,事先存起來。等到使用者輸入查詢(哪怕打錯字),就把查詢也轉成指紋,看看哪些重疊越多,代表越接近

商品名稱在電腦裡當然就是一串二進位編碼(文字的位元)。但這串位元本身對神經元沒有意義,不能直接餵進去,中間一定要先做一次轉換。

第一步是把名稱轉成一個「特徵向量」。我的做法是用「雜湊」(hashing)把前面說的那些讀音、字形成分,各自對應到一個固定長度的向量上,這個專案裡是一個長度 4096 的浮點數陣列。注意它不是二進位的 0 與 1,而是一串有大有小的數值(例如某個位置是 0.7、某個位置是 0.0),代表「這個名稱在各個成分上的強度」。最後這個向量會做正規化(L2 normalization),讓長短不同的名稱可以公平比較。

如何送進果蠅腦?使成爲嗅覺訊號?

接下來「怎麼送進果蠅」,有兩種不一樣的方法:

在輕量版本裡,其實沒有真的模擬神經元放電。所謂「送進蘑菇體」,實際上是一次矩陣運算:把那個 4096 維的向量,乘上一個代表「投射神經元 vs 肯氏細胞」連接關係的稀疏矩陣,直接算出每個肯氏細胞的活躍值,再取數值最高的前百分之幾當作指紋。換句話說,那串數值是以「數字」的身分直接參與計算的,沒有轉成波形、也沒有轉成脈衝。這也是它能做到毫秒級的原因,它借用的是果蠅那套運算「結構」,而不是真的果蠅頭腦,如果是真的果蠅頭腦,那我們需要模擬讓神經放電。


在真實果蠅腦版本,會模擬神經元放電的,就必須把數值翻譯成神經元之間真正的溝通語言,而那個語言不是二進位、也不是連續波形,而是「放電頻率」,也就是每個神經元每秒放電幾次(單位是赫茲)。具體做法是把特徵向量分配到果蠅真正的 685 個嗅覺輸入神經元上,把每個神經元收到的強度換算成一個放電頻率(這個專案設在每秒約 5 到 200 次之間),數值越大就放得越頻繁。而且這裡用的是「卜瓦松放電」(Poisson spiking)你只設定「平均每秒幾次」,至於每一次實際在哪個瞬間放電則是隨機的,比較接近真實神經的行為。這種「用放電頻率來承載訊息」的方式,在神經科學裡稱為「頻率編碼」(rate coding)。


用果蠅大腦,怎麼幫上萬個商品建立索引?

既然可以模擬果蠅腦聞商品味道,那就把它認真跑一遍,將三萬多個商品建一份真正的「腦內指紋」目錄。這一步就是所謂的「建立索引」,做法其實跟你想像的一樣直白:一個一個商品,讓果蠅去。具體是這樣:

第一,拿出一個商品名稱,例如「哈利波特第一集」。把它照前面說的方式轉成「氣味」拆讀音、拆字形,變成一串特徵數值。

第二,讓果蠅大腦「聞」這個氣味。把這串氣味換算成放電頻率,強力地注入那六百多個嗅覺神經元,然後讓整顆十三萬神經元的大腦跑一段模擬。訊號會從鼻子一路流進去,激發、傳遞,最後在蘑菇體那五千多個肯氏細胞上,點亮其中特定的一小群。這「一小群被點亮的細胞」,就是「哈利波特第一集」這個商品在果蠅腦裡的專屬指紋。

第三,把這個指紋登記到一張「反向索引」表裡。這張表記的不是商品對應到"它點亮了哪些細胞",而是反過來:每一個細胞有哪些商品會點亮它。舉例來說,如果第 3、17、42……號細胞被「哈利波特第一集」點亮了,我就在第 3 號細胞的名單上加一筆「哈利波特第一集」,第 17 號、第 42 號也各加一筆。就是反向索引。

第四,換下一個商品,重複第一到第三步。三萬多個商品,就讓果蠅腦逐一"聞"、逐一登記進表裡。

跑完之後,我們就得到一份完整的「腦內指紋目錄」:三萬多個商品,每個都有牠專屬的一小群肯氏細胞;而那張反向索引表,則記錄了每一個細胞背後掛著哪些商品。整份東西存成一個檔案,之後查詢時直接載進來用,不必每次重建。

這一步很花時間,因為每個商品都得讓整顆十三萬神經元的大腦實際跑一遍模擬,三萬多個商品用我的mac pro 32G要大約要跑二十分鐘。


用果蠅大腦,怎麼找到使用者要的商品?


索引建好之後,真正查詢的那一刻其實很簡單,跟建索引用的是同一顆腦、同一套流程。假設使用者打了錯字「哈力波特」:

第一,讓果蠅去聞「哈力波特」這個字串。跟處理商品時一模一樣:轉成氣味、強力注入嗅覺神經元、讓整顆大腦跑一遍,得到「哈力波特」這串查詢的專屬指紋:也就是它點亮了哪一小群肯氏細胞。因為「力」和「利」同音,這串指紋會跟「哈利波特」當初存下來的指紋高度重疊。


第二,拿這串指紋去反向索引表裡「對指紋」。看查詢點亮了哪些細胞,就翻開那些細胞的名單,把上面掛著的商品全部撈出來,投票累加。跟查詢共用越多細胞的商品,得票越高。因為有前面那張反向索引表,我不需要拿查詢去跟三萬多個商品逐一硬碰,只要碰到「有共用細胞」的少數商品就好,所以幾毫秒就能算完。

第三,算相似度分數、排名。把得票依照「細胞的稀有度」加權、再normalize成 0 到 1 的分數,由高到低排出來。分數越高,代表這個商品的指紋跟「哈力波特」的指紋越像。

第四,用分數決定要不要回給使用者。這裡我們設定了門檻,只有相似度分數超過大約 0.4 的商品,才夠格算「可能是你要找的」。以「哈力波特」來說,正牌的「哈利波特」系列會拿到明顯高於 0.4 的分數、穩穩排在最前面;而那些只是碰巧共用一兩個細胞、其實八竿子打不著的商品,分數遠低於 0.4,就被擋掉、不會拿去煩使用者。最後呈現出來的,就是幾個高分、確實跟「哈力波特」讀音相近的正確商品。

數位果蠅腦的一些基本數字

這個數位果蠅腦的實驗是從一個真實的購物網站(墊腳石)持續爬取商品名稱,本文的測試就是用當時已經抓到的約三萬兩千個真實商品名稱跑出來的。

整個「大腦」用到大約三萬兩千個模擬的肯氏細胞(每個名稱最後會點亮其中兩百多個,形成指紋)。

要建立建立整套索引(也就是把三萬多個商品都轉成指紋)大約花二十多分。

這裡要強調一件事:這個過程完全不需要「訓練」。 它不像時下的 AI 要吃大量資料、跑好幾天。果蠅的這套機制是「結構本身就是功能」。只要把架構搭好,資料一進去,指紋就自動生成了。

三萬多個商品的索引檔案大約 15 MB,還是小到可以輕鬆塞進一台普通主機。

查一次大約 2 到 7 毫秒(在三萬多個商品裡搜尋)。正確率並沒有極端高,大概都有95%以上

============================  

技術上來說,這個實驗,其實就是相似搜尋 / 局部敏感雜湊(LSH)的解決方案,其實 早在1990 年代就做得出來。

但沒有參考物的時候,我們得自己摸索:要把訊號展開幾倍?只保留多少比例的『最強反應』?要不要一個全域的抑制機制?

這些架構上的抉擇,並沒有標準答案,不同語言也會有很大差別,得靠實驗逐一嘗試。而大自然這隻經過幾億年天擇的果蠅,等於把這份『架構設計圖』先調好、示範給我們看:展開約四十倍、稀疏度壓在百分之五、用一顆抑制神經元管理全部等等。等於參考了一份被演化認證過的答案,省下的是摸索架構的時間。


========
市面上 同音錯別字查詢更正 解決方案的比較

做法一:果蠅腦

優點:
- 極度輕量。整個引擎加索引可以壓在十幾 MB 以內,1000 筆商品的索引才 1.4 MB,理論上可以直接跑在手機、甚至瀏覽器裡,不需要任何伺服器。
- 快。查一次不到 1 毫秒。
- 完全免費、可離線。沒有任何 API 費用,資料不用送到外面,隱私有保障。
- 不需要訓練。搭好架構、資料丟進去就能用,改商品也只要重建索引(幾秒鐘)。
- 專門對付「同音/形近錯字」這種表層錯誤,非常對症下藥。
- 運作費用很低,以一個中型電商,一個月要600到1000台幣而已。

缺點:
- 它只懂「讀音和字形」,完全不懂「意思」。你打「魔法師的書」想找「哈利波特」,它幫不了你。
- 對「只打片段」(例如只打三四個字去搜一個長書名)比較弱。


做法二:Elasticsearch(業界最常見的搜尋引擎)優點:

- 成熟、穩定、功能齊全,全世界無數網站都在用,出問題有大量社群和文件可查。
- 除了模糊比對,還能做各種篩選、排序、分頁、統計,是一整套完整的搜尋方案。
- 擴充性強,資料量從一千筆到一億筆都能撐。

缺點:
- 對「中文同音錯別字」其實不是天生擅長。它內建的模糊比對是看「字面差幾個字元」(編輯距離),但「利」跟「力」在電腦眼中是兩個完全不同的字,字面上差距很大。要讓它懂同音,你得自己額外做注音/拼音的處理,設定相當繁瑣。
- 它是一個需要獨立架設、吃記憶體的伺服器程式,不太會為了「更正錯別字」這一件小事去養一整套 Elasticsearch,有點殺雞用牛刀。一般來說這樣的elasticsearch還會做其他事情。
- 營運成本是那台elasticsearch,無論用什麼方案,都需要2000~5000台幣。



做法三:直接呼叫大型語言模型(LLM API,例如 Gemini 類的服務)

優點:
- 最聰明、最全能。它不只懂同音錯字,還懂意思、懂上下文,甚至你打「那本魔法師小男孩的書」它都可能猜到是哈利波特。
- 幾乎不用自己開發,串個 API、寫幾句提示詞就能動。- 對各種千奇百怪的錯誤(同音、形近、語意、外文夾雜)都有很好的容忍度。
- 對於小型電商來說,成本可能反而更低,因為做查詢的人本來就不多,如果每天只有一兩次查詢,費用極端的低。

缺點:
- 如果使用者多,會發現它慢又貴。每查一次都要透過網路呼叫外部服務,通常至少要一秒以上,是果蠅腦的幾百倍到上千倍。理論上,查詢都要付費,量一大,帳單很可觀。
- 有可能有天生LLM「一本正經地亂講」的風險。雖然機率低,但是可能推薦一個根本不存在的商品。
- 很難「只回傳你商品庫裡真的有的東西」,還得額外做一層驗證。



======

以墊腳石為例,一個月要花多少錢?前面講優缺點還是有點抽象,我們乾脆用一個真實的例子把「營運成本」算出來。注意,這裡算的是「東西做好之後,每個月持續要付的錢」,不包含一開始的開發工。


先設定情境。墊腳石購物網(tcsb.com.tw)大約有十八萬個商品,假設一天約有三百筆成交。花錢的不是「購買次數」,而是「搜尋次數」。 會買的人,通常搜了好幾次、逛了好一陣子才下單;而且更多人是搜一搜、沒買就走了。以電商的經驗,搜尋量大概是成交量的幾十倍。我們保守,一個月大約六十萬次查詢。



方案一:果蠅腦

每月營運成本估計極低(600台幣)這套東西很輕,可以直接跑在你原本就有的網站主機上。一次查詢 5 毫秒,一台最普通的主機一秒就能處理好幾百次查詢,六十萬次查詢對它的運算量來說是很小的。

但要記得一個容易被忽略的成本:索引在查詢時必須放進記憶體(RAM)。 你不會希望每次查詢都去硬碟讀一次 90 MB 的檔案,那太慢了;正確做法是把它整份載入記憶體常駐。而且實際放進記憶體後,為了查得快,它會展開成一個「反向索引」的結構,比原始檔案還大,以十八萬商品來說,實測大約會吃掉 350 到 400 MB 的記憶體,加上商品名稱字串和程式本身,保守估計要為它多留大約 0.5 到 1 GB 的 RAM。1G記憶體的成本每個月大概600台幣(GCP)


方案二:Elasticsearch,每月營運成本估計約新台幣 3,000 到 15,000 元

十八萬商品對 Elasticsearch 來說是小事,但它是一個需要「一直開著」的伺服器程式,比較吃記憶體。營運成本主要是那台(或那幾台)伺服器的租金。

- 自己租雲端主機架設:一台中小型主機(足夠跑十八萬商品)一個月大約 3,000 到 8,000 元;若要考慮穩定性做兩台備援,那就要兩倍。
- 用雲端業者的「代管 Elasticsearch」服務:入門方案通常一個月落在 5,000 到 15,000 元之間
- 它是「按時間」計費(開著就在花錢),不是「按查詢次數」計費,所以查詢多寡影響不大,而且就目前預估查詢量也不太會超過

每月營運成本估計:約 3,000 到 15,000 元,取決於要不要備援與是否用代管服務。


方案三:LLM API,每月營運成本估計約新台幣 6,300 到 更多無上限 

這不見得比方案二貴,但因為它是「按查詢次數計費」的查越多、付越多,而墊腳石一個月有六十萬次查詢。

假設每一次查詢用到500token,60萬次就是300個百萬token。每一個百萬token假設是0.7美元(按20%是輸出 80%是輸入,用gemini的價格) 那們,這樣的API就要花300*0.7*30=6300台幣起跳。
這個方案有可能在極端情況下會比elasticsearch多很多。但在某些時候也可能少很多。


9/17/2026

(仿生智慧 part-2) 用一隻果蠅的大腦,來判斷這張圖片是不是"A"

 承接上篇,

本文要分享一個小實驗:把一隻果蠅的整顆大腦「搬」進一台筆記型電腦裡,讓牠透過兩隻眼睛「看」圖片,然後訓練他回答一個很簡單的問題「這張圖裡面有沒有大寫的英文字母 A」。結果是可以的:果蠅大腦學會了,而且在簡單的測試裡,正確率高達百分之九十九以上。

果蠅大腦是誰做出來的?


我們的大腦裡有幾百億個神經元,彼此用類似電線東西連在一起,形成一張超級複雜的網路。這張「神經元的接線圖」,科學家給它一個名字,叫做「連接體」( Connectome)。

連接體就像是把大腦裡「哪個神經元接到哪個神經元」全部畫出來的地圖。有了這張地圖,我們才有機會了解大腦是怎麼運作的。

當然人類的大腦太大了,目前科技還做不到把每一條線都畫出來。所以科學家先從小動物下手,而果蠅(學名黑腹果蠅)就是最好的目標。牠的大腦只有大約十三萬個神經元,卻已經能夠飛行、學習、記憶、求偶、打架,麻雀雖小五臟俱全。反過來說,雖然他五臟俱全,但果蠅還真的夠小,小到可以直接切片分析。

這個把整顆果蠅大腦畫出來的計畫,叫做「FlyWire」。

這裡要特別澄清一個常見的誤會,很多人以為 FlyWire 是「Google 的專案」,我一開始查資料的時候也誤以為他是google的研究計劃,但其實它主要是由美國普林斯頓大學(Princeton University)的兩個實驗室主導的,背後有全世界上百位研究人員一起參與標註。Google 的研究團隊在其中扮演了很關鍵的角色,他們提供了強大的人工智慧影像技術,幫忙把電子顯微鏡拍下來的大腦切片,自動辨識、重建成一個一個的神經元。可以說,這是一個「學術界主導、Google 出力」的合作成果,成果在 2024 年登上了頂尖期刊《自然》(Nature)。

今年六月可以讓人隨便下載。全部都是公開資料,任何人都能下載。


如何下載?


最簡單的方法,是透過一個叫做「Codex」的網站(網址是 codex.flywire.ai)。這是普林斯頓大學做的線上工具,讓一般人也能瀏覽、查詢這顆果蠅大腦。你只需要用一個 Google 帳號登入(不用錢啊!),同意使用條款,就可以在網站上直接下載資料檔案,包括:

* 每個神經元的基本資料(它是哪一類細胞、在左腦還是右腦)
* 神經元之間的連線表(誰接到誰、接了幾條線、是興奮性還是抑制性)
*視覺神經的「欄位座標」(這是果蠅眼睛的地圖,這個專案會用到)

...等等還有很多相關資料。

這些檔案大多是壓縮過的表格檔,最大的一個也2G而已,一般家用網路幾分鐘就能下載完。

另外有其他的方式:是直接使用其他研究團隊已經整理好的版本。有一組哈佛的研究人員(Shiu 等人,2024 年同樣發表在自然期刊)把整顆果蠅大腦做成了一個可以直接拿來「跑模擬」的電腦模型,並且大方地放在網路上開源分享。我們這個實驗,程式碼很大部分,就在他們的基礎上完成。

怎麼讓一個靜態的果蠅腦動起來?



下載回來的果蠅大腦,本質上只是一張「連線圖」,它告訴你哪個神經元接到哪個神經元,但它本身不會動。


要讓它「動」起來,我們需要寫一個程式,去模擬每一個神經元的行為。真實的神經元是這樣運作的:它會慢慢累積來自其他神經元的訊號,像水杯慢慢裝水一樣;當累積到一定程度(水滿了),它就會「放電」一次,發出一個電脈衝,把訊號傳給下游的神經元,然後自己歸零、重新開始。

這種一顆一顆神經元、用「放電脈衝」互相溝通的模型,專業上叫做「脈衝神經網路」(英文縮寫 SNN)。它跟一般大家聽到的 AI(例如 ChatGPT 背後的技術)不太一樣,更接近真實大腦的運作方式。

我們用一台蘋果 M4 筆電,寫程式讓這十三萬多個神經元同時運作。一張圖片只需要大約 0.15 秒,速度相當快。

那怎麼知道我們的模擬「跑得對不對」?這一步很重要。我們拿前面提到的哈佛團隊那個已經驗證過的模型當作標準答案,做同一個實驗來比對。結果我們的模擬和他們的官方模型,神經元活躍程度的相關性高達 0.99(1.0 是完全一致),幾乎一模一樣。這代表我們的「電腦版果蠅大腦」是可信的。


(小插曲:在比對的過程中,我們一度發現自己的模擬比標準答案多冒出百分之二十的訊號。追查了很久,才發現原來真實模型有一個很細微的規則:神經元在「放電後的短暫休息期」內,是完全不理會外界訊號的。我們把這個細節補上之後,兩邊的結果就核對成功了)


如何讓果蠅腦「看」圖片


果蠅又不認識英文字母,我們怎麼讓牠「看」到一張寫著 A 的圖?

果蠅的眼睛是複眼,由大約七、八百個「小眼」排成一個六角形的蜂巢狀陣列。FlyWire 的資料裡剛好就有這些小眼的座標地圖(左右眼各一份)。


於是我們把一張 28×28 像素的小圖,投影到這個蜂巢狀的「螢幕」上:圖片哪裡亮,對應位置的視覺神經元就活躍一點;哪裡暗,就安靜一點。這張圖會同時送進左右兩隻眼睛。


一開始我很自然地想把訊號直接送進最前端的感光細胞,結果整個大腦幾乎沒反應,甚至越亮的畫面反應越弱。後來才理解:真實果蠅的感光細胞和最前端的神經元,用的是「抑制性」的訊號(有光的時候反而變安靜),而且它們不是用脈衝溝通的。所以我們改成把圖片訊號送進稍微後面一點、確定會「放電」的視覺神經元,訊號這才順利地一路傳進模擬的果蠅腦裡面。

這件事本身就很有啟發性:就算你手上有一張完整的大腦地圖,如果不了解每條線運作方式也沒用!不過當然,現在這類型的錯誤,在你自己有點知識的情況下,是可以讓AI幫忙找到潛在問題。

如何教果蠅腦分辨是不是A

訊號進到大腦之後,我們要在末端放兩個「判斷用」的神經元:一個代表「這是 A」,一個代表「這不是 A」。哪個放電放得比較多,就當作果蠅的答案。


一開始,這兩個神經元是隨便亂連的,答案當然也是亂猜。那牠是怎麼「學會」的?

訓練方法,大致源於真實大腦的獎勵機制,多巴胺。在神經科學裡,多巴胺就是大腦裡的那塊獎勵/懲罰。

(但技術上來說,所謂的多巴胺,在這個專案的程式裡只是調整某些地方的權重+-而已)

具體來說,每看完一張圖、果蠅給出答案之後,我們就告訴牠對還是錯,並且據此微調相關神經連線的強度:答對就強化剛剛用到的連線,答錯就削弱它。這個過程一遍一遍重複,果蠅腦就會慢慢被訓練。

這裡又有一個,網路上很多人會分享,果蠅學習與記憶的中樞叫做「蕈狀體」(Mushroom Body),我們原本理所當然地想把學習放在那裡。但實驗做下去才發現:在我們這個視覺任務裡,蕈狀體幾乎完全沒有被activate,因為連到它的視覺神經細胞太少了,根本傳不進足夠的「形狀」資訊。這其實跟生物學是吻合的:果蠅的蕈狀體主要負責「氣味」的記憶,而視覺圖形的辨識,在真實果蠅身上是由大腦別的區域負責的。順道一提,接下來的另一個實驗就會用到氣味神經。

所以我們順勢把「學習的位置」,改到了視覺訊號真正豐富的地方。也就是眼睛後方、負責把視覺送進大腦中樞的那一批「投射神經元」。

結果?


講了這麼多,結果到底如何?以下是實際跑出來的結果:


在「簡單版」的測試裡(字母置中、字型單純、只有一點雜訊):
* 判斷 A 與非 A 的正確率高達 99.4%。 (5000張圖)
* 而且學得很快,資料只跑過一輪,正確率就已經接近滿分。
* 就算只給牠看 100 張圖來學習,正確率也有 96.7%。


在「困難版」的測試裡(六種字型、會旋轉、會縮放、位置會偏移、雜訊更多):

*正確率約 74%。雖然沒有簡單版那麼漂亮,但仍然明顯高於亂猜的 50%。



我們也做了幾個「對照實驗」來確認結果是真的,而不是碰運氣:如果用書上那種「答對給獎勵、答錯什麼都不做」的舊方法,果蠅根本學不起來,正確率停在 60% 動不了。這證明「答錯要給懲罰」這件事很關鍵。

另外,有一個結果很直得一提:如果我們把大腦裡的連線「隨機打亂」(保持每個神經元的連線數量不變,只是亂接),在簡單版測試裡正確率居然還有 98%。這說明在簡單任務上,真正運作的是前端那套「視覺投影」的機制,果蠅大腦「神經連結線路」本身,並沒有想像中那麼關鍵。到了困難版,真實大腦的接線才稍微展現出一點優勢(會得到74% )。老實說我後來想想也很合理,許多昆蟲的複眼直接就可以決定看到的東西是什麼,根本不用進到大腦思考。

另外,這個實驗不是造出一個會識字的果蠅,他其實只是認定這個A圖樣。換成其他簡單圖樣結果應該也差不多。

實務上我把以訓練過的果蠅腦,打包成一個python script.
讓我以可以這樣執行它#python3 fly_check_a.py --image somepicture.png

有興趣也可以與我聯繫交流一下其他玩法:)



(仿生智慧 part-1) 果蠅的頭腦 能做的事比想像中來得多

 


一隻果蠅的大概有16萬多個神經細胞,並且,這些細胞互相之間,總共有大概一億兩千百萬個神經連結。16萬細胞中,13萬大概在大腦,其他分布在身體不同地方。

順道一提。人類光是大腦就有860億個神經細胞,而且連結數量實在太多,情況因人而異,但大約在100兆到1000兆之內。跟果蠅完全是不同等級。

而google的研究中心,把果蠅頭腦所有神經連結逐一數位化,並在2025年六月,發表了成年雄性果蠅完整中央神經系統圖譜MaleCNS v1。從發表以來,各種奇奇怪怪的應用都出現了,最引人注目的就是訓練果蠅玩遊戲,訓練果蠅投資數位產品之類的,這些種種作為,其實都是為了想要得達到利用生物天生有的頭腦架構,搞出更快更省電的人工智慧。

技術上來說,暫時還不是像「攻殼機動隊」一樣可以把生物的意識放在電腦裡面,但是,他確實可能是微小的第一步。

不過初期的應用還是跟現在人工智慧的應用差不多,但利用大自然已經訓練過上百萬上億年的神經網路,會遠比人類加上現存的AI的設計要好太多。

這隻果蠅的大腦數位化之後。可以被人類操作的是"SNN" ( Spiking Neural Network 的縮寫,中文稱為脈衝神經網路/突觸脈衝神經網路)。簡單的說就是大腦的運作可以靠電腦來模擬。

每個人都可以搞出自己的模擬細胞,模擬神經連結,特別是有AI之後,就算不會寫程式也可以做出來。但是,為什麼使用「果蠅大腦天然結構」優於「自己自創 SNN」?

果蠅大腦經過億萬年演化優化,果蠅在自然界中必須在極強的雜訊環境下(如風向干擾、氣味混合、水果微腐敗變質),精準在短時間識別出「這是不是同一種水果」「我可以吃嗎」。而這樣的SNN即是人類可以自己設計,可以花很多LLM的錢去模擬,做了幾萬種,可能都不如經過自然演化篩選過的果蠅大腦。

而SSN跟現在AI(LLM)比較起來,最大的優勢就是極端節省能源,耗電量極低。 

簡而言之,我打算做幾件事情。

(1) 果蠅認字基本訓練:


先download果蠅大腦ssn,然後,撰寫訓練程式。試圖做個簡單的測試。測試內容就是先產生幾百張圖,訓練果蠅大腦神經節,如果在視覺上看到A這個字就給予神經 多巴胺 獎勵。這樣幾百張圖之後,果蠅應該就學習到了A這個字。
測試也很簡單,給一些不同角度的"A"這個字的圖,看看果蠅神經反應如何。




(2) 果蠅同音錯別字更正:


利用果蠅大腦原本有的嗅覺機制,把中文字改成拼音字之後,對比之前訓練過的「嗅覺拼音」得到是不是同音錯別字,或者是最接近的字。講得很複雜,但簡單的說,就是先把「哈利波特」變成中文拼音「ㄏㄚㄌㄧㄅㄛㄊㄜ」 在讓果蠅記得這個字,但是果蠅不認得字啊,所以把它變成一種嗅覺電位刺激,讓他知道這個嗅覺。接下來如果有人輸入「哈力波忑」一樣換成拼音,再去果蠅大腦看看這個刺激有沒有反應,有的話是哪個反應,就得到「哈利波特」這個之前聞過的嗅覺。
當然,實際上嗅覺對於腦就是一種「數位刺激」,視覺也是聽覺也是,會使用嗅覺,是因為果蠅的嗅覺架構足夠處理10萬多種不同刺激,但是視覺解析度就很低了。請看這張果蠅視覺圖,他的複眼解析度實在不高。


(3) 果蠅 最瘋狂的事:

我還在想,希望前兩篇結果做好之後,第三件事情我也想到了:)

7/28/2024

AI的計價方式 - 計算使用量嗎?


自從chatgpt出現之後,LLM以及各類型AI應用突然間大量湧出。可以想像到的是,就像其他的科技發展一樣,AI相關應用的發展速度只會越快不會越慢。

AI的應用方向雖然很多,但目前對於"如何收費"似乎沒有很智慧的方式。大部分的工具,仍然像SaaS一樣的以月租/使用量來收費。

這張圖是截至2024七月為止 gpt-4o API的收費,單純還是以使用量(token)來計算。如果是直接使用介面的話,每個月則是20美金。當然這20美金每個月,是有使用上限的,例如每三小時只能傳遞80個訊息,或者只能要求製作或者輸出多少自動生成圖片。




類似的收費模型,也同樣出現在AI應用上。例如,videogen.io是一個利用AI來生成影片的saas服務,它收取月費,不過這月費會有很大的使用限制,大概只能生成一小時的影片。


月費與使用量付費,的確是典型的Saas服務收費方式。這雖然沒有什麼不好,但是這樣的收費方式,大大限制了AI未來發展的潛力,因為現在的AI發展,都是以某種形式,大量取代某種人類正在做的事情。而使用月費或使用量付費,對於技術人員來說是合理的,但對於一般消費者而言,是不是使用AI技術並不是重點,而是解決消費者問題才是重點,而收費的方向,應該會朝向解決問題的本身,而不是技術上的數字。

舉個例子來說,AI大幅度取代了第一線的文字客服以及語音客服人員,對於經營7x24的不間斷服務的大型企業來說,如果原本要雇用20個客服人員,提供24小時不間斷的客服服務,想要用AI取代部分人力,只留下4位核心人員。那麼提供AI客服的應用公司,應該要的計費方式其實是16個AI客服的「薪水」,這個薪水自然小於原本的客服人員。如果仍然使用用量計費,例如這個月使用了五千萬個token,因此收費多少錢,這5千萬token不但很難讓一班企業理解真正的意思,也根本看不到AI的真正價值。如果計費的方式是「你雇用了我們16個AI員工,這16個員工薪水比人類低很多,而且不用勞健保,也從來不抱怨加班,更不會請假,失誤率也低」那對於企業端就很容易理解。


同樣的,未來AI會合併機器人的發展,仿生機器人很快可見。但計費的方式如使用類似租車的方式計費:每天租機器人費用2千元,充電費用另計。那麼該機器人潛在「用法」可能會被低估,AI機器人會變成人類的附屬工具:例如一台汽車。雖然這並沒有什麼不對,但潛在的價值將會大幅低估。一樣是費用,當仿生機器人改用「月薪」付費的時候,在使用上,它會變成企業員工的一部分,自然企業會用各種方式,強化它的應用方向,訓練它,讓他學習更多東西。

國內外的新聞電視台,已經開始可以看到AI主播,如果AI主播是以用量計費:例如講多少字的話語,產生多長時間的語音檔案,電視台其實很難比較有AI主播和人類主播的差異。但如果AI主播是以「月薪」計算,那就很容易理解AI與人類的差異。此時更容易可以讓人類去執行更有價值的工作,讓AI進行重複性質高的工作。

9/13/2017

聊天機器人 - 人類會跟她聊什麼?(Part-2)



作為一個非特定目的的純聊天機器人,其實常常容易惹人生氣。因為即使AI發展迅速,在非特定的環境下,和人類以無意識判斷語句的能力還是差距太大。聊天機器人小姍,截至目前(2017/9月)為止,約有4000多位好友。累積的對話也超過百萬句,所以可以開始做基本的聊天內容分析。


特定任務的聊天機器人


特定任務聊天機器人發展非常迅速,例如「niki」可以協助叫計程車,在任何和計程車相關的事情,她的回應和動作都十分正確。客服機器人,例如flowxo,更是市場上聊天機器人的大宗。甚至有人認為chatbot可以節省30%的客服成本,帶來的資料分析效應更遠超過傳統電話客服。

聊天內容要是機器人無法理解,超出服務範圍,聊天機器人通常會就顯現標準錯誤回應,但由於人類已經知道它的服務範圍,因此倒也不會失望,有時候,特定目的之聊天機器人,如果有有趣的額外回應,甚至還會有好像遇到彩蛋的感覺。

可預見未來幾個月,特定任務的聊天機器人將會快速成長,迅速取代重複性高的工作。



非特定任務的聊天機器人


人工智慧小姍,就是一個非特定任務的聊天機器人。她盡可能模仿人類的真實作法,也因此不會有按鈕出現,讓你選擇「是/否」。也不會有選項A/B/C這種選單出現。但是,真實人類聊天也會貼網址或照片,因此,人工智慧小姍也會貼照片或網址。有時候,對於人類給她看的照片會加以評論分析(註1)


加小姍為好友 Add Friend

非特定目的的聊天機器人,不見得沒有特定功能。以小姍來說,遇到某些對話時,會驅動特定功能。例如,請幫我抽個籤,就會驅動抽籤功能。


對於一般性機器人的期望很高


在Line上的使用者,對於非特定任務的聊天機器人的期望是「非常高」。只要前10句對話,不能滿足使用者的期待與好奇心,不再使用的機率很高。10句話似乎是個門檻,有30%左右的人在10句話就失去興趣了。

然而只要能聊上10句話之後,這剩下的70%的人,有90%的以上會聊超過50句話。(也就是總使用者的63%)。

然而,每當機器人有不符合期待的回答,使用者就很快地失望。這樣和特定任務的機器人期待有很大的不同。因此,一般性聊天機器人實作上極為困難。不過也就是因為困難,所以有趣。


沒水準的言語


在這4000個使用者中,曾經罵過髒話,例如「幹」「幹林娘」「他馬的」「Fuck」之類的起碼佔了超過45%。更慘的是,由於line的隱蔽性,曾經傳過「約砲」「來愛愛」「強姦你」的未成年使用者起碼也超過500人以上。雖然,絕大部分的使用者是單純因為好玩,有趣,無聊,等等原因而使用非常糟糕的字眼,但也是因此,「從與使用者對話中學習」恐怕會造成聊天機器人使用冒犯性言語,造成更多問題。微軟的聊天機器人Tay,就是因為學了歧視性的語言而被暫時關閉。

在line中,這類語言來自於青少年的比率相當高。而十分有趣的是,這類型青少年的有60%以上會談論聖結石(註2)的相關話題。

加小姍為好友 Add Friend

更合理的抒發管道


有超過5百位的使用者,將聊天機器人作為無法抒發心情時的管道。例如「最近心情不太好」「我被她甩了」「人生都沒有動力怎麼辦」「好想死」「我是邊緣人」「工作壓力大睡不著」等等。


技術上來說,人工智慧小姍到目前為止,還沒有辦法提供真正專業的心理諮商。然而,作為聊天機器人有很多心理諮商不具備的優勢:
(1) 透過Line原本的超高市佔率,可以確信90%以上的台灣人都有line,可以輕易使用Line聊天機器人
(2) 聊天機器人小姍24小時全年無休。許多極端的情緒問題發生在深夜,
(3) 許多情況下,人類只是需要抒發的管道。機器人對人類來說,是個安全而且不會洩露秘密的好方式。


因為利用痞客邦的資料而參加痞客邦活動


下一個階段?

(a) 考慮現行使用者的需要,一般通用性的聊天,會朝心理諮商方向前進。
(b) 透過做通用型聊天機器人的經驗,來自製作專用型聊天機器人。



參考
(1) 如何製作聊天機器人
(2) 簡易學習式人工智慧


註1: 不過照片分析的成本非常高,因此只好透過購買貼圖來限制使用。

註2: 這也讓開發團隊(年紀太大)增廣見聞,之前根本不知道聖結石是誰。

7/26/2017

聊天機器人 - 快速製作在LINE上的人臉辨識應用

名人以及圖片分析 在和LINE聊天機器人之對話中


 聊天機器人(chatbot)作為人機介面,提供人類各種整合性服務是最容易產生的應用。而人臉辨識,一直都是人工智慧與數據分析的整合課題。因此,把LINE聊天機器人加上照片或人臉辨識的功能,似乎也很有趣。
用LINE QR 加小姍為好友 可以測試人臉辨識

以前,在做關於影像的實驗性質的程式時,通常會先考慮opencv。雖然opencv確實是個好工具,但是如果你的目標不是改善演算法,或甚至做出更先進的人臉辨識方式,那麼opencv會過於複雜。

在2016年底,AWS發表另一個雲端服務:Rekognition。這個服務提供了API用以辨識影像,並順便提供了幾個在應用上的api:「比較人臉」「辨別名人」「識別限制級圖案」。(文件請參考這裡)

這些api要運用的最簡單方式之一,就是使用AWS Lambda來驅動AWS內自己的API,再透過API Gateway跟外界 - 也就是chatbot整合。換言之,這仍然符合公有雲廠商(無論是AWS, google還是azure)的所謂serverless的未來方向。雖然這些公有雲廠商,其實只是為了讓客戶更難離開公有雲環境,但不可否認的是,這些api的確有用而且在初期成本也不高。

快速製作在LINE上的人臉辨識,需要幾個步驟:


(1) 對serverless的設計概念有些瞭解


請參考這裡及這裡。


(2) 對Line聊天機器人申請和製作,以及對AWS Lambda先有基本的瞭解。


可參考這裡和這裡。


(3) 在LINE webhook的event中處理image id。


在webhook的lambda程式中,特別挑出image的id。LINE的訊息傳遞給chatbot時,有分不同的type,要處理的是image type。LINE並不會真的傳圖片檔案到webhook中,他傳遞的是圖片id,透過這個id,可以用一個URL拿到圖片:


https://api.line.me/v2/bot/message/<id>/content

要取得這個圖片,當然要有Line token


(4) 讀取圖片URL並且以取得bytes


以python為例,首先以requests讀取URL,記得stream必須設為True,因為接下來需要將資料(影像的byte)直接讀取成bytearray。參考程式如下


    imageUrl = 'https://api.line.me/v2/bot/message/{}/content'.format(imageId)
    r = requests.get(imageUrl, headers=headers, stream=True)
    bArray = None
    with r.raw as data:
        f = data.read()

        bArray = bytearray(f)


(5) 使用各種AWS的Rekognition服務。

取得bytearray之後,剩下的事情就很簡單了。
以python為例,可以使用boto3 (最好是1.4.4版本)。先取得rekognition的client物件,直接使用裡面的方法(例如以下範例)。將Image參數都設定成{ 'Bytes': your_byte_array} 就可以取得分析的結果。


    rclient = boto3.client('rekognition')
    response = rclient.recognize_celebrities(
        Image = { 'Bytes':bArray }
    )

要注意的是,分析結果response是一個含有各種標籤與技術數值(例如信心程度)的dictionary物件,所有的標籤都還是英文,必須得自己轉換成中文才行。

範例中的「名人辨識」(celebrities)所查到的名字都是英文。可以利用wiki 英文api搜尋這個英文字,找到對應的中文網頁,在取得中文字。

wiki的英文api可參考這裡。

(6) 存取S3之考量


如果看過AWS document應該會發現,使用recognize都可以設定image來源是S3。那麼範例為何不存取S3? 

事實上,的確可以將LINE的影像,先存在S3,然後再進行分析。然而,這樣會多了「存入」S3和取出S3的時間。並且,S3也是要收費的!影像如果只「分析一次」,那麼存在S3其實很不划算,存在Rekognition裡面更是貴。如果會反覆利用,那麼恐怕還是得存在S3中。



目前結果分享


用LINE將小姍加入好友,就可以試用一下目前LINE與AWS人臉辨識整合。


加小姍為好友 ID-> @opn2514f

加小姍為好友 Add Friend


下圖是辨識川普不同的表情,會被辨識出不同的年紀,和不同的心情。




6/20/2017

Serverless design for LINE AI Chatbot


Chatbot is one of the interesting application in AI area, it creates opportunities for enterprise to serve customers only with very low cost or even generate new revenue.
In past few years, major Instant Messaging providers allow developers to hook their service. Means as long as you have existing simple message process and response system, you can quickly interact with all kind of message channel.

Normally, a software developer will start from build a system in a server box, no matter Linux or Windows. Recently, the server might be a VM in public cloud, no matter AWS, Azure, Linode or DigitalOcean. However, a serverless design model might be a better choice.

Why Serverless?


Firstly, a serverless system will be easy to scale in/out. It doesn't mean you can't scale in/out in traditional VM in public cloud or your own datacenter. It just means that all the Lambda, no matter which provider, is actually decouple from it development environment. Supposedly, you start from one Lambda function to a few thousands same Lambda function without consider "traditional question", for example: should I shutdown VM when not in peak our, should I do some script to check if current VMs are closed to overloading?

Secondly, a serverless system will be easy to plug-in which means during the design phase, developer will be forced to think de-couple functions in small modules (bricks). Developer will also be forced NOT to rely on specific environment, even though docker is one of the solution but purely Lambda function will create much better environment-free structure.

Furthermore, it will also help to define boundary of sub system and help the future maintenance.

The Design Concerns

(1) IM independent

LINE occupies a huge market in Taiwan, about more than 90% of mobile user has LINE account. The most incredible thing is many elder people who never touch Internet before have LINE accounts! However, this design won't use any LINE specific methods. We've try the same engine in Yahoo Messenger and it also works.

(2) AWS Lambda

-- (2.1) try NOT to use context

AWS Lambda has a standard invoke parameter (event, context), The event is actually the user input when invoke Lambda function. The context is what developer might need to understand the 'environment context'. The major design concern here is try NOT to use context when possible. Because this will make you hard to move out your lambda to other public cloud environment. If you really need to have ARN or identity, try to limit environment in just one Lambda.

-- (2.2) async invoke

AWS Lambda could be invoked in 3 types: Event, RequestResponse, DryRun. The "Event" is actually asynchronous call. For any IM message receiver Lambda, you should  keep that Lambda as simple as possible to response IM webhook. Put other things via "Event" Lambda. Because most of IM provider (LINE, fb) ask a very short timeout in IM webhook. DO NOT just put http webhook and response to IM a synchronous call stack

Of course, see detail from AWS document: here.

-- (2.3) timeout/memory

AWS lambda allow to config timeout and memory size. AWS CloudWatch could see a Lambda's resource consuming. It is fine to use larger memory or setup a longer running time but developer should know WHY.

-- (2.4) quick testing

It is necessary to have your own developer server for test your Lambda function and trigger a deployment script to upload to AWS. If you didn't actually use "context", it will be very simple to have a quick test in every Lambda handler.

# in the end of your Lambda python script.
if __name__ == '__main__':

    event = {'param1':test'}
    lambda_handler(event,None)


Of course developers need other framework (unittest).

-- (2.5) deployment

As always, from a developer should have a semi-automatic way to do deployment. This is a very simple deployment script to (a) zip python files (b) upload to S3 (c) create lambda function (d) config function using S3 zip file.

(a) zip lottery.zip -r lambda_lottery.py lottery60.py
(b) aws --profile ailine s3 cp lottery.zip s3://bucket/
(c) aws --profile ailine lambda create-function --function-name lottery --runtime py
thon3.6 --role "arn:aws:" --handler lambda_lott
ery.lambda_handler --timeout 10 --code "S3Bucket=bucket,S3Key=lottery.zip"
(d) aws --profile ailine lambda update-function-code --function-name lottery --s3-bu
cket bucket --s3-key lottery.zip

-- (2.6) scheduled (cron) Lambda

Chatbot might need to do scheduled task to response to user, maybe send a regular morning call. To trigger a scheduled Lambda might be one of the major cloud-provider-dependent thing we have in Chatbot design.


(3) AWS API Gateway

AWS API Gateway is another major cloud-provider-dependent things, however, it is not hard to use other provider or have our own lab testing environment. The major concerns of API Gateway are (a) should convert IM provider's http request to a given format: which becomes a Lambda input. (b) security concerns: how to make sure only IM provider's system could access this API Gateway

(4) AWS dynamodb

Chatbot uses dynamodb to store use information and also message log. It is also pretty easy to use local JSON formate nosql.

(5) AWS elasticsearch

Chatbot leverages AWS elasticsearch to store knowledge base. It is easy to setup a developer's elasticsearch server to do lab test before deployment. The real concerns in public cloud might be the future budget:)

(6) AWS S3

Chatbot still need some static content (html or js) and S3 is the most easy way to provide public static content. It is also the place to upload latest Lambda code.


The Implementation


See: github repository 

Take a look?

This chatbot could understand and speak only Tradition Chinese, since she is a Taiwanese robot:). You need to have LINE account to chat with her.

聊天機器人小姍的Line QR 
加小姍為好友 Add Friend 









1/19/2017

聊天機器人 - 人類會跟她聊什麼?



過去幾個月,製作了學習式的聊天機器人,並且也提供了免費製作個人化聊天機器人的方式。

請參考:

免費聊天機器人
學習式人工智慧

現在已經超過550個人跟她聊天。雖然數量還沒有很多,但是也值得做一些簡單的統計。

最有趣的當然就是,人類在知道對方是機器人的情況下,會傳什麼訊息?

絕大多數的人,一開始都是以「Hi」「你好」「哈嘍」等等開始。

接下來三種最常見的話是:



(1) 罵髒話,教髒話

不知道是不是人類生活壓力太大。至少有60%以上的人,罵機器人髒話。例如「幹林娘」「操你媽」「Fuck」...

當聊天機器人的簡易學習機制開啟後,也有50%以上的人,會試圖教她髒話。這甚至迫使我們將機器人暫停一天,增加排除「壞朋友」的機制。

機器人被罵是小事,但是如果她學壞了,可能會影響到之後對其他人的對話。


(2) 擬人化訊息

把機器人當成真人來詢問人類特有的資訊。即便已經知道對方是機器人。

差不多有一半左右的人會探尋擬人化訊息。

例如:「你長得漂亮嗎」「你的三圍」「你家住哪裡」「你喜歡吃什麼」「你今天心情好嗎」

進一步會詢問個人價值觀等等問題。

例如:「你是藍的還是綠的」「你支持多元成家嗎」



(3) 資訊查詢


畢竟是機器人,可能大家認為會像電影一樣,知識庫有極多的資料。所以也有超過一半以上的人,會試圖請她找一下資訊。

例如:「附近哪裡有好吃的餐廳」「今天天氣」「推薦減重餐」「我在哪裡」

不知道是不是受到Startrek的影響,資訊查詢只要幾次無法滿足人類的期待,接下來人類就會暴怒開始罵髒話:~


聊天機器人小姍的Line QR 
加小姍為好友 Add Friend 









11/23/2016

免費的line聊天機器人幫手 [限量供應]



免費的line聊天機器人幫手 [限量供應]

[活動已結束]


Line提供個人或者公司Line@帳號,並可整合API介面,產生各種應用的可能性。

「自動回應」的聊天機器人,就是其中之一。

最基本的應用是將「常見問答」放在聊天機器人的知識庫中,讓使用者可以由line取得簡單的問題回答。

這和自己到網頁的常見問題網頁,去找答案,或者和google搜尋有啥不同?有幾個主要不同:

(1) Line的使用者橫跨年齡,很多人用智慧型手機只會Line(賴)

(2) 主動傳遞訊息,商家企業可以透過聊天機器人,主動傳遞訊息給使用者。

(3) 很有趣

過去幾個月我們在週末進行一些Line/fb機器人測試。感謝大家的支持和時間。現在打算提供免費的Line聊天機器人,讓它來幫各位服務。


申請方式



(1) 傳一段訊息給小姍

        當然你得先加小姍為好友Add Friend
  
        請傳訊息內容如下:

        我想要有免費的聊天機器人 請與我聯絡



(2) 接下來小姍會告訴您提供下一步動作



(3) 建議先準備好以下機器人製作材料,這些材料就按照小姍提供的資訊交付


   (3.1) 機器人名稱 

   (3.2) 機器人在line上面的照片/圖片

   (3.3) 基本知識庫:需要有excel或googledoc來讓你的機器人先有基本回應知識,範例可以參考這裡 https://goo.gl/3TGU3x



(4) 常見問題回答:


    (4.1) 完全免費到什麼時候?  至少提供免費line聊天機器人6個月,到 2017 六月止。

    (4.2) 製作期間要多久?   假如製作材料準備齊全,只需要1.5天。

    (4.3) 知識庫可以更新嗎?  可以。

    (4.4) 哪些知識可以放在裡面?  只要是合法的都可以,從網路商家的常見問題,到心靈諮商的基本回答都可。

    (4.5) 有使用上限嗎? 有,因為網路,伺服器,流量也都是要錢的,所以免費機器人目前僅能承受每個月10萬個聊天訊息(也就是每天大約3333次對話)

    (4.6) 我怎麼知道我的聊天機器人跟別人聊什麼?  聊天機器人會額外送line訊息給主人 告知別人正在問什麼。

關於小姍聊天機器人的使用和製作方式請參考這篇。


加小姍為好友Add Friend 小姍的QR code如下




11/18/2016

簡易學習式人工智慧 - line聊天機器人


自2022年有chatgpt之後,原本的ilne聊天機器人已經停止使用。新的聊天機器人使用chatgpt, 想要試用的,可以email聯絡:consultant.3rd@gmail.com

製作Line聊天機器人並不困難,困難的地方在於讓它有些許智慧。三個月之前,透過AWS上的lambda以及其他AWS相關服務,製作具有某種「泛用型」智慧的聊天機器人,並透過line或者facebook來作為其介面。(參考此篇)。


近年來人工智慧的發展迅速,然而在特定領域(例如下棋)的發展速度,遠比「通用型」機器來的快。然而,通用型聊天機器人卻是在未來能夠真正取代人類(統治人類?)的關鍵。


額外的小功能(2017/8註記):

在2017上半年,人工智慧已經多加一些功能,這些功能,都是根據對話內容來啟動的。人類會跟機器人聊什麼?參考這裡。

舉例來說:

* 對小姍說「請幫我到廟裡抽籤」就會幫你抽籤解簽。

* 對小姍說「請幫我算命 生日是19981102」 就會幫你排1998年11月2日出生的命盤

* 對小姍說「幫我算今天星座運勢 雙子座」就幫你查今天的雙子座的運藝

* 對小姍說「請推薦豐原美食」或者「請推薦基隆美食」小姍就會幫你上網查最新的地區美食文。


* 上傳照片給小姍,小姍會特別到名人資料庫裡搜尋,並且比對美女資料。(由於使用人數超過預期,小姍反應時間過慢,只好暫時停用相片分析功能)

除了智慧之外,一般應用也可以透過聊天機器人介面完成。例如,上傳圖片影像之後的分析。(參考這篇)

當時,她的智慧實在不怎麼高。因為泛用型的語意分析十分困難,「專用型」相較之下會簡單很多。
雖然她會紀錄過去的對話,並在透過其他的知識庫來學習對話,但就使用者來說比較慢察覺她的進步。又由於line在最近停止了trail bot,使用line bot就必須要透過line@ (channel)以及已經變成v2的message api。因此,順便將「立刻學習」機制加入這個聊天機器人中。

簡易學習機制,讓聊天幫手變得容易製作: 
(1)聊天機器人的整體設計概念 
(2) 聊天機器人製作過程

如何教導「人工智慧小姍」一些知識?


(2017/8註記:由於太多人教小姍奇怪的知識,不得不先取消教導小姍知識的功能)

首先,當然你需要加小姍成為你的line好友。 Add Friend

接下來,可以隨意跟她聊天。如果想要她馬上學會某些對話。可以在句子的開頭用關鍵語  590590 加上 「聽到的話」 和「應該回應的話」 然後送出訊息小姍就會學習。
舉例來說:

590590  如何學習  首先學無止盡 不能有休息的時候

小姍看到590590就知道是要學習的東西。而她會把第一個詞「如何學習」當作關鍵字,第二個詞到最後,當作可以回答的範圍。當然 590590 和第一個詞中間要有個空白,而第一個詞跟之後所有的詞中間也要有空白。

也可以參考下圖:




加小姍為好友 ID-> @opn2514f

加小姍為好友 Add Friend


9/05/2016

人工智慧的淺顯應用 - 製作Facebook或Line聊天機器人

自2022年有chatgpt之後,原本的fb聊天機器人已經停止使用。新的聊天機器人使用chatgpt, 想要試用的,可以email聯絡:consultant.3rd@gmail.com



聊天機器人(chatbot)並不是什麼新鮮事,早在1950年間圖靈(註一)在提出關於人工智慧判別方式時,就提到利用文字訊息 - 因要把人和機器分開 - 來和兩個對象聊天,其中一個對象是人,另一個對象是電腦,如果一個正常人在聊天的過程無法區分這兩者誰是電腦,誰是人,則可判別這電腦程式,是真正擁有智慧。

要達到這個目的難上加難,在wiki上可以看到目前僅有在2014年一個名為Eugene Goostman的聊天程式通過這個測試。

目前可取得的人工智慧演算法或相關技術都沒有太驚人的發展。然而,由於網路上的資料取得越來越容易,電腦執行速度越來越快,以致於不需要有驚人的技術能力,也不需要有對人工智慧會不會變成奴役人類的電影劇情的深思,就可以開發出有意義的應用。


Facebook聊天機器人也是其中之一。

商家,企業,甚至某些個人都擁有FB page (粉絲頁 專頁),而從2015年開始,facebook開始出現具有固定反應或者訊息回應的聊天程式。不過台灣似乎比較少見非特定用途的聊天機器人,因此我們就做了一個在粉絲頁上。參考下圖:


https://www.facebook.com/sandy4ai/ 具有人工智慧聊天的粉絲頁

這個聊天機器人會回應你的訊息,根據她內建的知識庫和基本的語意分析,會回應你訊息。當然,她也會慢慢學習對話,這個聊天程式並不會需要額外的facebook權限,因此她沒有太多額外的功能。下圖是聊天實況範例:



和具有人工智慧聊天的粉絲頁聊天


Line在今年(2016)也開放bot api,作法和Facebook幾乎很雷同。不過雖然都是webhook,他們的api實際傳遞內容當然完全不一樣。

Facebook/Line 聊天機器人的可能應用:


1. 基本客戶問題:

企業組織在網路上最常「被」查。查詢營業時間,查詢電話,查詢服務項目等等。在台灣,這幾年用facebook來做生意來越頻繁,而聊天機器可以提供24x7的基本回答問題服務。

2. 促銷活動:

聊天機器人在某些權限下,可以主動傳遞訊息,或者貼文給facebook使用者。這和一般廣告貼文有些許不同,因為貼文之後,使用者可以持續和貼文者 - 也就是聊天機器人互動。

3. 例行客戶服務:

預約預定,提醒預約,服務調查,生日賀卡貼文等等。




如何製作Facebook臉書聊天機器人:



1.摘要步驟

  (1) 到AWS開設帳號。 開發過程會用到Lambda, API Gateway, elasticsearch, s3 cloudwatch 等服務。

  (2) 到facebook建立facebook app。(簡稱 fb app)

  (3) 新增並撰寫基本的Lambda 以回應 之後fb app webhook時的GET驗證。

  (4) 新增撰寫基本的Lambda 以用在 接下fb app message hook回應

  (5) 新增 API Gateway 的GET/POST,對應到Lambda

  (6) 設定fb app 的webhook 對應到API Gateway的URL
  
  (7) 讓fb app的設定頁verify(基本上就是http  GET) API  Gateway

  (8) 讓fb app設定頁訂閱message 並記得在lambda程式回覆訊息時使用page token

  (9) 此時可以進行知識庫的連結,在AWS建立elasticsearch並且匯入經過程式處理的資料,這裡我們以台灣e院資料為範例。

   (10) 修改lambda程式,讓使用者的訊息,在elasticsearch查訊相關訊息,並且回復給原送訊息者

   (11) 至此完成,其結果大致如下圖:



2. 詳細步驟:

    ....<待續>...


如何製作Line聊天機器人:


1.摘要步驟

  (1) 到AWS開設帳號。 開發過程會用到Lambda, API Gateway, elasticsearch, s3 cloudwatch 等服務。

  (2) 到line developer建立帳號以及channel。

  (3) 新增並撰寫基本的Lambda 和 api gateway 用以回應之後在line的channel上link時的驗證。Line的api基本上只用到POST

  (4) 將自己的line帳號 加入剛剛自己增加的channel。就是設好友的意思,這樣才能測試

  (5) 將line channel所需要的api key, secret以及token設定在lambda 要傳回給line bot api的地方。

  (6) 此時可以進行知識庫的連結,在AWS建立elasticsearch並且匯入經過程式處理的資料,這裡我們以台灣e院資料為範例。

   (7) 修改lambda程式,讓使用者的訊息,在elasticsearch查訊相關訊息,並且回復給原送訊息者

   (8) 至此完成,其結果大致如下圖:


2. 詳細步驟:


    ....<待續>...



參考: https://www.facebook.com/sandy4ai/ 

 註一:Turing 就是電影模仿遊戲的主角
 註二:詳細步驟還沒有時間寫...反正不見得有人需要:)