我是靠谱客的博主 花痴溪流,最近开发中收集的这篇文章主要介绍Mallet使用说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MAchine Learning for LanguagE Toolkit (Mallet) 是一 java 的软件包,专门用于统计自然语言处理,文本分类,主题建模,信息抽取,以及其它涉及文本的机器学习方面的应用。

a)         文本分类:它的基本思想是,用大量的训练样本训练分类器,再用些测试样本测试分类器的性能,然后保存训练好的分类器模型。当将未知类别的文本输入已训练好的分类模型时,可输出此未知类别样本所属各个类别的的概率。

b)        主题建模:主题建模用于分析大量的未标示(类别未知)的文本。通过分析这些文本,可以得出一些(个数可指定,也可默认)主题,每个主题由一些经常出现在一起的词组成。可以保存建模好的主体模型,以备推断一未知文本所属主题时所用。

c)        Mallet 可以把文本转换为数学上的表达形式,从而更有效的对文本进行机器学习。这个过程是通过“管道( pipe )”系统实现的,它可以进行分词,移除停用词,把序列转换为向量等方面的操作。具体代码可见 mallet/src /cc/mallet/pipe 。

使用步骤:

一、文本分类:

1.     处理数据格式:将文本变成mallet数据文件

 C:/mallet>bin/mallet import-dir --input sample-data/classify-input/* --output classify-input.mallet

--input 输入文件或文件夹

--output 输出文件.mallet

此命令是把classify-input (此名称可以根据自己的需要改,我在此命名此文件夹名为classify-input )目录下的文件夹中的所有数据转为特征向量的形式,mallet 可用已转换好的数据格式进行训练、测试分类器等操作。

注:在此,classify-input 下有三个文件夹,分别为sport 、science 、food 。执行此命令后,系统会自动将数据分为三类,类别名称为sport 、science 、food ,三个文件夹下的数据类别分别于所属文件夹名称一一对应。

此命令等价于:

C:/mallet>java cc.mallet.classify.tui.Text2Vectors --input sample-data/ classify-input /* --output classify-input.vectors

输入单个文件可以用import-file命令,注意:input和output命令后可以跟多个文件,如

C:/mallet>bin/mallet import-svmlight --input train test --output train.mallet test.mallet

2.     训练分类器

 C:/mallet>bin/mallet train-classifier --input classify-input.mallet --trainer NaiveBayes  --output-classifier classifier1.classifier   --training-portion 0.8 --num-trials 10

--trainer 选择训练的算法,如MaxEnt, NaiveBayes, C45, DecisionTree等,具体可以看 JavaDoc API cc.mallet.classify package。本例中选择NaiveBays,此项为可选。

--training-portion 0.8,指80%的数据作为训练数据,剩下20%的作为测试数据,也可不填此项,全部数据作为训练。

 --num-trials 10,表示测试10次,可选

--cross-validation 10. 也可直接使用此命令做十折交叉检验

此命令是训练、测试分类器。--input 参数的值classify-input.mallet 是第一步中生成的特征向量,--trainer 参数的值NaiveBayes 是指训练分类器的算法,可以指定其他算法,例如 MaxEnt等。 --training-portion 参数的值这里是0.8 ,可以根据需要设定,0.8 的意思是随机抽取classify-input.mallet 数据中的80% 当训练数据,剩下的当测试数据,用于测试已训练好的分类器的准确性等等性能指标。--output-classifier 参数的值classifier1.classifier 是所存已训练好的分类器的名称。

此命令等价于:

C:/mallet>java cc.mallet.classify.tui.Vectors2Classify --input classify-input.vectors --trainer NaiveBayes --training-portion 0.8 --output-classifier classifier1.classifier --num-trials 3

 

3.     预测,分类未标注文本

C:/mallet>bin/mallet classify-file --input test.txt --output - --classifier classifier1.classifier
C:/mallet>bin/mallet classify-dir --input test/* --output - --classifier classifier1.classifier

此命令是用已训练好的分类器来对一未知类别文本进行分类。--input 参数值test.txt 是要进行分类的未知类别文本的位置。--output 后面参数值“- ”意思是直接在命令行中输出所属各个类别的概率,也可存成文本形式。--classifier 参数的值是指使用的分类器名称(即,训练好的分类器)。 需在bin/mallet.bat中添加

if "%CMD%"=="train-classifier" set CLASS=cc.mallet.classify.tui.Vectors2Classify

注:对未知类别文本进行分类时不需进行数据预处理,直接输入文本即可,文本中一行代表一个分类实例。

或者可用其他分类方法:

C:/mallet>java cc.mallet.classify.tui.Text2Classify --input test.txt --output - --classifier classifier1.classifier

 

二、主题建模

 

1. 转换数据格式

C:/mallet>mallet import-dir --input sample-data/topic-input --output topic-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 -filename infer1.inferencer

  此命令是用第一步的数据进行主题建模,参数--num-topics 的值2 意思是限定主题个数为2 ,可以根据需要设置其他值,默认的主题数为10. 。--output-doc-topics 参数的意思是输出文档- 主题矩阵,存到docstopics 文件中。--inferencer -filename 参数的意思是对将训练好的主题模型进行存储,以备后用,在此,此主题模型存到参数值infer1.inferencer 中,可根据习惯自行命名。

  3.     同1 说明。

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

  4.     预测

C:/mallet>mallet infer-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>mallet import-file --input sample-data/data/topic-test.txt --output topic-test.mallet --keep-sequence --remove-stopwords

?        import-file ,import-dir ,train-topics ,infer-topics , train-classifier 等等这些命令可以通过以下操作进行查询:

C: /mallet>mallet

查询每条命令的参数可以通过以下命令行操作进行:

例如: C: /mallet>bin/mallet import-dir --help

可以根据自己的需要选用参数。

三、序列数据

1、数据输入可以和svmlight的数据输入相同。

SVMLight format: SVMLight-style data in the format
target feature:value feature:value ...
标签 特征:特征值 特征:特征值...
用如下语句将其转换成mallet格式
C: /mallet>bin/mallet import-svmlight --input train test --output train.mallet test.mallet
注意:有些mallet版本并没有在bin/mallet.bat中添加import-svmlight语句,只需在该文件中的if语句中添加以下一句话即可。其他在.bat中未出现的命令都可以找到其所在类并用类似的方法导入。
if "%CMD%"=="import-svmlight" set CLASS=cc.mallet.classify.tui.SvmLight2Vectors
2、也可以用mallet的序列方式进行crf训练
数据格式,每一行为一个词或自己设定的词组(token),句子(序列)之间可用空行隔开,如下所示
feature_1 feature_2 ... feature_n label
feature_1 feature_2 ... feature_n label
feature_1 feature_2 ... feature_n label
crf训练:
运行cmd,到达mallet目录,运行以下命令:
java -cp  "/home/hough/mallet/class:/home/hough/mallet/lib/mallet-deps.jar"  cc.mallet.fst.SimpleTagger --train true --model-file nouncrf  sample
如果安装我上一篇文章对mallet进行设定,可以只用如下命令执行crf训练
java  cc.mallet.fst.SimpleTagger   --train true --model-file nouncrf  sample --gaussian-variance 1
其中,nouncrf是输出的模型文件,例如c:/crf.txt 
         sample是训练数据集。
另外,还可以用--gaussian-variance 1命令更改训练参数,默认是10
crf测试:
java -cp "/home/hough/mallet/class:/home/hough/mallet/lib/mallet-deps.jar"  cc.mallet.fst.SimpleTagger --model-file nouncrf  stest
java  cc.mallet.fst.SimpleTagger --model-file nouncrf  stest
这个命令只是比上面少了--train true而已,stest是测试集,这个命令会将预测结果输出在命令控制台上,因此可重定向控制台,将测试结果保存在文件中,如
java  cc.mallet.fst.SimpleTagger --model-file nouncrf  stest >>c:.output.txt





参考文献:http://blog.csdn.net/xianggelilaling/archive/2010/05/30/5634815.aspx

最后

以上就是花痴溪流为你收集整理的Mallet使用说明的全部内容,希望文章能够帮你解决Mallet使用说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部