使用Mahout實現自然語言處理

banq發表於2013-07-16
cestella/NLPWithMahout · GitHub是一個使用Mahout實現自然語言處理(NLP:Natural Language Processing)的開源專案。

NLP一詞來自於統計自然語言處理,來自google的研究主管Peter Norvig評價這本書:如果有人告訴我在一年內能賺一百萬,那麼就只有這本書能做到,我複製了這本書,並開始啟動一個web 文字處理公司。

Apache Mahout is 一個能夠執行在Hadoop上的分散式機器學習演算法高效能庫,可用演算法如下:

型別:演算法
Linear Algebra : Stochastic Gradient Descent
Linear Algebra : Stochastic Singular Value Decomposition
Classification: Random Forests
Classification : Naïve Bayesian
Classification :Hidden Markov Models
Clustering :Normal and Fuzzy K-Means
Clustering :Expectation Maximization
Clustering :Dirichlet Process Clustering
Clustering :Latent Dirichlet Allocation
Clustering :Spectral Clustering
Clustering :MinHash Clustering
Pattern Mining: Parallel FP Growth
<p class="indent">

Mahout 提供了很多工具庫,允許從hadoop中以ML演算法格式獲取資料。

基本模式有:
1.將文字轉為序列檔案 SequenceFiles,透過 seqdirectory
命令。
2.將序列檔案轉為一系列稀疏向量,使用seq2sparse,根據選擇使用 word-integer和feature-weight.
3.轉換與稀疏向量關聯的Key到使用rowid命令的可增量整數。

另外,可在Mahout中使用Latent Dirichlet Allocation(LDA),透過客戶一遍一遍購買記錄,能夠猜測其購買偏好。Mahout是LDA原始實現的效能15倍。

LDA在Mahout使用方式:
輸入資料作為一個稀疏向量;
建立來自文件欄位的管道,如下三個步驟:
1. seqdirectory ! 轉換包含每行一個文件的系列文件到序列檔案
2. seq2sparse ! 將序列檔案作為條目字典轉為稀疏向量。
3. rowid !轉為稀疏向量的key到整數
cvb工具能夠執行LDA演算法。輸入是字數加權頻率的序列檔案,輸出是topic 模型。


相關文章