顯示具有 Research 標籤的文章。 顯示所有文章
顯示具有 Research 標籤的文章。 顯示所有文章

2010年2月10日 星期三

觀察實驗資料和畫圖表的小技巧

之前在《減少操作實驗浪費的時間》提到一些做實驗的小技巧,方便自動化重覆實驗、觀察結果和產生圖表。最近實驗做得比以前更多,意外發覺更好用的方式 。有需求就會進步,這是工程師的宿命啊!

主要的改變有三點:

  • 用 Python 寫程式執行實驗。Python 功能比 shell script 強上不少,也方便維護和增加功能。「Can I use Python as a bash replacement?」提到這樣做的好處和簡單的實施要點。什麼?你看了上篇文章發現我好像用 Ruby 較多?這...總之我跳槽了。男子漢做事,有時是不需要理由的!
  • 改用 SQLite 當資料庫。使用 local database 至少有兩個好處:每次實驗都重建一個新資料庫,方便保留不同實驗結果;少掉煩人的設定,可以更彈性地使用。實驗後可以用 sqlite3 看內容,或另寫程式下 SQL 彙整結果。若有架 Wiki,直接將結果輸出成 Wiki code 也不壞,容易加上顏色、粗體和表格。
  • matplotlib 畫圖。matplotlib 是一套 Python 繪圖函式庫,能畫長方圖、折線圖、直方圖等多種類型圖片。更重要的是,它畫得還挺不賴的 (見官網範例)!既可以在 matplotlib 內建的應用程式裡看結果,也能存成 PNG 檔。依我個人過去用 gnuplot 的經驗,matplotlib 好用許多。不過這可能取決於使用者有多熟悉 Python。若你也喜歡用 Python,matplotlib 無疑是最好的選擇。「Tools I use: matplotlib」提出相似的見解,有興趣的人可以參考看看。

不論是 SQLite 還是 matplotlib 都有嚇死人詳細的文件,配合範例程式學起來挺輕鬆的。目前唯一的不便之處是,當實驗數據更多時,有時只想看部份東西,再一步步看不同層面。若一口氣把全部資料畫成圖表,不容易閱讀。有空時想來研究看看 Django (殺雞用牛刀嗎?),看能不能寫個簡單網頁,做為互動呈現數據的介面。反正資料存在 SQLite 裡,容易用各種方式存取資料。

2009年9月6日 星期日

康特的難題

書籍基本資料:《康特的難題》

看到中後半時,由於相當在意某位角色出奇的應對方式,讓我不得不硬衝了兩小時看到結尾,導致我破例到淩晨兩點才睡,上回這樣挑燈夜戰讀小說,應該是國高中時看金庸小說吧?

若以一般小說來說,算是普普吧。但這本揭開科學界的生活,並用非科學界人士質疑科學界視為常識的文化,還有點出女性科學界的困境,都很有意思,可滿足我對科學界人性的好奇心。像是學界慣於使用的「我們」,究竟意指為何?作者順序的含意?提出想法和執行實驗何者較為重要?實驗室成員是合作者,還是手下?害怕被盜用想法而不敢發表,以及急於發表以追求第一發現者榮譽的衝突?實驗數據不如預期,做些「適當」的調整,是修正誤差還是照假?女性學者在追求終身職和小孩之間的抉擇?書中點出許多與科學誠實、無私、公正、理性、分享等特質矛盾的人性弱點,有許多令人深省的地方。角色的佈局也滿有意思的,將幾位看似無關的核心角色,慢慢地交錯在一起,若起頭和結尾能更圓潤就更棒了。

看完這本書後,讓我更不想走學界路線,我明白自己很難抗拒種種誘惑堅持自己。即使能堅持自己,也很難要求合作者照自己的要求進行,有太多灰色地帶,很難令合作者與自己達成共識。還是遠離利益得失,才能自在地以自己的步調前進。

2009年9月5日 星期六

驗證第一、想法第二

看到這篇《The Only Truly Failed Project》,其中有兩段話寫得很棒:

Failure is a wonderful teacher. But there’s no need to seek out failure. It will find you.

The only truly failed project is the one where you didn’t learn anything along the way.

最近觀察不少數據和實驗結果,推翻之前許多猜想,不過我沒有像碩士做研究時那般痛苦,反而有些興奮。大概是因為沒有發論文的壓力吧,加上先前讀過費曼的言論,覺得這是理所當然的情況,我們知道得本來就很少,想法通常也是錯的。然而,重點在於如何從錯誤的嘗試中學習?

昨天晚上不斷思索這堆錯誤的嘗試告訴我什麼,仍未有定論。忽然想到愛迪生的話,當他實驗千種材料失敗後,他說,至少我明白這千種材料不能作為燈炮的材料。
於是心裡又更踏實了。但這不表示可以隨意的嘗試,在沒有有效的驗證方式之前,無謂的嘗試無法提供任何訊息。

印象中費曼提過,他不和人討論無法驗證的想法,那是沒有意義的行為。提出猜想後,我會思考如何驗證。直到有辦法進行驗證前,我會先保留想法,改試別的作法。或是將原問題先拆成幾個小問題,讓小問題能夠被驗證。待各個擊破搜集到一些資訊後,再回頭看是否能驗證原本的想法。

能夠驗證的想法,才能從中學習。不然結果出來後,我們無從判斷結果有多接近目標,自然也無法從中學習,進而做修正。舉例來說,如果要做 AI 下棋的搜尋,要怎麼知道目前的策略有效?和人下棋是個辦法,可是沒有無法頻覆進行,也就不能確保方法的可靠程度。另一方面,光看評估盤面函式的輸出值也無用,沒法確認分數高確實是有利的盤面。

換個想法,提兩個策略,互相對戰。至少可以確定每次都贏的策略,是相對來說較好的策略。一個策略可以用 greedy algorithm,另一個用自己想的特別方式。雖然我們預期特別的方法會贏,但若結果相反,也能從中明白新東西:像是 greedy algorithm 比想像中的有效,可從中找到好點子;或是特別的方法不如預期地有效,也就不用再和人下棋,減少後續測試的成本。若擔心兩個方法自動對戰變化有限,可以引用不同棋譜的中盤局面,再引入兩個方法擔任不同角色,觀察好的方法是否在各種相同局面裡,無論擔任那一方,都能下得較好。

再舉解魔術方塊的例子。為了能夠驗證,可以先將解好的盤面一步步弄亂,記下正確的還原步驟和所需步數。準備好多組測試盤面(即最後弄亂的樣子),測試演算法解的效果,步數和預期步數相差多少?那一步發展變得不同?於是有確實的數據可以分析,明白問題出在那。有未知的大進步時(只花了預期的一半步數),也方便觀察出原因(如弄亂盤面時做了不當的重覆操作),不會不小心高估方法的成效。

看起來理所當然的事,沒想到我這麼遲才明白,驗證是如此的重要。而這個觀點卻是從 coding 那邊先萌芽,才接著在研究這邊確實實行。不論是研究還是coding,我認為重要性是: 需求 (動機) > 驗證 > 想法 (解法) > 實作。如《管理是什麼》書裡提到,管理即為客戶創造價值 -- 相當含糊的定義,可是卻非常精闢。不論是研究還是寫程式,也要先確保能滿足某種需求,之後的發展才有意義。接著,在天馬行空地想解法前,先確保有方法驗證方法的好壞、達到目標的程度、有辦法分析結果,之後才能確實地落實想法。於是,即使失敗仍能有所收獲。

2009-09-06 Update

LCamel 一提,發現英文的用詞很有趣,Verification and Validation 裡這麼解釋:

It is sometimes said that validation can be expressed by the query “Are you building the right thing?” and verification by “Are you building the thing right?” “Building the right thing” refers back to the user’s needs, while “building it right” checks that the specifications be correctly implemented by the system.

意即:

  • 滿足需求 = validation = do the right thing.
  • 驗證作法 = verification = do the thing right.

語言真是奇妙啊,用一句話來總結,就是「Are the do you right thing right?」

2009年8月10日 星期一

《別鬧了,費曼先生》閱讀中的雜記

讀《別鬧了,費曼先生》的過程裡,偶而有寫片段感想。這篇是這些短記整理後的記錄。

通用的學習法則

《別鬧了,費曼先生》提到費曼常跨領域學些不同東西,不管是哲學、數學、生物學,費曼都用他學習科學的習慣判別對錯,掌握基本原理。最近做研究也有這種體會。即使沒有背景知識,有良好邏輯,掌握假設和觀察結果,通常能做出正確的判斷。前提是我們能明確判讀那些是客觀事實,那些是主觀判斷,數據不會騙人,可是人會,而且我們自己也可能會騙自己。

舉例來說,看到別人的實驗結果和實驗報告,一定要自己讀一遍數據,不然無法判斷別人說明中那些部份為主觀推測。像是兩個方法有效程度差了千分之一,是否可說有顯著差異?去除人有私心的因素外,我們也沒有想像中的聰明,容易將一些相似的資訊混在一起,不知不覺認定是事實。「誤把有相關性視為有因果關係」是常見的例子,有興趣的人可以看些寫給大眾看的統計書籍。反用「判讀個人觀點和事實」的原則在自己身上也很有效,可以找到自己思路的盲點,不會過於武斷主張自己的看法。

此外,舉例說明是最佳的討論方式。費曼提到他和數學家討論數學原理時,他的判斷方式是心中想像一些實例,對方描述問題時,他就想像心裡那些物體會怎麼變化,於是當對方說某某性質如何,他發覺在他想像世界裡有矛盾時,就能做出辯駁。另一方面,我相信只有當我們能舉例說明時,我們才算真的明白,藉由逼自己舉例,可以思考的更靈活,找出忽略的細節。

別死記名詞

另一方面,費曼也指出許多人記了一堆名詞,卻沒掌握基本精神,他在 MIT 的大學同學如此,愛因斯坦的研究助理也會犯這種錯。費曼一再提到很多學生只會背名詞,不會理解背後的含意,不明白他們在學什麼。這種精神從他小時候就存在,和父親在林中散步時,費曼的父親向他解釋生物行為而不背名字,費曼將自己的成就歸功於父親童年時的教導,不無道理。

費曼在問學生問題時,會舉例討論,而不問教科書式的問題。我在確認別人能力時也是這麼做,不問專有名詞解釋(像是請說明 X 演算法為何),盡量用應用題直接看對方怎麼運用知識,這樣能立即明白對方有沒有理解背後含意。反過來看,不知道某些名詞不代表什麼,就算對方不知道 Dijkstra’s Algorithm,但若能提出相似的解法,反而更高明。只要和對方說明這些知識,他們立即能掌握精神加以運用。反之,知道 Dijkstra’s Algorithm 卻無法活用,知道更多演算法、累積更多經驗,成長也有限。

名詞只是方便溝通的工具,若不能理解背後的含意,光記許多名詞毫無意義。在資訊爆炸的時代,每天產生一堆新的名詞,吸收這堆雜亂的詞彙時,得時時提醒自己,是否明白背後含意。以前我曾落入背誦知識為樂的陷阱,後來發現知道很多皮毛卻無法做進一步運用,才驚覺自己浪費不少時間。舉例來說,現在當紅的 Android,即使我知道 Android 是 Google 發佈的手機平台,也沒任何幫助,只是一堆名詞堆砌。到不如了解為何會有 Android?適合解什麼樣的問題?需要時可視需求對相關知識做進一步研究。 (備註:我並不了解這兩個問題,只是舉例而已。)

並不是說記名詞毫無意義,費曼童年時自己發明一套數學符號,他覺得讀起來比較好理解,很高興地用了一陣子。但後來發現他無法和人溝通,就把這些符號丟了,改用共通符號。與人溝通需要專有名詞,不然難以進入問題核心,講半天還在說「你是說如果有 n 個點,點可以是任意東西,像是城市,或想像成座標也行,這 n 個點之中部份兩點有互相連接,連接的距離長短不一,而你想從某個起點 A 走到終點 B,想問如何走才能花最少的步數嗎?」(即最短路徑問題)。

2009年8月5日 星期三

《別鬧了,費曼先生》讀後感 -- 關於科學的品德

小時候曾讀過一次,當時只覺得費曼這人真有趣。走過一遭研究的生活後,再回來讀這本書,幾乎每部份都令我深思許久。特別是最後一篇《草包族科學》讓我有更深的體會。

這篇是費曼於1974年在加州理工學院的畢業典禮演講,有別於其它故事,單刀直入說明科學研究最重要的課題--科學的品德,也就是對自己誠實,對大眾誠實。費曼舉了個反例說明何謂不誠實:

有個朋友在上電台節目之前跟我聊起來,他是研究宇宙學及天文學的,而他很感困惑,不知該如何談論這些工作的應用。我說:「根本就沒有應用可言。」,他回答說:「沒錯,但如果這麼說,我們這類研究工作就更不受支持了。」我覺得很意外,我想那是一種不誠實。如果你以科學家的姿態出現,那麼你應該向所有非科學家的大眾說明你的工作--如果他們不願意支持你的研究,那是他們的決定。

自己做研究也是一樣,該同時說明支持和不支持的數據和觀點,而非只報告支持的部份。要延伸別人的研究前,要先重製對方的實驗,如此才知道兩者在自己的實驗環境下差多少,而不能為了急著產生報告,省略前人的實驗,直接做自己的部份。

做研究必須客觀,早就同意某種觀點而開始做實驗,和從實驗中找出支持自己觀點的證據,是截然不同的行為。在利益衝突下,我們很容易欺騙自己,得非常非常細心且耐心地排除任何有利於自己發展的想法。很多時候我們難以把持,或是不自覺地騙了自己。舉例來說,看到違反預期 (不利) 的結果,會不斷思考那個環節有誤,嘗試修正「不當變因」;看到符合預期 (有利) 的結果卻會很興奮,忘了要進一步確保沒有「不當變因」影響結果。

藉由費曼生活中的插曲,看到一位真正科學家自然行事的風格,令我受益良多。在看到這麼多令人困惑的情況後,費曼的身教無疑是個強心劑。我想我不會再困惑了,若有那麼一天我打算讀博士,除了找到非作不可的研究外,還要確定我能把持住想法,能完全地誠實才會成行。不然,我還是遠離利害關係,至少在沒有利害關係的影響下,我能較誠實地進行研究。

費曼演講的最後一段如此說道:

因此我只有一個希望:你們能夠找到一個地方,在那裡自由自在的堅持我提到過的品德;而且不會由於要維持你在組織裡的地位,或是迫於經濟壓力,而喪失你的品德。

我誠心祝福,你們能獲得這樣的自由。

So I have just one wish for you—the good luck to be somewhere where you are free to maintain the kind of integrity I have described, and where you do not feel forced by a need to maintain your position in the organization, or financial support, or so on, to lose your integrity. May you have that freedom.

看到這段話,我鼻頭都酸了,祝福自己,也祝福所有對科學有興趣的人。

ps. 英文原文講稿在此

2009年2月7日 星期六

溝通的技巧

以前我覺得全世界的人都講話很直的話,這世界就少很多問題,大家都可以有效率地溝通了。不過《奇諾之旅》有一話就是類似的故事,有一個國家透過科學的方式改造人體,讓兩人在一定的距離內就能直接聽到對方的心思,結果在全國人民同時改造完後,全國人民都分散獨居避不見面。

我曾有兩個錯誤觀念:

  • 說話直才有效率。
  • 「笑著同意對方又接著反駁」是繞圈子又假的事。

後來有段時間有幸和強者共事,在對方身上學到不少為人處理的技巧,才明白自己原本的認知有多不成熟。我從對方身上親身體驗到教科書上講的方法,如「先贊同對方意見的優點,後提出不同意見。」說來容易做來難,要做到這點,得先真得聽進別人的話,認真地從對方的觀點思考。基本上,大部份思考後的發言有一部份價值,只是不同的背景考量下,而有利害得取捨。從對方的觀點思考是很難很累的事,要靜下心做到這點,相當不容易,但也唯有做到這點後,才能有效地溝通。

再來是要能做到對事不對人。相信大家都喜歡就事論事。也希望自己能就事論事,可是溝通時難免會帶有情緒,這可以有技巧地避免。舉例來說,在和 A、B 共事時,先和 A 討論過再和 B 談,發現兩人意見不同,在和 B 討論時可以這麼說:「之前我和 A 討論過,他的觀點類似****,我覺得****,不知 B 你覺得如何?」看起來很正常直接的方式,來個失敗的對照組會更顯示出它的價值:「我聽 A 說是****,和 B 你說的不一樣, A 弄錯了嗎?」後面這段的問題,在於隱含探討到個人名譽,一個弄得不好,讓人覺得不是 A 錯就是 B 錯,可能會讓 A、B 感情用事,提供不理智的判斷。

從事實的觀點來看,真相只有一個(都是柯南害的,講出這句就覺得很聳),的確有一人是錯的,或大家都不對。可是,重要的是正確地把事做好,讓團體獲利。所以,不小心帶出誰對誰錯的議題,是不明智的行為。更高明的手腕是帶入一點幽默讓談話氣氛輕鬆些。人不是天生的理性生物,愉快的談話氣氛可以協助大家理性地談話。

很多類似這樣的溝通議題,可以有效率不直接傷人的達成,端看自己願不願意學習,揣摩和練習出更好的方式。我還太嫩了,沒法舉出太多例子。

2008年12月25日 星期四

又回到了研究生活

當我做好準備踏入業界加深工程師能力時,沒想到只晃了一小圈,又回到半年前的研究環境。唯一不同的是,這回不再是研究和生活混在一起,而是規律地到公司做研究,下班回家過生活。沒有學位,多一些薪水。

看著 Wikipedia 上的一堆數學式子,腦裡許多思緒翻滾著,回想起學生時代在宿舍的事,拼命地唸書、拼命地看動畫、考前到浩然閉關 K 書,還有和朋友們一同讀書玩樂的大小往事。往事不斷地浮上心頭,我忽然明白,從前那個 Just for fun 的自己,不會再回來了。現在的我,無法再單純地讚嘆數學式子堆砌出的結晶世界,而是不斷地想到這式子對現況有幫助嗎?而難以將數學看入腦裡。

想到許多朋友的近況,自己也該振作努力才是。一陣一陣的消沉,就隨 Blog 的記錄而褪去吧。

2008年10月13日 星期一

碩士研究生涯回顧 (4)

最近週末都在打 YsO,不小心就拖稿了。

上回提到碩一上的結束,我終於確定研究方向為 social bookmark。碩一下修指導老師開的 Data Mining 和必修課 Formal Language。由於我兩門課都有些背景知識,沒花太多時間在課業上。學期初滿認真地做研究,也在 delicious 的 tag 裡找到一些有趣的訊息,像是人們提到 usb 時,容易聯想到 portable [*1],我猜這是因為隨身碟是最熱門的 USB 產品而帶來的印象。後來斷斷續續想了些相關點子,可惜沒足夠的時間做進一步的研究。

結果後來被會長拐去參加比賽,加上專題生的比賽,同一時間報了五六個比賽吧。原本想亂槍打鳥,看那些發展較好就做下去,結果都有過初賽,搞得寫完初賽報告就不想比了(一口氣寫太多報告把參加整個比賽的力氣用完了)。最後大多爛掉了,幸好還有一兩個有好成績,像是去西安參加微軟思源競賽,是滿有趣的經驗。這算是我參加過的比賽裡,自認為做得最有成就感的,開發速度快,demo 效果不壞,報告也滿成功的。我們做的產品 BNW (Brand New World)用來比較公司品牌或產品。輸入公司或產品名稱後,BNW 會彙集網路上的直述句,再計算出分數。

Brand New Wrold

上圖是其中一個 demo 例子,比較四家公司的品牌。資料只是 web 上的一小部份取樣,不見得能反映實際情況,但不管怎麼說,我們是去向主辦單位 Microsoft 報告,這個結果還挺尷尬的,最後決定在簡報時快速帶過這張,免得被人誤認為是去拆台的。另外,當時看了相關研究「Opinion Mining」,主要是看 Bing Liu 的論文和書,滿有意思的。比賽結束後老師問我是否有意延伸這方面的研究,不過我覺得資料難以取得(比賽時有 MSRA 支援),而且我比較想做 social bookmark 的研究,就結束掉這個小插曲,而碩一下也這麼結束了。之後是碩士兩年裡最發光發熱的暑假衝刺時期,後來完成的兩篇論文,都是在這暑假內完成一半以上的內容。

ps

*1 我用 association rule,發現”usb” -> “portable” with confidence 80%,”portable” -> “usb” with 60%。

2008年9月30日 星期二

碩士研究生涯回顧 (3)

前回,仗著大學時抵掉四門選修,碩一上我只選了一門課。多出來的時間...又被雜事耗掉了。

當時 Web 2.0 風潮正在快速成長,引起我的興趣,開始試著自己架 wiki 管理知識、架 Blog 寫文章、從 delicious 中找不同的知識。當時覺得 web mining 很有趣,資料容易取得(就 crawl 嘛),又貼近生活,若研究有所發現,樂趣更多。當時已有一大票人發表 Blog 相關 paper,但不知為何,bookmark 相關的 paper 到不多,而我覺得 bookmark 的知識價值很高,於是就選定 delicious 做為奮鬥目標,試著從中找點子。於是碩一上就這麼結束了。

那麼這個只修一門課的學期,我到底在做啥?

OpenHouse 資訊組組長(這網址每年都會變,舊的大概都不會留)、當 DS 助教、帶專題生、在教研所打工、看閒書、思考人生以及寫 Blog,這段時間也是我學生時期事最雜(一堆會和待做小事,還特地找了記事工具)、閒書看最多和Blog 寫最多的時期。這段生活很有意思,不過研究產能只算過得去吧。寒假時先參加一個有趣的英文營隊,兩週就沒了。看看小說,接 case 學 Rails,花一週 Ruby 特訓,就碩一下了。

唔...名為研究生涯回顧,結果這個時期都在做管理和 coding。

2008年9月28日 星期日

碩士研究生涯回顧 (2)

前回,從兩年前的暑假(2006/07)開始,我的研究方向轉為交通相關的 data mining / data management。想想,我覺得解決塞車問題似乎最有趣也最實用,老師也對這很有興趣,之前有專題生做過簡化版問題,於是就朝此方向前進。

CS 領域內,解決塞車的 paper 到沒很多,不過在 Operation Research 和一些不清楚分類的領域裡,有不少相關作品。塞車相關的研究滿有趣的,像有一篇討論塞車有多糟,或從另一角度來看,我們能解決塞車到什麼程度。印象中這篇 paper 估計,最糟的情況下,無管制的行車時間會是有管制的兩倍慢。另外也有看到其它領域如何解決塞車,像倫敦用塞車稅(congestion road tax)的作法很有意思。我個人是認為經濟學(?)的作法比較實際,以價治量是合理且有效的作法。不過反正問題還沒徹底解決,也可以想想自己的做法。

理想的作法是大家都聽政府或某有公信力的單位指示開車,假設 server (central or distributed) 算得夠快,理論上塞車量會降到最低。於是我將問題切成如下三個部份,準備各個擊破:

1. 若我們有部份車子的車速和位置,如何將這些資料轉為表示即時車速的 graph?
2. 若有表示即時車速的 graph,當我們告知駕駛人如何前進時,如何即時更新 graph,以避免大家走同一條,造成一段時間後的新塞車點?
3. 若有表示即時車速的 graph,也知道如何依駕駛人選的路徑來更新它,要如何在極短時間內算出大量不同需求的最短路徑?

當一切規劃差不多後,我發現這問題很難,三個月顯然作不完,但這題目還沒有趣到讓我想和它奮鬥兩年,於是又找老師商量,可不可以換題目啊...。幸好開明的老師又讓我換方向,但要求我帶新的專題生接手做下去,這是個有趣的插曲,待日後分享心得。

隨著我再度更改研究方向,第一個暑假也差不多結束了,即將邁入正式的碩一。這個暑假到沒做太多研究,被一些「外務」耗掉時間,例如:

  • 花了整整一週寫 Wow! Dice War!!
  • 看完十季的 Friends。一開始還有一邊切換無字幕、英文字幕、中 + 英字幕,後來乾脆都用中文字幕了。
  • 摸索 Web 2.0 相關東西,像 Blog、Wiki、Online Bookmark 等,這大概是和研究唯一有關的外務,後來我轉往這方向找研究點子。

另外還有協助將 lab 學長的論文投出去。我滿喜歡這篇的,完整版的內容比較多,可說是讓有的點都做到了,學長想出兩個新方法,一個可快速找到近似解,另一個可找到最佳解,且效率大勝暴力法。實驗結果說明前者的效率大勝後者,且和後者最佳解的誤差極小。後來論文投上了 DASFAA 2007,老師原本希望我去報告,可藉機認識學術研討會,也許可激發我做研究的熱情。不過我覺得自己不是第一作者,熱情不足,若研討會上有人提出討論,我大概也會興致缺缺,這樣似乎不太好。結果最後老師自己衝去,兩三天內來回的樣子,辛苦老師啦。

2008年9月22日 星期一

碩士研究生涯回顧 (1)

大四上申請上研究所後,花了許多心力找老師,當時我不確定自己對什麼最有興趣,最後挑和 AI 稍微相關的 data mining 做為研究方向,結果發展到後來,沒用到太多 AI 的東西,挺多看別人論文時可以嘴炮一下自己懂的 AI 知識(比方說 Simulated annealingA*之類的)。

無視於大學時期 20% 達成率的偉大計畫,升上碩士前,我又給自己定了一個偉大目標:在碩士結束後,要投上三篇好的 Conference,並且至少要有一篇是 ACM 的。雖說做研究不是為了投論文,研究成果也不是要就會順利出來,當時想說,這樣至少畢業時能投上一篇吧?多少能逼自己更用心地體會學術生活,以便日後決定是否要讀博班。結果在老師的協助上,算有三篇第一作者的論文,不過都只是過得去的成果而已,只有一篇和 ACM 差到邊,和以往的計畫一樣,沒 100% 達成,但也差強人意地可接受啦。

這兩年多內,研究方向轉換超大,大致上的轉換流程如下:

  1. sensor network related problems
  2. social network / graph mining
  3. solve the traffic congestion
  4. social bookmark related problems: focus on tags
  5. social bookmark related problems: focus on bookmarks (URLs)
  6. joint clustering with the connected constraint
  7. social bookmark related problems: focus on users

回顧起來,真是亂七八糟啊...

一開始是大四寒假前夕時,指導老師要我看看 sensor network 裡的 multi-path 問題,類似 network routing 問題,印象中目的是在 sensor network 內傳輸資料,並要省 energy、減少 latency,而且不要過渡消耗特定的 sensors,並免沒電就不通了。但我對網路相關的研究興致不大,也不太能接受 sensor network 的研究方式(或說是前提假設),在和老師反映後,老師建議改看看 social network 或是 graph mining。結果看了一篇 graph mining 的 survey paper,和翻了一些書後,感覺太抽象太難懂,當時又對 social network 有些反感,所以也提不起勁做研究。加上大四下修課花不少時間,就這樣不知不覺地進入升碩一的暑假,並且題目換成交通相關的研究。

老師看我一直換題目,開始擔心我會不會耐不住性子做完一個題目,希望我這回試久一點。想想也對,這次我就試比較久,待下回再來細細分曉。

2008年9月15日 星期一

終於畢業了

隨著碩士生涯的結束,我短暫的學術生活也到一段落。

我一直覺得碩士是很難得的機會,一生一次,長時間投入自己感興趣的事,不用在意是否能成為產品、使用者是否覺得好用,只要自己覺得這解這問題有意義,就已足夠。大學生課業繁重;博士生畢業門檻高,做起論文難免會有得失心,相對來說,碩士簡單多了,可以丟掉學界的包袱,放手一摶。當然這一切的前提都是要找到一個肯讓學生放手試的指導老師啦。我當初找老師時就以此點為第一考量,結果也還不錯。回顧做研究的過程,當真是九彎十八拐,之後再來一一回顧這兩年的心得(連關西行在內,欠一堆稿了...)。

碩士時的生活作息也很難忘,由於我沒什麼課,有課大概也沒去上,我大多是在家做正事一兩小時,休息一兩小時,有時則連續做個三五小時不等,週一到週日維持差不多的生活型態,我滿享受這種生活週期,把做正事和休閒的時間切成許多小循環。可惜上班後就難以維持了(除非能在家工作)。對我來說,一天八小時實在是沒效率的做法,依過去經驗,一天只能全神慣注地做六小時,一天四小時比較不會累,剩下的時間只能做些簡單的事。

除生活作息外,和朋友間的互動也很有趣,可惜的是,當初想多了解各實驗室的研究領域,結果沒能達成。一但專心切入自己的題目,訂好一些時程後,就會開始沒止盡的衝刺,而沒心思顧及其它不相干的研究。

2008年6月4日 星期三

關西行:PAKDD 上台報告

5/21 Wed. 前半天行程見這裡

演講結束後,在走道上碰到曾新穆老師,閒聊個幾句後,曾老師趕著準備後面的行程。照行程來看,接下來我要上台報告,但我看錯門外貼的時間異動,差點以為我改到隔天報告,幸好陳老師的學生發現我搞錯了,趕緊趕到會場,剛好開始第一人的報告,我是最後一個,想必上台時大家大概會一臉「快讓我去吃午餐!」的表情。

由於我沒帶筆電,在報告會場開始找台灣人借筆電,後來找到曾老師的學生,也請他們幫我照一下在台上報告的樣子。會場內大概一二十人,氣氛滿輕鬆的,沒什麼壓力地上台報告,也順利地結束,就這樣結束我的第一次英文報告。幫我照相的學長說我 Motivation (動機) 報得不錯,這部份正是我花最多心血的地方,哈哈。

由於昨天沒吃好外加早上喝牛奶的影響,早上拉肚子。報告結束後,立刻趕到 GREENS 吃午餐,這可是素食者在日本想好好地吃一餐的唯一機會啊!午餐還不錯,由於昨天開始就沒吃到熱騰騰的菜,吃起來格外感動。接著回會場參加演講,結果講者日本腔太重,聽不懂在說什麼,Q&A 時也沒人發問就結束了。

等著聽下個 session 時,在休息的座位上看到陳老師的學生們,我大概看了學姊要報的論文,疑惑太多,想說直接問作者吧,就這樣和學長姊們聊起來。從學長姊那獲得不少工作和研究的經驗,也有聊到像 Prof. Christos Faloutsos 的研究方式,先分析再利用分析獲得的知識提新方法,感覺是很好的研究流程。還有聽到 subspace clustering 的精神,即在處理 high dimensional data 時,試各種可能的 subset of dimension 來做 clustering。原本我想說在資料高維的情況下,clustering 前先用 PCA 之類的方法降維不就得了,又有數學分析支持它的有效性,為什麼會有 subspace clustering 這樣的方法?原因是 PCA 轉完的 feature 無法解釋,而 subspace 仍保有原有的 feature 名稱,就人類理解面來看,subspace clustering 比較有用,可以了解那些 feature 較有用。所以又是一個「有用就好」和「為何有用」之爭,就看應用的情況決定要用那種解法吧。

由於我有做過 clustering 的研究,聊起來還滿順的,令我意外的是,學長說 clustering 難以驗證,投論文時常會遇到審的人不滿意某些觀點,而難以進行。可是做 clustering 的人眾多,同意和不同意的部份分歧極大。我原以為 information retrieval 這方面的問題較大,看來家家有本難唸的經。仔細想想也對,提個新方法快了兩倍,準度掉了多少,又有誰知道?換一批 dataset 結果又如何呢?做研究真是在黑暗的荒野裡開闢出前進的道路啊!還有聊到業界和學界合作的事,如同大部份人的觀點,台灣學界對業界的幫助似乎有限,所以在隔天 (5/22 Thu.) 聽到德國學者說他們的研究有幫到企業時令我有點驚呀。中途曾老師的學生和梁婷老師的學生有過來和我們閒聊,結果到除報告外,到現在還是在講中文。

和學長聊太久錯過我想聽的部份,想說索性之後的時間在附近繞繞吧,到 Suntory Museum 看了場 3D IMAX,類似 Discovery 的節目,介紹海洋生物,有附英文耳機,還算不錯,可是太貴了,一場 1,000 日幣,看兩場 1,600,有海洋生物和恐龍的片子可選。接著在附近繞繞,看看海港吹海風,終於有期待旅行的心情。

今天有個小插曲,之前提到那位英文流利的日本女教授,真是超熱心的,每次遇到她都會聽到她主動提供新資訊,像是「旅館櫃台可以領日幣 2,000 補償費」、「coin locker 很好用,東西不用帶著走」、「甚至可以把東西放在 coin locker 過夜」。

晚餐在天保山 Market 繞了好幾圈,找不到能吃的,而且店員說飯裡都摻了海鮮,沒法弄素餐給我。在日本想找到白飯 + 青菜真是超難的,青菜超少,便利商店和自動販賣機裡卻一堆 100% 蔬果汁。只好回旅館吃稀飯配素肉鬆了。

2008年6月3日 星期二

關西行:PAKDD Opening!

5/21 Wed.

清晨五點時聽到鈴聲大作,還以為是隔壁的 morning call 太大聲,閉眼繼續睡。六點時又響一次,還是沒理它,後來聽到不明所以的日文廣播,還有人跑來到處敲門,才意識到,該不會有啥緊急事故吧?出門一看,樓梯間有一點煙,看來是火災。睡前我只有換睡褲而已,上衣就是外出服,而且我習慣在睡前整理好東西。換個褲子穿上鞋襪,背包一拿,逃難去。

走到樓梯間時,看到一堆人拿著行李逃生,想想我也回去拿好了。回到房間,行李箱拉鏈一拉,一提就走。這時煙開始變大了,有點嗆鼻,雖然有想到火災時要低著爬行,避免被煙嗆傷,可是往下走樓梯要怎麼爬行,還是快點跑下去吧。

到一樓旅館外後,看到一堆人,兩三分鐘後第一台消房車來了,接著每隔幾分鐘又來一台,再過一會兒記者也來了。


(其實煙很小,因為背光,看起來好像很濃)

旅館工作人員看來相當狼狽,有些旅客穿著日本的睡衣,來不及換。幸好之前去東京時試穿過覺得不方便,這回沒什麼興致試,使得我全身整齊家當全在地出來。大概近八點時,現場確定沒有問題,開始依樓層讓一批批的旅客回房。回房後也沒啥事好做,放下行李,到一樓問櫃台今天還能住嗎?以我破爛的日語,想當然爾,溝通上一定有問題,結果櫃台人員拿了一個信封給我,我想拒收,他還是遞給我,只好收下了。我只是想確認今晚能不能住,不是來要精神賠償費的啊!後來我才知道,有個日本的女教授(精通三國語言!)和他們抗議,信封裡裝的兩千日圓是賠償沒吃到早餐。

到會場搭車的途中,遇到兩位大陸女學生,分別是碩二碩一的樣子,其中一位目前在做 MSRA Intern。好像都是北大的,之前她們不認識,事先約好來參加 PAKDD 時住同一間房。住會場外的旅館就有這種好處,搭電車時可以多認識人,一期一會。

準時到會場後,卻看到告示牌寫因為我們住的旅館失火,本日行程全部順延一小時。站在那也沒事幹,繼續找人認識。先和一位疑似台灣人實際上是日本人打招呼後,結識了他身旁的大陸人Tian Xia,是中科院的博士生,也在 MRSR 做 Intern。聽他說最近 MSRA 收太多人了,報名的人愈來愈多,競爭愈來愈激烈了。還有,大陸博士畢業後工作機會很多,對比之下,台灣真慘啊(詳見 ptt PhD 版)。他們實驗室做 video labeling,用 machine learning 的方法對影片內的物件做分類,聽起來超有趣的,而且極有實用性,諸如搜尋、廣告都仰賴這個技術。由於我對 AI、ML 之類的很有興趣,也稍有涉獵,聊起來滿順的,來這裡第一次覺得有明確的收獲。聊的結果,SVM 仍然是最常用的 classification 技術,他們也是用台大維護的 libsvm。至於要選什麼 feature 做為輸入,他說他們領域裡有固定常用的 feature,聽起來他像用固定的 feature,專注在方法改進。至於怎麼選 feature 呢,看來不管那個領域都一樣,憑直覺想胡亂試,總會找到一些好一點的。之前和 Huangs 聊過這點,我比較同意 Huangs 的看法,要請該領域的專家協助,才能選到有意義的 feature。不過這說來容易做來難,領域差異極大時,溝通難度很高。如同 soft computing 的人,我想大部份 ML 的人大概也不在意 feature 的意義吧,有用就好。

和Tian Xia聊聊後,提到台灣參加者的事,才發現坐我左邊的人們是陳銘憲老師的學生,來這裡講了這麼久的中文,終於找到台灣人了!剛好昨晚遇到的北大研究員來找人聊天,我讓出位子,坐到陳銘憲老師的學生們旁聊天。大家都很親切,大概有五人吧,其中兩位現在已是老師了,陳老師真是桃李滿天下啊!我和大家也算師出同門,很好找共通話題。接著到了開幕時間,和大家一起進會場。結果到日本一天了,我都在講中文,仍然沒有身處異地的感受。

開幕時介紹了投稿數據、參加者國藉分佈之類的,畢竟是亞太的 KDD,參加者以亞洲人居多。接著是本次的重頭戲,Prof. Christos Faloutsos 的演講,主題是 Graph Mining,由於我之前有報過他的兩篇論文,大致上有些概念,一場演講內含了一堆論文,量太大了也沒吸收到什麼新概念。Q&A時超熱烈的,一個接一個問問題,講者也答得佷順,我有點狀況外,講者似乎都有回答到問的點。

(未完待續)

2008年6月1日 星期日

研究有感

現在就來寫心得似乎太早了,比賽還沒結束,還有一段時間可以和自己的研究奮鬥。也許是去 PAKDD 的影響開始發酵了,回來後做了一陣子研究,忽然想通一些事,也許我多領悟了一些正確的研究態度。只是我仍無法判斷自己是正視問題,還是逃避?是前進呢,還是後退?和以前同樣的感觸,同樣的回答,「進化的相反詞是什麼?」,「不是退步,而是沒有改變」,隨時在改變,意謂著不斷地進化。

放棄是很簡單的事,堅持下去才是困難的,在此引用伴隨我多日的無名進版文字,表達我的感觸。

「當你真心渴望某樣東西時,
整個宇宙都會聯合起來幫助你完成。」
from 牧羊少年奇幻之旅(El Alquimista)  

我仍相信如此,只是我不夠渴望罷了。人能找到自己一心向往的路,真的是很幸福的事。究竟是結合現實考量的做法好,還是堅持自己理想的方式好呢?摻雜雜質的半成品好,還是純粹卻離完成遙遙無期的作品好呢?做研究應該要一小步一小步的前進,只是每一小步的距離和方向,該如何斟酌?

「這是給我的試煉嗎?如果是!那我接受了!
人要戰勝不成熟的過去!才會成長!」
by 克里姆王,from JoJo 

挑戰自我,自我實現一直是我過去的生活方式,相信未來也會如此。

「所謂的覺悟,並不是抱著必死的決心;
而是在黑暗的荒野裡開闢出前進的道路。」
by 喬魯諾.喬巴拿,from JoJo 

用來看做研究的情況,再貼切不過了。真的是在黑暗的荒野裡開闢出前進的道路。不知想法對錯,甚至無法判別驗證方法的對錯。經由不斷嘗試和猜測,試圖拼湊出那麼一點也許正確的資訊。

「 我並沒有忘記升等考的傳言,只是因為比賽太令我開心了,
所以覺得太早划到終點很可惜。
我想要慢慢地,以我自己的方式,朝著獨當一面的境界邁進。
是的...反正都要做,就開心地做。」
by Akari, from ARIA comic 01 

不論如何,這個心境是最重要的。拉雜的感觸打完後,心情也痛快多了。在正視自己脆弱之後,就是回頭再戰個數天數夜啊!

2008年2月16日 星期六

研究科學的第一步 - 初步心得

書藉基本資料: 研究科學的第一步-給年輕探索的建議

有趣的是,一開始作者提到,天才不用人教,我們只能教一般人,而且做研究的方法千百種,每個人自成一格推論方式,除了大家都懂的大原則外,學一堆方法沒有用。那麼,寫這種教人家做研究的書有啥用?作者在搬石頭砸自腳後,說明教理論方法是沒用的,但勸告是有用的。導讀裡也提到這本書的重點在培養各種個性(如耐性),而非研究理論。網路上也可找不到不少大師分享培養個性的文章,不知是否時機成熟,現在看這本感覺特別受用

這本書意外的好讀,沒太多障礙就讀了不少內容,收獲不少。目前剛看完第二章提到坑殺新手的陷阱,對我來說意外的受用,剛好自己進行研究一段時間後才來看,感受更深;第三章提到需要何種心智能力也是鞭辟入裡。作者強調做研究只需要平凡的智能,加上培養好個性即可,書裡有詳細的說明,作者的諸多譬喻相當生動易懂,值得一看。像說明專注時,作者以長期曝光拍攝原本看不見的星星為例,說明專注帶來的效果。原本想寫些什麼心得,可是重點太多了,寫起來又很像一般廢話,大家還是自己看書吧。

2008年1月25日 星期五

減少操作實驗浪費的時間

分享一下之前做實驗時發展出的小技巧,我這裡指的是跑程式的實驗。花點時間研究一些工具,可以剩下不少重覆執行的動作。

首先,畫圖方面 gnuplot 是最好的選擇,用法很簡單,google一下學個基本,之後要用什麼特殊指令,去 Demos and Screenshots 裡找符合的圖,將範例code抓下來試一試,改一改就會用了。看到常用的指令或參數,就到 DocumentsIndex 裡找詳細說明(比方查 xrange 的用法),減少試誤的時間。

gnuplot 最大的好處在於批次處理,初期費些工夫寫出滿意格式的 gnuplot code,接著就可以把所有圖表套用一樣的格式,想變更格式時,比方加格線或放大字型,只要改一份 code,所有圖表可以一同更新,這是 Excel 難以做到的,也許 VBScript可以,但學習代價應該會比 gnuplot 高。若會寫 shell script或scripting language如Perl、Python、Ruby、PHP,可以配合script和寫好的gnuplot code,執行一個程式讀入不同的資料檔,即可重畫所有圖表,這點 Excel 更不方便達成。配合 script 還可以自動轉成 LaTeX 用的圖檔格式。若不滿意 gnuplot 預設 EPS 的風格,像我較喜歡預設 PNG 的話,可以配合圖檔轉檔軟體,可以輕易地批次處理,像 Linux、FreeBSD上可以用 convert。做實驗時常要重畫圖表,很少能一次搞定,初期投資些時間在 gnuplot 和批次處理程式上,絕對會回本的。

若想再進一步自動化的話,可以將實驗結果存到資料庫裡,不要存到普通檔案裡。花點時間研究如何用 scripting language 或自己慣用的程式語言操作DBMS(如MySQL),看要在實驗結束時程式直接將結果寫入資料庫,或是先寫入暫存檔再另用別的語言 (例如直接用 MySQL script)將結果寫入資料庫。於是,透過 DBMS 網頁介面的軟體(如phpMyAdmin),可以輕易地觀察實驗結果,像是依時間排序資料、依數據大小排序,或要算平均、標準差等,都輕而易舉;要輸出成 gnuplot 或其它程式的輸入格式,也是非常容易。

最後,跑實驗的程式最好寫成從命令列讀參數,或讀一個設定檔設定參數,減少重新編譯的動作,也方便批次實驗不同參數。

總結一下,我自己的做法是:

  1. 實驗用的程式從命令列讀參數。
  2. 其中一個參數決定要將實驗結果直接輸出(STDOUT) 或寫入 MySQL。有時候做些小更動想看看實驗有什麼差別,不想塞太多資料進資料庫弄亂原有資料,可以下參數讓程式不要寫入資料庫。
  3. 用 shell script 寫好測試用的批次檔,會輸入不同參數給實驗用的程式,產生所有要的結果。
  4. 裝 phpMyAdmin,方便分析實驗情形,以及輸出 gnuplot 要求的輸入格式(用TAB分隔)。
  5. 寫好 gnuplot 的 code,我不知道怎麼在 gnuplot 裡使用變數,讓它能配合shell script對畫圖作細部調整(如更改輸出檔檔名),所以我改用笨一點的做法,將gnuplot code存成字串,用Ruby配合不同變數產生有點不同的 gnuplot code 到文字檔裡,再執行 gnuplot 讀入新產生的 code 以符合細部調整。
  6. 寫個簡單網頁顯示 gnuplot 輸出的 PNG 檔,方便用圖形觀察各組數據的差異。再寫個 script 利用 convert 把所有 PNG 檔轉成 EPS,確保論文裡的圖檔和我想要的樣子一致,但會犠牲向量圖檔任意放大的優點。

上述的方式我試過幾次,幫我省下不少時間,第一次試用時間投資就有回本,更不用說第二次之後的收益了。舉例來說,我其中一個實驗要求是記錄演算法各段落執行的時間,想配合各種不同資料量,判斷演算法的子項目平均時間差多少。但用 profiler 會拖慢執行速度,我只想記錄幾個主要步驟而已。這時輸入到 MySQL 變得相當順手,執行一次批次檔,上床睡覺,隔天早上下個 SQL 做平均,就可以看出差異。找出關鍵的部份後,再下 SQL 選出關鍵資料的細項,看看資料分佈的情況,有助於了解情況。想想看,若不用自動化實驗和資料庫來呈現數據,前述動作有多麼冗長無味,你會想重覆幾次這樣的事?更不用說集中精神分析結果和思考改進方式了。

2008年1月20日 星期日

重讀Dijkstra’s Algorithm有感

首先是確認了Dijkstra的發音,依Wikipedia的定義,要唸[ˈdɛɪkstra]。

以前我一直有兩個疑問:

  1. O(E*logV)不是比O(V^2)大嗎?為啥變成O(E*logV)後較好?
  2. 當heap內的元素會被更動值時,做起來不是很麻煩嗎?time complexity的影響為何沒有被認真討論?連帶使我懷疑那堆怪異的數字,O(V*logV + E*logV) 之類的。

愚笨的我在重讀Algo時終於想通上面兩件事了,

  1. sparse graph的定義:|E| = o(|V|^2),注意,是small-o,也就是說當 n 趨近於無限大時,|E|/(|V|^2) = 0,於是,E*logV還是比V^2小。若對此感到疑惑的話,不妨想想當|E| = |V|^k,其中 k 可以是比 2 小的任意正實數,也就是說,|V|^(1.9)的情況下,E*logV仍比V^2小。

    小時候自以為有讀懂small-o,第三遍讀到這個符號時,才真的體會到它的含義。如同我以前把worst case和Big-O弄混一樣,Big-O只是方便表示上界的符號,不等同於worst case。所以,average case的Big-O、best case的Big-O都很合理,沒有認合奇怪的地方。

  2. 我被heap的insert/delete動作限制住想法,自以為只有insert/delete時才適合做heapify,但當我們更新heap內任一元素時,可以從這被更新的元素開始做heapify,所以heap內的元素可以任意被更新,僅需 O(logV) 的代價。事先用個 array/hash table 就可以記好 heap 內的元素,當要更新特定元素時 (e.g. 某個vertex),O(1)的時間即能完成值的更新。

    沒想到到今天我才真的弄懂Dijkstra, MST的運作細節,以前碰到 priority queue 的更新維護細節時,都下意識地含糊帶過。也許下次再重讀Algo時,又會發現我還沒真的弄懂吧?

另外最近讀《勇闖資訊新未來:打造資訊科技的幕後英雄》時有讀到Dijkestra的介紹,順便記一下他給年輕科學家的建議:

1.別和你的同事競爭。
2.嘗試你能作的最困難議題。
3.選擇對科學發展有益切題的研究方向,不要與科學界妥協。

現階段來說,第三點可能是我最需要的,要能保有自己的價值觀而不與大環境妥協,相當困難。然而,我想一個可貴且稀少的學者,應該具有這樣的氣魄。若我的觀念錯了,也只不過是少一個一般學者,對大環境來說沒什麼損失。不管前述看法是否正確,目前我還太嫩了,仍需要經驗來確認或修正自己的想法。

2008年1月6日 星期日

social network推薦機制

最近在做 social network 的研究,進度相當緩慢,心力被分散到一堆雜事上,這就是沒壓力的下場啊。

這篇文章與該blog裡和facebook相關的文章都很有意思,了解現今最紅的 social network site 如何獲利。看了幾篇介紹後,發現都是相當簡單的推銷機制,我原本也和Mr. Saturday想的一樣,以為facebook會分析使用者的資料,再做出推薦,這也是我現在著手的研究。也許這些學術方法太耗計算資源 ,又無法明確地證明其有效程度,所以 facebook 採最簡單的做法吧?相較於Google極力避開人的因素浮上台面,facebook大辣辣地挑明人的存在,雖然直觀上能讓使用者相信推薦系統,卻更難過隱私權一關。

去除隱私權的問題從研究的角度來看,只使用既有的 social network 發揮的效力有限,只能找到使用者週遭的人,無法找到「沒有直接關聯,但特徵相當相似」的人,大幅減弱龐大資源背後的金礦。但要找出隱藏的金礦,方法不只要算得準,更要算得快,scalability 是首當其衝的問題,這要長時間的研究、試驗、修正,才會有好成果。考量到日後的發展,比較「高深」的方法應該會在日後再漸漸導入吧。

2007年12月31日 星期一

搜尋與推薦

原本想下的標題為「資訊傳播的推與拉」,轉念一想,這麼遜的標題大概沒人想看。

《隨意搜尋》的分類,資訊傳播的方式可分為「推」 (push) 和「拉」 (pull) 兩種。舉例來說,傳統入口網站如Yahoo的做法,是透過人工編排網站,將資訊「推」給使用者;相反的,Google的搜尋引擎則是讓使用者自己「拉」資訊。廣為人知的關鍵字廣告,則是成功將「推」、「拉」兩者整合成功的獲利方式。相較於傳統橫幅式廣告,關鍵字廣告的成功如今已不需多做說明,有興趣了解背景歷史的話,可以參閱《搜尋未來》,書內有提到當初Overture的創辦人Bill Gross怎麼提出這個構想,以及被Google拿去使用後的發展。

前陣子有幸參與一場很辦的討論,聽到搜尋的可能性,如今Google發展成熟的關鍵字搜尋,其實不過是搜尋發展的冰山一角吧,搜尋的方式仍有很多可能性,現今諸多 Vertical Search 網站是很好的例子,以 location based service (LBS) 為例,我們可以問:「離我最近的加油站在那?離我最近的餐廳有那幾家?半徑五公里內有那些電影院?」從而產生大量的新應用和獲利模式,不在此多提。值得注意的是,搜尋的輸入方式不止有關鍵字;輸出方式也不止有網頁。

除了搜尋種類的變化外,依人、時、地來看,任何搜尋都可以變得更精緻。以關鍵字為例,若你是珠寶商,搜「Ruby」時,你預期看到珠寶相關的事;若你是程式設計師,你預期看到程式設計相關的事。搜新聞時,當我們鍵入「颱風警報」,預期看到的是最近的消息,再者,預期看到的是自己所處地域的消息。搜尋的延伸變化多端,絕不如我們現今看到的如此單調。

然而搜尋有個極限:使用者必須提供資訊。有時候使用者不知道他要什麼,或著是他沒想到。創造未知的服務,正是開拓新市場的契機。舉例來說,統計過各個消費者的購物記錄後,可以推測出他們可能在什麼時候需要補貨,也可以依貨品的互補性提供優惠,比方小明常買泡麵,告知小明最近熱水壺在特價,或是買十箱泡麵送熱水壺,可以促銷。推廣一層來看,除了個人的過去記錄外,可以分析他的社交圈,比方小明常和大毛、二毛一起看電影,最近大毛、二毛看了部新電影,小明還沒看,可以推薦小明去看。再廣義點來看,小明並不需要真的認識大毛和二毛,只要他們的興趣相似就夠了。於是 social network 帶來了新的發展,從最近火熱的 FaceBook 相關新聞可窺知一二。當然,個人使用記錄和 social network 也可以用在搜尋,強化個人化搜尋功能。

這看起來像是「推」與「拉」模式的變化,當「推」的方式變得更靈活、不如傳統入口網站笨重時,應該會出現別於關鍵字廣告外的全贏模式。全贏是指平台經營者 (例如Google)、服務提供者和消費者都滿意,都能從中獲利。