2009-11-08 4 views
4

Je commence tout juste à utiliser la classe SimpleTagger dans un maillet. Mon impression est qu'il attend des fonctionnalités binaires. Le modèle que je veux implémenter possède des caractéristiques positives et je me demande comment l'implémenter dans un maillet. En outre, j'ai entendu dire que les fonctionnalités non binaires doivent être normalisées si le modèle doit avoir un sens. J'apprécierais toutes les suggestions sur la façon de le faire.Traiter des fonctions à valeurs entières pour CRF dans un maillet

ps. oui, je sais qu'il y a une liste de mail dédiée au maillet mais j'attends déjà presque un jour pour que mon abonnement soit approuvé pour pouvoir poster là. Je suis simplement pressé.

+0

Je n'ai pas utilisé SimpleTagger dans un maillet, mais vous pourriez essayer de convertir vos fonctions pondérées entières en binaires. Vous pouvez diviser une fonction 'x' en' n' nouvelles entités binaires représentant des ensembles de valeurs. Tous seraient faux sauf le seau auquel appartient le poids de 'x'. Je n'ai aucune idée de comment ça marcherait .. – ealdent

Répondre

1

Eh bien c'est 6 ans plus tard maintenant. Si vous n'êtes plus pressé, vous pouvez consulter l'API Java pour créer vos instances. Un exemple minimal:

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)); 
} 

Ou, si vous voulez continuer à utiliser SimpleTagger, il suffit de définir les caractéristiques binaires comme HAS_1_LETTER, HAS_2_LETTER, etc, bien que cela semble fastidieux.

Questions connexes