38 shared_ptr<FastTextVectorizerToTorchMatrix> p_embd;
43 p_embd = std::make_shared<FastTextVectorizerToTorchMatrix>(params.
m_embeddings_fn);
44 assert(
nullptr != p_embd.get());
47 catch (
const exception& e)
49 cerr << e.what() << endl;
54 cerr <<
"Something wrong happened while loading \""
66 "*form,upos,feats,xpos,-Typo,-Foreign");
68 feat_extractor, 0,
"");
76 auto deprel2id = std::make_shared<std::map<std::string, int64_t>>();
80 while (adapter.
end() != it)
84 const std::string& rel = (*it).deprel();
85 if (deprel2id->find(rel) == deprel2id->end())
87 int64_t next_id =
static_cast<int64_t
>(deprel2id->size());
88 (*deprel2id)[rel] = next_id;
94 std::cerr <<
"Built deprel dictionary: " << deprel2id->size() <<
" labels" << std::endl;
97 std::vector<std::string> rel_class_names(deprel2id->size());
98 for (
const auto& kv : *deprel2id)
100 rel_class_names[kv.second] = kv.first;
106 std::vector<std::string> tasks = {
"arc" };
107 if (!deprel2id->empty())
109 tasks.push_back(
"rel");
119 train_iterator.
init();
130 BiRnnAndDeepBiaffineAttention model(
nullptr);
134 vector<embd_descr_t> embd_descr = train_iterator.
get_embd_descr();
135 embd_descr.emplace(embd_descr.begin(),
"raw", p_embd->dim(), 0);
136 vector<rnn_descr_t> rnn_descr;
155 if (!feat_dicts.empty())
157 input_dicts.push_back(feat_dicts.front());
158 for (
const auto& d : feat_dicts)
160 input_dicts.push_back(d);
163 model = BiRnnAndDeepBiaffineAttention(std::move(input_dicts),
171 static_cast<int64_t
>(deprel2id->size()),
176 model = BiRnnAndDeepBiaffineAttention();
182 torch::optim::Adam optimizer(model->parameters(),
194 shared_ptr<torch::optim::Optimizer> optimizer;
196 if (opt_name ==
"adam")
198 optimizer = make_shared<torch::optim::Adam>(model->parameters(),
202 else if (opt_name ==
"sgd")
204 optimizer = make_shared<torch::optim::SGD>(model->parameters(),
210 throw runtime_error(
"Unknown optimizer: " + opt_name);
213 model->train(params, tasks,
214 train_iterator, dev_iterator,
215 *optimizer, min_perf, device);
217 std::cerr <<
"train_graph_dp: Optimizer " << opt_name <<
" stopped at " << min_perf << std::endl;