2016年9月1日星期四

mallet中LDA的使用

mallet是一个机器学习的Java库,不支持分布式,总结一下其中的Topic Model的用法。

命令行使用中有两种import data的方式,一种是import-dir,一个文件是一个Instance,有多个文件;另一种是import-file,只有一个文件,每一行是一个Instance。
命令行的使用方法移步http://mallet.cs.umass.edu/topics.php

mallet中以instance为单位表示文档,每一个Instance包括name、label、data、source。mallet中使用不同的Iterator来载入document的文件。
csv文件格式的例子(CsvIterator):http://mallet.cs.umass.edu/topics-devel.php
文本文件的例子(FileIterator):http://mallet.cs.umass.edu/import-devel.php
所有的Iterator见cc.mallet.pipe.iterator。

InstanceList的addThruPipe方法既可以添加Iterator<Instance>也可以添加单独的一个Instance。

两种级别的正则表达式:
1、line regex
用于从每一行文本中提取name、label、data:
instances.addThruPipe(new CsvIterator (fileReader, Pattern.compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"), 3, 2, 1)); // data, label, name fields
参考http://stackoverflow.com/questions/27927556/what-do-the-parameters-of-the-csviterator-mean-in-mallet/27929358#27929358

2、data regex
用于从data中提取出token:
new CharSequence2TokenSequence(Pattern.compile("\\p{L}[\\p{L}\\p{P}]+\\p{L}"))
参考http://mallet.cs.umass.edu/import.php中关于--token-regex的说明。

没有评论:

发表评论