-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathexample.h
132 lines (109 loc) · 3.82 KB
/
example.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright (c) by respective owners including Yahoo!, Microsoft, and
// individual contributors. All rights reserved. Released under a BSD (revised)
// license as described in the file LICENSE.
#pragma once
#include <cstdint>
#include "v_array.h"
#include "no_label.h"
#include "simple_label.h"
#include "multiclass.h"
#include "multilabel.h"
#include "cost_sensitive.h"
#include "cb.h"
#include "constant.h"
#include "feature_group.h"
#include "action_score.h"
#include "example_predict.h"
#include "conditional_contextual_bandit.h"
#include "ccb_label.h"
#include "slates_label.h"
#include "decision_scores.h"
#include <vector>
typedef union
{
no_label::no_label empty;
label_data simple;
MULTICLASS::label_t multi;
COST_SENSITIVE::label cs;
CB::label cb;
CCB::label conditional_contextual_bandit;
VW::slates::label slates;
CB_EVAL::label cb_eval;
MULTILABEL::labels multilabels;
} polylabel;
inline void delete_scalars(void* v)
{
v_array<float>* preds = (v_array<float>*)v;
preds->delete_v();
}
typedef union
{
float scalar;
v_array<float> scalars; // a sequence of scalar predictions
ACTION_SCORE::action_scores a_s; // a sequence of classes with scores. Also used for probabilities.
VW::decision_scores_t decision_scores;
uint32_t multiclass;
MULTILABEL::labels multilabels;
float prob; // for --probabilities --csoaa_ldf=mc
} polyprediction;
IGNORE_DEPRECATED_USAGE_START
struct example : public example_predict // core example datatype.
{
// input fields
polylabel l;
// output prediction
polyprediction pred;
float weight; // a relative importance weight for the example, default = 1
v_array<char> tag; // An identifier for the example.
size_t example_counter;
// helpers
size_t num_features; // precomputed, cause it's fast&easy.
float partial_prediction; // shared data for prediction.
float updated_prediction; // estimated post-update prediction.
float loss;
float total_sum_feat_sq; // precomputed, cause it's kind of fast & easy.
float confidence;
features*
passthrough; // if a higher-up reduction wants access to internal state of lower-down reductions, they go here
bool test_only;
bool end_pass; // special example indicating end of pass.
bool sorted; // Are the features sorted or not?
VW_DEPRECATED("in_use has been removed, examples taken from the pool are assumed to be in use if there is a reference to them. Standalone examples are by definition always in use.")
bool in_use = true;
};
IGNORE_DEPRECATED_USAGE_END
struct vw;
struct flat_example
{
polylabel l;
size_t tag_len;
char* tag; // An identifier for the example.
size_t example_counter;
uint64_t ft_offset;
float global_weight;
size_t num_features; // precomputed, cause it's fast&easy.
float total_sum_feat_sq; // precomputed, cause it's kind of fast & easy.
features fs; // all the features
};
flat_example* flatten_example(vw& all, example* ec);
flat_example* flatten_sort_example(vw& all, example* ec);
void free_flatten_example(flat_example* fec);
inline int example_is_newline(example const& ec)
{ // if only index is constant namespace or no index
if (!ec.tag.empty())
return false;
return ((ec.indices.empty()) || ((ec.indices.size() == 1) && (ec.indices.last() == constant_namespace)));
}
inline bool valid_ns(char c) { return !(c == '|' || c == ':'); }
inline void add_passthrough_feature_magic(example& ec, uint64_t magic, uint64_t i, float x)
{
if (ec.passthrough)
ec.passthrough->push_back(x, (FNV_prime * magic) ^ i);
}
#define add_passthrough_feature(ec, i, x) \
add_passthrough_feature_magic(ec, __FILE__[0] * 483901 + __FILE__[1] * 3417 + __FILE__[2] * 8490177, i, x);
typedef std::vector<example*> multi_ex;
namespace VW
{
void return_multiple_example(vw& all, v_array<example*>& examples);
} // namespace VW