談完了各種推薦方法的觀念,以及在實際應用中往往混合一個以上的推薦方法之後,接下來,讓我們來看看在實作面上的各種相關議題。

推薦系統在實務開發過程中,會面臨的多個障礙
在了解推薦系統的基本觀念之後,你可能打算開始嘗試著設計並且實作一個推薦系統。

在過去,你要實作一個推薦系統,可能必須從最底層演算法的實作。如果你需要多種演算法來混合搭配使用,那麼你就需要實作多個演算法。而即使是一個演算法,也可能有一些不同的選項,例如不同的相似性計算方式。光是實作這些演算法,要使其計算正確而且效能足夠高效,就得花上許多的時間。

而且,一旦面對海量的資料時,還會進一步希望自己的實作能夠具備規模可擴充性。而光是這個過程,可能就得耗去一般開發者大量的時間及力氣。更何況在實作之前,還得先了解每種演算法的精神以及內容。也更別提倘若日後想要抽換不同的演算法,還得設計出一個足夠彈性的框架,以便方便的進行必要的演算法更換。

總之,這些底層基礎設施的實作,所需耗費的精力,都足以增加上手推薦系統實作的難度。

Apache Mahout開放原始碼專案的發展歷程與特性
當然,漸漸有人重視這個問題,從開放原始碼的社群開始投入努力,到現在終於有了可觀的成果,而這個成果就是Apache Mahout。

Apache Mahout是Apache Software Foundation旗下的一個開放原始碼的專案,其專案的目的,在於提供具規模可擴充性的機器學習(Machine Learning)程式庫。

事實上,機器學習是一個很廣大的領域,其內容也包羅萬象,而Mahout的目標便是提供各種類型的經典演算法,以程式庫的方式呈現,並且具備高效及規模可擴充性的特質。

最早,Mahout是另一個著名的全文搜尋引擎Lucene中的子計畫,因為全文搜尋引擎中需要運用許多機器學習的演算法,也因為這個部份的發展愈來愈完整,於是便從Lucene中獨立出來,在2010年成為一個top-level的專案,同時也納入了另一個名為Taste的專案,而Taste專案正是提供協同過濾式推薦演算法的專案。

Mahout在英文中的意思是「象夫」,之所以有這個名字,是因為Mahout為了提供規模可擴充性,而基於Apache Software Foundation另一個名為Hadoop之專案的平臺,以map/reduece的演算法,實作了像群集(clustering)、分類(classification),以及協同過濾(collaborative filtering)的核心演算法。而Hadoop的代表圖示就是一頭大象。

應用Hadoop平臺與核心程式庫的最佳化,提升可擴充性與執行效能

Hadoop被許多人視為雲端計算的平臺,而其中的map/reduce演算方式,可以為系統帶來極佳的規模可擴充性。

基於map/reduce的演算,Hadoop可以利用分散式節點的增加,來持續提供更多的計算能力,因此,具備了很好的規模可擴充性。

現在,像Amazon的雲端服務中,也包括了Hadoop的map/reduce。這意謂著,利用Hadoop map/reduce寫成的應用程式,也都可以丟上公開的雲端服務上去運行,尤其當你需要臨時性、大量的計算時,便可以善用雲端服務的優勢,以較低的成本快速的取得大量的計算力。

當然,當你利用Mahout中各種機器學習的程式庫,來開發應用程式時,也等於立足在這個基礎上,因此,可以獲得同等的好處。

但這不意謂著你在Mahout上,只能基於Hadoop來運行。事實上,Mahout除了運行在分散式(雲端上)多節點的Hadoop平臺上之外,它也提供了單一節點、甚至是非Hadoop的實作版本,這使得開發者,可以依據其對計算力及規模可擴充性的需要,來決定系統運行的方式,甚至依需要隨時來改變配置方式。

此外,Mahout的核心程式庫,即使是非分散式的版本,也都經過高度的最佳化,因而能提供極佳的執行效能。

提高效能的運行,無論是否為分散式計算、無論是否可直上雲端,對機器學習或推薦系統來說,都是最重要的關鍵。

像推薦系統在實務的應用中,常常都是需要處理大量、甚至是海量級的資料。然而,任何一個小環節的效能運行差異,都有可能被放大到十分可觀的程度。

提供多種演算法與其實作,用途很廣泛
在Mahout中,提供了好幾大類的演算法,像是推薦引擎(Mahout中專指協同過濾式的推薦)、分類演算法、群集演算法、模式探勘(Pattern Mining)、降維(Dimension Reduction),以及向量相似度(Vector Similarity)等,在每一類裡,又各自提供多種經典演算法的實作。

以這些分類演算法來說,它目前就提供了像Bayesian、Support Vector Machine、Neural Network,以及Hidden Markov Models等等常見的演算法實作。

這些演算法,其實人們早就應用在各種領域,像是影像辨識、語音分類處理、垃圾郵件的判斷等等。因此,即使你現在不是要做推薦系統,你也可以利用Mahout中各種可用於機器學習的演算法實作,來開發其他類型的應用程式。

Mahout是一套以Java所寫成的程式庫,它可以運行在支援Java的各種平臺之上,當然,這也意謂著,當你想利用Mahout來開發應用程式時,就必須利用Java,或是任何可以叫用Java程式庫的程式語言來進行開發。

克服以往開發上最花時間的部分

當站在Mahout的肩膀來開發推薦系統時,你會發現,過去我們在開發推薦系統或機器學習的應用中,最耗費時間的環節之一,也就是開發這些演算法甚至是打造應用程式框架,突然間都消除了。而且,更重要的是,和你一起競爭的開發者或團隊,也都站在和你一樣的立足點上一起出發,因為大家都可以憑藉著Mahout的力量,立即得到這一切,開發應用程式的關鍵和瓶頸似乎轉移了。

一樣都是利用Mahout的過濾式推薦的演算法,不論是儲存資料的空間利用效率或是運行效能,都是一樣的。

那麼,應用程式的差異又會在那裡呢?

事實上,即使都是利用Mahout的演算法來實作推薦系統,也會因為所選用的輸入資料、處理輸入資料建立模型的方式、選用的演算法參數、不同推薦方法間的組合及搭配方式,以及後處理的方式的不同,而造成推薦結果的品質產生差異。

你可以預料得到,如今,在同樣都可以獲得Mahout加持的情況下,推薦系統應用程式的開發者,已經免去了很多工作,諸如演算法,以及應用程式框架等基礎設施的打造,因而可以更專注推薦系統應用本身。

而瞄向相同目標、市場、領域的競爭者,自然就得在這些面向上努力發展,設法分出高下。

 

專欄作者

熱門新聞

Advertisement