Monday, July 28, 2008

雙顯示卡帶來的意外(收獲)

前些時候決定把筆電的操作系統換成 Linux, 經過一陣考慮和比較之後,我決定安裝身邊比較容易找到(求救)資源的 Ubuntu,既然決定了就趕緊執行,所以趕緊下載所軟體( Live CD Image),就開始我的 Ubuntu 之旅。

從轉換環境至今,我對新的工作環境相當滿意,除了讀 Office 2007 格式文件還需費些週章,無法無縫轉移之外,其他的需求都可輕易解決。當然啦,轉移的過程並不是無風無雨,總是會碰到莫名所以的情況需要克服,像前幾天遇到的雙顯示卡的狀況,過程跌宕起伏,就讓我驚出一身冷汗。

我的筆電是 Sony VAIO ,這款筆電有兩個執行模式:全速模式和省電模式,省電模式會抑制 CPU 執行速率,並且關掉 Nvidia 繪圖晶片,使用主機板上的標準 VGA Chip,本是設計上的美意,卻讓我的 Ubuntu Voyage (Ubuntu 之旅) 遇到一場不算小的麻煩

那天下午陪家人去逛街,我一個人在購物中心的咖啡廳玩電腦消磨時間,為了省電,我把省電開關切到 STAMNIA 省電模式,重新開機之後,系統回報 VGA 偵測錯誤,然後跑出 800*600 的提示畫面,就掛在那兒了。當時百思不得其解,以為是我把筆電放在桌上的動作太粗魯,把硬碟弄得發神經,苦命的我又要重新灌系統了。但是 WinXP 竟然可以正常開機,證明我的懷疑不正確。

回家上網查了資料,找到重新設定螢幕的方法,於是信心滿滿的照方抓藥,以為定然藥到病除,但結果卻讓我大吃一驚。修改後,雖然系統可以正常開機,但是系統偵測不到 Nvidia 晶片,所有特效都自動關掉,而且畫面切換的速度很糟,不是雪花就是惱人的閃爍。為了解決問題, 上網下載 Nvidia 最新版驅動程式,結果安裝過程以令人驚訝的錯誤訊息-你的系統沒有 Nvidia 硬體-告終。這時我開始懷疑自己轉台的動作是不是太衝動了。

努力回憶下午的狀況,思索曾經做過的每一個動作,思考之後,發現唯一和最初安裝系統時的不同就是速率模式的按鍵,猜想可能是這裡發生的問題,於是用 XP 開機,執行硬體檢測程式。硬體報告果然包藏玄機,這時程式回報的 GPU 是 on-board intel chip,這時看到解決問題的曙光了。

把模式切換回 SPEED 模式,看看重新開機有什麼結果。這回系統再次回報螢幕模式偵測錯誤,又出現當機畫面,顯示我的猜測可能是對的。我猜系統這回抓到 N 牌晶片,發現與 X-Config 裡的標準 VGA 參數不符,所以再次死給我看。但是這回用上剛才查到的招式,卻解決不了問題,反復開機進入文字模式執行 dpkg-reconfigure 的結果,仍是一次次的當機。

最後用 Recovery 方式開機,系統出現修復選單,執行系統原先就提供的修復 X Server (Fix X-Server) 功能,終於搞定。從發現狀況到解決問題,歷時一小時

古人說,治學需於不疑處有疑,安裝系統亦如是。後來整理這次狀況的心得,正解如下:
  1. 將筆電上的開關撥到全速模式( Stamina --> SPEED )
  2. 重新開機,從多重開機選單中選擇 Ubuntu Recovery Mode
  3. 開機完畢後,執行 修復X-Server 功能 (這是 Recovery 開機後出現選單的第四項)
  4. 再次重新開機
  5. 進入 X-Window,啟動 Nvidia ( Restricted ) Driver
  6. 啟動桌面特效 (Desktop Effect)
  7. 重新開機
  8. 一切搞定
執行以上步驟所需時間:十分鐘不到。

Good bye to Randy Pausch

雖然不算意外,Randy Pausch 畢竟還是走了。他是一個令人欽佩的智者和勇者,他不僅擁有我們大多數人無法企及的學術成就,但他所擁有的人生智慧,和激勵人心的能力,才是最有價值的瑰寶。

既然他已經提醒我們,anybody who wants to cry or pity me can down and do a few of those, then you can pity me ,就收拾起傷感,多讀點不談傷感,不談眼淚的好文章吧:


還有,請再欣賞一次他的演講-Achieving Your Childhood Dreams



請容我再次重復我在拙文[Video]實現童年的夢想曾經說過的話,這裡的主題不是癌症,不是悲傷,是他和你的童年夢想,和如何實現夢想。記住,如果你(年輕時)常常練習某些事,這些東西會成為你生命中的一部分,that's just because, you know, when you do something you enough and train for it, it just becomes a part of you

我相信:這是他留給我們最棒的東西。套用一句 Google Research Blog 曾經說過的話:We will miss Randy very much, and remember him fondly

Saturday, July 26, 2008

Who am I? ...24601...

If you happen to know who's this guy in the picture, come in and drop me a line or two. Grin.

Wednesday, July 23, 2008

閱讀 Programming Collective Intelligence 有感

去年(2007)底,在網路上看到不少人推薦 Programming Collective Intelligence 這本書,當時並沒有太放在心上,直到前些日子逛書局的時候,站在書架前認真的讀了兩節,才發現這本書真的很有意思。

網路上可以找到不少關於本書評價(還有這個例子)的資料,讀者若有興趣,可以先從 Amazon 上的書評開始。個人覺得這本書最有意思的地方,在於把理論現實間的聯繫處理的特別好,有篇書評用 fills the gap 來形容,我覺得非常傳神。

理解論文和書本上的演算法和數學公式是一回事,將這些演算法轉換成實際可執行的程式則是另一回事;作者在這方面表現出舉重若輕的功力,讓讀者覺得從文章到程式間的距離一點都不遠,沒有知易行難的障礙,就是那麼簡單。雖然本書所用的例子,僅是機器學習(machine learning)領域裡較知名且不艱深的演算法,但是看了作者的現身說法之後,讀者對實作會更有信心,也更有頭緒。

其次,本書的例子都不是作者虛構的,而是我們在生活中會接觸和使用的真實的網路服務,作者還教讀者如何以業者提供的 API 收集(真的)資料,然後如何將演算法、資料、程式語言結合在一起,建構一個真實而有用的工具 。這本書的價值之一,就是讓讀者體會演算法的用處,原來我們生活中實際使用的熱門服務-AmazonNetflixDel.icio.usLast.FmGoogle News ,就是書本上的知識建構起來的。

我想,對人工智慧、機器學習、資料挖掘、網路趨勢、程式實作有興趣的人,都不妨看看這本書,你不會失望的。

最後,the last but not the least

本書的程式碼,都是用被作者稱為“可執行的虛擬碼(executable pesudocode)”的 Python 撰寫,程式可讀性極高, 閱讀本書還可以順便學習 Python ,也是一大收獲。

曾經在網路上看到有人對這本書沒有提供原始碼表示遺憾,其實作者 Toby Segaran 在去年底已經在他的個人部落格提供了這本書的原始碼 ,有需要的人請自行下載。

Tuesday, July 22, 2008

協同過濾(collaborative filtering)推薦系統的實作

最近讀了交通大學資管所劉敦仁教授2007年發表在 Expert Systems with Application 的文章[1]⁠ ,他將客戶終生價值(customer lifetime valueCLV)融入協同過濾(collaborative filteringCF)推薦系統框架,以加權後的 RFM RecencyFrequencyMonetary)模型,作為客戶分群的依據

試著將更多實務界或商管領域的思維,整合至資料挖掘的實作,一直是我在思考的方向,這篇文章的思路對我並不陌生,因此我試著更深入理解他的做法。

在閱讀的過程裡,我覺得這篇文章在整理過去研究成果(related work)的部分,蠻有意思的,本文整理協同過濾的各種不同做法,以實作時應用的各種基礎演算法(例如:關聯法則、分群)為基礎的分類思路,而不是從商品與顧客的不同觀察視角(item-based .vs. user-based)出發。個人認為,這種切入角度,能夠幫助有意實作推薦系統的讀者,更快的理解推薦系統的組成架構,並且幫助他們更有效率的擬定工作計畫。

協同過濾的基本精神,在於數大就是美,資料愈多,系統的表現愈佳。協同過濾的實作精要之處,則在於如何從購物人潮中找出與特定顧客品味嗜好相近的同好,或是任意揀選一件商品,如何找出相似的品項。如何找出人與物的相似處,就取決於相似度(similarity)的計算方式了。歷來學者曾在文獻中建議使用的相似度公式,五花八門琳琅滿目,用族繁不及備載來形容一點也不誇張。

最常被人提及的計算方式包括 Euclidean DistancePearson correlation coefficientJaccard coefficientManhatten distanceCosine correlation coefficient 等等。許多學者在這些基礎上,設計了更複雜的計算方式,比如劉教授建議以商管領域常使用的 RFM RecencyFrequencyMonetary)模型,計算客戶貢獻度(客戶對業者的價值)為基礎的計算方式,他還以此為基礎,建議更複雜的加權式 RFM Weighted RFM)計算公式。簡而言之,更有用的相似度判斷方式,一直是學者努力的重點之一。

定義相似度之後,最重要的是怎麼應用相似度來建構推薦機制。根據劉教授的整理,有三大類計算方式(當然啦,這只是我個人的理解):

k-nearest neighborkNN

這個方法是最直覺,也最容易理解的。指定一個消費者(或者指定商品,道理都是一樣的),利用相似度公式,計算出和這個消費者最相似的 k 個顧客。然後我們分析這些選出來的對象,找出他們購買過,但我們的主人翁還沒有購買的項目,這些就是要推薦給主人翁的商品。實務上,可能在計算上更複雜一點,不過這就是最基本的道理了。如果讀者可以參考 Programming Collective Intelligence O'REILLY 出版)這本書的第二章和第八章,就更能體會這個方法的神髓了。

Clustering

這個方法在邏輯上也很單純,先將顧客依照某些條件分群,讓後再針對每一個群組作關聯法則的分析。我們依照關聯法則的分析,對這個群組裡的消費者,產生推薦清單(這個群裡其他人都買了,他還沒有買的商品就是推薦對象)。最簡單直覺的分群演算法,就是 k-mean clustering 了,但別忘了最重要的分群依據,就是前述一再強調的相似度計算方法。

Hybrid Approach

寸有所長,尺有所短。每一種方法,都有其優勢和缺點,因此學者嘗試將 content-based (CB) collaborative filtering (CF)結合在一起,這就是所謂的融合解法 (hybrid approach)。將不同的計算方法結合在一起,說來簡單,作起來卻有很多變化。學者 Burke 有篇論文[2] - Hybrid Recommender Systems: Survey and Experiments,整理了做法,一共有 weightedswitchingmixedfeature combinationcasadefeature augmentaion & meta-level 七種之多。依照劉教授的整理看來,他最重視 weighted meta-level 兩種方法。

(圖表來源:Hybrid Recommender Systems: Survey and Experiments)


雖然我一直覺得,RFM 是不是能表達愛好與品味,還是個問號?不過本篇論文的整理功夫,的確值得稱道,配合 Programming Collective Intelligence 一起看,將論文裡的數學符號和實作連結起來,收獲特別多。

參考資料:

[1] Y. Shih and D. Liu, “Product recommendation approaches: Collaborative filtering via customer lifetime value and customer demands,” Expert Syst. Appl., vol. 35, 2008, pp. 350-360.

[2] R. Burke, “Hybrid Recommender Systems: Survey and Experiments,” User Modeling and User-Adapted Interaction, vol. 12, Nov. 2002, pp. 331-370.

[Video] Hello, I am Macintosh

When it comes to Macintosh, there's another video you won't miss. Steve Jobs showed the first Macintosh in front of 3,000 people. The cute cubic introduce itself :
Hello, I am Macintosh.

It sure is great to get out of that bag.

As unaccustomed as I am to public speaking, I'd like to share with you a maxim I thought of the first time I met an IBM mainframe:

Never trust a computer you can't lift.

Obviously I can talk, but right now I'd like sit back and listen.

so it is with considerable pride that I introduce a man who's been like a father to me, Steve Jobs.



Don't trust a computer you can't lift. That's why I alway like a laptop. Would you guess my next laptop will be a Mac Book Pro or Mac Air?

[Video] Once we were young

1984 年,蘋果電腦在美國的年度體育盛會超級杯(Super Bowl),推出一則廣告史上經典之作,向電腦界的老大哥宣戰,並且向大眾宣示又一個蘋果傳奇的開始-為 rest of us 設計的麥金塔電腦,在廣告結尾,蘋果正式宣布,你們將會見證一個不一樣的 1984:
On January 24th,Apple Computer will introduce Macintosh. And you'll see why 1984 won't be like“1984”.
Steve Jobs 在1983年一場演講裡介紹這則廣告,看著年輕的他(他的生日是 Feb 24,1955)在演講開始前緊抿著雙唇,隨著開場音樂輕輕擺頭搖晃身體那一幕,不由得讓人慨嘆 Wow, Once they were SO young...


Saturday, July 12, 2008

人道是傷春悲秋不長進

雖說是傷春悲秋不長進,但我總覺得小兒女態沒什麼不好,偶爾放縱一下自己的情感,倒也是件美事,況且情若濃時,真到傷心處,誰也擋不了。

上個星期,TechCrunch 的龍頭 Michael Arrington 寫了篇 Think Before You Voicemail ,開頭破題就狠狠的說 Voicemail is dead,當下就讓我完全沒有抵抗能力的進入心情低檔,後面的文字完全沒心情看下去,腦海裡立時浮現退伍前兩個月找工作的回憶。

離開校園和軍旅生活,我的第一個工作,就是在一個做語音信箱的公司寫軟體。那是我一輩子也不會忘記的一段日子,現在有人(而且還是說話分貝很大的名人)說,你的起點是個不該存在的產業了而且他還說 Please tell everyone so everyone will stop using it...。

退伍前,本想回到校園,繼續未竟的數學象牙塔之夢,但考慮家中的經濟負擔,還是壓抑住心中的渴望,在退伍前三個月,就抱了本“如何寫自傳/履歷”的參考書,照著書中例子依樣畫葫蘆,一口氣寄了二十封求職信出去。

說來奇怪,或許人生真有緣分一說,雖然那些求職信多半都有回應,讓我過去面試。但後來我決定去工作的地方,也正是第一個去面試的地方,也是給我薪資最高的地方。那是一個作電信業加值整合軟體的公司,公司的第一個軟體就是搭配交換機的語音郵件軟體。

那時 Dialogic 還沒有成熟,台灣不少公司自己開發語音卡,我就在那個時候為公司寫了一個可以在 DOS 環境隨時可以卸載的常駐程式(TSR-Terminate and Stay Resident),取代原本開發硬體的工程師自己寫的驅動程式(要用config.sys 掛載的 xxxxx.drv)。接著,我還為那張板子寫了一套程式庫,用現在的話來說,應該稱之為 SDK 吧。

簡單概括那幾年的日子,我在那裡學會了後來行走江湖必須的一身基本功,認識了人世間的暗流險惡,邁開了理解電信業 know-how 的第一步。在那兒,我雖然學會了在業界立足的基本功,也第一次嘗到被信任的人傷害的滋味。總之,我在那兒建立自信,在圈子裡得到不錯的口碑,也學會江湖的不單純,那是我職場生涯的第一章(Chapter 1)。

後來,故事在別處繼續下去,接下來的章節是關於身價、責任、成家、專業經理人和換跑道的故事,故事很長,我不想在這邊絮絮叨叨。總之,雖然第一章之後的故事更長,但沒有第一章就沒有後來的故事啊!

縱然傷春悲秋不長進,我還是要為自己的青春留點淚、發個呆、寫幾句悼文、喝點小酒、發個小瘋,不長進又如何?

至於 Michael Arrington 究竟原本要說什麼,我才不在乎咧...

[詩戀] Drink with me

悲慘世界(Les Misérables)是我最喜歡的音樂劇,前幾年買了十週年紀念演出的 DVD之後,幾乎把每首歌都背了起來,尤其是 Drink with meEmpty chairs at empty table ,每回重聽,仍然被歌裡面的強烈情感觸動的不能自已。

"Drink with me to days gone by. Sing with me the songs we knew." 是另一種舉杯的理由,不是酒發雄談的豪氣,也不是以此書與卿永別的沉痛,而是對美好生命的眷戀 - Drink with me to the life that used to be...

YouTube 可以找到 Drink with me 影片,影片已經配上英文歌詞,這是首慢板歌曲,不用擔心自己的英文聽力 ;-)。



做一個更好的馬克杯

做一個更好的人,可以過上更好的生活,所以「我」要做一個更好的馬克杯!! Image Source: I NEED COFFEE: Life is Coffee Comics #23