LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
dict_embd_vectorizer.h
Go to the documentation of this file.
1// Copyright 2021 CEA LIST
2// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
3//
4// SPDX-License-Identifier: MIT
5
6#ifndef DEEPLIMA_SRC_INFERENCE_EIGEN_DICT_EMBD_VECTORIZER_H
7#define DEEPLIMA_SRC_INFERENCE_EIGEN_DICT_EMBD_VECTORIZER_H
8
9#include <vector>
10#include <cassert>
11
12namespace deeplima
13{
14
15template <class DH, class D, class Matrix>
16class DictEmbdVectorizer : public Matrix
17{
18public:
20
21 // must be called before init
22 void set_dicts(const DH& dicts)
23 {
24 m_dicts = dicts;
25 }
26
27 void init(const DH& dicts, int64_t max_time, uint64_t max_feat)
28 {
29 assert(dicts.size() == max_feat);
30 m_dicts = dicts;
31 m_pos.reserve(max_feat);
32 Eigen::Index dim = 0;
33 for ( const auto& d : m_dicts )
34 {
35 m_pos.push_back(dim);
36 dim += d.dim();
37 }
38 Matrix::init(max_time, dim);
39 }
40
41 void init(int64_t max_time, uint64_t max_feat)
42 {
43 assert(m_dicts.size() > 0);
44 assert(m_dicts.size() == max_feat);
45 m_pos.reserve(max_feat);
46 Eigen::Index dim = 0;
47 for ( const auto& d : m_dicts )
48 {
49 m_pos.push_back(dim);
50 dim += d.dim();
51 }
52 Matrix::init(max_time, dim);
53 }
54
55 inline void set(uint64_t time, uint64_t feat, typename D::value_t value)
56 {
57 assert(m_dicts.size() == m_pos.size());
58 assert(feat < m_dicts.size());
59 m_dicts[feat].get(value, Matrix::get_tensor(), time, m_pos[feat]);
60 }
61
62protected:
64 std::vector<Eigen::Index> m_pos;
65};
66
67} // namespace deeplima
68
69#endif
void init(const DH &dicts, int64_t max_time, uint64_t max_feat)
void set(uint64_t time, uint64_t feat, typename D::value_t value)
std::vector< Eigen::Index > m_pos
void init(int64_t max_time, uint64_t max_feat)