谈谈opennlp maxent

背景:最大熵模型可用于文本分类

  • 简介

maxent是个非常不错的最大熵java实现
主要的功能还是分为两部分特征提取和GIS迭代算法

1)特征提取采取了简单将分词作为特征,目前只支持单个字段,但如过要实现多字段特征也是很简单的事情。

2)GIS迭代算法没什么好说的,大量的数学推导,从数学上保证了解的唯一性和迭代收敛

  • 流程

1)整个训练流程就是

读取每行文本---》分词成特征----》迭代计算----》最后生成每个特征对于输出分类的权重


2)整个分类过程就是

读取样本(一行)---》分词成特征-----》根据每个特征在输出分类的权重,计算该样本在输出各分类中的概率

  • 实践

我以3w个真实样本作为训练,1.5w是垃圾,1.5w是非垃圾
另外1w个真实样本作为测试,5k垃圾,5k非垃圾

共产生了49838个特征,6792个仅出现在垃圾中,7797个特征在垃圾和非垃圾都出现,35249个特征仅出现在非垃圾中

模型文件大小:1.9M

实际垃圾 实际非垃圾
机审垃圾 4766 6
机审非垃圾 234 4994


垃圾召回率:95.32%
准确率: 99.87%

通过100个并发,每个并发10000条,耗时77s,性能还是可以接受的。

你可能感兴趣的:(算法)