in src/doc_data.cpp [131:186]
void LayerDataHandler::convert(
const ParseResults& example,
ParseResults& rslt) const {
rslt.weight = example.weight;
rslt.LHSTokens.clear();
rslt.RHSTokens.clear();
if (args_->trainMode == 0) {
assert(example.LHSTokens.size() > 0);
assert(example.RHSFeatures.size() > 0);
insert(rslt.LHSTokens, example.LHSTokens, args_->dropoutLHS);
auto idx = rand() % example.RHSFeatures.size();
insert(rslt.RHSTokens, example.RHSFeatures[idx], args_->dropoutRHS);
} else {
assert(example.RHSFeatures.size() > 1);
if (args_->trainMode == 1) {
// pick one random rhs as label, the rest becomes lhs features
auto idx = rand() % example.RHSFeatures.size();
for (unsigned int i = 0; i < example.RHSFeatures.size(); i++) {
if (i == idx) {
insert(rslt.RHSTokens, example.RHSFeatures[i], args_->dropoutRHS);
} else {
insert(rslt.LHSTokens, example.RHSFeatures[i], args_->dropoutLHS);
}
}
} else
if (args_->trainMode == 2) {
// pick one random rhs as lhs, the rest becomes rhs features
auto idx = rand() % example.RHSFeatures.size();
for (unsigned int i = 0; i < example.RHSFeatures.size(); i++) {
if (i == idx) {
insert(rslt.LHSTokens, example.RHSFeatures[i], args_->dropoutLHS);
} else {
insert(rslt.RHSTokens, example.RHSFeatures[i], args_->dropoutRHS);
}
}
} else
if (args_->trainMode == 3) {
// pick one random rhs as input
auto idx = rand() % example.RHSFeatures.size();
insert(rslt.LHSTokens, example.RHSFeatures[idx], args_->dropoutLHS);
// pick another random rhs as label
unsigned int idx2;
do {
idx2 = rand() % example.RHSFeatures.size();
} while (idx == idx2);
insert(rslt.RHSTokens, example.RHSFeatures[idx2], args_->dropoutRHS);
} else
if (args_->trainMode == 4) {
// the first one as lhs and the second one as rhs
insert(rslt.LHSTokens, example.RHSFeatures[0], args_->dropoutLHS);
insert(rslt.RHSTokens, example.RHSFeatures[1], args_->dropoutRHS);
}
}
}