我正在尝试使用opennlp编写文档分类程序的map-reduce实现。
在培训阶段,我计划读取大量文件并创建一个模型文件,作为map reduce计算的结果(可能是一系列作业)。我会将文件分发到不同的Map器,我会创建一个模型文件作为这个步骤的结果数量。现在,我希望将这些模型文件简化为一个用于分类的模型文件。
我知道这并不是最直观的用例,但是我已经准备好了,可以扩展/修改opennlp源代码,假设可以调整maxent算法以这种方式工作。
如果这看起来太牵强,我请求建议通过生成与输入文件相对应的文档样本作为map reduce步骤的输出,并通过将它们输入文档分类程序trainer将它们还原为模型文件。
谢谢!
1条答案
按热度按时间6tdlim6h1#
我以前做过,我的方法不是让每个reducer生成模型,而是只生成格式正确的数据。与其使用类别作为键(将所有类别分开),只需使用单个键并使值成为正确的格式(cat sample newline),然后在单个reducer中,您可以将该数据作为(字符串)bytearrayinputstream读入并训练模型。当然这不是唯一的办法。你根本不需要修改opennlp就可以做到这一点。
简单地说,我的建议是使用一个行为如下的作业:
Map:读入数据,创建分类标签和样本对。使用名为“all”的键和上下文。用该键编写每一对。
reduce:使用stringbuilder将所有cat:sample对合并为适当的训练格式。将字符串转换为bytearrayinputstream并提供给训练api。把模型写在某处。
可能会出现这样的问题:示例数据太大,无法发送到一个节点。如果是这样,您可以将这些值写入nosqldb,然后从一个更强大的训练节点读入。或者您可以在Map器中使用随机化来生成许多键并构建许多模型,然后在分类时编写z Package 器来测试所有这些键的数据,并从每个键中获得最佳的z。。。。。有很多选择。hth公司