Hi all,

After snuffing out what I think is all of the steps required to add a
new feature function to the Moses decoder and training system, I made
a list of them. Perhaps it is helpful for others. Moses could
certainly use more score producers to increase the count from anemic 5
:-)

--Jason

HOWTO: add a new feature function to Moses

==MOSES decoder libary (moses/src/)==
* Write ScoreProducer subclass, say MyScoreProducer. For example,
implement these methods:
   - MyScoreProducer(ScoreIndexManager &scoreIndexManager);
            + Calls scoreIndexManager.AddScoreProducer(this).
   - std::vector<float> CalcMyScore(Hypothesis* hypothesis) const;
            + Calculates the value of the feature function.
   - size_t GetNumScoreComponents() const;
   - std::string GetScoreProducerDescription() const;

* Add MyScoreProducer private member m_myScoreProducer to StaticData
and GetMyScoreProducer() method.
* Add m_weightMyScore float private member to StaticData and
GetWeightMyScore() method.
* In Hypothesis::CalcScore(), calculate feature function score using
MyScoreProducer::CalcMyScore() and incorporate it with
m_scoreBreakdown.PlusEquals().
* In Parameter::Parameter(), AddParam("weight-m", "m", "weight for my
score") where m is some letter.
* In StaticData::LoadData(), load m_weightMyScore with m_parameter->GetParam().
* In StaticData::LoadData(), create MyScoreProducer, passing in
m_scoreIndexManager, and add its weights to m_allWeights. These two
steps must take place exactly right after each other.
* In StaticData::~StaticData(), delete m_myScoreProducer.

==MOSES decoder command-line program (moses-cmd/src/)==
* In moses-cmd/src/IOStream::OutputNBestList(), output "m: " followed
by your weights, separated by spaces.

==MOSES training scripts (scripts/training/)==
* In train-factored-phrase-model.perl, change create_ini() to output
default weights for weight-m.
* Add in mert-moses.pl something like
"m"  => [ [ 1.0, 0.0, 2.0 ] ], # my score
to _one_ of $default_triples or $additional_triples.
* Add in mert-moses.pl "m=weight-m" to $ABBR_FULL_MAP.
_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support

Reply via email to