基於《Web Intelligence and Big Data》的自我梳理 一、二

課程裏總共分爲6個模塊:LOOK, LISTEN, LOAD, LEARN, CONECT, PREDICT。不過我這邊只總結前5個。


一、LOOK(搜索)

首先,大家對搜索都不陌生。搜索引擎爲每個文檔建立反轉索引。但由於文檔數太多,光靠關鍵字匹配起不到信息過濾的作用。可以另外引入“重要性”的概念,即pagerank所要解決的問題:它使用隨機遊走模型,從一個點開始,計算所有網頁被訪問的概率。可以證明這個概率矩陣是可以收斂的。然而對於相互之間沒有鏈接的數據,pagerank就無法應用了。在這種情況下,我們如何找到相關的item呢?

1、找出同屬於一個主題的。文本挖掘裏有LDA(latent dirichlet allocation)。它假設一篇文章都是由不同的topic混合而成的,而且對於一個corpus裏的每一篇article,都進行一次從dirichlet distribution的採樣。

2、更或者是間接聯繫。比如推薦問題。推薦問題中,一般給出用戶的行爲,最典型的如評分,然後讓你推斷出用戶對於其他物體的喜好。對於“用戶行爲”這類抽象的特徵,我們通常需要間接地構造用戶的特徵向量。


其次,對於傳統基於sql查詢的數據庫來說,它無法滿足搜索的需要:一條簡單的搜索,就可能會涉及到很多表的join。NoSQL就是因此發展起來的。其中最早的有Google的BigTable(更具體的,會在“三”中提到)。


最後,除了文本,我們如何對一整個對象進行搜索?比如,圖片,音樂這樣的多媒體數據。講者提到了Locality Sensitive Hashing對於指紋識別的應用:它將一個object表示成由多個哈希值組成的向量。雖然不同,但容易聯想到Deep Learning裏的autocoder:它以非監督的方式從圖片中提取稀疏的特徵。然而, 他們本質上都是將高維物體降維。


二、LISTEN(篩選)

這部分我把它理解爲特徵選擇(feature selection)。講者從mutual information的角度入手,這也是很直觀的:我們可以剔除信息含量很小的特徵。特徵選擇很重要,因爲無關的特徵會引入noise。然而直接爲每一個feature計算mutual information的代價太大。其他典型的選擇方法有:forward selection 和 backward selection, 即一個個地向特徵集中加入特徵,或一個個地從中刪除,然後找出給出最好performance的特徵子集。同樣的,這種做法代價也很大。目前,我使用過用random forest進行特徵選擇,效果和效率都不錯。有意思的是,隨機森林本身就是根據entropy熵(表示不確定性,mutual information的反面)進行分裂的。最後,lasso(跟ridge regression很像,也就是加上regulation的line regression)也能完全得去掉某個特徵值,即使一些feature對應的參數值完全降爲0。

除了完全去掉某些feature的激進做法,我們可以使用爲feature加權的方式達到類似的效果。文本搜索中,最常用的是tf-idf(term frequency-inverse document frequency):對於常見的word,它的idf值相對要小。其實機器學習中的regulation也可以看成一種加權。爲了防止一個算法過擬合,加入regulation項後,最終得到的參數中有些會很小。相應的,他們對最終結果的影響力也相對要小。


最後,只用出現的單詞來表示一個文檔是不夠的。雖然基於詞與詞之間是獨立的假設,naive bayes classifier已經做得足夠好了。但是使用n-gram能進一步提高classifier的性能。 順帶一提,在做kaggle上的一個比賽時,發現使用stemming 和 lemmaztion,分類器的性能反而會下降。我的理解是:當數據足夠多時,保持問題的高VC維度,創建足夠複雜的模型是個簡單又不錯的方法。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章