如何使用Mallet进行序列标记任务?

时间:2016-06-23 22:19:02

标签: java sequence mallet

我正在尝试将mallet包合并到我的java代码中以进行序列标记任务。但是,我不知道如何仅使用mallet网站上的数据导入指南来完成它。任何人都可以帮助我吗?

我的第一个问题是关于序列数据的导入。我在网站上看到的唯一数据格式是InstanceList,但是,我们应该如何用数据结构描述序列。例如,如果我们有多个序列(A,B,C是标签): S1:A B B B B A B B; S2:B A B B B C; S3:C B A B B B. 我该如何将它们纳入训练数据? S1的InstanceList,S2的InstanceList和S3的InstanceList?然后我如何将它们完全作为训练数据?

我的第二个问题是关于如何将功能设置到实例中。我已经有了功能权重和标签,所以我可以通过简单的方式设置实例吗?例如,我对序列中的项目有特征[0.1,0.2,0.5,0.4,0.1],其标签为B,如何在不经过多个管道流程的情况下将特征设置到实例结构中?

此外,我计划将CRF模型用于序列标记任务。除了标签之外,我还希望得到整个序列的概率。我有可能获得这些信息吗?我在网站上看到了类似的内容:

    double logScore = new SumLatticeDefault(crf,inputSeq,outputSeq).getTotalWeight();
    double logZ = new SumLatticeDefault(crf,inputSeq).getTotalWeight();
    double prob = Math.exp(logScore - logZ);

这个会做我想做的吗?如果是,那么inputSeq和outputSeq在这里是什么?

1 个答案:

答案 0 :(得分:1)

序列标记任务的标准输入格式是每行一个标记,序列用空行分隔

feature1 feature2 feature3 ... A
feature2 feature4 feature6 ... B

feature1 feature3 feature8 ... C
feature2 feature3 feature4 ... C

在大多数情况下,CRF功能被假定为二进制。如果您具有已知值的功能,则可能需要编写一些其他代码。课程SvmLight2FeatureVectorAndLabel可能很有用。

inputSeq变量应为FeatureVectorSequenceoutputSeq变量应为LabelSequence。这些是Instance的数据和目标字段。