本文整理汇总了C++中CStateItem::nextactionindex方法的典型用法代码示例。如果您正苦于以下问题:C++ CStateItem::nextactionindex方法的具体用法?C++ CStateItem::nextactionindex怎么用?C++ CStateItem::nextactionindex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CStateItem
的用法示例。
在下文中一共展示了CStateItem::nextactionindex方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetOrUpdateStackScore
void
CDepParser::extract_features(const CDependencyParse &input0, const CDependencyParse &input1) {
CStateItem item;
unsigned action;
CPackedScoreType<SCORE_TYPE, action::kMax> empty;
// word and pos
m_lCache.clear();
#ifdef LABELED
m_lCacheLabel0.clear();
m_lCacheLabel1.clear();
#endif
for (int i = 0; i < input0.size(); ++ i) {
m_lCache.push_back(CTaggedWord<CTag, TAG_SEPARATOR>(input0[i].word,
input0[i].tag));
#ifdef LABELED
m_lCacheLabel0.push_back(CDependencyLabel(input0[i].label));
m_lCacheLabel1.push_back(CDependencyLabel(input1[i].label));
#endif
}
// make standard item
item.clear(); item.len_ = input0.size();
for (int i = 0; i < input0.size() * 4; ++ i) {
unsigned action = item.StandardMove(input0, input1
#ifdef LABELED
, m_lCacheLabel0, m_lCacheLabel1
#endif
);
GetOrUpdateStackScore(&item, empty, action, 1, 1);
item.Move(item.nextactionindex(), action);
}
}
示例2: next_correct_state
int
CDepParser::work(const bool is_train,
const CTwoStringVector & sentence,
CDependencyParse * retval0, CDependencyParse * retval1,
const CDependencyParse & oracle_tree0, const CDependencyParse & oracle_tree1,
int nbest,
SCORE_TYPE *scores) {
#ifdef DEBUG
clock_t total_start_time = clock();
#endif
const int length = sentence.size();
const int max_round = length * 4 + 1;
const int max_lattice_size = (kAgendaSize + 1) * max_round;
ASSERT(length < MAX_SENTENCE_SIZE,
"The size of sentence is too long.");
CStateItem * lattice = GetLattice(max_lattice_size);
CStateItem * lattice_wrapper[max_lattice_size];
CStateItem ** lattice_index[max_round];
CStateItem * correct_state = lattice;
for (int i = 0; i < max_lattice_size; ++ i) {
lattice_wrapper[i] = lattice + i;
lattice[i].len_ = length;
}
lattice[0].clear();
correct_state = lattice;
lattice_index[0] = lattice_wrapper;
lattice_index[1] = lattice_index[0] + 1;
static CPackedScoreType<SCORE_TYPE, action::kMax> packed_scores;
TRACE("Initialising the decoding process ...");
m_lCache.clear();
for (int i = 0; i < length; ++ i) {
m_lCache.push_back(CTaggedWord<CTag, TAG_SEPARATOR>(sentence[i].first,
sentence[i].second));
#ifdef LABELED
if (is_train) {
if (i == 0) { m_lCacheLabel0.clear(); m_lCacheLabel1.clear(); }
m_lCacheLabel0.push_back(CDependencyLabel(oracle_tree0[i].label));
m_lCacheLabel1.push_back(CDependencyLabel(oracle_tree1[i].label));
}
#endif
}
int num_results = 0;
int round = 0;
bool is_correct; // used for training to specify correct state in lattice
// loop with the next word to process in the sentence,
// `round` represent the generators, and the condidates should be inserted
// into the `round + 1`
for (round = 1; round < max_round; ++ round) {
if (lattice_index[round - 1] == lattice_index[round]) {
// there is nothing in generators, the proning has cut all legel
// generator. actually, in this kind of case, we should raise a
// exception. however to achieve a parsing tree, an alternative
// solution is go back to the previous round
WARNING("Parsing Failed!");
-- round;
break;
}
int current_beam_size = 0;
// loop over the generator states
// std::cout << "round : " << round << std::endl;
for (CStateItem ** q = lattice_index[round - 1];
q != lattice_index[round];
++ q) {
const CStateItem * generator = (*q);
m_Beam->clear(); packed_scores.reset();
GetOrUpdateStackScore(generator, packed_scores, action::kNoAction);
Transit(generator, packed_scores);
for (unsigned i = 0; i < m_Beam->size(); ++ i) {
CStateItem candidate; candidate = (*generator);
// generate candidate state according to the states in beam
int curIndex = candidate.nextactionindex();
candidate.Move(curIndex, m_Beam->item(i)->action);
candidate.score = m_Beam->item(i)->score;
candidate.previous_ = generator;
current_beam_size += InsertIntoBeam(lattice_index[round],
&candidate,
current_beam_size,
kAgendaSize);
}
}
//.........这里部分代码省略.........