我刚刚开始在mallet中使用SimpleTagger类。我的印象是它需要二进制功能。我想要实现的模型具有正整数值特征,我想知道如何在mallet中实现它。另外,我听说如果模型有意义,非二进制功能需要规范化。我很感激有关如何做到这一点的任何建议。
PS。是的,我知道有一个专门的邮件列表,但我已经等了近一天才能让我的订阅被批准才能发布。我只是匆忙。
答案 0 :(得分:1)
6年后的现在好了。如果您不再匆忙,可以查看Java API来创建实例。一个最小的例子:
private Instance createInstance(LabelAlphabet labelAlphabet){
// observations and labels should be equal size for linear chain CRFs
TokenSequence observations = new TokenSequence();
LabelSequence labels = new LabelSequence(labelAlphabet, n);
observations.add(createToken());
labels.add("idk, some target or something");
return new Instance(
observations,
label,
"myInstance",
null
);
}
private Token createToken() {
Token token = new Token("exampleToken");
// Note: properties are not used for computing (I think)
token.setProperty("SOME_PROPERTY", "hello");
// Any old double value
token.setFeatureValue(featureVal, 666.0);
// etc for more features ...
return token;
}
public static void main(String[] args){
// Note the first arg is false to denote we *do not* deal with binary features
InstanceList instanceList = new InstanceList(new TokenSequence2FeatureVectorSequence(false, false));
LabelAlphabet labelAlphabet = new LabelAlphabet();
// Converts our tokens to feature vectors
instances.addThruPipe(createInstance(labelAlphabet));
}
或者,如果您想继续使用SimpleTagger
,只需定义HAS_1_LETTER
,HAS_2_LETTER
等二进制功能,但这似乎很乏味。