Vowpal Wabbit
Typedefs | Functions
LabelDict Namespace Reference

Typedefs

typedef v_hashmap< size_t, featureslabel_feature_map
 

Functions

constexpr size_t hash_lab (size_t lab) noexcept
 
void del_example_namespace (example &ec, namespace_index ns, features &fs)
 
void add_example_namespace (example &ec, namespace_index ns, features &fs)
 
void add_example_namespaces_from_example (example &target, example &source)
 
void del_example_namespaces_from_example (example &target, example &source)
 
void add_example_namespace_from_memory (label_feature_map &lfm, example &ec, size_t lab)
 
void del_example_namespace_from_memory (label_feature_map &lfm, example &ec, size_t lab)
 
void set_label_features (label_feature_map &lfm, size_t lab, features &fs)
 
void free_label_features (label_feature_map &lfm)
 
bool size_t_eq (const size_t &a, const size_t &b)
 

Typedef Documentation

◆ label_feature_map

Definition at line 8 of file label_dictionary.h.

Function Documentation

◆ add_example_namespace()

void LabelDict::add_example_namespace ( example ec,
namespace_index  ns,
features fs 
)

Definition at line 26 of file label_dictionary.cc.

References example_predict::feature_space, example_predict::indices, features::indicies, example::num_features, v_array< T >::push_back(), features::push_back(), v_array< T >::size(), features::size(), features::space_names, features::sum_feat_sq, example::total_sum_feat_sq, and features::values.

Referenced by add_example_namespace_from_memory(), add_example_namespaces_from_example(), CCB::inject_slot_features(), and size_t_eq().

27 {
28  bool has_ns = false;
29  for (size_t i = 0; i < ec.indices.size(); i++)
30  if (ec.indices[i] == (size_t)ns)
31  {
32  has_ns = true;
33  break;
34  }
35 
36  if (!has_ns)
37  ec.indices.push_back((size_t)ns);
38 
39  bool audit = fs.space_names.size() > 0;
40  features& add_fs = ec.feature_space[(size_t)ns];
41  for (size_t i = 0; i < fs.size(); ++i)
42  {
43  add_fs.push_back(fs.values[i], fs.indicies[i]);
44  if (audit)
45  add_fs.space_names.push_back(fs.space_names[i]);
46  }
48 
49  ec.num_features += fs.size();
50 }
v_array< namespace_index > indices
void push_back(feature_value v, feature_index i)
v_array< feature_index > indicies
the core definition of a set of features.
v_array< feature_value > values
size_t size() const
Definition: v_array.h:68
std::array< features, NUM_NAMESPACES > feature_space
size_t size() const
void push_back(const T &new_ele)
Definition: v_array.h:107
size_t num_features
Definition: example.h:67
v_array< audit_strings_ptr > space_names
float total_sum_feat_sq
Definition: example.h:71
float sum_feat_sq

◆ add_example_namespace_from_memory()

void LabelDict::add_example_namespace_from_memory ( label_feature_map lfm,
example ec,
size_t  lab 
)

Definition at line 76 of file label_dictionary.cc.

References add_example_namespace(), v_hashmap< K, V >::get(), hash_lab(), and features::size().

Referenced by CSOAA::do_actual_learning_oaa(), CSOAA::do_actual_learning_wap(), CSOAA::make_single_prediction(), and size_t_eq().

77 {
78  size_t lab_hash = hash_lab(lab);
79  features& res = lfm.get(lab, lab_hash);
80  if (res.size() == 0)
81  return;
82  add_example_namespace(ec, static_cast<unsigned char>('l'), res);
83 }
the core definition of a set of features.
size_t size() const
void add_example_namespace(example &ec, namespace_index ns, features &fs)
constexpr size_t hash_lab(size_t lab) noexcept

◆ add_example_namespaces_from_example()

void LabelDict::add_example_namespaces_from_example ( example target,
example source 
)

Definition at line 52 of file label_dictionary.cc.

References add_example_namespace(), constant_namespace, example_predict::feature_space, and example_predict::indices.

Referenced by VW::shared_feature_merger::predict_or_learn(), Search::single_prediction_LDF(), and size_t_eq().

53 {
54  for (namespace_index idx : source.indices)
55  {
56  if (idx == constant_namespace)
57  continue;
58  add_example_namespace(target, idx, source.feature_space[idx]);
59  }
60 }
v_array< namespace_index > indices
std::array< features, NUM_NAMESPACES > feature_space
unsigned char namespace_index
void add_example_namespace(example &ec, namespace_index ns, features &fs)
constexpr unsigned char constant_namespace
Definition: constant.h:22

◆ del_example_namespace()

void LabelDict::del_example_namespace ( example ec,
namespace_index  ns,
features fs 
)

Definition at line 9 of file label_dictionary.cc.

References example_predict::feature_space, example_predict::indices, v_array< T >::last(), example::num_features, v_array< T >::pop(), v_array< T >::size(), features::size(), features::sum_feat_sq, example::total_sum_feat_sq, and features::truncate_to().

Referenced by del_example_namespace_from_memory(), del_example_namespaces_from_example(), CCB::remove_slot_features(), and size_t_eq().

10 {
11  // print_update is called after this del_example_namespace,
12  // so we need to keep the ec.num_features correct,
13  // so shared features are included in the reported number of "current features"
14  // ec.num_features -= numf;
15  features& del_target = ec.feature_space[(size_t)ns];
16  assert(del_target.size() >= fs.size());
17  assert(ec.indices.size() > 0);
18  if (ec.indices.last() == ns && ec.feature_space[(size_t)ns].size() == fs.size())
19  ec.indices.pop();
21  ec.num_features -= fs.size();
22  del_target.truncate_to(del_target.size() - fs.size());
23  del_target.sum_feat_sq -= fs.sum_feat_sq;
24 }
v_array< namespace_index > indices
T pop()
Definition: v_array.h:58
the core definition of a set of features.
size_t size() const
Definition: v_array.h:68
std::array< features, NUM_NAMESPACES > feature_space
void truncate_to(const features_value_iterator &pos)
size_t size() const
size_t num_features
Definition: example.h:67
float total_sum_feat_sq
Definition: example.h:71
float sum_feat_sq
T last() const
Definition: v_array.h:57

◆ del_example_namespace_from_memory()

void LabelDict::del_example_namespace_from_memory ( label_feature_map lfm,
example ec,
size_t  lab 
)

Definition at line 85 of file label_dictionary.cc.

References del_example_namespace(), v_hashmap< K, V >::get(), hash_lab(), and features::size().

Referenced by CSOAA::do_actual_learning_oaa(), CSOAA::do_actual_learning_wap(), CSOAA::make_single_prediction(), and size_t_eq().

86 {
87  size_t lab_hash = hash_lab(lab);
88  features& res = lfm.get(lab, lab_hash);
89  if (res.size() == 0)
90  return;
91  del_example_namespace(ec, static_cast<unsigned char>('l'), res);
92 }
void del_example_namespace(example &ec, namespace_index ns, features &fs)
the core definition of a set of features.
size_t size() const
constexpr size_t hash_lab(size_t lab) noexcept

◆ del_example_namespaces_from_example()

void LabelDict::del_example_namespaces_from_example ( example target,
example source 
)

Definition at line 62 of file label_dictionary.cc.

References v_array< T >::begin(), constant_namespace, del_example_namespace(), v_array< T >::end(), example_predict::feature_space, example_predict::indices, and v_array< T >::size().

Referenced by VW::shared_feature_merger::predict_or_learn(), Search::single_prediction_LDF(), and size_t_eq().

63 {
64  if (source.indices.size() == 0) // making sure we can deal with empty shared example
65  return;
66  namespace_index* idx = source.indices.end();
67  idx--;
68  for (; idx >= source.indices.begin(); idx--)
69  {
70  if (*idx == constant_namespace)
71  continue;
72  del_example_namespace(target, *idx, source.feature_space[*idx]);
73  }
74 }
v_array< namespace_index > indices
void del_example_namespace(example &ec, namespace_index ns, features &fs)
T *& begin()
Definition: v_array.h:42
size_t size() const
Definition: v_array.h:68
std::array< features, NUM_NAMESPACES > feature_space
unsigned char namespace_index
T *& end()
Definition: v_array.h:43
constexpr unsigned char constant_namespace
Definition: constant.h:22

◆ free_label_features()

void LabelDict::free_label_features ( label_feature_map lfm)

Definition at line 102 of file label_dictionary.cc.

References v_hashmap< K, V >::clear(), v_array< T >::delete_v(), v_hashmap< K, V >::delete_v(), features::indicies, v_hashmap< K, V >::iterator(), v_hashmap< K, V >::iterator_get_value(), v_hashmap< K, V >::iterator_next(), features::space_names, and features::values.

Referenced by size_t_eq(), and CSOAA::ldf::~ldf().

103 {
104  void* label_iter = lfm.iterator();
105  while (label_iter != nullptr)
106  {
107  features* res = lfm.iterator_get_value(label_iter);
108  res->values.delete_v();
109  res->indicies.delete_v();
110  res->space_names.delete_v();
111 
112  label_iter = lfm.iterator_next(label_iter);
113  }
114  lfm.clear();
115  lfm.delete_v();
116 }
v_array< feature_index > indicies
the core definition of a set of features.
v_array< feature_value > values
v_array< audit_strings_ptr > space_names
void delete_v()
Definition: v_array.h:98

◆ hash_lab()

constexpr size_t LabelDict::hash_lab ( size_t  lab)
noexcept

Definition at line 7 of file label_dictionary.cc.

Referenced by add_example_namespace_from_memory(), del_example_namespace_from_memory(), and set_label_features().

7 { return 328051 + 94389193 * lab; }

◆ set_label_features()

void LabelDict::set_label_features ( label_feature_map lfm,
size_t  lab,
features fs 
)

Definition at line 94 of file label_dictionary.cc.

References v_hashmap< K, V >::contains(), hash_lab(), and v_hashmap< K, V >::put_after_get().

Referenced by CSOAA::process_label(), and size_t_eq().

95 {
96  size_t lab_hash = hash_lab(lab);
97  if (lfm.contains(lab, lab_hash))
98  return;
99  lfm.put_after_get(lab, lab_hash, fs);
100 }
constexpr size_t hash_lab(size_t lab) noexcept

◆ size_t_eq()

bool LabelDict::size_t_eq ( const size_t &  a,
const size_t &  b 
)
inline