1. 程式人生 > >自然語言處理工具包MALLET教程-中文版安裝使用指南

自然語言處理工具包MALLET教程-中文版安裝使用指南

Mallet:自然語言處理工具包

MALLET是基於java的自然語言處理工具箱,包括分檔得分類、句類、主題模型、資訊抽取等其他機器學習在文字方面的應用,雖然是文字的應用,但是完全可以拿到多媒體方面來,例如機器視覺。

MALLET包含了足夠的文字分類的演算法,還有特徵提取的演算法等。文字分類的演算法像是NaïveBayes, Maximum Entropy, and Decision Trees等,而且也對程式碼做了優化。

MALLET也包含sequence tagging的工具和演算法,例如資訊抽取的應用等,演算法有HiddenMarkov Models, Maximum Entropy Markov Models, and Conditional Random Fields.

MALLET也包含主題模型:topic modeling toolkit containsefficient, sampling-based implementations of Latent Dirichlet Allocation,Pachinko Allocation, and Hierarchical LDA.

MALLET當然還有其他功能,很強大。下面是api和一個pdf的連結:[API][教程]。

==============關於MALLET的安裝配置==================

這裡有一個安裝配置的說明,我把它轉載過來了:

Mallet 使用說明

Mallet是專門用於機器學習方面的軟體包,此軟體包基於java。通過mallet工具,可以進行自然語言處理,文字分類,主題建模。文字聚類,資訊抽取等。下面是從如何配置mallet環境到如何使用mallet進行介紹。

一.實驗環境配置

1.       下載並安裝JDK,並正確設定環境變數

需設定三個環境變數:

²        JAVA_HOME:該環境變數的值就是Java所在的目錄,

例如C:\ProgramFiles\Java\jdk1.6.0_10

²        PATH:指定一個路徑列表,用於搜尋可執行檔案。

該環境變數值為:%JAVA_HOME%\bin

²       CLASSPATH:指定一個路徑列表,是用於搜尋Java 編譯或者執行時需要用到的類。該環境變數的值為:%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

²       執行àcmd

²        分別輸入javac和java,沒有出錯則表示配置成功。

2.       下載apache-ant,不需安裝,只需正確設定環境變數。

apache-ant是一個基於Java的編譯工具。

²       配置

      ANT_HOME:設定為apache-ant的解壓目錄,例如:C:\server\apache-ant-1.8.0
             classpath: %ANT_HOME%\lib

      Path :%ANT_HOME%\bin

²       測試

²       執行àcmd

²        輸入 ant

結果如下則表示配置成功

Buildfile: build.xml does notexist!Build failed

       配置環境變數:

²        MALLET_HOME=MALLET的解壓目錄,例如C:\mallet

²        Path中新增 %MALLET_HOME%\bin

²        classpath:%mallet_home%\class;%mallet_home%\lib;%mallet_home%\lib\mallet-deps.jar

²       執行àcmd,進入到mallet的解壓目錄

²        輸入 ant

如果出現Buildsuccessful字樣,則表示配置成功

二.Mallet簡要說明

全稱:MAchine Learningfor LanguagE Toolkit

Mallet是一java的軟體包,專門用於統計自然語言處理,文字分類,主題建模,資訊抽取,以及其它涉及文字的機器學習方面的應用。

a)         文字分類:它的基本思想是,用大量的訓練樣本訓練分類器,再用些測試樣本測試分類器的效能,然後儲存訓練好的分類器模型。當將未知類別的文字輸入已訓練好的分類模型時,可輸出此未知類別樣本所屬各個類別的的概率。

b)        主題建模:主題建模用於分析大量的未標示(類別未知)的文字。通過分析這些文字,可以得出一些(個數可指定,也可預設)主題,每個主題由一些經常出現在一起的片語成。可以儲存建模好的主體模型,以備推斷一未知文字所屬主題時所用。

c)        Mallet可以把文字轉換為數學上的表達形式,從而更有效的對文字進行機器學習。這個過程是通過“管道(pipe)”系統實現的,它可以進行分詞,移除停用詞,把序列轉換為向量等方面的操作。具體程式碼可見mallet\src\cc\mallet\pipe。

三.Mallet使用步驟

文字分類:

1.C:\mallet>mallet import-dir--input sample-data\classify-input\* --output classify-input.mallet

此命令等價於:

C:\mallet>javacc.mallet.classify.tui.Text2Vectors --inputsample-data\ classify-input \* --output classify-input.vectors

此命令是把classify-input(此名稱可以根據自己的需要改,我在此命名此資料夾名為classify-input)目錄下的資料夾中的所有資料轉為特徵向量的形式,mallet可用已轉換好的資料格式進行訓練、測試分類器等操作。

注:在此,classify-input下有三個資料夾,分別為sport、science、food。執行此命令後,系統會自動將資料分為三類,類別名稱為sport、science、food,三個資料夾下的資料類別分別於所屬資料夾名稱一一對應。

此命令等價於:

C:\mallet>java cc.mallet.classify.tui.Vectors2Classify--input classify-input.vectors --trainer NaiveBayes --training-portion0.8 --output-classifier classifier1.classifier

此命令是訓練、測試分類器。--input引數的值classify-input.mallet是第一步中生成的特徵向量,--trainer引數的值NaiveBayes是指訓練分類器的演算法,可以指定其他演算法,例如MaxEnt等。--training-portion引數的值這裡是0.8,可以根據需要設定,0.8的意思是隨機抽取classify-input.mallet資料中的80%當訓練資料,剩下的當測試資料,用於測試已訓練好的分類器的準確性等等效能指標。--output-classifier引數的值classifier1.classifier是所存已訓練好的分類器的名稱。

3.C:\mallet>javacc.mallet.classify.tui.Text2Classify --input sample-data\data\classify-test.txt --output ---classifier classifier1.classifier

此命令是用已訓練好的分類器來對一未知類別文字進行分類。--input引數值sample-data\data\classify-test.txt是要進行分類的未知類別文字的位置。--output後面引數值“-”意思是直接在命令列中輸出所屬各個類別的概率。--classifier引數的值是指使用的分類器名稱(即,訓練好的分類器)。

注:對未知類別文字進行分類時不需進行資料預處理,直接輸入文字即可,文字中一行代表一個分類例項。

主題建模

1.C:\mallet>mallet import-dir --input sample-data\topic-input --outputtopic-input.mallet --keep-sequence --remove-stopwords

   此命令是將topic-input目錄下的所有文字轉換為特徵序列,--keep-sequence引數必須有,否則會出錯,因為主題建模時所用資料來源就是特徵序列,而不是特徵向量,所以必須用--keep-sequence此引數來限制轉換資料的格式。--remove-stopwords的意思是移除停用詞。

2.C:\mallet>mallet train-topics --input topic-input.mallet --num-topics 2--output-doc-topics docstopics --inferencer-filenameinfer1.inferencer

此命令是用第一步的資料進行主題建模,引數--num-topics的值2意思是限定主題個數為2,可以根據需要設定其他值,預設的主題數為10.。--output-doc-topics引數的意思是輸出文件-主題矩陣,存到docstopics檔案中。--inferencer-filename引數的意思是對將訓練好的主題模型進行儲存,以備後用,在此,此主題模型存到引數值infer1.inferencer中,可根據習慣自行命名。

3.     C:\mallet>mallet import-dir --input sample-data\data--output topic-test.mallet --keep-sequence  --remove-stopwords

同1說明。

4.     C:\mallet>malletinfer-topics --input topic-test.mallet --inferencer infer1.inferencer--output-doc-topics testdocstopics

用訓練好的主題模型對未標示的文字topic-test進行主題推斷。--inferencer引數的意思是用已經訓練好的主題模型infer1.inferencer進行對未知文字的主題推斷。--output-doc-topics引數的意思是輸出文件-主題矩陣,存到docstopics檔案中。

注:

²        文字分類時未知文字必須用一文件表示,文件中每行代表一分類例項。而主題建模時可以對單個文件主題建模,可以對一目錄下的所有文件進行主題建模,例如主題建模第三步,可以用import-dir命令。

C:\mallet>malletimport-file --input sample-data\data\topic-test.txt --outputtopic-test.mallet --keep-sequence --remove-stopwords

²        import-file,import-dir,train-topics,infer-topics,train-classifier等等這些命令可以通過以下操作進行查詢:

C:\mallet>mallet

查詢每條命令的引數可以通過以下命令列操作進行:

例如C:\mallet>mallet import-dir--help

可以根據自己的需要選用引數。