Came up with something like that, still ugly, but works. num-features
can be specified too, and it will complain if it does not match the
length of "scores"
std::string ParseScores(const std::string &line, const std::string&
defaultScores) {
vector<string> toks = Tokenize(line);
UTIL_THROW_IF2(toks.empty(), "Empty line");
for (size_t i = 1; i < toks.size(); ++i) {
std::vector<std::string> args = TokenizeFirstOnly(toks[i], "=");
UTIL_THROW_IF2(args.size() != 2,
"Incorrect format for feature function arg: " << toks[i]);
if (args[0] == "scores") {
return args[1];
}
}
return defaultScores;
}
EditOps::EditOps(const std::string &line)
: StatelessFeatureFunction(ParseScores(line, "mdis").size(), line),
m_factorType(0), m_chars(false), m_scores(ParseScores(line, "mdis"))
{
std::cerr << "Initializing EditOps feature.." << std::endl;
ReadParameters();
}
W dniu 14.06.2014 20:28, Hieu Hoang pisze:
On 14 June 2014 19:19, Marcin Junczys-Dowmunt <[email protected]
<mailto:[email protected]>> wrote:
Actually, I do know it at construction time. For instance I
specify a string "scores=mdis" in the ini, every character in the
value corresponds to one type of score, so I have 4 feature
scores. Setting again "num-features=4" is redundant now (I guess I
can still do that, but I don't like it). I see the number of
scores is set in the low-level function ParseLine in the
FeatureFunction class, should I override ParseLine in the
inherited class then?
let's not override ParseLine yet. I can't see what's wrong with
num-features=4
We need some kind of consistency
W dniu 14.06.2014 20:11, Hieu Hoang pisze:
the number of scores must be set in the feature function
constructor, there's no functionality to change it once its set
You might be better off using sparse features if you don't
know how many scores you have at construction time
On 14/06/14 09:17, Marcin Junczys-Dowmunt wrote:
Hi,
what's the trick for defining a feature function with a
variable number
of scores based on custom parameters in the ini-file?
Just setting m_numScoreComponents = 2 in SetParameter(...)
doesn't work.
It seems the number of features is registered somewhere on
object
creation as I get the followiing message:
Exception: moses/ScoreComponentCollection.cpp:242 in void
Moses::ScoreComponentCollection::Assign(const
Moses::FeatureFunction*,
const std::vector<float>&) threw util::Exception'.
Feature function EditOps0 specified 1 dense scores or
weights. Actually
has 2
Thanks,
Marcin
_______________________________________________
Moses-support mailing list
[email protected] <mailto:[email protected]>
http://mailman.mit.edu/mailman/listinfo/moses-support
--
Hieu Hoang
Research Associate
University of Edinburgh
http://www.hoang.co.uk/hieu
_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support