在OpenNLP中合并多个文档分类程序模型

时间:2014-06-12 17:56:25

标签: hadoop mapreduce opennlp

我正在尝试使用OpenNLP编写文档分类程序的map-reduce实现。

在训练阶段,我计划读取大量文件并根据map-reduce计算创建模型文件(可能是一系列作业)。我将文件分发给不同的映射器,我将创建一些模型文件作为此步骤的结果。现在,我希望将这些模型文件减少为单个模型文件以用于分类。

我知道这不是最直观的用例,但我已准备好弄脏并扩展/修改OpenNLP源代码,假设可以通过这种方式调整maxent算法。

如果这看起来太过分了,我请求建议通过生成与输入文件相对应的文档样本作为map-reduce步骤的输出,并通过将它们提供给文档分类程序培训师将它们缩减为模型文件。

谢谢!

1 个答案:

答案 0 :(得分:1)

我以前做过这个,我的方法是不让每个reducer都生成模型,而只生成格式正确的数据。 而不是使用类别作为键,它将所有类别分开只需使用单个键并使值成为正确的格式(cat sample newline),然后在单个reducer中,您可以将该数据读作(字符串)bytearrayinputstream和训练模型。当然,这不是唯一的方法。你根本不需要修改opennlp就可以了。

简单地说,我的建议是使用一个行为如下的单一作业:

地图:读入数据,创建类别标签和样本对。使用名为' ALL'和context.write每对与该键。

Reduce:使用stringbuilder将所有cat:sample对连接成适当的训练格式。将字符串转换为bytearrayinputstream并提供训练API。把模型写在某个地方。

可能会出现样本数据太大而无法发送到一个节点的问题。如果是这样,您可以将值写入A nosql db,然后从更强大的训练节点读取。或者您可以在映射器中使用随机化来生成许多键并构建许多模型,然后在分类时编写z包装器来测试它们之间的所有数据和Getz每个都是最好的.....很多选项。 HTH