天天看點

Mallet機器語言工具包-入門測試

Mallet主要用于文本分類,是以它設計思路都是偏向文本分類的。

由于需要用到裡面的最大熵以及貝葉斯算法 是以 得研究一下

首頁 :http://mallet.cs.umass.edu/index.php

參考文章:http://mallet.cs.umass.edu/classifier-devel.php

         http://mallet.cs.umass.edu/import-devel.php

網上找了下,材料不多,隻能自己苦逼地去看官方提供的一些guide還有API,然後就研究源代碼了

我的目的是,把MALLET導入到自己的java項目中(用的是eclipse),然後靈活地用裡面一些算法,bayes,和最大熵算法進行文本分類。

導入到工程部分:

下載下傳連結:http://mallet.cs.umass.edu/download.php  我這個時候的最新版本是2.0.7

這是壓縮包裡面的内容,把src檔案夾以及lib裡面的jar包都拷貝到工程項目裡面,把jar包都加載到工程上

Mallet機器語言工具包-入門測試

最終我的工程目錄是這樣的,src放我自己的一些類

malletSrc放mallet的源碼

mallet檔案夾裡面放的都是對應的jar包

下面是我的研究筆記:

具體各個類的用法隻能通過API和源碼以及自己的測試去分析了。

下面提供一些測試例子

為了生成一個Instance得搞定下圖這幾個東西啊..REF:http://mallet.cs.umass.edu/import-devel.php

好像子類還好多,我隻研究到我夠用的幾個東西就O了。

Mallet機器語言工具包-入門測試

源代碼裡面的注釋:

An instance contains four generic fields of predefined name:   

     "data", "target", "name", and "source".   "Data" holds the data represented   

    `by the instance, "target" is often a label associated with the instance,   

     "name" is a short identifying name for the instance (such as a filename),   

     and "source" is human-readable sourceinformation, (such as the original text).

關于Data:

需要Alphabet以及FeatureVetor,配合使用,Alphabet用來儲存各個屬性的名字,FeatureVector用來儲存一個對象在各個屬性下的值

測試代碼1:  

輸出:

長(0)=1.0

寬(1)=2.0

高(2)=3.0

我們可以指定values對應與哪個屬性值,從0開始,比如長對應0,寬對應1,高對應2,測試如下

長(0)=2.0

寬(1)=3.0

高(2)=1.0

一個比較地方需要注意的是如果指明的values的對應索引有重複,比如,2和3都指明它屬于長,那麼得到的值是累計的而不是覆寫的,值為5,這個就單詞統計的效果吧

長(0)=5.0

好吧 先把Data搞定了。FeatureVector就是我需要的data

Source:我就讓它為NULL了

Label:

/** You should never call this directly.  New Label objects are   

            created on-demand by calling LabelAlphabet.lookupIndex(obj). */

上面是源代碼的一句話,Label需要通過LabelAlphabet來建立,是以再研究下LabelAlphabet,然後做以下測試

輸出為:桌子,這樣一來Label也搞定了

Name:作為一個instance的id号,那麼就簡單的用整型作為它的序号好了。

好了,這四個東西都搞定了,就可以建立Instance了,然後把Instance都加入到InstanceList裡面去 之後就可以參考http://mallet.cs.umass.edu/classifier-devel.php

進行分類了,分類測試代碼如下:

輸出結果 :

Mallet機器語言工具包-入門測試

得到的分類結果為椅子 左下角

關于那個異常,它備注了,(This is not necessarily cause for alarm. Sometimes this happens close to the maximum, where the function may be very flat.)

好吧,先研究這樣吧,基本夠我用了,筆記就先這樣記着