最大熵工具包 处理流程解析~~~总算理了一个流程,真懒死了~~~
0,输入:
wordtrain.txt 训练语料如: 天津港 ( 2 项目 ) m NN 2 n vn (类别2的上下文) 1,进行特征提取 perl yin_features.pl wordtrain.txt yin_features /*yin_events.info*/ 比如提取 1,默认类别 2,左边第一个词 3,左边第二个词 4,右边第一个词 5,右边第二个词 6,左边两个单词 7,右边两个单词 8,左右两个单词 9,左边第一个词性 10,左边第二个词性 11,右边第一个词性 12,右边第二个词性 13,左边两个单词性 14,右边两个单词性 15,左右两个单词性 生成的文件格式: yin_features文件: 4807 default 2 1 word-2=远远 1 [出现总次数] [特征] [类别] /* yin_events.info文件: NumPredictions: 2 NumEvents: 8702 记录类别数目,和事件数目 */ 2,对yin_features进行处理,得到用于训练的特征文件yin_contexts.fmap和yin_contexts perl yin_contexts.fmap.pl yin_features yin_contexts.fmap yin_contexts
处理过程: 1),对yin_features进行统计,将所有不重复且特征数目大于阈值的特征放入哈希表,写出文件yin_contexts 2),得到yin_contexts中对应每个单独特征所涉及的类别文件yin_contexts.fmap 生成的文件格式: yin_contexts文件: default word-2=从 [单个特征罗列] yin_contexts.fmap文件: NumContexts= 2043 2 0 1 2 0 1 2 0 1 [总特征数目,实际上就是yin_contexts文件的行数] [该行特征涉及的类数目][类号...] 3,处理事件,将训练语料转化成事件格式
perl yin_events.pl yin_contexts wordtrain.txt yin_events 生成文件格式: yin_events文件: 根据wordtrain.txt的每行生成一行数据 [类别][涉及的特征数目][所涉及的特征在yin_contexts中对应的行数罗列...] 类别从0开始编号 4,使用工具包开始训练参数(GIS迭代) train_gis yin_contexts.fmap yin_events 30 yin 生成两个文件yin.info和yin.param 文件格式分别为: yin.info文件: NumParams: 2872 //yin.param的参数个数 NumPredictions: 2 //类别个数 NumEvents: 8702//yin_events行数,即训练数据的规模 CorrectionNormal: 15// CorrectionParam: -1.30600332411e-001//缺省的概率值 GISModelType: CPP_GIS_MODEL//模型名称 yin.param文件: -3.47560348535e-002 +3.02209807893e-002 +5.57848784281e-001 -3.85557428936e-002 +3.75768796786e-001 yin_contexts.fmap文件中每一行的特征对应类别的概率,这里一行如果对应有多个类别 将会对应yin.param文件中的多行. 5,将训练得到的结果用于测试
perl result.pl yin_contexts yin_contexts.fmap yin.param yin.info wordtest.txt yin_contexts yin_contexts.fmap yin.param这三个文件用于找到生成不同类别时的概率 yin.info为特征在文件yin_contexts找不到时的缺省概率. 处理细节: 对测试数据的每一行中的所有特征到不同的类别计算出概率 相同的类别概率和相加,取出概率最大的类作为我们最后的类别预测. |
|