4

我刚开始在槌中使用 SimpleTagger 类。我的印象是它需要二进制特征。我要实现的模型具有正整数值特征,我想知道如何在 mallet 中实现它。另外,我听说如果模型要有意义,就需要对非二进制特征进行归一化。我将不胜感激有关如何执行此操作的任何建议。

附言。是的,我知道有一个专门的槌邮件列表,但我已经等了将近一天才能让我的订阅获得批准,以便能够在那里发帖。我只是很着急。

4

1 回答 1

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_LETTERHAS_2_LETTER等,尽管这看起来很乏味。

于 2016-01-31T15:24:39.957 回答