├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── config ├── conf.py ├── conf1.py ├── conf1 │ └── feature_config.json ├── conf_criteo.py ├── conf_csv.py ├── conf_libsvm.py ├── criteo │ ├── feat_id_dict │ │ ├── C1.dict │ │ ├── C10.dict │ │ ├── C11.dict │ │ ├── C12.dict │ │ ├── C13.dict │ │ ├── C14.dict │ │ ├── C15.dict │ │ ├── C16.dict │ │ ├── C17.dict │ │ ├── C18.dict │ │ ├── C19.dict │ │ ├── C2.dict │ │ ├── C20.dict │ │ ├── C21.dict │ │ ├── C22.dict │ │ ├── C23.dict │ │ ├── C24.dict │ │ ├── C25.dict │ │ ├── C26.dict │ │ ├── C3.dict │ │ ├── C4.dict │ │ ├── C5.dict │ │ ├── C6.dict │ │ ├── C7.dict │ │ ├── C8.dict │ │ ├── C9.dict │ │ ├── I1.dict │ │ ├── I10.dict │ │ ├── I11.dict │ │ ├── I12.dict │ │ ├── I13.dict │ │ ├── I2.dict │ │ ├── I3.dict │ │ ├── I4.dict │ │ ├── I5.dict │ │ ├── I6.dict │ │ ├── I7.dict │ │ ├── I8.dict │ │ ├── I9.dict │ │ ├── num_static.C1.dict │ │ ├── num_static.C10.dict │ │ ├── num_static.C11.dict │ │ ├── num_static.C12.dict │ │ ├── num_static.C13.dict │ │ ├── num_static.C14.dict │ │ ├── num_static.C15.dict │ │ ├── num_static.C16.dict │ │ ├── num_static.C17.dict │ │ ├── num_static.C18.dict │ │ ├── num_static.C19.dict │ │ ├── num_static.C2.dict │ │ ├── num_static.C20.dict │ │ ├── num_static.C21.dict │ │ ├── num_static.C22.dict │ │ ├── num_static.C23.dict │ │ ├── num_static.C24.dict │ │ ├── num_static.C25.dict │ │ ├── num_static.C26.dict │ │ ├── num_static.C3.dict │ │ ├── num_static.C4.dict │ │ ├── num_static.C5.dict │ │ ├── num_static.C6.dict │ │ ├── num_static.C7.dict │ │ ├── num_static.C8.dict │ │ ├── num_static.C9.dict │ │ ├── num_static.I1.dict │ │ ├── num_static.I10.dict │ │ ├── num_static.I11.dict │ │ ├── num_static.I12.dict │ │ ├── num_static.I13.dict │ │ ├── num_static.I2.dict │ │ ├── num_static.I3.dict │ │ ├── num_static.I4.dict │ │ ├── num_static.I5.dict │ │ ├── num_static.I6.dict │ │ ├── num_static.I7.dict │ │ ├── num_static.I8.dict │ │ └── num_static.I9.dict │ └── feature_config.json ├── make_feat_conf.py ├── make_feat_conf.sh ├── pred.conf └── train.conf ├── data ├── criteo_sample.txt ├── criteo_sampled_data.csv.tar.xz ├── movielens_sample.txt └── readme.md ├── docs ├── feature_config.md ├── pics │ ├── AFM.png │ ├── AFN.jpg │ ├── DIFM.png │ ├── DIN.png │ ├── DeepFM.png │ ├── FNN.png │ ├── IFM.png │ ├── InteractingLayer.png │ ├── NFM.png │ ├── PNN.png │ ├── criteo_sample.png │ ├── movielens_sample.png │ └── movielens_sample_with_genres.png └── predict_python │ ├── fm_pred_example.py │ ├── fm_pred_lib_guide.md │ └── fm_pred_lib_guide_zh.md ├── scripts ├── killall.sh └── metric.py ├── src ├── feature │ ├── common_feat.h │ ├── dense_feat.cc │ ├── dense_feat.h │ ├── feat_manager.cc │ ├── feat_manager.h │ ├── sparse_feat.cc │ ├── sparse_feat.h │ ├── varlen_sparse_feat.cc │ └── varlen_sparse_feat.h ├── predict │ ├── lib_fm_pred.cc │ ├── lib_fm_pred.h │ └── predict.cc ├── solver │ ├── adagrad │ │ ├── adagrad_param.h │ │ └── adagrad_solver.h │ ├── adam │ │ ├── adam_param.h │ │ └── adam_solver.h │ ├── base_solver.cc │ ├── base_solver.h │ ├── ftrl │ │ ├── ftrl_param.h │ │ └── ftrl_solver.h │ ├── parammeter_container.h │ ├── rmsprop │ │ ├── rmsprop_param.h │ │ └── rmsprop_solver.h │ ├── sgdm │ │ ├── sgdm_param.h │ │ └── sgdm_solver.h │ ├── solver_factory.cc │ └── solver_factory.h ├── synchronize │ ├── atomic_lock.h │ ├── folly_small_locks.h │ ├── gcc_spin_lock.h │ ├── mutex_adapter.h │ ├── null_mutex.h │ ├── null_rwmutex.h │ ├── pthread_cond_mutex.h │ ├── pthread_mutex.h │ └── pthread_rwlock.h ├── tests │ ├── hash_test │ │ ├── MurmurHash3.cpp │ │ ├── MurmurHash3.h │ │ ├── find_prime.cc │ │ ├── hash.h │ │ ├── hash_conflict_test.cc │ │ ├── readme.md │ │ └── test.sh │ ├── test_dict.cc │ ├── test_dict1.dict │ ├── test_dict2.dict │ ├── test_dict3.dict │ ├── test_distribution.cc │ ├── test_fea_config.cc │ ├── test_fea_manager.cc │ └── test_sync.cc ├── train │ ├── evalution.h │ ├── shulffer.h │ ├── train.cc │ ├── train_opt.cc │ ├── train_opt.h │ └── train_worker.h └── utils │ ├── Hash.h │ ├── args_parser.h │ ├── base.h │ ├── busy_consumer_queue.h │ ├── busy_produer_queue.h │ ├── console_color.h │ ├── dict.hpp │ ├── list.h │ ├── numeric.h │ ├── stopwatch.h │ ├── str_utils.h │ └── utils.h ├── third_party ├── cityhash │ ├── COPYING │ ├── Makefile.am │ ├── Makefile.in │ ├── NEWS │ ├── README │ ├── aclocal.m4 │ ├── config.guess │ ├── config.h.in │ ├── config.sub │ ├── configure │ ├── configure.ac │ ├── depcomp │ ├── install-sh │ ├── ltmain.sh │ ├── m4 │ │ ├── libtool.m4 │ │ ├── ltoptions.m4 │ │ ├── ltsugar.m4 │ │ ├── ltversion.m4 │ │ └── lt~obsolete.m4 │ ├── missing │ └── src │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── city-test.cc │ │ ├── city.cc │ │ ├── city.h │ │ └── citycrc.h ├── murmur_hash3 │ ├── MurmurHash3.cc │ └── MurmurHash3.h └── nlohmann │ └── json.hpp └── train.sh /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | # Projects 35 | .vscode 36 | 37 | 38 | *.log 39 | log/ 40 | 41 | config/feature_config* 42 | config/feat_id_dict 43 | 44 | __pycache__ 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 tangwang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ifdef DIM 2 | dim=$(DIM) 3 | endif 4 | ifndef dim 5 | dim=15 6 | endif 7 | 8 | SRC = src/feature/dense_feat.cc \ 9 | src/feature/sparse_feat.cc \ 10 | src/feature/varlen_sparse_feat.cc \ 11 | src/feature/feat_manager.cc \ 12 | src/train/train_opt.cc \ 13 | src/solver/solver_factory.cc \ 14 | src/solver/base_solver.cc \ 15 | third_party/murmur_hash3/MurmurHash3.cc 16 | 17 | SRC_TRAIN = $(SRC) src/train/train.cc 18 | 19 | SRC_PRED = $(SRC) src/predict/predict.cc 20 | 21 | SRC_LIB_HEADER = src/predict/lib_fm_pred.cc 22 | INCLUDE_LIB_HEADER = src/predict/lib_fm_pred.h 23 | SRC_PRED_LIB = $(SRC) $(SRC_LIB_HEADER) 24 | 25 | DEPEND_INCLUDES = ${wildcard src/feature/*.h} \ 26 | ${wildcard src/solver/*.h} \ 27 | ${wildcard src/solver/ftrl/*.h} \ 28 | ${wildcard src/solver/adam/*.h} \ 29 | ${wildcard src/solver/sgdm/*.h} \ 30 | ${wildcard src/solver/adagrad/*.h} \ 31 | ${wildcard src/utils/*.h} \ 32 | ${wildcard third_party/*.h} \ 33 | ${wildcard src/train/*.h} \ 34 | 35 | OBJS_TRAIN = ${patsubst %.cc, %.o, ${SRC_TRAIN}} 36 | OBJS_PRED = ${patsubst %.cc, %.o, ${SRC_PRED}} 37 | OBJS_PRED_LIB = ${patsubst %.cc, %.sharedO, ${SRC_PRED_LIB}} 38 | DEBUG_OBJS_TRAIN = ${patsubst %.cc, %.debugO, ${SRC_TRAIN}} 39 | 40 | # all : bin/train bin/train_debug lib/fm_pred.so bin/predict 41 | all : bin/train bin/predict lib/fm_pred.so 42 | 43 | CC = g++ 44 | LIB= -lpthread 45 | INC = -I./third_party -I./src 46 | DEBUG_CCFLAGS = -g -O0 -fno-inline -std=c++11 -Wall -fmax-errors=4 -DDIM=${dim} -Wno-unused-local-typedefs -Wno-unused-value -Wno-attributes 47 | LIB_CCFLAGS = -fPIC -shared -O3 -funroll-loops -std=c++11 -Wall -fmax-errors=4 -DDIM=${dim} -Wno-unused-local-typedefs -Wno-attributes -Wno-unused-value -march=native 48 | CCFLAGS = -g -O3 -funroll-loops -std=c++11 -Wall -fmax-errors=4 -DDIM=${dim} -Wno-unused-local-typedefs -Wno-attributes -Wno-unused-value -march=native 49 | 50 | lib/fm_pred.so: ${OBJS_PRED_LIB} 51 | -mkdir -p lib/include 52 | cp $(INCLUDE_LIB_HEADER) lib/include/ 53 | ${CC} -fPIC -shared ${LIB} ${OBJS_PRED_LIB} -o $@ 54 | 55 | bin/train: ${OBJS_TRAIN} 56 | -mkdir -p bin 57 | ${CC} ${LIB} ${OBJS_TRAIN} -o $@ 58 | @echo "Compile done." 59 | 60 | bin/predict: ${OBJS_PRED} 61 | -mkdir -p bin 62 | ${CC} ${LIB} ${OBJS_PRED} -o $@ 63 | @echo "Compile done." 64 | 65 | bin/train_debug: ${DEBUG_OBJS_TRAIN} 66 | -mkdir -p bin 67 | ${CC} ${LIB} ${DEBUG_OBJS_TRAIN} -o $@ 68 | @echo "Compile DEBUG version done." 69 | 70 | $(OBJS_TRAIN):%.o:%.cc ${DEPEND_INCLUDES} 71 | @echo "Compiling $< ==> $@" 72 | ${CC} ${CCFLAGS} ${INC} -c $< -o $@ 73 | 74 | $(DEBUG_OBJS_TRAIN):%.debugO:%.cc ${DEPEND_INCLUDES} 75 | @echo "Compiling $< ==> $@" 76 | ${CC} ${DEBUG_CCFLAGS} -D_DEBUG_VER_ ${INC} -c $< -o $@ 77 | 78 | $(OBJS_PRED_LIB):%.sharedO:%.cc ${DEPEND_INCLUDES} 79 | @echo "Compiling $< ==> $@" 80 | ${CC} ${LIB_CCFLAGS} ${INC} -c $< -o $@ 81 | 82 | $(OBJS_PRED):%.o:%.cc ${DEPEND_INCLUDES} 83 | @echo "Compiling $< ==> $@" 84 | ${CC} ${CCFLAGS} ${INC} -c $< -o $@ 85 | 86 | clean: 87 | @rm -f bin/* 88 | @rm -rf lib/* 89 | @rm -f ${OBJS_TRAIN} 90 | @rm -f ${DEBUG_OBJS_TRAIN} 91 | @rm -f ${OBJS_PRED} 92 | @rm -f ${OBJS_PRED_LIB} 93 | @echo "Clean object files done." 94 | 95 | @rm -f *~ 96 | @echo "Clean tempreator files done." 97 | 98 | @rm -f bin/train 99 | @rm -f bin/train_debug 100 | @echo "Clean target files done." 101 | 102 | @echo "Clean done." 103 | 104 | -------------------------------------------------------------------------------- /config/conf.py: -------------------------------------------------------------------------------- 1 | # 训练数据格式,支持csv和libsvm 2 | # label>0为正样本,否则视为负样本。特征取值支持连续特征(float), 离散特征(int / string), 序列特征(list of int / string) 3 | data_formart = "csv" 4 | 5 | # 如果是csv格式,通过csv_columns设定列名,或者设置csv_columns=[],将输入数据的第一行读取为列名 6 | csv_columns = ['label', 'book_prefer', 'cate1_prefer', 'cate2_prefer', 'tag_prefer', 'uid', 'tid', 'ttype', 'bid', 'name', 'author', 'category1', 'category2', 'tags', 'freshness', 'stats', 'tenant_stats', 'type_stats', 'recall', 'tid_bid', 'tid_category1', 'tid_category2', 'tid_tags', 'ttype_bid', 'ttype_category1', 'ttype_category2', 'ttype_tags'] 7 | 8 | # 对于csv和libsvm都需要配置域分隔符和序列特征中多个值的分隔符 9 | feat_sep = ',' 10 | feat_values_sep = '|' 11 | 12 | dense_feat_list = [] # 配置你的连续特征 13 | sparse_id_feat_list = [] # 数值型离散特征 14 | sparse_str_feat_list = [] # 字符串类型离散特征 15 | varlen_sparse_id_feat_list = [] # 数值型序列特征 16 | varlen_sparse_str_feat_list =['book_prefer', 'cate1_prefer', 'cate2_prefer', 'tag_prefer', 'uid', 'tid', 'ttype', 'bid', 'name', 'author', 'category1', 'category2', 'tags', 'freshness', 'stats', 'tenant_stats', 'type_stats', 'recall', 'tid_bid', 'tid_category1', 'tid_category2', 'tid_tags', 'ttype_bid', 'ttype_category1', 'ttype_category2', 'ttype_tags'] # 字符串类型序列特征 17 | 18 | # 对于连续特征,配置等宽分桶和等频分桶的分桶数,以如下配置为例,则一个连续型特征会按等宽分桶和等频分桶分别离散化为2个ID特征,共4个ID特征 19 | dense_feat_wide_splits = [10, 25] 20 | dense_feat_freq_splits = [10, 25] 21 | 22 | default_value_of_dense_feat = 0 23 | 24 | min_freq_for_sparse_feat_dict = 0 # 特征出现次数大于该值时,才加入特征ID映射词典 25 | 26 | seq_feat_max_len = 30 27 | seq_feat_pooling_type = "sum" # 暂时只支持sum和avg 28 | 29 | # 配置离散特征的ID映射方式,支持dict/dynamic_dict/hash/orig_id 30 | sparse_feat_mapping_type = "hash" 31 | -------------------------------------------------------------------------------- /config/conf1.py: -------------------------------------------------------------------------------- 1 | # 训练数据格式,支持csv和libsvm 2 | # label>0为正样本,否则视为负样本。特征取值支持连续特征(float), 离散特征(int / string), 序列特征(list of int / string) 3 | data_formart = "csv" 4 | 5 | # 如果是csv格式,通过csv_columns设定列名,或者设置csv_columns=[],将输入数据的第一行读取为列名 6 | csv_columns = ['label', 'f1', 'f2'] 7 | 8 | # 对于csv和libsvm都需要配置域分隔符和序列特征中多个值的分隔符 9 | feat_sep = ',' 10 | feat_values_sep = '|' 11 | 12 | dense_feat_list = [] # 配置你的连续特征 13 | sparse_id_feat_list = [] # 数值型离散特征 14 | sparse_str_feat_list = [] # 字符串类型离散特征 15 | varlen_sparse_id_feat_list = [] # 数值型序列特征 16 | varlen_sparse_str_feat_list =['book_prefer', 'cate1_prefer', 'cate2_prefer', 'tag_prefer', 'uid_with_profiles', 'tid', 'ttype', 'bid', 'name', 'author', 'category1', 'category2', 'tags', 'freshness', 'stats', 'tenant_stats', 'type_stats', 'recall', 'tid_bid', 'tid_category1', 'tid_category2', 'tid_tags', 'ttype_bid', 'ttype_category1', 'ttype_category2', 'ttype_tags'] # 字符串类型序列特征 17 | 18 | # 对于连续特征,配置等宽分桶和等频分桶的分桶数,以如下配置为例,则一个连续型特征会按等宽分桶和等频分桶分别离散化为2个ID特征,共4个ID特征 19 | dense_feat_wide_splits = [10, 25] 20 | dense_feat_freq_splits = [10, 25] 21 | 22 | default_value_of_dense_feat = 0 23 | 24 | min_freq_for_sparse_feat_dict = 0 # 特征出现次数大于该值时,才加入特征ID映射词典 25 | 26 | seq_feat_max_len = 30 27 | seq_feat_pooling_type = "sum" # 暂时只支持sum和avg 28 | 29 | # 配置离散特征的ID映射方式,支持dict/dynamic_dict/hash/orig_id 30 | sparse_feat_mapping_type = "hash" 31 | -------------------------------------------------------------------------------- /config/conf1/feature_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "dense_features": [], 3 | "sparse_features": [], 4 | "varlen_sparse_features": [ 5 | { 6 | "name": "f1", 7 | "value_type": "str", 8 | "ids_num": 10000, 9 | "vocab_size": 10000, 10 | "mapping_type": "hash", 11 | "mapping_dict_name": "f1.dict", 12 | "shared_embedding_name": "", 13 | "max_len": 30, 14 | "pooling_type": "sum" 15 | }, 16 | { 17 | "name": "f2", 18 | "value_type": "str", 19 | "ids_num": 10000, 20 | "vocab_size": 10000, 21 | "mapping_type": "hash", 22 | "mapping_dict_name": "f2.dict", 23 | "shared_embedding_name": "", 24 | "max_len": 30, 25 | "pooling_type": "sum" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /config/conf_criteo.py: -------------------------------------------------------------------------------- 1 | 2 | # 训练数据格式,支持csv和libsvm,如果是csv格式必须确保第一行为表头(各列列名),并且第一列为label 3 | # label为0/1 或者-1/1,特征取值支持连续特征(float), 离散特征(int / string), 序列特征(list of int / string) 4 | data_formart = "csv" 5 | 6 | # 如果是csv格式,通过csv_columns设定列名,或者设置csv_columns=[],将输入数据的第一行读取为列名 7 | #csv_columns = [] 8 | csv_columns = 'label,I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26'.split(',') 9 | 10 | # 对于csv和libsvm都需要配置域分隔符和序列特征中多个值的分隔符 11 | feat_sep = ',' 12 | feat_values_sep = ';' 13 | 14 | # dense特征 15 | dense_feat_list = [f'I{i}' for i in range(1, 14)] 16 | 17 | sparse_id_feat_list = [] 18 | 19 | varlen_sparse_id_feat_list = [] 20 | 21 | sparse_str_feat_list = [f'C{i}' for i in range(1, 27)] + [f'I{i}' for i in range(1, 14)] 22 | 23 | varlen_sparse_str_feat_list = [] 24 | 25 | 26 | # 对于连续型特征等宽分桶的个数,可以配置多个分桶方式 27 | dense_feat_wide_splits = [10, 25] 28 | # 对于连续型特征等频分桶的个数,可以配置多个分桶方式 29 | dense_feat_freq_splits = [10, 25] 30 | 31 | default_value_of_dense_feat = 0 32 | 33 | min_freq_for_sparse_feat_dict = 0 # 特征出现次数大于该值时,才加入特征ID映射词典 34 | 35 | seq_feat_max_len = 30 36 | seq_feat_pooling_type = "sum" # 暂时只支持sum和avg 37 | 38 | # 配置离散特征的ID映射方式,支持dict/dynamic_dict/hash/orig_id 39 | sparse_feat_mapping_type = "dynamic_dict" 40 | -------------------------------------------------------------------------------- /config/conf_csv.py: -------------------------------------------------------------------------------- 1 | # 训练数据格式,支持csv和libsvm 2 | # label>0为正样本,否则视为负样本。特征取值支持连续特征(float), 离散特征(int / string), 序列特征(list of int / string) 3 | data_formart = "csv" 4 | 5 | # 如果是csv格式,通过csv_columns设定列名,或者设置csv_columns=[],将输入数据的第一行读取为列名 6 | csv_columns = ['label', 'item_id', 'chanel', 'item_tags', 'item_clicks', 'item_price', 'user_click_list', 'user_age'] 7 | 8 | # 对于csv和libsvm都需要配置域分隔符和序列特征中多个值的分隔符 9 | feat_sep = ',' 10 | feat_values_sep = '|' 11 | 12 | dense_feat_list = ['item_clicks', 'item_price', 'user_age'] # 配置你的连续特征 13 | sparse_id_feat_list = ['item_id'] # 数值型离散特征 14 | sparse_str_feat_list = ['chanel'] # 字符串类型离散特征 15 | varlen_sparse_id_feat_list = ['user_click_list'] # 数值型序列特征 16 | varlen_sparse_str_feat_list = ['item_tags'] # 字符串类型序列特征 17 | 18 | # 对于连续特征,配置等宽分桶和等频分桶的分桶数,以如下配置为例,则一个连续型特征会按等宽分桶和等频分桶分别离散化为2个ID特征,共4个ID特征 19 | dense_feat_wide_splits = [10, 25] 20 | dense_feat_freq_splits = [10, 25] 21 | 22 | default_value_of_dense_feat = 0 23 | 24 | min_freq_for_sparse_feat_dict = 0 # 特征出现次数大于该值时,才加入特征ID映射词典 25 | 26 | seq_feat_max_len = 30 27 | seq_feat_pooling_type = "sum" # 暂时只支持sum和avg 28 | 29 | # 配置离散特征的ID映射方式,支持dict/dynamic_dict/hash/orig_id 30 | sparse_feat_mapping_type = "dynamic_dict" -------------------------------------------------------------------------------- /config/conf_libsvm.py: -------------------------------------------------------------------------------- 1 | 2 | # 训练数据格式,支持csv和libsvm,如果是csv格式必须确保第一行为表头(各列列名),并且第一列为label 3 | # label为0/1 或者-1/1,特征取值支持连续特征(float), 离散特征(int / string), 序列特征(list of int / string) 4 | data_formart = "libsvm" 5 | 6 | # 对于csv和libsvm都需要配置域分隔符和序列特征中多个值的分隔符 7 | feat_sep = '\t' 8 | feat_values_sep = ',' 9 | 10 | 11 | # dense特征 12 | dense_feat_list = ['feat1', 'feat2'] 13 | 14 | # sparse 特征,取值按照int解析 15 | sparse_id_feat_list = ['feat3', 'feat4'] 16 | 17 | # varlen sparse 特征,取值按照int解析 18 | varlen_sparse_id_feat_list = ['feat5'] 19 | 20 | 21 | # sparse 特征,取值按照字符串解析 22 | #sparse_str_feat_list = ['c2'] 23 | sparse_str_feat_list = ['feat6'] 24 | 25 | # varlen sparse 特征,取值按照字符串解析 26 | #varlen_sparse_str_feat_list = ['L_authorId_his' ] 27 | varlen_sparse_str_feat_list = ['feat7'] 28 | 29 | 30 | dense_feat_wide_splits = [10, 25] 31 | dense_feat_freq_splits = [10, 25] 32 | 33 | default_value_of_dense_feat = 0 34 | 35 | min_freq_for_sparse_feat_dict = 0 # 特征出现次数大于该值时,才加入特征ID映射词典 36 | 37 | seq_feat_max_len = 30 38 | seq_feat_pooling_type = "sum" # 暂时只支持sum和avg 39 | 40 | # 配置离散特征的ID映射方式,支持dict/dynamic_dict/hash/orig_id 41 | sparse_feat_mapping_type = "dynamic_dict" -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C1.dict: -------------------------------------------------------------------------------- 1 | 05db9164 2 2 | 68fd1e64 3 3 | 8cf07265 4 4 | 5a9ed9b0 5 5 | be589b51 6 6 | 39af2607 7 7 | 5bfa8ab5 8 8 | 9a89b36c 9 9 | 09ca0b81 10 10 | 87552397 11 11 | f473b8dc 12 12 | 17f69355 13 13 | ae82ea21 14 14 | 3b65d647 15 15 | 2d4ea12b 16 16 | 241546e0 17 17 | f434fac1 18 18 | 75ac2fe6 19 19 | 7e5c2ff4 20 20 | be30ca83 21 21 | 98237733 22 22 | fc9c62bb 23 23 | de4dac42 24 24 | 52f1e825 25 25 | 0e78bd46 26 26 | 87773c45 27 27 | da4eff0f 28 28 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C10.dict: -------------------------------------------------------------------------------- 1 | 3b08e48b 2 2 | e70742b0 3 3 | fbbf2c95 4 4 | aed3d80e 5 5 | 67eea4ef 6 6 | 0e9ead52 7 7 | 8f48ce11 8 8 | ab9456b4 9 9 | acce978c 10 10 | 2462946f 11 11 | 534fc986 12 12 | 49d5fa15 13 13 | 5fcee6b1 14 14 | 012f45e7 15 15 | 78d5c363 16 16 | 00f2b452 17 17 | 23de5a4a 18 18 | e8f7c7e8 19 19 | 2bf8bed1 20 20 | f6540b40 21 21 | 8b7e0638 22 22 | 4c89c3af 23 23 | ac473633 24 24 | b393caa5 25 25 | 4e979b5e 26 26 | bac95df6 27 27 | 56c80038 28 28 | 4f1c6ae7 29 29 | 8a99abc1 30 30 | 18e09007 31 31 | da272362 32 32 | c5fe5cb9 33 33 | 4b415bb3 34 34 | 4ea0d483 35 35 | d9b71390 36 36 | 23724df8 37 37 | f6c6d9f8 38 38 | 15fa156b 39 39 | a08eee5a 40 40 | b0c25211 41 41 | 7fdb06fe 42 42 | 0f6ee8ce 43 43 | 631ddef6 44 44 | 451bd4e4 45 45 | 94e68c1d 46 46 | 98d5faa2 47 47 | 4b8a7639 48 48 | cfa407de 49 49 | e89812b3 50 50 | e6003298 51 51 | dc790dda 52 52 | a1ee64a6 53 53 | f6f942d1 54 54 | aa91245c 55 55 | 1a428761 56 56 | 22a99f9d 57 57 | bdfd8a02 58 58 | f8f0e86f 59 59 | 9b8e7680 60 60 | 47e01053 61 61 | f1311559 62 62 | f710483a 63 63 | 51e04895 64 64 | 66c281d9 65 65 | b3d657b8 66 66 | 0eca1729 67 67 | c9ac91cb 68 68 | 7cda6c86 69 69 | fb999b75 70 70 | 78ed0c4d 71 71 | 2e48a61d 72 72 | afc4d756 73 73 | fbc2dc95 74 74 | e5330e23 75 75 | 9ca0fba4 76 76 | 5a01afad 77 77 | 49d1ad89 78 78 | efea433b 79 79 | f3b83678 80 80 | 493b74f2 81 81 | f918493f 82 82 | aed8755c 83 83 | a5270a71 84 84 | ff4776d6 85 85 | 267caf03 86 86 | c6c8dd7c 87 87 | 50c56209 88 88 | f0c8b1be 89 89 | f9065d00 90 90 | eff5602f 91 91 | aa6da1ef 92 92 | ab9e9acf 93 93 | cf500eab 94 94 | 07c7b3f7 95 95 | 9d4b7dce 96 96 | b6900243 97 97 | 575cd9b2 98 98 | 25e9e422 99 99 | 19feb952 100 100 | 567ba666 101 101 | 5ea6fa93 102 102 | b1442b2a 103 103 | 8c8662e4 104 104 | 2a47dab8 105 105 | 56ef22e9 106 106 | 1ce1e29d 107 107 | f1b39deb 108 108 | 995c2a7f 109 109 | ac82cac0 110 110 | 0466803a 111 111 | 64145819 112 112 | e8e8c8ac 113 113 | 6f0b6a04 114 114 | 1d56e466 115 115 | 897188be 116 116 | 27f4bf82 117 117 | 3094253e 118 118 | 903f1f14 119 119 | 6c47047a 120 120 | 03e48276 121 121 | e851ff7b 122 122 | 6f07d986 123 123 | 801e8634 124 124 | 12bb8262 125 125 | b173a655 126 126 | b1aa986c 127 127 | dcbc7c2b 128 128 | ff5a1549 129 129 | 98bd7a24 130 130 | a8d1ae09 131 131 | 5162b19c 132 132 | 97d3ddaa 133 133 | 5ba575e7 134 134 | 39046df2 135 135 | ec4d75ea 136 136 | 1722d4c8 137 137 | 13ba96b0 138 138 | afa26c81 139 139 | 75d852fc 140 140 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C11.dict: -------------------------------------------------------------------------------- 1 | 755e4a50 2 2 | e51ddf94 3 3 | 319687c9 4 4 | a7b606c4 5 5 | 636405ac 6 6 | c4adf918 7 7 | 4ba74619 8 8 | c6cb726f 9 9 | ec88dd34 10 10 | 419d31d4 11 11 | 9f0003f4 12 12 | f1b78ab4 13 13 | 922bbb91 14 14 | 7b5deffb 15 15 | 7940fc2a 16 16 | 7f8ffe57 17 17 | 20ec800a 18 18 | 55065437 19 19 | 6153cf57 20 20 | 3547565f 21 21 | feb49a68 22 22 | 26a64614 23 23 | 0ec1e215 24 24 | 9625b211 25 25 | d027c970 26 26 | 720446f5 27 27 | 41b3f655 28 28 | 77212bd7 29 29 | a4ea009a 30 30 | 2bcfb78f 31 31 | 7373475d 32 32 | 0e4ebdac 33 33 | df7e8e0b 34 34 | 15eced00 35 35 | 565788d0 36 36 | bffe9c30 37 37 | 7056d78a 38 38 | 0cb221d0 39 39 | 88196a93 40 40 | 1cba690a 41 41 | b9ec9192 42 42 | a2c1d2d9 43 43 | 39dd23e7 44 44 | 4352b29b 45 45 | 46031dab 46 46 | 364e8b48 47 47 | 258875ea 48 48 | 7e2c5c15 49 49 | 4a77ddca 50 50 | 031ba22d 51 51 | 91e8fc27 52 52 | 25f4f871 53 53 | d21494f8 54 54 | e0c3cae0 55 55 | ad2bc6f4 56 56 | 69926409 57 57 | 010265ac 58 58 | 60a1c175 59 59 | 6a447eb3 60 60 | 38914a66 61 61 | c1ee56d0 62 62 | ee26f284 63 63 | af6a4ffc 64 64 | 96a54d80 65 65 | bc862fb6 66 66 | 5cab60cb 67 67 | 6e647667 68 68 | b6358cf2 69 69 | c804061c 70 70 | c3a20c8d 71 71 | 9ba53fcc 72 72 | 67841877 73 73 | b4bb4248 74 74 | 06474f17 75 75 | a04e019f 76 76 | 7ca25fd2 77 77 | 4e46b019 78 78 | 3f31bb3e 79 79 | 7c4f062c 80 80 | 8487a168 81 81 | 278636c9 82 82 | d54a5851 83 83 | 91875c79 84 84 | 51ef0313 85 85 | 29e4ad33 86 86 | 0bc63bd0 87 87 | 30b2a438 88 88 | 9f7c4fc1 89 89 | 6c27619d 90 90 | 7bbe6c06 91 91 | 61af8052 92 92 | 5bd8a4ae 93 93 | a89c45cb 94 94 | 07678d3e 95 95 | cd1b7031 96 96 | e931c5cd 97 97 | 29473fc8 98 98 | 779482a8 99 99 | 553ebda3 100 100 | dcc84468 101 101 | 7d5ece85 102 102 | b7094596 103 103 | e9c32980 104 104 | 5307d8e2 105 105 | 81a23494 106 106 | 640d8b63 107 107 | f161ec47 108 108 | a0060bca 109 109 | d650f1bd 110 110 | 643327e3 111 111 | ae4c531b 112 112 | 52d28861 113 113 | 01a88896 114 114 | 1aa6cf31 115 115 | 98579192 116 116 | 88731e13 117 117 | 9ee336c5 118 118 | 5b906b78 119 119 | 68357db6 120 120 | 8b92652b 121 121 | 0ad37b4b 122 122 | c30e7b00 123 123 | 82af9502 124 124 | f9d0f35e 125 125 | ff78732c 126 126 | 16faa766 127 127 | f72b4bd1 128 128 | 69afd526 129 129 | f697a983 130 130 | c19406bc 131 131 | 9c9d4957 132 132 | f89fe102 133 133 | a60de4e5 134 134 | b26d847d 135 135 | b85b416c 136 136 | ad757a5a 137 137 | b91c2548 138 138 | 159499d1 139 139 | 5f5e6091 140 140 | 84bc66d0 141 141 | 41516dc9 142 142 | 78f92234 143 143 | 2e15139e 144 144 | 9cf09d42 145 145 | c0edaa76 146 146 | 6dc69f41 147 147 | 434d6c13 148 148 | da89cb9b 149 149 | d9b1e3ff 150 150 | 606866a9 151 151 | 61ba19ac 152 152 | f25fe7e9 153 153 | 03458ded 154 154 | 6fc6ad29 155 155 | 7fee217f 156 156 | 2e9d5aa6 157 157 | 5874c9c9 158 158 | f295b28a 159 159 | d8d7567b 160 160 | eb9eb939 161 161 | 9e511730 162 162 | 2591ca7a 163 163 | c82f1813 164 164 | 2d9eed4d 165 165 | e90cbbe1 166 166 | 6939835e 167 167 | 7d756b25 168 168 | ba0f9e8a 169 169 | d79cc967 170 170 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C12.dict: -------------------------------------------------------------------------------- 1 | dfbb09fb 2 2 | 9f32b866 3 3 | 21a23bfe 4 4 | 8fe001f4 5 5 | 75c79158 6 6 | b99ddbc8 7 7 | 8ebd48c3 8 8 | 6532318c 9 9 | d8c29807 10 10 | bb669e25 11 11 | 654bb16a 12 12 | fb991bf5 13 13 | 0cdb9a18 14 14 | ae1bb660 15 15 | 8882c6cd 16 16 | a5b0521a 17 17 | f24b551c 18 18 | 3c5900b5 19 19 | 18917580 20 20 | 1b2022a0 21 21 | 33ec1af8 22 22 | d8acd6f9 23 23 | 7c5cd1c7 24 24 | 8cdc4941 25 25 | 78a16776 26 26 | 506bb280 27 27 | e0d76380 28 28 | 153ff04a 29 29 | cf724373 30 30 | 38176faa 31 31 | ab1307ec 32 32 | d06dc48e 33 33 | eb43b195 34 34 | 617c70e9 35 35 | e00462bb 36 36 | 49fee879 37 37 | 538a49e7 38 38 | 8065cc64 39 39 | 9c841b74 40 40 | 33c282f5 41 41 | 424ba327 42 42 | 5ea407f3 43 43 | f21f7d11 44 44 | 4baf63a1 45 45 | 752343e3 46 46 | 6bca71b1 47 47 | 156f99ef 48 48 | 4df84614 49 49 | d63df4e6 50 50 | e802f466 51 51 | 74138b6d 52 52 | 22cad86a 53 53 | c3cdaf85 54 54 | 553e02c3 55 55 | 67b31aac 56 56 | d7cd5e08 57 57 | 6aaba33c 58 58 | 34a238e0 59 59 | 317bfd7d 60 60 | 233fde4c 61 61 | b9b3b7ef 62 62 | d286aff3 63 63 | 72a52d4c 64 64 | b345f76c 65 65 | 3563ab62 66 66 | 680d7261 67 67 | 94a1cc80 68 68 | a5ab10e6 69 69 | cc606cbe 70 70 | c47972c1 71 71 | 9da0a604 72 72 | e5b118b4 73 73 | cc22efeb 74 74 | ed5cfa27 75 75 | 2a064dba 76 76 | 23bc90a1 77 77 | 422e8212 78 78 | eb83af8a 79 79 | 05e68866 80 80 | 49507531 81 81 | c35b992b 82 82 | 733bbdf2 83 83 | 91f87a19 84 84 | 4ea4e9d5 85 85 | 9b665b9c 86 86 | 0b7afe9e 87 87 | 526eb908 88 88 | 42bee2f2 89 89 | 4bba7327 90 90 | 30ed85b5 91 91 | 3a802941 92 92 | 359d194a 93 93 | 624029b0 94 94 | 7e7a6264 95 95 | f6d35a1e 96 96 | ffcedb7a 97 97 | d1fb0874 98 98 | 5e76bfca 99 99 | 2d15871c 100 100 | 76517c94 101 101 | 49a5dd4f 102 102 | 9148b680 103 103 | 63314ad3 104 104 | 2436ff75 105 105 | 96fa9c01 106 106 | 3b917db0 107 107 | 77f29381 108 108 | 61ea5878 109 109 | 3317996d 110 110 | f6148255 111 111 | 1310a7dd 112 112 | 6aa4c9a8 113 113 | 093a009d 114 114 | a4b73157 115 115 | f993725b 116 116 | 9e82f486 117 117 | c0d8d575 118 118 | 07cecd0e 119 119 | 8d526153 120 120 | 7e98747a 121 121 | 765cb3ea 122 122 | ad46dc69 123 123 | 842839b9 124 124 | 3263408b 125 125 | 5d84eb4a 126 126 | beb94e00 127 127 | f9bf526c 128 128 | 11fcf7fa 129 129 | 59a625a9 130 130 | a4425bd8 131 131 | 99ec4e40 132 132 | a2f4e8b5 133 133 | 79b98d3d 134 134 | 252162ec 135 135 | 2ea11a49 136 136 | 7ac672aa 137 137 | 9ffdd484 138 138 | 6647ec34 139 139 | 167ba71f 140 140 | 4640585e 141 141 | 28283f53 142 142 | fa5eca9d 143 143 | 8f1a16da 144 144 | 8a433ec1 145 145 | 6536f6f8 146 146 | 2849c511 147 147 | 2d72bfb9 148 148 | 704629a2 149 149 | 975f89b0 150 150 | 16a886e7 151 151 | 539c5644 152 152 | f0c1019c 153 153 | a0015d5d 154 154 | 25644e7d 155 155 | 8d2c704a 156 156 | d28c687a 157 157 | ad972965 158 158 | a66cfe4b 159 159 | de2ecc9c 160 160 | bdf9cff8 161 161 | 0a02e48e 162 162 | 7161e106 163 163 | 0c87b3e9 164 164 | 887a0c20 165 165 | af6ad6b6 166 166 | 651d80c6 167 167 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C13.dict: -------------------------------------------------------------------------------- 1 | 5978055e 2 2 | 85dbe138 3 3 | 3516f6e6 4 4 | 62036f49 5 5 | eae197fd 6 6 | 31b42deb 7 7 | 00e20e7b 8 8 | 94881fc3 9 9 | 879fa878 10 10 | 176d07bc 11 11 | 779f824b 12 12 | 0159bf9f 13 13 | dc1d72e4 14 14 | 08961fd0 15 15 | 5afd9e51 16 16 | 6e5da64f 17 17 | ad61640d 18 18 | 269889be 19 19 | 46f42a63 20 20 | 18a5e4b8 21 21 | 80dcea18 22 22 | 949ea585 23 23 | 769a1844 24 24 | 12880350 25 25 | 8978af5c 26 26 | 51351dd6 27 27 | 44af41ef 28 28 | dccbd94b 29 29 | 034e5f3b 30 30 | ce5114a2 31 31 | 7203f04e 32 32 | 1e9339bc 33 33 | e6fc496d 34 34 | cfbfce5c 35 35 | 84c02464 36 36 | bd251a95 37 37 | 8e7ad399 38 38 | e62d6c68 39 39 | 08775c1b 40 40 | ea18ebd8 41 41 | 1211c647 42 42 | 1d0f2da8 43 43 | df5886ca 44 44 | ea31804b 45 45 | 5f4de855 46 46 | 377af8aa 47 47 | 34cbb1bc 48 48 | dcc8f90a 49 49 | 91a1b611 50 50 | bb7a2c12 51 51 | 9ff13f22 52 52 | e67cdf97 53 53 | f47f13e4 54 54 | e8df3343 55 55 | 39ccb769 56 56 | 2fc3058f 57 57 | 0e5bc979 58 58 | 9b9e44d2 59 59 | 9dfda2b9 60 60 | c281c227 61 61 | ebd756bd 62 62 | 48b975db 63 63 | 2a1579a2 64 64 | dbe5226f 65 65 | 4f487d87 66 66 | ce418dc9 67 67 | 61c65daf 68 68 | 1cc9ac51 69 69 | 7ce5cdf0 70 70 | 42156eb4 71 71 | 781f4d92 72 72 | 3eb2f9dc 73 73 | 2ec4b007 74 74 | 07a906b4 75 75 | d3802338 76 76 | 07c072b7 77 77 | c6378246 78 78 | 76dfc898 79 79 | 636195f8 80 80 | b87a829f 81 81 | a36387e6 82 82 | ea519e47 83 83 | e8f6ccfe 84 84 | 80467802 85 85 | ef007ecc 86 86 | aebdb575 87 87 | 2b9fb512 88 88 | 61e43922 89 89 | ea1f21b7 90 90 | 2f3ee7fb 91 91 | 7a3043c0 92 92 | a4fafa5b 93 93 | 4d8657a2 94 94 | 580817cd 95 95 | aa902020 96 96 | 7d65a908 97 97 | 49fe3d4e 98 98 | b72482f5 99 99 | e4b5ce61 100 100 | 1f9d2c38 101 101 | 3fe840eb 102 102 | 8368e64b 103 103 | 3796b047 104 104 | 18041128 105 105 | 1e18519e 106 106 | 22d23aac 107 107 | 863f8f8a 108 108 | 478ebe53 109 109 | 01c2bbc7 110 110 | a4b04123 111 111 | dfb2a8fa 112 112 | 3b03d76e 113 113 | 2723b688 114 114 | 094e10ad 115 115 | c95c9034 116 116 | 768f6658 117 117 | c5bc951e 118 118 | f9d99d81 119 119 | 4f8670dc 120 120 | 90dca23e 121 121 | b55434a9 122 122 | 9b656adc 123 123 | 4422e246 124 124 | 01f32ac8 125 125 | 84def884 126 126 | e5643e9a 127 127 | 07fdb6cc 128 128 | 9325eab4 129 129 | 83e6ca2e 130 130 | 605bbc24 131 131 | 38016f21 132 132 | c3f71b59 133 133 | 93b18cb5 134 134 | a03da696 135 135 | 4ab361e1 136 136 | aa655a2f 137 137 | bcb2e77c 138 138 | 8b11c4b8 139 139 | 9be66b48 140 140 | f66b043c 141 141 | 34fc0029 142 142 | fca56425 143 143 | 7301027a 144 144 | 165642be 145 145 | cd98af01 146 146 | e40e52ae 147 147 | fa17cc68 148 148 | dd183b4c 149 149 | 8019075f 150 150 | b0c30eeb 151 151 | 6e2907f1 152 152 | 0a9ac04c 153 153 | 740c210d 154 154 | f5df7ab9 155 155 | 47d6a934 156 156 | 2b54e95d 157 157 | 04e4a7e0 158 158 | 9b7d472e 159 159 | a4c7bffd 160 160 | 6f833c7a 161 161 | 4e4dd817 162 162 | 115d29f4 163 163 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C14.dict: -------------------------------------------------------------------------------- 1 | 07d13a8f 2 2 | b28479f6 3 3 | 1adce6ef 4 4 | 64c94865 5 5 | 051219e6 6 6 | cfef1c29 7 7 | 8ceecbc8 8 8 | f7c1b33f 9 9 | f862f261 10 10 | 91233270 11 11 | e8dce07a 12 12 | 32813e21 13 13 | ec19f520 14 14 | d2dfe871 15 15 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C15.dict: -------------------------------------------------------------------------------- 1 | dfab705f 2 2 | b5de5956 3 3 | 52baadf5 4 4 | 8ab5b746 5 5 | 9efd8b77 6 6 | dbc5e126 7 7 | 413cc8c6 8 8 | d83fb924 9 9 | ee569ce2 10 10 | 1150f5ed 11 11 | ac182643 12 12 | 4f3b3616 13 13 | a785131a 14 14 | 0f942372 15 15 | 902a109f 16 16 | e3209fc2 17 17 | 6ddbba94 18 18 | 52b49730 19 19 | d002b6d9 20 20 | bfef54b3 21 21 | 69f825dd 22 22 | c12fc269 23 23 | 422c8577 24 24 | 32ec6582 25 25 | c38116c9 26 26 | 3b2d8705 27 27 | 91f74a64 28 28 | 2de5271c 29 29 | 2eb18840 30 30 | 846fb5bd 31 31 | 298421a5 32 32 | 7ba31d46 33 33 | cdb87fb5 34 34 | f511c49f 35 35 | 42b3012c 36 36 | f775a6d5 37 37 | 0816fba2 38 38 | 40e29d2a 39 39 | ba8b8b16 40 40 | 3d2c6113 41 41 | 80d1ee72 42 42 | 31b59ad3 43 43 | 51c5d5ca 44 44 | 10040656 45 45 | 46218630 46 46 | 1addf65e 47 47 | 9c382f7a 48 48 | ef6b7bdf 49 49 | 14674f9b 50 50 | 5be89da3 51 51 | d4525f76 52 52 | b0369b63 53 53 | f8ebf901 54 54 | 0e78291e 55 55 | d2f03b75 56 56 | 42793602 57 57 | b25845fd 58 58 | 5edc1a28 59 59 | d33de6b0 60 60 | ae3a9888 61 61 | 2d0bb053 62 62 | 717db705 63 63 | d4a5a2be 64 64 | 23287566 65 65 | a888f201 66 66 | 06809048 67 67 | a6bf53df 68 68 | 6d68e99c 69 69 | 962bbefe 70 70 | e6863a8e 71 71 | cddd56a1 72 72 | 8d3c9c0c 73 73 | b2ff8c6b 74 74 | 5ab7247d 75 75 | 0a069322 76 76 | 00e52733 77 77 | 78e3b025 78 78 | f3635baf 79 79 | 9da6bb5f 80 80 | 11b2ae92 81 81 | 6da7d68c 82 82 | 72fbc65c 83 83 | 4c1df281 84 84 | 81d3f724 85 85 | 2f453358 86 86 | bb1e9ca8 87 87 | 2cd24ac0 88 88 | 102fc449 89 89 | f2252b1c 90 90 | fc29c5a9 91 91 | 715f1291 92 92 | 06373944 93 93 | cccdd69e 94 94 | e28388cc 95 95 | 003cf364 96 96 | 9917ad07 97 97 | 50b07d60 98 98 | 7ac43a46 99 99 | c169c458 100 100 | e0052e65 101 101 | f3a94039 102 102 | 55d28d38 103 103 | 29a18ba0 104 104 | d5223973 105 105 | 73e2709e 106 106 | f6b23a53 107 107 | 7f1c4567 108 108 | 13f8263b 109 109 | 73438c3b 110 110 | fd888b80 111 111 | ca8b2a1a 112 112 | 5340cb84 113 113 | b96e7224 114 114 | 633f1661 115 115 | cb0f0e06 116 116 | aa39dd42 117 117 | 4e06592a 118 118 | 36721ddc 119 119 | 681a3f32 120 120 | 55dc357b 121 121 | 903024b9 122 122 | 62eca3c0 123 123 | 99153e7d 124 124 | 622c34d8 125 125 | 054ebda1 126 126 | c1ddc990 127 127 | 456583e6 128 128 | 9703aa2f 129 129 | fa321567 130 130 | f3002fbd 131 131 | 59a58e86 132 132 | 12f48803 133 133 | 72f85ad5 134 134 | b812f9f2 135 135 | 11da3cff 136 136 | 310d155b 137 137 | a66dcf27 138 138 | fb67e61d 139 139 | aa322bcf 140 140 | 7f758956 141 141 | 17a3bcd8 142 142 | 33d2c881 143 143 | c251e774 144 144 | 801ee1ae 145 145 | b842e9bb 146 146 | 91126f30 147 147 | a3443e75 148 148 | 5726b2dc 149 149 | 162f3329 150 150 | 443b0c0b 151 151 | 487ddf17 152 152 | ada14dd8 153 153 | 943169c2 154 154 | 10139ce3 155 155 | c1124d0c 156 156 | 55808bb2 157 157 | fc42663d 158 158 | c68ba31d 159 159 | a8e962af 160 160 | b16ae607 161 161 | 18847041 162 162 | de829bed 163 163 | 28883800 164 164 | a4f91020 165 165 | 1dca7862 166 166 | 217d99f2 167 167 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C16.dict: -------------------------------------------------------------------------------- 1 | 84898b2a 2 2 | 87acb535 3 3 | 31ca40b6 4 4 | 587267a3 5 5 | 36103458 6 6 | 208d4baf 7 7 | e05d680b 8 8 | 2c9d222f 9 9 | c64d548f 10 10 | 2b2ce127 11 11 | 776f5665 12 12 | d1a4e968 13 13 | 82708081 14 14 | bad5ee18 15 15 | 23056e4f 16 16 | 95a8919c 17 17 | b6d021e8 18 18 | 0decd005 19 19 | 51b69881 20 20 | b74e1eb0 21 21 | 4558136f 22 22 | df604f5b 23 23 | 696fb81d 24 24 | 3084c78b 25 25 | e15ad623 26 26 | 81db2bec 27 27 | 1203a270 28 28 | 1bf03082 29 29 | 6512dce6 30 30 | f2c6a810 31 31 | 65a31309 32 32 | 30e6420c 33 33 | de815c2d 34 34 | 121f63c9 35 35 | ebbb82d7 36 36 | 3b87fa92 37 37 | 0596b5be 38 38 | a14df6f7 39 39 | 9b3f7aa2 40 40 | 635c3e13 41 41 | 169f1150 42 42 | 9906d656 43 43 | e2e3cf1c 44 44 | c73993da 45 45 | c43b15fe 46 46 | fb8ca891 47 47 | 5fbf4a84 48 48 | cf3ec61f 49 49 | a694f6ce 50 50 | f6613e51 51 51 | b49f63ab 52 52 | 2a27c935 53 53 | 08514295 54 54 | 91a6eec5 55 55 | d2b0336b 56 56 | 4032eea3 57 57 | b041b04a 58 58 | da441c7e 59 59 | 1689e4de 60 60 | 1871ac47 61 61 | 33301a0b 62 62 | 7d9d720d 63 63 | 58cacba8 64 64 | 569a0480 65 65 | b688c8cc 66 66 | c0673b44 67 67 | 3eef319d 68 68 | 1cdb3603 69 69 | 0ab5ee0c 70 70 | e638c51d 71 71 | 929eef3c 72 72 | f68bd494 73 73 | 606df1fe 74 74 | 3141102a 75 75 | 7d9b60c8 76 76 | 25b075e4 77 77 | 69f67894 78 78 | 6de617d3 79 79 | 0fd6d3ca 80 80 | 068a2c9f 81 81 | 8ac5e229 82 82 | 834b85f5 83 83 | b7f61016 84 84 | b7a016ed 85 85 | 7d0949a5 86 86 | e71dfc2d 87 87 | 67b3c631 88 88 | e2e2fcd9 89 89 | e75cb6ea 90 90 | f4944655 91 91 | 8023d5ba 92 92 | 270e2a53 93 93 | e7af7559 94 94 | 90d6ddcd 95 95 | f39f1141 96 96 | 6d87c0d4 97 97 | 5fb9ff62 98 98 | 9243e635 99 99 | afc96aa6 100 100 | 9fa82d1c 101 101 | 64e0265f 102 102 | ea1c4696 103 103 | f4ead43c 104 104 | 7ce58da8 105 105 | 12e989e9 106 106 | 9fe6f065 107 107 | 33a55538 108 108 | bc3ccba9 109 109 | 03b5b1e2 110 110 | b3dc5e07 111 111 | b50d9336 112 112 | 9e6ff465 113 113 | 19f6b83c 114 114 | 1c3a7247 115 115 | e3a83d5c 116 116 | 29a3715b 117 117 | d08de474 118 118 | 23c4fd37 119 119 | 64223df7 120 120 | 5c646b1e 121 121 | 967bc626 122 122 | 9f1d1f70 123 123 | c57bda3a 124 124 | a98ec356 125 125 | 9066bcfb 126 126 | 9ee32e6f 127 127 | 5e1b6b9d 128 128 | 229bf6f4 129 129 | 41bec2fe 130 130 | 13ede1b5 131 131 | 89052618 132 132 | 8e47fca6 133 133 | b9a4d133 134 134 | e3d99bf0 135 135 | 5891d119 136 136 | 236709b9 137 137 | 5e622e84 138 138 | d8831736 139 139 | 9e724f87 140 140 | 22283336 141 141 | 789e0e3e 142 142 | cc93bd1d 143 143 | 271d5b6c 144 144 | 2b7f6e55 145 145 | eedd265a 146 146 | 809c9e0e 147 147 | a9b56248 148 148 | a249bde3 149 149 | aafa191e 150 150 | 52bee03d 151 151 | b458da0e 152 152 | 4c7535f3 153 153 | c66a58da 154 154 | f2a191bd 155 155 | 1206a8a1 156 156 | a3d7b1d6 157 157 | 62675893 158 158 | fb2ac6b5 159 159 | e2bc04da 160 160 | bb6d240e 161 161 | 48af915a 162 162 | 022714ba 163 163 | 05a97a3c 164 164 | 72401022 165 165 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C17.dict: -------------------------------------------------------------------------------- 1 | e5ba7672 2 2 | d4bb7bd8 3 3 | 07c540c4 4 4 | 3486227d 5 5 | 776ce399 6 6 | 1e88c74f 7 7 | 8efede7f 8 8 | 2005abd1 9 9 | 27c07bd6 10 10 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C18.dict: -------------------------------------------------------------------------------- 1 | 5aed7436 2 2 | 7ef5affa 3 3 | 891589e7 4 4 | c21c3e4c 5 5 | 13145934 6 6 | 005c6740 7 7 | a78bd508 8 8 | 582152eb 9 9 | e88ffc9d 10 10 | 1f868fdd 11 11 | 9880032b 12 12 | e7e991cb 13 13 | 4b17f8a2 14 14 | f2fc99b1 15 15 | 6fc84bfb 16 16 | 52e44668 17 17 | 449d6705 18 18 | bd17c3da 19 19 | 906ff5cb 20 20 | 7e32f7a4 21 21 | 8f0f692f 22 22 | 2585827d 23 23 | 63cdbb21 24 24 | f5f4ae5b 25 25 | ade68c22 26 26 | 4bcc9449 27 27 | f54016b9 28 28 | e96a7df2 29 29 | c68ebaa0 30 30 | fd3919f9 31 31 | 7b06fafe 32 32 | c235abed 33 33 | 836a67dd 34 34 | cf1cde40 35 35 | 87c6f83c 36 36 | 675c9258 37 37 | 25c88e42 38 38 | d3303ea5 39 39 | 642f2610 40 40 | 7ce63c71 41 41 | 0f2f9850 42 42 | 8814ed47 43 43 | 9b82aca5 44 44 | 67bd0ece 45 45 | 752d8b8a 46 46 | 21eb63af 47 47 | d3c7daaa 48 48 | 065917ca 49 49 | be5810bd 50 50 | fb342121 51 51 | 456d734d 52 52 | 08154af3 53 53 | 9d3171e9 54 54 | bc5a0ff7 55 55 | f6a2fc70 56 56 | e01eacde 57 57 | 1999bae9 58 58 | 561cabfe 59 59 | 48ce336b 60 60 | 9bf8ffef 61 61 | 2804effd 62 62 | 5d961bca 63 63 | 670f513e 64 64 | 65c9624a 65 65 | b34aa802 66 66 | 0ad1cc71 67 67 | e261f8d8 68 68 | 35176a17 69 69 | a863ac26 70 70 | a1d0cc4f 71 71 | 821c30b8 72 72 | 35a9ed38 73 73 | cbadff99 74 74 | 395856b0 75 75 | d495a339 76 76 | 35ee3e9e 77 77 | d4a314a2 78 78 | 4771e483 79 79 | 87fd936e 80 80 | 130ebfcd 81 81 | dff11f14 82 82 | fffe2a63 83 83 | e32bf683 84 84 | 43dfe9bd 85 85 | 7da6ea7e 86 86 | bc48b783 87 87 | 381bd833 88 88 | e7648a8f 89 89 | d1605c46 90 90 | 2b46823a 91 91 | 5bb2ec8e 92 92 | 1616f155 93 93 | 95f5c722 94 94 | c191a3ff 95 95 | 836a11e3 96 96 | ca6a63cf 97 97 | 79a92e0a 98 98 | 3c4f2d82 99 99 | bb983d97 100 100 | 19ef42ad 101 101 | b04e4670 102 102 | 7d8c03aa 103 103 | 4b0f5ddd 104 104 | a1654f4f 105 105 | 52b872ed 106 106 | ae46962e 107 107 | 5ba7fffe 108 108 | 2efa89c6 109 109 | a7cf409e 110 110 | 7b49e3d2 111 111 | d452c287 112 112 | 004fdf10 113 113 | b608c073 114 114 | 38f08461 115 115 | f0959f21 116 116 | 3ae505af 117 117 | 281769c2 118 118 | 62acb0f3 119 119 | 824dcc94 120 120 | c9da8737 121 121 | ac02dc99 122 122 | d2651d6e 123 123 | ca533012 124 124 | 3972b4ed 125 125 | 908eaeb8 126 126 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C19.dict: -------------------------------------------------------------------------------- 1 | 21ddcdc9 2 2 | 55dd3565 3 3 | ff6cdd42 4 4 | 7be4df37 5 5 | cf99e5de 6 6 | 1d1eb838 7 7 | f30f7842 8 8 | 6f3756eb 9 9 | b6baba3f 10 10 | 738584ec 11 11 | ba92e49d 12 12 | af1445c4 13 13 | 2f4b9dd2 14 14 | 1d04f4a4 15 15 | 92524a76 16 16 | 712d530c 17 17 | 083e89d9 18 18 | 39e30682 19 19 | d913d8f1 20 20 | 4cc48856 21 21 | 2e30f394 22 22 | 4b1019ff 23 23 | a34d2cf6 24 24 | 566c492c 25 25 | 444a605d 26 26 | e27c6abe 27 27 | bdffef68 28 28 | 2b558521 29 29 | 6301e460 30 30 | 2442feac 31 31 | c79aad78 32 32 | 49463d54 33 33 | edb3d180 34 34 | 42e59f55 35 35 | cc4c70c1 36 36 | bf212c4c 37 37 | 6d82104d 38 38 | 4a237258 39 39 | 5b885066 40 40 | fc134659 41 41 | b1fb78cc 42 42 | 0053530c 43 43 | 54591762 44 44 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C2.dict: -------------------------------------------------------------------------------- 1 | 38a947a1 2 2 | 09e68b86 3 3 | 4f25e98b 4 4 | 287130e0 5 5 | 80e26c9b 6 6 | 58e67aaf 7 7 | 38d50e09 8 8 | e5fb1af3 9 9 | 207b2d81 10 10 | 403ea497 11 11 | 68b3edbf 12 12 | 1cfdf714 13 13 | 942f9a8d 14 14 | c5c1d6ae 15 15 | 0468d672 16 16 | 78ccd99e 17 17 | 404660bb 18 18 | 2ae0a573 19 19 | 04e09220 20 20 | 8084ee93 21 21 | e77e5e6e 22 22 | 8947f767 23 23 | 46bbf321 24 24 | 9819deea 25 25 | 6887a43c 26 26 | 40ed0c67 27 27 | 2c8c5f5d 28 28 | ef69887a 29 29 | e112a9de 30 30 | 558b4efb 31 31 | 512fdf0c 32 32 | 95e2d337 33 33 | 90081f33 34 34 | c5fe64d9 35 35 | 3df44d94 36 36 | 89ddfee8 37 37 | d833535f 38 38 | 08d6d899 39 39 | 2a69d406 40 40 | 0aadb108 41 41 | d7988e72 42 42 | ed7b1c58 43 43 | 84b4e42f 44 44 | 2eb7b10e 45 45 | d97d4ce8 46 46 | c44e8a72 47 47 | 876465ad 48 48 | 4322636e 49 49 | 6e638bbc 50 50 | b0d4a6f6 51 51 | 71ca0a25 52 52 | 421b43cd 53 53 | 8f5b4275 54 54 | 537e899b 55 55 | 3e4b7926 56 56 | efb7db0e 57 57 | ea3a5818 58 58 | 8db5bc37 59 59 | 5dac953d 60 60 | d8fc04df 61 61 | b26462db 62 62 | 064c8f31 63 63 | b7ca2abd 64 64 | 26ece8a8 65 65 | a8da270e 66 66 | 8b0005b7 67 67 | ae46a29d 68 68 | dde11b16 69 69 | 4c2bc594 70 70 | 6f609dc9 71 71 | 73b37f46 72 72 | c41a84c8 73 73 | a0e12995 74 74 | 06174070 75 75 | 0b8e9caf 76 76 | 0c0567c2 77 77 | f0cf0024 78 78 | 9b25e48b 79 79 | a5b69ae3 80 80 | 0a519c5c 81 81 | e9b8a266 82 82 | 9a82ab91 83 83 | e3a0dc66 84 84 | d57c0709 85 85 | d4bd9877 86 86 | c5e4f7c9 87 87 | 62e9e9bf 88 88 | 8ab240be 89 89 | aa8fcc21 90 90 | b46aceb6 91 91 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C20.dict: -------------------------------------------------------------------------------- 1 | 5840adea 2 2 | a458ea53 3 3 | b1252a9d 4 4 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C21.dict: -------------------------------------------------------------------------------- 1 | 0014c32a 2 2 | a4b7004c 3 3 | dfcfc3fa 4 4 | c2a93b37 5 5 | e587c466 6 6 | 6a909d9a 7 7 | a2b7caec 8 8 | cc6a9262 9 9 | 5f957280 10 10 | 2b796e4a 11 11 | 9fb07dd2 12 12 | 4c14738f 13 13 | 0429f84b 14 14 | 5155d8a3 15 15 | 2e01979f 16 16 | 0e8585d2 17 17 | 7633c7c8 18 18 | 5c8dc711 19 19 | af5dc647 20 20 | 31c8e642 21 21 | 07b6c66f 22 22 | 06e40c52 23 23 | 514b7308 24 24 | 78c1dd4b 25 25 | 4a8f0a7f 26 26 | 73d06dde 27 27 | 84ec2c79 28 28 | 361a1080 29 29 | 8b7fb864 30 30 | fca82615 31 31 | 65f3080f 32 32 | 5def73cb 33 33 | c3739d01 34 34 | bd1f6272 35 35 | d90f665b 36 36 | cf79f8fa 37 37 | e7f0c6dc 38 38 | 61b4555a 39 39 | cff19dc6 40 40 | 15414e28 41 41 | 37a23b2d 42 42 | 605776ee 43 43 | 1d14288c 44 44 | a66e7b01 45 45 | b1ae3ed2 46 46 | deb9605d 47 47 | 98a79791 48 48 | a370fd83 49 49 | 3aa05bfb 50 50 | a1229e5f 51 51 | d479575f 52 52 | 6387fda4 53 53 | a97b62ca 54 54 | ea6a0e31 55 55 | 53def47b 56 56 | 723b4dfd 57 57 | 8717ea07 58 58 | dc55d6df 59 59 | 23da7042 60 60 | d5a53bc3 61 61 | 8443660f 62 62 | b7ba6151 63 63 | c2af6d9f 64 64 | 2754aaf1 65 65 | e049c839 66 66 | 1c63c71e 67 67 | 1380864e 68 68 | 6c38450e 69 69 | 0370bc83 70 70 | fb19a39b 71 71 | ba3c688b 72 72 | aebdd3c2 73 73 | 3df2213d 74 74 | 9c3eb598 75 75 | 5a5953a2 76 76 | a13bd40d 77 77 | e1627e2c 78 78 | df66957b 79 79 | 7eefff0d 80 80 | df9de95c 81 81 | 0be61dd1 82 82 | e339163e 83 83 | f15fe1ee 84 84 | 1df3ad93 85 85 | c12eabbb 86 86 | b4770b64 87 87 | bd074856 88 88 | b964dee0 89 89 | 72c8ca0c 90 90 | 81f8278e 91 91 | 15bb899d 92 92 | 5ff5ac4a 93 93 | 5a49c6db 94 94 | 29d21ab1 95 95 | fdc724a8 96 96 | ed01532f 97 97 | e208a45f 98 98 | ec5ac7c6 99 99 | c0cd6339 100 100 | 40b11f62 101 101 | 38879cfe 102 102 | 67afd8d0 103 103 | 4f1aa25f 104 104 | d1d4f4a9 105 105 | 9179411e 106 106 | 7b6393e8 107 107 | 37c3d851 108 108 | 6b4fc63c 109 109 | 3b66cfcf 110 110 | 33706b2d 111 111 | cc86f2c1 112 112 | 5c859cae 113 113 | 9efd5ec7 114 114 | 4d2b0d06 115 115 | ebfa4c53 116 116 | e54f0804 117 117 | 26e36622 118 118 | 632bf881 119 119 | 301fc194 120 120 | c4c42074 121 121 | 30244f84 122 122 | 16f71b82 123 123 | 6fb7987f 124 124 | ec4a835a 125 125 | 822be048 126 126 | 7a380bd1 127 127 | bfeb50f6 128 128 | 5362f5c3 129 129 | 95ee3d7a 130 130 | 8a93f0a1 131 131 | d4703ebd 132 132 | 15fb7955 133 133 | 5c7c443c 134 134 | 86a8e85e 135 135 | 8f78192f 136 136 | cd11300e 137 137 | 77799c4f 138 138 | 43d01030 139 139 | d4f22efc 140 140 | 07b818d7 141 141 | fd0e41ce 142 142 | 79fe2943 143 143 | c1429b47 144 144 | a716bbe2 145 145 | fd3ca145 146 146 | 56b58097 147 147 | 6a41d841 148 148 | 0d7a15fd 149 149 | c4b9fb56 150 150 | 7e5b7cc4 151 151 | 35198a67 152 152 | d7a43622 153 153 | 5b6b6b73 154 154 | 9308de7e 155 155 | 5911ddcb 156 156 | 54d8bb06 157 157 | bbcf650c 158 158 | be01d6b1 159 159 | 0fbced35 160 160 | 1de5dd94 161 161 | 5fe17899 162 162 | 34cc61bb 163 163 | d1aa4512 164 164 | 4a2c3526 165 165 | bf647035 166 166 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C22.dict: -------------------------------------------------------------------------------- 1 | c9d4222a 2 2 | ad3062eb 3 3 | 8ec974f4 4 4 | c0061c6d 5 5 | 78e2e389 6 6 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C23.dict: -------------------------------------------------------------------------------- 1 | 32c7478e 2 2 | 3a171ecb 3 3 | 423fab69 4 4 | be7c41b4 5 5 | c7dc6720 6 6 | bcdee96c 7 7 | 55dd3565 8 8 | dbb486d7 9 9 | 93bad2c0 10 10 | 72592995 11 11 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C24.dict: -------------------------------------------------------------------------------- 1 | 3fdb382b 2 2 | 3b183c5c 3 3 | 1793a828 4 4 | b34f3128 5 5 | aee52b6f 6 6 | 45ab94c8 7 7 | 1481ceb4 8 8 | ded4aac9 9 9 | a415643d 10 10 | 1f68c81f 11 11 | a5862ce8 12 12 | 8d365d3b 13 13 | 8f079aa5 14 14 | cafb4e4d 15 15 | df487a73 16 16 | 359dd977 17 17 | 7836b4d5 18 18 | 08b0ce98 19 19 | a86c0565 20 20 | c0d61a5c 21 21 | 6d5d1302 22 22 | 0d4a6d1a 23 23 | 17f458f7 24 24 | 3e983c86 25 25 | 246f2e7f 26 26 | 2fd70e1c 27 27 | 4f7b7578 28 28 | 1989e165 29 29 | 45b2acf4 30 30 | 74f7ceeb 31 31 | 42a310e6 32 32 | aa5529de 33 33 | d4af2638 34 34 | 043a382b 35 35 | 6c1cdd05 36 36 | d5b4ea7d 37 37 | 3e30919e 38 38 | 38b97a31 39 39 | 8535db9f 40 40 | aa9b9ab9 41 41 | f93938dd 42 42 | c9bc2384 43 43 | e33735a0 44 44 | e448275f 45 45 | d5b01f55 46 46 | 9f0d87bf 47 47 | 9b18ad04 48 48 | d36c7dbf 49 49 | 727a7cc7 50 50 | da408463 51 51 | 8849cfac 52 52 | aa0115d2 53 53 | 1be0cc0a 54 54 | 52d7797f 55 55 | 7b80ab11 56 56 | 58e38a64 57 57 | 6095f986 58 58 | ad80aaa7 59 59 | be2f0db5 60 60 | 394c5a53 61 61 | cde6fafb 62 62 | cc4079ea 63 63 | e4e10900 64 64 | 42998020 65 65 | c0b8dfd6 66 66 | 0ff91809 67 67 | a6e7d8d3 68 68 | c9a8db2a 69 69 | 2896ad66 70 70 | 3aebd96a 71 71 | af0cb2c3 72 72 | 2f34b1ef 73 73 | 772b286f 74 74 | 6c25dad0 75 75 | d65fa724 76 76 | faf5d8b3 77 77 | 69e4f188 78 78 | 8d49fa4b 79 79 | 590b856f 80 80 | 7e60320b 81 81 | eaa38671 82 82 | e3aea32f 83 83 | 03955d00 84 84 | 364442f6 85 85 | c94ffa50 86 86 | 88cba9eb 87 87 | 996f5a43 88 88 | a9d9c151 89 89 | 936da3dd 90 90 | 18109ace 91 91 | 365def8b 92 92 | 42df8359 93 93 | 3a6f67d1 94 94 | 9b7eed78 95 95 | b44bd498 96 96 | f20c047e 97 97 | 71dc4ef2 98 98 | bc491035 99 99 | 198d16cc 100 100 | cf300ce9 101 101 | 5fd07f39 102 102 | 4acb8523 103 103 | 0ac1b18a 104 104 | b2df17ed 105 105 | f2e9f0dd 106 106 | 325bcd40 107 107 | a0634086 108 108 | 0ea7be91 109 109 | 0ee762c3 110 110 | fb890da1 111 111 | 44aeb111 112 112 | 30ab4eb4 113 113 | dcba8699 114 114 | 9d8b4082 115 115 | 1335030a 116 116 | 75b9c133 117 117 | b1aad66f 118 118 | d91ea8bd 119 119 | 43fe299c 120 120 | e5ed7da2 121 121 | 9257f75f 122 122 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C25.dict: -------------------------------------------------------------------------------- 1 | e8b83407 2 2 | 001f3601 3 3 | ea9a246c 4 4 | 9b3e8820 5 5 | f0f449dd 6 6 | 010f6491 7 7 | cb079c2d 8 8 | 2bf691b1 9 9 | 9d93af03 10 10 | 7a402766 11 11 | 47907db5 12 12 | 33d94071 13 13 | 445bbe3b 14 14 | b9266ff0 15 15 | 724b04da 16 16 | f55c04b6 17 17 | 875ea8a7 18 18 | 46fbac64 19 19 | c243e98b 20 20 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C26.dict: -------------------------------------------------------------------------------- 1 | 49d68486 2 2 | 2fede552 3 3 | 984e0db0 4 4 | c84c4aec 5 5 | 988b0775 6 6 | b7d9c3bc 7 7 | b9809574 8 8 | 9904c656 9 9 | c27f155b 10 10 | 92c878de 11 11 | 71236095 12 12 | d597922b 13 13 | 350a6bdb 14 14 | 09929967 15 15 | c4304c4b 16 16 | d14e41ff 17 17 | 0eabc199 18 18 | 1219b447 19 19 | deffd9e3 20 20 | b6a3490e 21 21 | 074bb89f 22 22 | b98a5b90 23 23 | c73ed234 24 24 | 322cbe58 25 25 | f95af538 26 26 | 85cebe8c 27 27 | bde577f6 28 28 | 67ebe777 29 29 | 6935065e 30 30 | aa5f0a15 31 31 | f89dfbcc 32 32 | 79883c16 33 33 | ddf88ddd 34 34 | 70451962 35 35 | adb5d234 36 36 | 68d9ada1 37 37 | 1d7b6578 38 38 | 7a1ac642 39 39 | 00ed90d0 40 40 | dd8b4f5c 41 41 | 81be451e 42 42 | c4e4eabb 43 43 | 9973f80f 44 44 | 56be3401 45 45 | 4a449e4c 46 46 | 59e91663 47 47 | 86601e0a 48 48 | e001324a 49 49 | ba14bbcb 50 50 | 8b3e7faa 51 51 | e75c9ae9 52 52 | 4e7af834 53 53 | fa3124de 54 54 | 2fc5e3d4 55 55 | bdc8589e 56 56 | d5ca783a 57 57 | 1ba54abc 58 58 | 1793fb3f 59 59 | 8ded0b41 60 60 | 3a97b421 61 61 | 27029e68 62 62 | 070f6cb2 63 63 | 00efb483 64 64 | c0fca43d 65 65 | f4642e0e 66 66 | 2f44e540 67 67 | 8fd6bdd6 68 68 | 0facb2ea 69 69 | bd2ec696 70 70 | 0e2018ec 71 71 | 814b9a6b 72 72 | c986348f 73 73 | 6d73203e 74 74 | 33757f80 75 75 | 9c015713 76 76 | a39e1586 77 77 | f610730e 78 78 | 86174332 79 79 | df46df55 80 80 | 85fd868a 81 81 | e438a496 82 82 | 3df61e3d 83 83 | f3b1f00d 84 84 | 99f4f64c 85 85 | 1a02cbe1 86 86 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C3.dict: -------------------------------------------------------------------------------- 1 | d032c263 2 2 | 77f2f2e5 3 3 | 2cbec47f 4 4 | 02cf9876 5 5 | c5d94b65 6 6 | 5e25fa67 7 7 | 9b792af9 8 8 | aa8c1539 9 9 | 4470baf4 10 10 | fd22e418 11 11 | f1397040 12 12 | 9143c832 13 13 | 95e13fd4 14 14 | 3f55fb72 15 15 | 5d076085 16 16 | 9dd3c4fc 17 17 | fcae8bfa 18 18 | c798ded6 19 19 | ea997bbe 20 20 | c23785fe 21 21 | 25111132 22 22 | b063fe4e 23 23 | 45f68c2a 24 24 | 5d0ec1e8 25 25 | b00d1501 26 26 | fc1cad4b 27 27 | 9d427ddf 28 28 | 378112d3 29 29 | a68b0bcf 30 30 | 6bbe880c 31 31 | dd8e6407 32 32 | 98351ee6 33 33 | 6813d33b 34 34 | 5492524f 35 35 | c725873a 36 36 | 3f7f3d24 37 37 | da89f77a 38 38 | e007dfac 39 39 | 0b2640f7 40 40 | 69b028e3 41 41 | b87cffc0 42 42 | 598b72ce 43 43 | 50a6bc33 44 44 | 374195a1 45 45 | 9b953c56 46 46 | 223b0e16 47 47 | 6ef2aa66 48 48 | 15363e12 49 49 | 99815367 50 50 | b264d69e 51 51 | 8018e37d 52 52 | 13cd0697 53 53 | cedcacac 54 54 | 695a85e0 55 55 | 44e7b8ec 56 56 | 33ebdbb6 57 57 | ba1947d0 58 58 | 840eeb3a 59 59 | 909286bb 60 60 | f86649de 61 61 | 00d3cdb7 62 62 | 0d15d9b5 63 63 | 38610f2f 64 64 | eb08d440 65 65 | b009d929 66 66 | 5037b88e 67 67 | 13193952 68 68 | 60c37737 69 69 | 7442ec70 70 70 | 3fea0364 71 71 | 2273663d 72 72 | bf05882d 73 73 | 5be9b239 74 74 | 7ee60f5f 75 75 | f652979e 76 76 | 2b280564 77 77 | 4e1c9eda 78 78 | dad8b3db 79 79 | 70168f62 80 80 | 022a0b3c 81 81 | d125aecd 82 82 | fc25ffd0 83 83 | 1b5e2c32 84 84 | 58ca7e87 85 85 | 6392b1c1 86 86 | b3ee24fe 87 87 | 62acd884 88 88 | 29dbbee7 89 89 | a2b48926 90 90 | 948ee031 91 91 | 770451b6 92 92 | 79bdb97a 93 93 | c6616b04 94 94 | da3ad2bd 95 95 | 55f298ba 96 96 | 97d1681e 97 97 | 88290645 98 98 | fda0b584 99 99 | cd82408a 100 100 | 10ee5afb 101 101 | d627c43e 102 102 | b2de8002 103 103 | 7e4ea1b2 104 104 | 0739daa8 105 105 | b3693f43 106 106 | b1ecc6c4 107 107 | 0c7bb149 108 108 | a3829614 109 109 | 771a1642 110 110 | 104c93d5 111 111 | 3f850fa0 112 112 | 6858baef 113 113 | 9dfde63d 114 114 | 7fd859b3 115 115 | 700014ea 116 116 | 6d1384bc 117 117 | 0271c22e 118 118 | cce54c2c 119 119 | 619e87b2 120 120 | fdd14ae2 121 121 | 8b376137 122 122 | 027b4cc5 123 123 | 61b8caf0 124 124 | f25edca2 125 125 | 40361716 126 126 | bd4d1b8d 127 127 | f5cdf14a 128 128 | 761d2b40 129 129 | 0b793d71 130 130 | 01a0648b 131 131 | 3cb0ff62 132 132 | af21d90e 133 133 | f153af65 134 134 | ad4b77ff 135 135 | 03689820 136 136 | af5655e7 137 137 | 20fb5e45 138 138 | be0a348d 139 139 | c8b80f97 140 140 | be3b6a18 141 141 | 98bb788f 142 142 | 9ea04474 143 143 | 0d71b822 144 144 | 2ba709bb 145 145 | f1a544c6 146 146 | 8530c58f 147 147 | b0874fd0 148 148 | 57231f4a 149 149 | ac203f6f 150 150 | 1678e0d8 151 151 | bf30cf68 152 152 | 01ac13ea 153 153 | e346a5fd 154 154 | d1ffd05c 155 155 | a55127b0 156 156 | 0f09a700 157 157 | acbabfa5 158 158 | b1b6f323 159 159 | 2d8004c4 160 160 | 3a3d6eeb 161 161 | 5f8d9359 162 162 | 4993b2b2 163 163 | 7edab412 164 164 | 145f2f75 165 165 | 628b07b0 166 166 | 4255f8fd 167 167 | db151f8b 168 168 | 7e1ad1fe 169 169 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C4.dict: -------------------------------------------------------------------------------- 1 | c18be181 2 2 | d16679b9 3 3 | f922efad 4 4 | 13508380 5 5 | 85dd697c 6 6 | 3e2bfbda 7 7 | 40ed41e5 8 8 | 5cc8f91d 9 9 | dd47ba3b 10 10 | 9c6d05a0 11 11 | 8c8a4c47 12 12 | 22504558 13 13 | 82a61820 14 14 | 36375a46 15 15 | 09003f7b 16 16 | f56b7dd5 17 17 | a1e6a194 18 18 | 5de245c7 19 19 | 862b5ba0 20 20 | a09fab49 21 21 | 91e6318a 22 22 | 72bea89f 23 23 | 67dd8a70 24 24 | d13862c2 25 25 | 4b972461 26 26 | 39547932 27 27 | e63708e9 28 28 | 4eadb673 29 29 | 684abf7b 30 30 | c194aaab 31 31 | feb6eb1a 32 32 | db4eb846 33 33 | 811ce8e8 34 34 | ae59cd56 35 35 | d0189e5a 36 36 | 8eb89744 37 37 | 37ee624b 38 38 | 77b99936 39 39 | 4badfc0c 40 40 | 003ceb8c 41 41 | ffacf4e8 42 42 | 3c7eb23c 43 43 | 335e428a 44 44 | 6f5d5092 45 45 | 7be07df9 46 46 | ca55061c 47 47 | 20af9140 48 48 | f9e8a6fb 49 49 | 771966f0 50 50 | ce831e6d 51 51 | d8660950 52 52 | 352cefe6 53 53 | 7967fcf5 54 54 | d502349a 55 55 | 3b989466 56 56 | 29998ed1 57 57 | f7263320 58 58 | 252734c9 59 59 | f56f6045 60 60 | d4125c6f 61 61 | bfe24cb7 62 62 | 28d2973d 63 63 | c7043c4b 64 64 | 9dde01fd 65 65 | 8a77aa30 66 66 | bb8645c3 67 67 | 9c32fadc 68 68 | 3beb8147 69 69 | 9e3f04df 70 70 | ace52998 71 71 | bebc14b3 72 72 | 32a55192 73 73 | ad5ffc6b 74 74 | 06b1cf6e 75 75 | 585ab217 76 76 | d6b6e0bf 77 77 | 991a22ae 78 78 | 8a2b280f 79 79 | 3db5e097 80 80 | 4e1c036b 81 81 | 631a0f79 82 82 | 7736c782 83 83 | 15c721d8 84 84 | b7ab56a2 85 85 | bdbe850d 86 86 | e6996139 87 87 | a95c56ca 88 88 | 1de19bc2 89 89 | ffe40d5f 90 90 | 0676a23d 91 91 | eb45e6e4 92 92 | 1d29846e 93 93 | 759c4a2e 94 94 | f9a7e394 95 95 | bc17b20f 96 96 | 4fbef8bb 97 97 | f888df5a 98 98 | 5dff9b29 99 99 | a35517fb 100 100 | b0ed6de7 101 101 | 2e946ee2 102 102 | 90b69619 103 103 | db781543 104 104 | 3f647607 105 105 | 9c9a6068 106 106 | 19ae4fbd 107 107 | 560f248f 108 108 | 74ce146b 109 109 | caa16f04 110 110 | 6e8c7c0e 111 111 | cfc23926 112 112 | 8b7d76a3 113 113 | 270b5720 114 114 | 9affccc2 115 115 | 5ef5cf67 116 116 | 418ae7fb 117 117 | f2159098 118 118 | 097de257 119 119 | 39cc9792 120 120 | 5f379ae0 121 121 | 813cb08c 122 122 | 657dc3b9 123 123 | 9b17f367 124 124 | dc0a11c7 125 125 | 21817e80 126 126 | aafb54fa 127 127 | e0e934af 128 128 | 311f127a 129 129 | 62169fb6 130 130 | e0a2ecca 131 131 | 2b0aadf8 132 132 | 3fb81b62 133 133 | 7be47200 134 134 | 9c65ce26 135 135 | abfc27b2 136 136 | b696e406 137 137 | c38a1d7d 138 138 | bd6ffe0f 139 139 | 49c94103 140 140 | f6dbd8fb 141 141 | 9df780c1 142 142 | 90044821 143 143 | 38aca36b 144 144 | 187dc42d 145 145 | be4cb064 146 146 | eabe170f 147 147 | 2628b8d6 148 148 | 9ab05b8f 149 149 | f1d06e8a 150 150 | b63c0277 151 151 | 7501d94a 152 152 | f1b645fc 153 153 | 46ec0a38 154 154 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C5.dict: -------------------------------------------------------------------------------- 1 | 25c83c98 2 2 | 4cf72387 3 3 | 43b19349 4 4 | 30903e74 5 5 | 384874ce 6 6 | 0942e0a7 7 7 | 307e775a 8 8 | 4ea20c7d 9 9 | a9411994 10 10 | b0530c50 11 11 | db679829 12 12 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C6.dict: -------------------------------------------------------------------------------- 1 | 7e0ccccf 2 2 | fbad5c96 3 3 | fe6b92e5 4 4 | 6f6d9be8 5 5 | 13718bbd 6 6 | 3bf701e7 7 7 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C7.dict: -------------------------------------------------------------------------------- 1 | 1c86e0eb 2 2 | df5c2d18 3 3 | e14874c9 4 4 | 372a0c4c 5 5 | 0c41b6a1 6 6 | 2555b4d9 7 7 | 88002ee1 8 8 | 01620311 9 9 | d385ea68 10 10 | 16401b7d 11 11 | b87f4a4a 12 12 | 49b74ebc 13 13 | f819e175 14 14 | b72ec13d 15 15 | 17c22666 16 16 | 271190b7 17 17 | cd846c62 18 18 | 7227c706 19 19 | 2aef1419 20 20 | 5b18f3d9 21 21 | 84c427f0 22 22 | afa309bd 23 23 | 85e1a170 24 24 | bc324536 25 25 | 36b796aa 26 26 | 88afd773 27 27 | 0d15142a 28 28 | a2f7459e 29 29 | 3babeb61 30 30 | 963d99df 31 31 | 4157815a 32 32 | 4a6c02fb 33 33 | 34cbc0af 34 34 | 7925e09b 35 35 | 412cb2ce 36 36 | 07d75b52 37 37 | 86651165 38 38 | 2b3ce8b7 39 39 | adbcc874 40 40 | 2be44e4e 41 41 | 3f4ec687 42 42 | 2e62d414 43 43 | 04277bf9 44 44 | 675e81f6 45 45 | 1171550e 46 46 | 555d7949 47 47 | 5e4f7d2b 48 48 | 7f2c5a6e 49 49 | 92ce5a7d 50 50 | 65c53f25 51 51 | cdc0ad95 52 52 | 5aef82b1 53 53 | c1e20400 54 54 | 4fb73f5f 55 55 | 33b15f2c 56 56 | 82f666b6 57 57 | d0519bab 58 58 | 6ad82e7a 59 59 | ae1dfa39 60 60 | 3d63f4e6 61 61 | 3baecfcb 62 62 | b28fa88b 63 63 | 21c0ea1a 64 64 | 71ccc25b 65 65 | d9aa9d97 66 66 | 41e1828d 67 67 | a90a99c5 68 68 | aafae983 69 69 | 124131fa 70 70 | 1c63b114 71 71 | 3a7402e7 72 72 | 2773eaab 73 73 | ec1a1856 74 74 | ad82323c 75 75 | 73e2fc5e 76 76 | 82cfb145 77 77 | 4f900c22 78 78 | 5a103f30 79 79 | 6b406125 80 80 | 622305e6 81 81 | 19d92932 82 82 | 559eb1e1 83 83 | 9d8d7034 84 84 | ade953a9 85 85 | e746fe19 86 86 | b3a5258d 87 87 | 33cca6fa 88 88 | d18f8f99 89 89 | 6da2fbd6 90 90 | 6d51a5b0 91 91 | 877d7f71 92 92 | 863329da 93 93 | 86b374da 94 94 | b01d50d5 95 95 | f33e4fa1 96 96 | 879ccac6 97 97 | 38eb9cf4 98 98 | 2e8a689b 99 99 | d7f3ff9f 100 100 | 63b7fcf7 101 101 | 6c338953 102 102 | cd98cc3d 103 103 | f14f1abf 104 104 | 295cc387 105 105 | 315c76f3 106 106 | 81bb0302 107 107 | ead731f4 108 108 | 1971812a 109 109 | 61beb1aa 110 110 | 0d00feb3 111 111 | a6624a99 112 112 | ca4fd8f8 113 113 | fcf0132a 114 114 | 53ef84c0 115 115 | 0bdc3959 116 116 | 71c23d74 117 117 | 5d7d417f 118 118 | e465eb54 119 119 | e3b8f237 120 120 | b647358a 121 121 | 32da4b59 122 122 | 9ec884dc 123 123 | fe4dce68 124 124 | 26817995 125 125 | 60d4eb86 126 126 | 47aa6d2e 127 127 | c642e324 128 128 | e7698644 129 129 | 02914429 130 130 | 15ce37bc 131 131 | 67b7679f 132 132 | d2bfca2c 133 133 | a7565058 134 134 | a5a83bdd 135 135 | 6005554a 136 136 | 788ff59f 137 137 | 9ff9bbde 138 138 | 9b98e9fc 139 139 | 468a0854 140 140 | e2de05d6 141 141 | ed0714a0 142 142 | c96de117 143 143 | b00f5963 144 144 | 50a5390e 145 145 | c78204a1 146 146 | 133643ef 147 147 | bf115338 148 148 | 6978304f 149 149 | d55d70ca 150 150 | d01ba955 151 151 | 368f84ee 152 152 | 8f572b5e 153 153 | d9f4e70f 154 154 | 8a850658 155 155 | 197b4575 156 156 | dc7659bd 157 157 | 2a37bb01 158 158 | 968a6688 159 159 | e24d7cb8 160 160 | e2ec9176 161 161 | 122c542a 162 162 | a1eeac3d 163 163 | 6cdb3998 164 164 | 8f801a1a 165 165 | 55fc227e 166 166 | 6a858837 167 167 | 91282309 168 168 | 00dd27a6 169 169 | 4d9d55ae 170 170 | 19672560 171 171 | 95402f9a 172 172 | 53e14bd5 173 173 | 9e8dab66 174 174 | f74ed3c0 175 175 | ff08f605 176 176 | 0d339a25 177 177 | 0492c809 178 178 | 24c48926 179 179 | 17cdc396 180 180 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C8.dict: -------------------------------------------------------------------------------- 1 | 0b153874 2 2 | 5b392875 3 3 | 1f89b562 4 4 | 37e4aa92 5 5 | 062b5529 6 6 | 51d76abe 7 7 | 64523cfa 8 8 | 985e3fcb 9 9 | f0e5818a 10 10 | c8ddd494 11 11 | 25239412 12 12 | 966033bc 13 13 | a61cc0ef 14 14 | e8663cb1 15 15 | a6d156f4 16 16 | 66f29b89 17 17 | d7c4a8f5 18 18 | 56563555 19 19 | 7b6fecd5 20 20 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/C9.dict: -------------------------------------------------------------------------------- 1 | a73ee510 2 2 | 7cc72ec2 3 3 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I1.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 1.0 3 3 | 2.0 4 4 | 8.0 5 5 | 5.0 6 6 | 4.0 7 7 | 3.0 8 8 | 9.0 9 9 | 7.0 10 10 | 19.0 11 11 | 11.0 12 12 | 10.0 13 13 | 37.0 14 14 | 12.0 15 15 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I10.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 1.0 3 3 | 2.0 4 4 | 3.0 5 5 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I11.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 0.0 3 3 | 2.0 4 4 | 3.0 5 5 | 4.0 6 6 | 5.0 7 7 | 9.0 8 8 | 7.0 9 9 | 10.0 10 10 | 6.0 11 11 | 21.0 12 12 | 32.0 13 13 | 16.0 14 14 | 15.0 15 15 | 11.0 16 16 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I12.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 1.0 3 3 | 2.0 4 4 | 7.0 5 5 | 3.0 6 6 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I13.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 2.0 3 3 | 3.0 4 4 | 5.0 5 5 | 4.0 6 6 | 0.0 7 7 | 6.0 8 8 | 7.0 9 9 | 11.0 10 10 | 18.0 11 11 | 12.0 12 12 | 25.0 13 13 | 16.0 14 14 | 14.0 15 15 | 35.0 16 16 | 43.0 17 17 | 36.0 18 18 | 20.0 19 19 | 9.0 20 20 | 15.0 21 21 | 22.0 22 22 | 31.0 23 23 | 10.0 24 24 | 46.0 25 25 | 24.0 26 26 | 27.0 27 27 | 40.0 28 28 | 62.0 29 29 | 19.0 30 30 | 39.0 31 31 | 30.0 32 32 | 63.0 33 33 | 13.0 34 34 | 17.0 35 35 | 102.0 36 36 | 21.0 37 37 | 33.0 38 38 | 38.0 39 39 | 88.0 40 40 | 29.0 41 41 | 32.0 42 42 | 26.0 43 43 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I2.dict: -------------------------------------------------------------------------------- 1 | 1 2 2 | 0 3 3 | -1 4 4 | 2 5 5 | 5 6 6 | 3 7 7 | 4 8 8 | 10 9 9 | 49 10 10 | 7 11 11 | 19 12 12 | 8 13 13 | 13 14 14 | 370 15 15 | 11 16 16 | 35 17 17 | 179 18 18 | 57 19 19 | 18 20 20 | 27 21 21 | 22 22 22 | 6 23 23 | 14 24 24 | 17 25 25 | 38 26 26 | 82 27 27 | 24 28 28 | 105 29 29 | 85 30 30 | 43 31 31 | 26 32 32 | 302 33 33 | 251 34 34 | 212 35 35 | 779 36 36 | 72 37 37 | 2865 38 38 | 119 39 39 | 25 40 40 | 180 41 41 | 84 42 42 | 54 43 43 | 58 44 44 | 30 45 45 | 68 46 46 | 304 47 47 | 64 48 48 | 53 49 49 | 498 50 50 | 90 51 51 | 29 52 52 | 78 53 53 | 113 54 54 | 1849 55 55 | 65 56 56 | 164 57 57 | 15 58 58 | 152 59 59 | 183 60 60 | 12 61 61 | 237 62 62 | 74 63 63 | 2921 64 64 | 55 65 65 | 493 66 66 | 248 67 67 | 3001 68 68 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I3.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 2.0 3 3 | 3.0 4 4 | 4.0 5 5 | 5.0 6 6 | 6.0 7 7 | 7.0 8 8 | 8.0 9 9 | 9.0 10 10 | 13.0 11 11 | 20.0 12 12 | 23.0 13 13 | 14.0 14 14 | 10.0 15 15 | 19.0 16 16 | 52.0 17 17 | 60.0 18 18 | 29.0 19 19 | 34.0 20 20 | 11.0 21 21 | 25.0 22 22 | 37.0 23 23 | 260.0 24 24 | 104.0 25 25 | 63.0 26 26 | 30.0 27 27 | 36.0 28 28 | 190.0 29 29 | 24.0 30 30 | 71.0 31 31 | 22.0 32 32 | 61.0 33 33 | 53.0 34 34 | 94.0 35 35 | 0.0 36 36 | 46.0 37 37 | 131.0 38 38 | 18.0 39 39 | 75.0 40 40 | 17.0 41 41 | 2815.0 42 42 | 28.0 43 43 | 27.0 44 44 | 44.0 45 45 | 33.0 46 46 | 603.0 47 47 | 39.0 48 48 | 21.0 49 49 | 66.0 50 50 | 15.0 51 51 | 76.0 52 52 | 155.0 53 53 | 535.0 54 54 | 113.0 55 55 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I4.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 3.0 3 3 | 2.0 4 4 | 5.0 5 5 | 4.0 6 6 | 0.0 7 7 | 6.0 8 8 | 7.0 9 9 | 11.0 10 10 | 12.0 11 11 | 22.0 12 12 | 20.0 13 13 | 10.0 14 14 | 14.0 15 15 | 9.0 16 16 | 15.0 17 17 | 23.0 18 18 | 36.0 19 19 | 16.0 20 20 | 18.0 21 21 | 8.0 22 22 | 35.0 23 23 | 27.0 24 24 | 40.0 25 25 | 25.0 26 26 | 30.0 27 27 | 13.0 28 28 | 21.0 29 29 | 33.0 30 30 | 38.0 31 31 | 87.0 32 32 | 29.0 33 33 | 24.0 34 34 | 17.0 35 35 | 46.0 36 36 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I5.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 0.0 3 3 | 2.0 4 4 | 5.0 5 5 | 48.0 6 6 | 8.0 7 7 | 4.0 8 8 | 1464.0 9 9 | 11.0 10 10 | 3150.0 11 11 | 270.0 12 12 | 1499.0 13 13 | 357.0 14 14 | 92.0 15 15 | 17668.0 16 16 | 30251.0 17 17 | 2013.0 18 18 | 16836.0 19 19 | 1990.0 20 20 | 1470.0 21 21 | 1787.0 22 22 | 4684.0 23 23 | 30.0 24 24 | 5533.0 25 25 | 18424.0 26 26 | 732.0 27 27 | 5022.0 28 28 | 507333.0 29 29 | 10195.0 30 30 | 2200.0 31 31 | 36.0 32 32 | 239721.0 33 33 | 1572.0 34 34 | 1700.0 35 35 | 2939.0 36 36 | 18.0 37 37 | 14404.0 38 38 | 3412.0 39 39 | 21.0 40 40 | 3169.0 41 41 | 4939.0 42 42 | 59865.0 43 43 | 16732.0 44 44 | 1632.0 45 45 | 10324.0 46 46 | 676.0 47 47 | 3316.0 48 48 | 1238.0 49 49 | 11862.0 50 50 | 112.0 51 51 | 17405.0 52 52 | 3116.0 53 53 | 23584.0 54 54 | 13528.0 55 55 | 151.0 56 56 | 17907.0 57 57 | 10.0 58 58 | 3667.0 59 59 | 1046.0 60 60 | 75211.0 61 61 | 7814.0 62 62 | 24.0 63 63 | 7476.0 64 64 | 1526.0 65 65 | 475.0 66 66 | 10791.0 67 67 | 528.0 68 68 | 10467.0 69 69 | 27753.0 70 70 | 3732.0 71 71 | 178.0 72 72 | 6613.0 73 73 | 29111.0 74 74 | 21659.0 75 75 | 4325.0 76 76 | 2712.0 77 77 | 1732.0 78 78 | 37.0 79 79 | 24513.0 80 80 | 13599.0 81 81 | 1568.0 82 82 | 1751.0 83 83 | 269.0 84 84 | 14447.0 85 85 | 235065.0 86 86 | 246.0 87 87 | 14747.0 88 88 | 4317.0 89 89 | 11738.0 90 90 | 1517.0 91 91 | 3751.0 92 92 | 118.0 93 93 | 1396.0 94 94 | 15.0 95 95 | 11534.0 96 96 | 383.0 97 97 | 1683.0 98 98 | 1455.0 99 99 | 12245.0 100 100 | 285.0 101 101 | 5091.0 102 102 | 35203.0 103 103 | 11774.0 104 104 | 3008.0 105 105 | 12143.0 106 106 | 190.0 107 107 | 25660.0 108 108 | 28.0 109 109 | 10346.0 110 110 | 84.0 111 111 | 8913.0 112 112 | 20553.0 113 113 | 1539.0 114 114 | 1920.0 115 115 | 70.0 116 116 | 11665.0 117 117 | 548.0 118 118 | 1847.0 119 119 | 6431.0 120 120 | 20646.0 121 121 | 306036.0 122 122 | 1784.0 123 123 | 4501.0 124 124 | 5778.0 125 125 | 39424.0 126 126 | 5646.0 127 127 | 1795.0 128 128 | 2865.0 129 129 | 2940.0 130 130 | 4619.0 131 131 | 10327.0 132 132 | 1853.0 133 133 | 7.0 134 134 | 5781.0 135 135 | 3379.0 136 136 | 3011.0 137 137 | 63.0 138 138 | 8684.0 139 139 | 351.0 140 140 | 1398.0 141 141 | 17991.0 142 142 | 6426.0 143 143 | 14496.0 144 144 | 4108.0 145 145 | 42024.0 146 146 | 40.0 147 147 | 299.0 148 148 | 293044.0 149 149 | 39343.0 150 150 | 19088.0 151 151 | 79620.0 152 152 | 41706.0 153 153 | 872.0 154 154 | 43205.0 155 155 | 124027.0 156 156 | 300.0 157 157 | 112878.0 158 158 | 3134.0 159 159 | 2910.0 160 160 | 125.0 161 161 | 6461.0 162 162 | 2119.0 163 163 | 6288.0 164 164 | 148.0 165 165 | 61968.0 166 166 | 3036.0 167 167 | 1607.0 168 168 | 203.0 169 169 | 138.0 170 170 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I6.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 11.0 3 3 | 3.0 4 4 | 1.0 5 5 | 20.0 6 6 | 4.0 7 7 | 2.0 8 8 | 5.0 9 9 | 6.0 10 10 | 9.0 11 11 | 22.0 12 12 | 164.0 13 13 | 61.0 14 14 | 65.0 15 15 | 36.0 16 16 | 21.0 17 17 | 39.0 18 18 | 79.0 19 19 | 104.0 20 20 | 38.0 21 21 | 63.0 22 22 | 15.0 23 23 | 170.0 24 24 | 32.0 25 25 | 87.0 26 26 | 24.0 27 27 | 50.0 28 28 | 247.0 29 29 | 200.0 30 30 | 142.0 31 31 | 217.0 32 32 | 26.0 33 33 | 461.0 34 34 | 436.0 35 35 | 7.0 36 36 | 163.0 37 37 | 19.0 38 38 | 147.0 39 39 | 140.0 40 40 | 292.0 41 41 | 13.0 42 42 | 30.0 43 43 | 72.0 44 44 | 59.0 45 45 | 42.0 46 46 | 112.0 47 47 | 119.0 48 48 | 1033.0 49 49 | 210.0 50 50 | 43.0 51 51 | 70.0 52 52 | 37.0 53 53 | 328.0 54 54 | 69.0 55 55 | 490.0 56 56 | 646.0 57 57 | 550.0 58 58 | 853.0 59 59 | 73.0 60 60 | 90.0 61 61 | 67.0 62 62 | 68.0 63 63 | 115.0 64 64 | 10.0 65 65 | 96.0 66 66 | 136.0 67 67 | 184.0 68 68 | 16.0 69 69 | 66.0 70 70 | 49.0 71 71 | 14.0 72 72 | 53.0 73 73 | 648.0 74 74 | 126.0 75 75 | 888.0 76 76 | 895.0 77 77 | 125.0 78 78 | 17.0 79 79 | 1820.0 80 80 | 84.0 81 81 | 31.0 82 82 | 680.0 83 83 | 25.0 84 84 | 2106.0 85 85 | 47.0 86 86 | 122.0 87 87 | 93.0 88 88 | 575.0 89 89 | 12.0 90 90 | 153.0 91 91 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I7.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 1.0 3 3 | 2.0 4 4 | 4.0 5 5 | 5.0 6 6 | 9.0 7 7 | 6.0 8 8 | 11.0 9 9 | 8.0 10 10 | 10.0 11 11 | 3.0 12 12 | 12.0 13 13 | 14.0 14 14 | 25.0 15 15 | 17.0 16 16 | 34.0 17 17 | 24.0 18 18 | 15.0 19 19 | 19.0 20 20 | 33.0 21 21 | 41.0 22 22 | 23.0 23 23 | 22.0 24 24 | 30.0 25 25 | 62.0 26 26 | 27.0 27 27 | 29.0 28 28 | 110.0 29 29 | 172.0 30 30 | 26.0 31 31 | 50.0 32 32 | 248.0 33 33 | 13.0 34 34 | 69.0 35 35 | 21.0 36 36 | 20.0 37 37 | 37.0 38 38 | 70.0 39 39 | 301.0 40 40 | 80.0 41 41 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I8.dict: -------------------------------------------------------------------------------- 1 | 0.0 2 2 | 1.0 3 3 | 3.0 4 4 | 2.0 5 5 | 4.0 6 6 | 5.0 7 7 | 19.0 8 8 | 35.0 9 9 | 10.0 10 10 | 7.0 11 11 | 6.0 12 12 | 32.0 13 13 | 8.0 14 14 | 16.0 15 15 | 30.0 16 16 | 14.0 17 17 | 9.0 18 18 | 42.0 19 19 | 33.0 20 20 | 25.0 21 21 | 12.0 22 22 | 18.0 23 23 | 37.0 24 24 | 17.0 25 25 | 22.0 26 26 | 15.0 27 27 | 41.0 28 28 | 43.0 29 29 | 13.0 30 30 | 34.0 31 31 | 21.0 32 32 | 49.0 33 33 | 20.0 34 34 | 11.0 35 35 | 47.0 36 36 | 27.0 37 37 | 24.0 38 38 | 48.0 39 39 | 28.0 40 40 | 31.0 41 41 | 23.0 42 42 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/I9.dict: -------------------------------------------------------------------------------- 1 | 1.0 2 2 | 4.0 3 3 | 0.0 4 4 | 20.0 5 5 | 98.0 6 6 | 37.0 7 7 | 2.0 8 8 | 5.0 9 9 | 11.0 10 10 | 3.0 11 11 | 16.0 12 12 | 68.0 13 13 | 160.0 14 14 | 135.0 15 15 | 25.0 16 16 | 33.0 17 17 | 55.0 18 18 | 281.0 19 19 | 21.0 20 20 | 6.0 21 21 | 32.0 22 22 | 19.0 23 23 | 113.0 24 24 | 13.0 25 25 | 89.0 26 26 | 8.0 27 27 | 26.0 28 28 | 111.0 29 29 | 30.0 30 30 | 9.0 31 31 | 432.0 32 32 | 10.0 33 33 | 18.0 34 34 | 523.0 35 35 | 29.0 36 36 | 46.0 37 37 | 489.0 38 38 | 126.0 39 39 | 23.0 40 40 | 231.0 41 41 | 192.0 42 42 | 123.0 43 43 | 437.0 44 44 | 103.0 45 45 | 39.0 46 46 | 753.0 47 47 | 61.0 48 48 | 87.0 49 49 | 69.0 50 50 | 144.0 51 51 | 48.0 52 52 | 47.0 53 53 | 35.0 54 54 | 288.0 55 55 | 148.0 56 56 | 40.0 57 57 | 803.0 58 58 | 585.0 59 59 | 96.0 60 60 | 200.0 61 61 | 74.0 62 62 | 151.0 63 63 | 242.0 64 64 | 62.0 65 65 | 117.0 66 66 | 573.0 67 67 | 140.0 68 68 | 568.0 69 69 | 196.0 70 70 | 412.0 71 71 | 73.0 72 72 | 78.0 73 73 | 22.0 74 74 | 502.0 75 75 | 146.0 76 76 | 269.0 77 77 | 88.0 78 78 | 67.0 79 79 | 168.0 80 80 | 276.0 81 81 | 1034.0 82 82 | 105.0 83 83 | 102.0 84 84 | 184.0 85 85 | 163.0 86 86 | 60.0 87 87 | 59.0 88 88 | 82.0 89 89 | 272.0 90 90 | 127.0 91 91 | 175.0 92 92 | 121.0 93 93 | 108.0 94 94 | 7.0 95 95 | 862.0 96 96 | 58.0 97 97 | 84.0 98 98 | 722.0 99 99 | 45.0 100 100 | 318.0 101 101 | 24.0 102 102 | 49.0 103 103 | 334.0 104 104 | 95.0 105 105 | 54.0 106 106 | 107.0 107 107 | 114.0 108 108 | 214.0 109 109 | 15.0 110 110 | 508.0 111 111 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C1.dict: -------------------------------------------------------------------------------- 1 | 05db9164 85 2 | 68fd1e64 36 3 | 8cf07265 16 4 | 5a9ed9b0 13 5 | be589b51 8 6 | 39af2607 6 7 | 5bfa8ab5 5 8 | 9a89b36c 2 9 | 09ca0b81 2 10 | 87552397 2 11 | f473b8dc 2 12 | 17f69355 2 13 | ae82ea21 2 14 | 3b65d647 2 15 | 2d4ea12b 1 16 | 241546e0 1 17 | f434fac1 1 18 | 75ac2fe6 1 19 | 7e5c2ff4 1 20 | be30ca83 1 21 | 98237733 1 22 | fc9c62bb 1 23 | de4dac42 1 24 | 52f1e825 1 25 | 0e78bd46 1 26 | 87773c45 1 27 | da4eff0f 1 28 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C10.dict: -------------------------------------------------------------------------------- 1 | 3b08e48b 52 2 | e70742b0 3 3 | fbbf2c95 2 4 | aed3d80e 2 5 | 67eea4ef 2 6 | 0e9ead52 2 7 | 8f48ce11 1 8 | ab9456b4 1 9 | acce978c 1 10 | 2462946f 1 11 | 534fc986 1 12 | 49d5fa15 1 13 | 5fcee6b1 1 14 | 012f45e7 1 15 | 78d5c363 1 16 | 00f2b452 1 17 | 23de5a4a 1 18 | e8f7c7e8 1 19 | 2bf8bed1 1 20 | f6540b40 1 21 | 8b7e0638 1 22 | 4c89c3af 1 23 | ac473633 1 24 | b393caa5 1 25 | 4e979b5e 1 26 | bac95df6 1 27 | 56c80038 1 28 | 4f1c6ae7 1 29 | 8a99abc1 1 30 | 18e09007 1 31 | da272362 1 32 | c5fe5cb9 1 33 | 4b415bb3 1 34 | 4ea0d483 1 35 | d9b71390 1 36 | 23724df8 1 37 | f6c6d9f8 1 38 | 15fa156b 1 39 | a08eee5a 1 40 | b0c25211 1 41 | 7fdb06fe 1 42 | 0f6ee8ce 1 43 | 631ddef6 1 44 | 451bd4e4 1 45 | 94e68c1d 1 46 | 98d5faa2 1 47 | 4b8a7639 1 48 | cfa407de 1 49 | e89812b3 1 50 | e6003298 1 51 | dc790dda 1 52 | a1ee64a6 1 53 | f6f942d1 1 54 | aa91245c 1 55 | 1a428761 1 56 | 22a99f9d 1 57 | bdfd8a02 1 58 | f8f0e86f 1 59 | 9b8e7680 1 60 | 47e01053 1 61 | f1311559 1 62 | f710483a 1 63 | 51e04895 1 64 | 66c281d9 1 65 | b3d657b8 1 66 | 0eca1729 1 67 | c9ac91cb 1 68 | 7cda6c86 1 69 | fb999b75 1 70 | 78ed0c4d 1 71 | 2e48a61d 1 72 | afc4d756 1 73 | fbc2dc95 1 74 | e5330e23 1 75 | 9ca0fba4 1 76 | 5a01afad 1 77 | 49d1ad89 1 78 | efea433b 1 79 | f3b83678 1 80 | 493b74f2 1 81 | f918493f 1 82 | aed8755c 1 83 | a5270a71 1 84 | ff4776d6 1 85 | 267caf03 1 86 | c6c8dd7c 1 87 | 50c56209 1 88 | f0c8b1be 1 89 | f9065d00 1 90 | eff5602f 1 91 | aa6da1ef 1 92 | ab9e9acf 1 93 | cf500eab 1 94 | 07c7b3f7 1 95 | 9d4b7dce 1 96 | b6900243 1 97 | 575cd9b2 1 98 | 25e9e422 1 99 | 19feb952 1 100 | 567ba666 1 101 | 5ea6fa93 1 102 | b1442b2a 1 103 | 8c8662e4 1 104 | 2a47dab8 1 105 | 56ef22e9 1 106 | 1ce1e29d 1 107 | f1b39deb 1 108 | 995c2a7f 1 109 | ac82cac0 1 110 | 0466803a 1 111 | 64145819 1 112 | e8e8c8ac 1 113 | 6f0b6a04 1 114 | 1d56e466 1 115 | 897188be 1 116 | 27f4bf82 1 117 | 3094253e 1 118 | 903f1f14 1 119 | 6c47047a 1 120 | 03e48276 1 121 | e851ff7b 1 122 | 6f07d986 1 123 | 801e8634 1 124 | 12bb8262 1 125 | b173a655 1 126 | b1aa986c 1 127 | dcbc7c2b 1 128 | ff5a1549 1 129 | 98bd7a24 1 130 | a8d1ae09 1 131 | 5162b19c 1 132 | 97d3ddaa 1 133 | 5ba575e7 1 134 | 39046df2 1 135 | ec4d75ea 1 136 | 1722d4c8 1 137 | 13ba96b0 1 138 | afa26c81 1 139 | 75d852fc 1 140 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C11.dict: -------------------------------------------------------------------------------- 1 | 755e4a50 4 2 | e51ddf94 4 3 | 319687c9 4 4 | a7b606c4 3 5 | 636405ac 3 6 | c4adf918 3 7 | 4ba74619 2 8 | c6cb726f 2 9 | ec88dd34 2 10 | 419d31d4 2 11 | 9f0003f4 2 12 | f1b78ab4 2 13 | 922bbb91 2 14 | 7b5deffb 2 15 | 7940fc2a 2 16 | 7f8ffe57 2 17 | 20ec800a 2 18 | 55065437 2 19 | 6153cf57 1 20 | 3547565f 1 21 | feb49a68 1 22 | 26a64614 1 23 | 0ec1e215 1 24 | 9625b211 1 25 | d027c970 1 26 | 720446f5 1 27 | 41b3f655 1 28 | 77212bd7 1 29 | a4ea009a 1 30 | 2bcfb78f 1 31 | 7373475d 1 32 | 0e4ebdac 1 33 | df7e8e0b 1 34 | 15eced00 1 35 | 565788d0 1 36 | bffe9c30 1 37 | 7056d78a 1 38 | 0cb221d0 1 39 | 88196a93 1 40 | 1cba690a 1 41 | b9ec9192 1 42 | a2c1d2d9 1 43 | 39dd23e7 1 44 | 4352b29b 1 45 | 46031dab 1 46 | 364e8b48 1 47 | 258875ea 1 48 | 7e2c5c15 1 49 | 4a77ddca 1 50 | 031ba22d 1 51 | 91e8fc27 1 52 | 25f4f871 1 53 | d21494f8 1 54 | e0c3cae0 1 55 | ad2bc6f4 1 56 | 69926409 1 57 | 010265ac 1 58 | 60a1c175 1 59 | 6a447eb3 1 60 | 38914a66 1 61 | c1ee56d0 1 62 | ee26f284 1 63 | af6a4ffc 1 64 | 96a54d80 1 65 | bc862fb6 1 66 | 5cab60cb 1 67 | 6e647667 1 68 | b6358cf2 1 69 | c804061c 1 70 | c3a20c8d 1 71 | 9ba53fcc 1 72 | 67841877 1 73 | b4bb4248 1 74 | 06474f17 1 75 | a04e019f 1 76 | 7ca25fd2 1 77 | 4e46b019 1 78 | 3f31bb3e 1 79 | 7c4f062c 1 80 | 8487a168 1 81 | 278636c9 1 82 | d54a5851 1 83 | 91875c79 1 84 | 51ef0313 1 85 | 29e4ad33 1 86 | 0bc63bd0 1 87 | 30b2a438 1 88 | 9f7c4fc1 1 89 | 6c27619d 1 90 | 7bbe6c06 1 91 | 61af8052 1 92 | 5bd8a4ae 1 93 | a89c45cb 1 94 | 07678d3e 1 95 | cd1b7031 1 96 | e931c5cd 1 97 | 29473fc8 1 98 | 779482a8 1 99 | 553ebda3 1 100 | dcc84468 1 101 | 7d5ece85 1 102 | b7094596 1 103 | e9c32980 1 104 | 5307d8e2 1 105 | 81a23494 1 106 | 640d8b63 1 107 | f161ec47 1 108 | a0060bca 1 109 | d650f1bd 1 110 | 643327e3 1 111 | ae4c531b 1 112 | 52d28861 1 113 | 01a88896 1 114 | 1aa6cf31 1 115 | 98579192 1 116 | 88731e13 1 117 | 9ee336c5 1 118 | 5b906b78 1 119 | 68357db6 1 120 | 8b92652b 1 121 | 0ad37b4b 1 122 | c30e7b00 1 123 | 82af9502 1 124 | f9d0f35e 1 125 | ff78732c 1 126 | 16faa766 1 127 | f72b4bd1 1 128 | 69afd526 1 129 | f697a983 1 130 | c19406bc 1 131 | 9c9d4957 1 132 | f89fe102 1 133 | a60de4e5 1 134 | b26d847d 1 135 | b85b416c 1 136 | ad757a5a 1 137 | b91c2548 1 138 | 159499d1 1 139 | 5f5e6091 1 140 | 84bc66d0 1 141 | 41516dc9 1 142 | 78f92234 1 143 | 2e15139e 1 144 | 9cf09d42 1 145 | c0edaa76 1 146 | 6dc69f41 1 147 | 434d6c13 1 148 | da89cb9b 1 149 | d9b1e3ff 1 150 | 606866a9 1 151 | 61ba19ac 1 152 | f25fe7e9 1 153 | 03458ded 1 154 | 6fc6ad29 1 155 | 7fee217f 1 156 | 2e9d5aa6 1 157 | 5874c9c9 1 158 | f295b28a 1 159 | d8d7567b 1 160 | eb9eb939 1 161 | 9e511730 1 162 | 2591ca7a 1 163 | c82f1813 1 164 | 2d9eed4d 1 165 | e90cbbe1 1 166 | 6939835e 1 167 | 7d756b25 1 168 | ba0f9e8a 1 169 | d79cc967 1 170 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C12.dict: -------------------------------------------------------------------------------- 1 | dfbb09fb 7 2 | 9f32b866 4 3 | 21a23bfe 3 4 | 8fe001f4 2 5 | 75c79158 2 6 | b99ddbc8 2 7 | 8ebd48c3 2 8 | 6532318c 2 9 | d8c29807 2 10 | bb669e25 2 11 | 654bb16a 2 12 | fb991bf5 2 13 | 0cdb9a18 2 14 | ae1bb660 1 15 | 8882c6cd 1 16 | a5b0521a 1 17 | f24b551c 1 18 | 3c5900b5 1 19 | 18917580 1 20 | 1b2022a0 1 21 | 33ec1af8 1 22 | d8acd6f9 1 23 | 7c5cd1c7 1 24 | 8cdc4941 1 25 | 78a16776 1 26 | 506bb280 1 27 | e0d76380 1 28 | 153ff04a 1 29 | cf724373 1 30 | 38176faa 1 31 | ab1307ec 1 32 | d06dc48e 1 33 | eb43b195 1 34 | 617c70e9 1 35 | e00462bb 1 36 | 49fee879 1 37 | 538a49e7 1 38 | 8065cc64 1 39 | 9c841b74 1 40 | 33c282f5 1 41 | 424ba327 1 42 | 5ea407f3 1 43 | f21f7d11 1 44 | 4baf63a1 1 45 | 752343e3 1 46 | 6bca71b1 1 47 | 156f99ef 1 48 | 4df84614 1 49 | d63df4e6 1 50 | e802f466 1 51 | 74138b6d 1 52 | 22cad86a 1 53 | c3cdaf85 1 54 | 553e02c3 1 55 | 67b31aac 1 56 | d7cd5e08 1 57 | 6aaba33c 1 58 | 34a238e0 1 59 | 317bfd7d 1 60 | 233fde4c 1 61 | b9b3b7ef 1 62 | d286aff3 1 63 | 72a52d4c 1 64 | b345f76c 1 65 | 3563ab62 1 66 | 680d7261 1 67 | 94a1cc80 1 68 | a5ab10e6 1 69 | cc606cbe 1 70 | c47972c1 1 71 | 9da0a604 1 72 | e5b118b4 1 73 | cc22efeb 1 74 | ed5cfa27 1 75 | 2a064dba 1 76 | 23bc90a1 1 77 | 422e8212 1 78 | eb83af8a 1 79 | 05e68866 1 80 | 49507531 1 81 | c35b992b 1 82 | 733bbdf2 1 83 | 91f87a19 1 84 | 4ea4e9d5 1 85 | 9b665b9c 1 86 | 0b7afe9e 1 87 | 526eb908 1 88 | 42bee2f2 1 89 | 4bba7327 1 90 | 30ed85b5 1 91 | 3a802941 1 92 | 359d194a 1 93 | 624029b0 1 94 | 7e7a6264 1 95 | f6d35a1e 1 96 | ffcedb7a 1 97 | d1fb0874 1 98 | 5e76bfca 1 99 | 2d15871c 1 100 | 76517c94 1 101 | 49a5dd4f 1 102 | 9148b680 1 103 | 63314ad3 1 104 | 2436ff75 1 105 | 96fa9c01 1 106 | 3b917db0 1 107 | 77f29381 1 108 | 61ea5878 1 109 | 3317996d 1 110 | f6148255 1 111 | 1310a7dd 1 112 | 6aa4c9a8 1 113 | 093a009d 1 114 | a4b73157 1 115 | f993725b 1 116 | 9e82f486 1 117 | c0d8d575 1 118 | 07cecd0e 1 119 | 8d526153 1 120 | 7e98747a 1 121 | 765cb3ea 1 122 | ad46dc69 1 123 | 842839b9 1 124 | 3263408b 1 125 | 5d84eb4a 1 126 | beb94e00 1 127 | f9bf526c 1 128 | 11fcf7fa 1 129 | 59a625a9 1 130 | a4425bd8 1 131 | 99ec4e40 1 132 | a2f4e8b5 1 133 | 79b98d3d 1 134 | 252162ec 1 135 | 2ea11a49 1 136 | 7ac672aa 1 137 | 9ffdd484 1 138 | 6647ec34 1 139 | 167ba71f 1 140 | 4640585e 1 141 | 28283f53 1 142 | fa5eca9d 1 143 | 8f1a16da 1 144 | 8a433ec1 1 145 | 6536f6f8 1 146 | 2849c511 1 147 | 2d72bfb9 1 148 | 704629a2 1 149 | 975f89b0 1 150 | 16a886e7 1 151 | 539c5644 1 152 | f0c1019c 1 153 | a0015d5d 1 154 | 25644e7d 1 155 | 8d2c704a 1 156 | d28c687a 1 157 | ad972965 1 158 | a66cfe4b 1 159 | de2ecc9c 1 160 | bdf9cff8 1 161 | 0a02e48e 1 162 | 7161e106 1 163 | 0c87b3e9 1 164 | 887a0c20 1 165 | af6ad6b6 1 166 | 651d80c6 1 167 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C13.dict: -------------------------------------------------------------------------------- 1 | 5978055e 4 2 | 85dbe138 4 3 | 3516f6e6 4 4 | 62036f49 4 5 | eae197fd 3 6 | 31b42deb 3 7 | 00e20e7b 3 8 | 94881fc3 3 9 | 879fa878 2 10 | 176d07bc 2 11 | 779f824b 2 12 | 0159bf9f 2 13 | dc1d72e4 2 14 | 08961fd0 2 15 | 5afd9e51 2 16 | 6e5da64f 2 17 | ad61640d 2 18 | 269889be 2 19 | 46f42a63 2 20 | 18a5e4b8 2 21 | 80dcea18 2 22 | 949ea585 2 23 | 769a1844 1 24 | 12880350 1 25 | 8978af5c 1 26 | 51351dd6 1 27 | 44af41ef 1 28 | dccbd94b 1 29 | 034e5f3b 1 30 | ce5114a2 1 31 | 7203f04e 1 32 | 1e9339bc 1 33 | e6fc496d 1 34 | cfbfce5c 1 35 | 84c02464 1 36 | bd251a95 1 37 | 8e7ad399 1 38 | e62d6c68 1 39 | 08775c1b 1 40 | ea18ebd8 1 41 | 1211c647 1 42 | 1d0f2da8 1 43 | df5886ca 1 44 | ea31804b 1 45 | 5f4de855 1 46 | 377af8aa 1 47 | 34cbb1bc 1 48 | dcc8f90a 1 49 | 91a1b611 1 50 | bb7a2c12 1 51 | 9ff13f22 1 52 | e67cdf97 1 53 | f47f13e4 1 54 | e8df3343 1 55 | 39ccb769 1 56 | 2fc3058f 1 57 | 0e5bc979 1 58 | 9b9e44d2 1 59 | 9dfda2b9 1 60 | c281c227 1 61 | ebd756bd 1 62 | 48b975db 1 63 | 2a1579a2 1 64 | dbe5226f 1 65 | 4f487d87 1 66 | ce418dc9 1 67 | 61c65daf 1 68 | 1cc9ac51 1 69 | 7ce5cdf0 1 70 | 42156eb4 1 71 | 781f4d92 1 72 | 3eb2f9dc 1 73 | 2ec4b007 1 74 | 07a906b4 1 75 | d3802338 1 76 | 07c072b7 1 77 | c6378246 1 78 | 76dfc898 1 79 | 636195f8 1 80 | b87a829f 1 81 | a36387e6 1 82 | ea519e47 1 83 | e8f6ccfe 1 84 | 80467802 1 85 | ef007ecc 1 86 | aebdb575 1 87 | 2b9fb512 1 88 | 61e43922 1 89 | ea1f21b7 1 90 | 2f3ee7fb 1 91 | 7a3043c0 1 92 | a4fafa5b 1 93 | 4d8657a2 1 94 | 580817cd 1 95 | aa902020 1 96 | 7d65a908 1 97 | 49fe3d4e 1 98 | b72482f5 1 99 | e4b5ce61 1 100 | 1f9d2c38 1 101 | 3fe840eb 1 102 | 8368e64b 1 103 | 3796b047 1 104 | 18041128 1 105 | 1e18519e 1 106 | 22d23aac 1 107 | 863f8f8a 1 108 | 478ebe53 1 109 | 01c2bbc7 1 110 | a4b04123 1 111 | dfb2a8fa 1 112 | 3b03d76e 1 113 | 2723b688 1 114 | 094e10ad 1 115 | c95c9034 1 116 | 768f6658 1 117 | c5bc951e 1 118 | f9d99d81 1 119 | 4f8670dc 1 120 | 90dca23e 1 121 | b55434a9 1 122 | 9b656adc 1 123 | 4422e246 1 124 | 01f32ac8 1 125 | 84def884 1 126 | e5643e9a 1 127 | 07fdb6cc 1 128 | 9325eab4 1 129 | 83e6ca2e 1 130 | 605bbc24 1 131 | 38016f21 1 132 | c3f71b59 1 133 | 93b18cb5 1 134 | a03da696 1 135 | 4ab361e1 1 136 | aa655a2f 1 137 | bcb2e77c 1 138 | 8b11c4b8 1 139 | 9be66b48 1 140 | f66b043c 1 141 | 34fc0029 1 142 | fca56425 1 143 | 7301027a 1 144 | 165642be 1 145 | cd98af01 1 146 | e40e52ae 1 147 | fa17cc68 1 148 | dd183b4c 1 149 | 8019075f 1 150 | b0c30eeb 1 151 | 6e2907f1 1 152 | 0a9ac04c 1 153 | 740c210d 1 154 | f5df7ab9 1 155 | 47d6a934 1 156 | 2b54e95d 1 157 | 04e4a7e0 1 158 | 9b7d472e 1 159 | a4c7bffd 1 160 | 6f833c7a 1 161 | 4e4dd817 1 162 | 115d29f4 1 163 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C14.dict: -------------------------------------------------------------------------------- 1 | 07d13a8f 70 2 | b28479f6 63 3 | 1adce6ef 29 4 | 64c94865 9 5 | 051219e6 5 6 | cfef1c29 5 7 | 8ceecbc8 3 8 | f7c1b33f 3 9 | f862f261 3 10 | 91233270 2 11 | e8dce07a 1 12 | 32813e21 1 13 | ec19f520 1 14 | d2dfe871 1 15 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C15.dict: -------------------------------------------------------------------------------- 1 | dfab705f 4 2 | b5de5956 4 3 | 52baadf5 4 4 | 8ab5b746 4 5 | 9efd8b77 3 6 | dbc5e126 3 7 | 413cc8c6 3 8 | d83fb924 2 9 | ee569ce2 2 10 | 1150f5ed 2 11 | ac182643 2 12 | 4f3b3616 2 13 | a785131a 2 14 | 0f942372 2 15 | 902a109f 2 16 | e3209fc2 2 17 | 6ddbba94 2 18 | 52b49730 2 19 | d002b6d9 2 20 | bfef54b3 1 21 | 69f825dd 1 22 | c12fc269 1 23 | 422c8577 1 24 | 32ec6582 1 25 | c38116c9 1 26 | 3b2d8705 1 27 | 91f74a64 1 28 | 2de5271c 1 29 | 2eb18840 1 30 | 846fb5bd 1 31 | 298421a5 1 32 | 7ba31d46 1 33 | cdb87fb5 1 34 | f511c49f 1 35 | 42b3012c 1 36 | f775a6d5 1 37 | 0816fba2 1 38 | 40e29d2a 1 39 | ba8b8b16 1 40 | 3d2c6113 1 41 | 80d1ee72 1 42 | 31b59ad3 1 43 | 51c5d5ca 1 44 | 10040656 1 45 | 46218630 1 46 | 1addf65e 1 47 | 9c382f7a 1 48 | ef6b7bdf 1 49 | 14674f9b 1 50 | 5be89da3 1 51 | d4525f76 1 52 | b0369b63 1 53 | f8ebf901 1 54 | 0e78291e 1 55 | d2f03b75 1 56 | 42793602 1 57 | b25845fd 1 58 | 5edc1a28 1 59 | d33de6b0 1 60 | ae3a9888 1 61 | 2d0bb053 1 62 | 717db705 1 63 | d4a5a2be 1 64 | 23287566 1 65 | a888f201 1 66 | 06809048 1 67 | a6bf53df 1 68 | 6d68e99c 1 69 | 962bbefe 1 70 | e6863a8e 1 71 | cddd56a1 1 72 | 8d3c9c0c 1 73 | b2ff8c6b 1 74 | 5ab7247d 1 75 | 0a069322 1 76 | 00e52733 1 77 | 78e3b025 1 78 | f3635baf 1 79 | 9da6bb5f 1 80 | 11b2ae92 1 81 | 6da7d68c 1 82 | 72fbc65c 1 83 | 4c1df281 1 84 | 81d3f724 1 85 | 2f453358 1 86 | bb1e9ca8 1 87 | 2cd24ac0 1 88 | 102fc449 1 89 | f2252b1c 1 90 | fc29c5a9 1 91 | 715f1291 1 92 | 06373944 1 93 | cccdd69e 1 94 | e28388cc 1 95 | 003cf364 1 96 | 9917ad07 1 97 | 50b07d60 1 98 | 7ac43a46 1 99 | c169c458 1 100 | e0052e65 1 101 | f3a94039 1 102 | 55d28d38 1 103 | 29a18ba0 1 104 | d5223973 1 105 | 73e2709e 1 106 | f6b23a53 1 107 | 7f1c4567 1 108 | 13f8263b 1 109 | 73438c3b 1 110 | fd888b80 1 111 | ca8b2a1a 1 112 | 5340cb84 1 113 | b96e7224 1 114 | 633f1661 1 115 | cb0f0e06 1 116 | aa39dd42 1 117 | 4e06592a 1 118 | 36721ddc 1 119 | 681a3f32 1 120 | 55dc357b 1 121 | 903024b9 1 122 | 62eca3c0 1 123 | 99153e7d 1 124 | 622c34d8 1 125 | 054ebda1 1 126 | c1ddc990 1 127 | 456583e6 1 128 | 9703aa2f 1 129 | fa321567 1 130 | f3002fbd 1 131 | 59a58e86 1 132 | 12f48803 1 133 | 72f85ad5 1 134 | b812f9f2 1 135 | 11da3cff 1 136 | 310d155b 1 137 | a66dcf27 1 138 | fb67e61d 1 139 | aa322bcf 1 140 | 7f758956 1 141 | 17a3bcd8 1 142 | 33d2c881 1 143 | c251e774 1 144 | 801ee1ae 1 145 | b842e9bb 1 146 | 91126f30 1 147 | a3443e75 1 148 | 5726b2dc 1 149 | 162f3329 1 150 | 443b0c0b 1 151 | 487ddf17 1 152 | ada14dd8 1 153 | 943169c2 1 154 | 10139ce3 1 155 | c1124d0c 1 156 | 55808bb2 1 157 | fc42663d 1 158 | c68ba31d 1 159 | a8e962af 1 160 | b16ae607 1 161 | 18847041 1 162 | de829bed 1 163 | 28883800 1 164 | a4f91020 1 165 | 1dca7862 1 166 | 217d99f2 1 167 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C16.dict: -------------------------------------------------------------------------------- 1 | 84898b2a 7 2 | 87acb535 4 3 | 31ca40b6 4 4 | 587267a3 3 5 | 36103458 2 6 | 208d4baf 2 7 | e05d680b 2 8 | 2c9d222f 2 9 | c64d548f 2 10 | 2b2ce127 2 11 | 776f5665 2 12 | d1a4e968 2 13 | 82708081 2 14 | bad5ee18 1 15 | 23056e4f 1 16 | 95a8919c 1 17 | b6d021e8 1 18 | 0decd005 1 19 | 51b69881 1 20 | b74e1eb0 1 21 | 4558136f 1 22 | df604f5b 1 23 | 696fb81d 1 24 | 3084c78b 1 25 | e15ad623 1 26 | 81db2bec 1 27 | 1203a270 1 28 | 1bf03082 1 29 | 6512dce6 1 30 | f2c6a810 1 31 | 65a31309 1 32 | 30e6420c 1 33 | de815c2d 1 34 | 121f63c9 1 35 | ebbb82d7 1 36 | 3b87fa92 1 37 | 0596b5be 1 38 | a14df6f7 1 39 | 9b3f7aa2 1 40 | 635c3e13 1 41 | 169f1150 1 42 | 9906d656 1 43 | e2e3cf1c 1 44 | c73993da 1 45 | c43b15fe 1 46 | fb8ca891 1 47 | 5fbf4a84 1 48 | cf3ec61f 1 49 | a694f6ce 1 50 | f6613e51 1 51 | b49f63ab 1 52 | 2a27c935 1 53 | 08514295 1 54 | 91a6eec5 1 55 | d2b0336b 1 56 | 4032eea3 1 57 | b041b04a 1 58 | da441c7e 1 59 | 1689e4de 1 60 | 1871ac47 1 61 | 33301a0b 1 62 | 7d9d720d 1 63 | 58cacba8 1 64 | 569a0480 1 65 | b688c8cc 1 66 | c0673b44 1 67 | 3eef319d 1 68 | 1cdb3603 1 69 | 0ab5ee0c 1 70 | e638c51d 1 71 | 929eef3c 1 72 | f68bd494 1 73 | 606df1fe 1 74 | 3141102a 1 75 | 7d9b60c8 1 76 | 25b075e4 1 77 | 69f67894 1 78 | 6de617d3 1 79 | 0fd6d3ca 1 80 | 068a2c9f 1 81 | 8ac5e229 1 82 | 834b85f5 1 83 | b7f61016 1 84 | b7a016ed 1 85 | 7d0949a5 1 86 | e71dfc2d 1 87 | 67b3c631 1 88 | e2e2fcd9 1 89 | e75cb6ea 1 90 | f4944655 1 91 | 8023d5ba 1 92 | 270e2a53 1 93 | e7af7559 1 94 | 90d6ddcd 1 95 | f39f1141 1 96 | 6d87c0d4 1 97 | 5fb9ff62 1 98 | 9243e635 1 99 | afc96aa6 1 100 | 9fa82d1c 1 101 | 64e0265f 1 102 | ea1c4696 1 103 | f4ead43c 1 104 | 7ce58da8 1 105 | 12e989e9 1 106 | 9fe6f065 1 107 | 33a55538 1 108 | bc3ccba9 1 109 | 03b5b1e2 1 110 | b3dc5e07 1 111 | b50d9336 1 112 | 9e6ff465 1 113 | 19f6b83c 1 114 | 1c3a7247 1 115 | e3a83d5c 1 116 | 29a3715b 1 117 | d08de474 1 118 | 23c4fd37 1 119 | 64223df7 1 120 | 5c646b1e 1 121 | 967bc626 1 122 | 9f1d1f70 1 123 | c57bda3a 1 124 | a98ec356 1 125 | 9066bcfb 1 126 | 9ee32e6f 1 127 | 5e1b6b9d 1 128 | 229bf6f4 1 129 | 41bec2fe 1 130 | 13ede1b5 1 131 | 89052618 1 132 | 8e47fca6 1 133 | b9a4d133 1 134 | e3d99bf0 1 135 | 5891d119 1 136 | 236709b9 1 137 | 5e622e84 1 138 | d8831736 1 139 | 9e724f87 1 140 | 22283336 1 141 | 789e0e3e 1 142 | cc93bd1d 1 143 | 271d5b6c 1 144 | 2b7f6e55 1 145 | eedd265a 1 146 | 809c9e0e 1 147 | a9b56248 1 148 | a249bde3 1 149 | aafa191e 1 150 | 52bee03d 1 151 | b458da0e 1 152 | 4c7535f3 1 153 | c66a58da 1 154 | f2a191bd 1 155 | 1206a8a1 1 156 | a3d7b1d6 1 157 | 62675893 1 158 | fb2ac6b5 1 159 | e2bc04da 1 160 | bb6d240e 1 161 | 48af915a 1 162 | 022714ba 1 163 | 05a97a3c 1 164 | 72401022 1 165 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C17.dict: -------------------------------------------------------------------------------- 1 | e5ba7672 94 2 | d4bb7bd8 23 3 | 07c540c4 19 4 | 3486227d 16 5 | 776ce399 15 6 | 1e88c74f 10 7 | 8efede7f 8 8 | 2005abd1 6 9 | 27c07bd6 5 10 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C18.dict: -------------------------------------------------------------------------------- 1 | 5aed7436 12 2 | 7ef5affa 9 3 | 891589e7 6 4 | c21c3e4c 5 5 | 13145934 5 6 | 005c6740 4 7 | a78bd508 3 8 | 582152eb 3 9 | e88ffc9d 3 10 | 1f868fdd 3 11 | 9880032b 3 12 | e7e991cb 3 13 | 4b17f8a2 3 14 | f2fc99b1 3 15 | 6fc84bfb 2 16 | 52e44668 2 17 | 449d6705 2 18 | bd17c3da 2 19 | 906ff5cb 2 20 | 7e32f7a4 2 21 | 8f0f692f 2 22 | 2585827d 2 23 | 63cdbb21 2 24 | f5f4ae5b 2 25 | ade68c22 2 26 | 4bcc9449 2 27 | f54016b9 2 28 | e96a7df2 2 29 | c68ebaa0 2 30 | fd3919f9 2 31 | 7b06fafe 2 32 | c235abed 2 33 | 836a67dd 2 34 | cf1cde40 2 35 | 87c6f83c 1 36 | 675c9258 1 37 | 25c88e42 1 38 | d3303ea5 1 39 | 642f2610 1 40 | 7ce63c71 1 41 | 0f2f9850 1 42 | 8814ed47 1 43 | 9b82aca5 1 44 | 67bd0ece 1 45 | 752d8b8a 1 46 | 21eb63af 1 47 | d3c7daaa 1 48 | 065917ca 1 49 | be5810bd 1 50 | fb342121 1 51 | 456d734d 1 52 | 08154af3 1 53 | 9d3171e9 1 54 | bc5a0ff7 1 55 | f6a2fc70 1 56 | e01eacde 1 57 | 1999bae9 1 58 | 561cabfe 1 59 | 48ce336b 1 60 | 9bf8ffef 1 61 | 2804effd 1 62 | 5d961bca 1 63 | 670f513e 1 64 | 65c9624a 1 65 | b34aa802 1 66 | 0ad1cc71 1 67 | e261f8d8 1 68 | 35176a17 1 69 | a863ac26 1 70 | a1d0cc4f 1 71 | 821c30b8 1 72 | 35a9ed38 1 73 | cbadff99 1 74 | 395856b0 1 75 | d495a339 1 76 | 35ee3e9e 1 77 | d4a314a2 1 78 | 4771e483 1 79 | 87fd936e 1 80 | 130ebfcd 1 81 | dff11f14 1 82 | fffe2a63 1 83 | e32bf683 1 84 | 43dfe9bd 1 85 | 7da6ea7e 1 86 | bc48b783 1 87 | 381bd833 1 88 | e7648a8f 1 89 | d1605c46 1 90 | 2b46823a 1 91 | 5bb2ec8e 1 92 | 1616f155 1 93 | 95f5c722 1 94 | c191a3ff 1 95 | 836a11e3 1 96 | ca6a63cf 1 97 | 79a92e0a 1 98 | 3c4f2d82 1 99 | bb983d97 1 100 | 19ef42ad 1 101 | b04e4670 1 102 | 7d8c03aa 1 103 | 4b0f5ddd 1 104 | a1654f4f 1 105 | 52b872ed 1 106 | ae46962e 1 107 | 5ba7fffe 1 108 | 2efa89c6 1 109 | a7cf409e 1 110 | 7b49e3d2 1 111 | d452c287 1 112 | 004fdf10 1 113 | b608c073 1 114 | 38f08461 1 115 | f0959f21 1 116 | 3ae505af 1 117 | 281769c2 1 118 | 62acb0f3 1 119 | 824dcc94 1 120 | c9da8737 1 121 | ac02dc99 1 122 | d2651d6e 1 123 | ca533012 1 124 | 3972b4ed 1 125 | 908eaeb8 1 126 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C19.dict: -------------------------------------------------------------------------------- 1 | 21ddcdc9 62 2 | 55dd3565 6 3 | ff6cdd42 2 4 | 7be4df37 2 5 | cf99e5de 2 6 | 1d1eb838 2 7 | f30f7842 2 8 | 6f3756eb 1 9 | b6baba3f 1 10 | 738584ec 1 11 | ba92e49d 1 12 | af1445c4 1 13 | 2f4b9dd2 1 14 | 1d04f4a4 1 15 | 92524a76 1 16 | 712d530c 1 17 | 083e89d9 1 18 | 39e30682 1 19 | d913d8f1 1 20 | 4cc48856 1 21 | 2e30f394 1 22 | 4b1019ff 1 23 | a34d2cf6 1 24 | 566c492c 1 25 | 444a605d 1 26 | e27c6abe 1 27 | bdffef68 1 28 | 2b558521 1 29 | 6301e460 1 30 | 2442feac 1 31 | c79aad78 1 32 | 49463d54 1 33 | edb3d180 1 34 | 42e59f55 1 35 | cc4c70c1 1 36 | bf212c4c 1 37 | 6d82104d 1 38 | 4a237258 1 39 | 5b885066 1 40 | fc134659 1 41 | b1fb78cc 1 42 | 0053530c 1 43 | 54591762 1 44 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C2.dict: -------------------------------------------------------------------------------- 1 | 38a947a1 24 2 | 09e68b86 14 3 | 4f25e98b 10 4 | 287130e0 6 5 | 80e26c9b 6 6 | 58e67aaf 5 7 | 38d50e09 5 8 | e5fb1af3 5 9 | 207b2d81 3 10 | 403ea497 3 11 | 68b3edbf 3 12 | 1cfdf714 3 13 | 942f9a8d 3 14 | c5c1d6ae 3 15 | 0468d672 3 16 | 78ccd99e 3 17 | 404660bb 3 18 | 2ae0a573 3 19 | 04e09220 2 20 | 8084ee93 2 21 | e77e5e6e 2 22 | 8947f767 2 23 | 46bbf321 2 24 | 9819deea 2 25 | 6887a43c 2 26 | 40ed0c67 2 27 | 2c8c5f5d 2 28 | ef69887a 2 29 | e112a9de 2 30 | 558b4efb 2 31 | 512fdf0c 2 32 | 95e2d337 2 33 | 90081f33 2 34 | c5fe64d9 2 35 | 3df44d94 2 36 | 89ddfee8 2 37 | d833535f 2 38 | 08d6d899 1 39 | 2a69d406 1 40 | 0aadb108 1 41 | d7988e72 1 42 | ed7b1c58 1 43 | 84b4e42f 1 44 | 2eb7b10e 1 45 | d97d4ce8 1 46 | c44e8a72 1 47 | 876465ad 1 48 | 4322636e 1 49 | 6e638bbc 1 50 | b0d4a6f6 1 51 | 71ca0a25 1 52 | 421b43cd 1 53 | 8f5b4275 1 54 | 537e899b 1 55 | 3e4b7926 1 56 | efb7db0e 1 57 | ea3a5818 1 58 | 8db5bc37 1 59 | 5dac953d 1 60 | d8fc04df 1 61 | b26462db 1 62 | 064c8f31 1 63 | b7ca2abd 1 64 | 26ece8a8 1 65 | a8da270e 1 66 | 8b0005b7 1 67 | ae46a29d 1 68 | dde11b16 1 69 | 4c2bc594 1 70 | 6f609dc9 1 71 | 73b37f46 1 72 | c41a84c8 1 73 | a0e12995 1 74 | 06174070 1 75 | 0b8e9caf 1 76 | 0c0567c2 1 77 | f0cf0024 1 78 | 9b25e48b 1 79 | a5b69ae3 1 80 | 0a519c5c 1 81 | e9b8a266 1 82 | 9a82ab91 1 83 | e3a0dc66 1 84 | d57c0709 1 85 | d4bd9877 1 86 | c5e4f7c9 1 87 | 62e9e9bf 1 88 | 8ab240be 1 89 | aa8fcc21 1 90 | b46aceb6 1 91 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C20.dict: -------------------------------------------------------------------------------- 1 | 5840adea 47 2 | a458ea53 38 3 | b1252a9d 29 4 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C21.dict: -------------------------------------------------------------------------------- 1 | 0014c32a 7 2 | a4b7004c 4 3 | dfcfc3fa 4 4 | c2a93b37 3 5 | e587c466 2 6 | 6a909d9a 2 7 | a2b7caec 2 8 | cc6a9262 2 9 | 5f957280 2 10 | 2b796e4a 2 11 | 9fb07dd2 2 12 | 4c14738f 2 13 | 0429f84b 1 14 | 5155d8a3 1 15 | 2e01979f 1 16 | 0e8585d2 1 17 | 7633c7c8 1 18 | 5c8dc711 1 19 | af5dc647 1 20 | 31c8e642 1 21 | 07b6c66f 1 22 | 06e40c52 1 23 | 514b7308 1 24 | 78c1dd4b 1 25 | 4a8f0a7f 1 26 | 73d06dde 1 27 | 84ec2c79 1 28 | 361a1080 1 29 | 8b7fb864 1 30 | fca82615 1 31 | 65f3080f 1 32 | 5def73cb 1 33 | c3739d01 1 34 | bd1f6272 1 35 | d90f665b 1 36 | cf79f8fa 1 37 | e7f0c6dc 1 38 | 61b4555a 1 39 | cff19dc6 1 40 | 15414e28 1 41 | 37a23b2d 1 42 | 605776ee 1 43 | 1d14288c 1 44 | a66e7b01 1 45 | b1ae3ed2 1 46 | deb9605d 1 47 | 98a79791 1 48 | a370fd83 1 49 | 3aa05bfb 1 50 | a1229e5f 1 51 | d479575f 1 52 | 6387fda4 1 53 | a97b62ca 1 54 | ea6a0e31 1 55 | 53def47b 1 56 | 723b4dfd 1 57 | 8717ea07 1 58 | dc55d6df 1 59 | 23da7042 1 60 | d5a53bc3 1 61 | 8443660f 1 62 | b7ba6151 1 63 | c2af6d9f 1 64 | 2754aaf1 1 65 | e049c839 1 66 | 1c63c71e 1 67 | 1380864e 1 68 | 6c38450e 1 69 | 0370bc83 1 70 | fb19a39b 1 71 | ba3c688b 1 72 | aebdd3c2 1 73 | 3df2213d 1 74 | 9c3eb598 1 75 | 5a5953a2 1 76 | a13bd40d 1 77 | e1627e2c 1 78 | df66957b 1 79 | 7eefff0d 1 80 | df9de95c 1 81 | 0be61dd1 1 82 | e339163e 1 83 | f15fe1ee 1 84 | 1df3ad93 1 85 | c12eabbb 1 86 | b4770b64 1 87 | bd074856 1 88 | b964dee0 1 89 | 72c8ca0c 1 90 | 81f8278e 1 91 | 15bb899d 1 92 | 5ff5ac4a 1 93 | 5a49c6db 1 94 | 29d21ab1 1 95 | fdc724a8 1 96 | ed01532f 1 97 | e208a45f 1 98 | ec5ac7c6 1 99 | c0cd6339 1 100 | 40b11f62 1 101 | 38879cfe 1 102 | 67afd8d0 1 103 | 4f1aa25f 1 104 | d1d4f4a9 1 105 | 9179411e 1 106 | 7b6393e8 1 107 | 37c3d851 1 108 | 6b4fc63c 1 109 | 3b66cfcf 1 110 | 33706b2d 1 111 | cc86f2c1 1 112 | 5c859cae 1 113 | 9efd5ec7 1 114 | 4d2b0d06 1 115 | ebfa4c53 1 116 | e54f0804 1 117 | 26e36622 1 118 | 632bf881 1 119 | 301fc194 1 120 | c4c42074 1 121 | 30244f84 1 122 | 16f71b82 1 123 | 6fb7987f 1 124 | ec4a835a 1 125 | 822be048 1 126 | 7a380bd1 1 127 | bfeb50f6 1 128 | 5362f5c3 1 129 | 95ee3d7a 1 130 | 8a93f0a1 1 131 | d4703ebd 1 132 | 15fb7955 1 133 | 5c7c443c 1 134 | 86a8e85e 1 135 | 8f78192f 1 136 | cd11300e 1 137 | 77799c4f 1 138 | 43d01030 1 139 | d4f22efc 1 140 | 07b818d7 1 141 | fd0e41ce 1 142 | 79fe2943 1 143 | c1429b47 1 144 | a716bbe2 1 145 | fd3ca145 1 146 | 56b58097 1 147 | 6a41d841 1 148 | 0d7a15fd 1 149 | c4b9fb56 1 150 | 7e5b7cc4 1 151 | 35198a67 1 152 | d7a43622 1 153 | 5b6b6b73 1 154 | 9308de7e 1 155 | 5911ddcb 1 156 | 54d8bb06 1 157 | bbcf650c 1 158 | be01d6b1 1 159 | 0fbced35 1 160 | 1de5dd94 1 161 | 5fe17899 1 162 | 34cc61bb 1 163 | d1aa4512 1 164 | 4a2c3526 1 165 | bf647035 1 166 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C22.dict: -------------------------------------------------------------------------------- 1 | c9d4222a 18 2 | ad3062eb 18 3 | 8ec974f4 3 4 | c0061c6d 1 5 | 78e2e389 1 6 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C23.dict: -------------------------------------------------------------------------------- 1 | 32c7478e 98 2 | 3a171ecb 32 3 | 423fab69 21 4 | be7c41b4 13 5 | c7dc6720 12 6 | bcdee96c 10 7 | 55dd3565 6 8 | dbb486d7 2 9 | 93bad2c0 1 10 | 72592995 1 11 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C24.dict: -------------------------------------------------------------------------------- 1 | 3fdb382b 17 2 | 3b183c5c 12 3 | 1793a828 12 4 | b34f3128 7 5 | aee52b6f 6 6 | 45ab94c8 4 7 | 1481ceb4 3 8 | ded4aac9 2 9 | a415643d 2 10 | 1f68c81f 2 11 | a5862ce8 2 12 | 8d365d3b 2 13 | 8f079aa5 2 14 | cafb4e4d 2 15 | df487a73 2 16 | 359dd977 2 17 | 7836b4d5 2 18 | 08b0ce98 2 19 | a86c0565 2 20 | c0d61a5c 1 21 | 6d5d1302 1 22 | 0d4a6d1a 1 23 | 17f458f7 1 24 | 3e983c86 1 25 | 246f2e7f 1 26 | 2fd70e1c 1 27 | 4f7b7578 1 28 | 1989e165 1 29 | 45b2acf4 1 30 | 74f7ceeb 1 31 | 42a310e6 1 32 | aa5529de 1 33 | d4af2638 1 34 | 043a382b 1 35 | 6c1cdd05 1 36 | d5b4ea7d 1 37 | 3e30919e 1 38 | 38b97a31 1 39 | 8535db9f 1 40 | aa9b9ab9 1 41 | f93938dd 1 42 | c9bc2384 1 43 | e33735a0 1 44 | e448275f 1 45 | d5b01f55 1 46 | 9f0d87bf 1 47 | 9b18ad04 1 48 | d36c7dbf 1 49 | 727a7cc7 1 50 | da408463 1 51 | 8849cfac 1 52 | aa0115d2 1 53 | 1be0cc0a 1 54 | 52d7797f 1 55 | 7b80ab11 1 56 | 58e38a64 1 57 | 6095f986 1 58 | ad80aaa7 1 59 | be2f0db5 1 60 | 394c5a53 1 61 | cde6fafb 1 62 | cc4079ea 1 63 | e4e10900 1 64 | 42998020 1 65 | c0b8dfd6 1 66 | 0ff91809 1 67 | a6e7d8d3 1 68 | c9a8db2a 1 69 | 2896ad66 1 70 | 3aebd96a 1 71 | af0cb2c3 1 72 | 2f34b1ef 1 73 | 772b286f 1 74 | 6c25dad0 1 75 | d65fa724 1 76 | faf5d8b3 1 77 | 69e4f188 1 78 | 8d49fa4b 1 79 | 590b856f 1 80 | 7e60320b 1 81 | eaa38671 1 82 | e3aea32f 1 83 | 03955d00 1 84 | 364442f6 1 85 | c94ffa50 1 86 | 88cba9eb 1 87 | 996f5a43 1 88 | a9d9c151 1 89 | 936da3dd 1 90 | 18109ace 1 91 | 365def8b 1 92 | 42df8359 1 93 | 3a6f67d1 1 94 | 9b7eed78 1 95 | b44bd498 1 96 | f20c047e 1 97 | 71dc4ef2 1 98 | bc491035 1 99 | 198d16cc 1 100 | cf300ce9 1 101 | 5fd07f39 1 102 | 4acb8523 1 103 | 0ac1b18a 1 104 | b2df17ed 1 105 | f2e9f0dd 1 106 | 325bcd40 1 107 | a0634086 1 108 | 0ea7be91 1 109 | 0ee762c3 1 110 | fb890da1 1 111 | 44aeb111 1 112 | 30ab4eb4 1 113 | dcba8699 1 114 | 9d8b4082 1 115 | 1335030a 1 116 | 75b9c133 1 117 | b1aad66f 1 118 | d91ea8bd 1 119 | 43fe299c 1 120 | e5ed7da2 1 121 | 9257f75f 1 122 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C25.dict: -------------------------------------------------------------------------------- 1 | e8b83407 38 2 | 001f3601 17 3 | ea9a246c 10 4 | 9b3e8820 9 5 | f0f449dd 6 6 | 010f6491 5 7 | cb079c2d 4 8 | 2bf691b1 3 9 | 9d93af03 3 10 | 7a402766 3 11 | 47907db5 3 12 | 33d94071 3 13 | 445bbe3b 2 14 | b9266ff0 2 15 | 724b04da 2 16 | f55c04b6 1 17 | 875ea8a7 1 18 | 46fbac64 1 19 | c243e98b 1 20 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C26.dict: -------------------------------------------------------------------------------- 1 | 49d68486 13 2 | 2fede552 5 3 | 984e0db0 5 4 | c84c4aec 4 5 | 988b0775 3 6 | b7d9c3bc 2 7 | b9809574 2 8 | 9904c656 2 9 | c27f155b 2 10 | 92c878de 1 11 | 71236095 1 12 | d597922b 1 13 | 350a6bdb 1 14 | 09929967 1 15 | c4304c4b 1 16 | d14e41ff 1 17 | 0eabc199 1 18 | 1219b447 1 19 | deffd9e3 1 20 | b6a3490e 1 21 | 074bb89f 1 22 | b98a5b90 1 23 | c73ed234 1 24 | 322cbe58 1 25 | f95af538 1 26 | 85cebe8c 1 27 | bde577f6 1 28 | 67ebe777 1 29 | 6935065e 1 30 | aa5f0a15 1 31 | f89dfbcc 1 32 | 79883c16 1 33 | ddf88ddd 1 34 | 70451962 1 35 | adb5d234 1 36 | 68d9ada1 1 37 | 1d7b6578 1 38 | 7a1ac642 1 39 | 00ed90d0 1 40 | dd8b4f5c 1 41 | 81be451e 1 42 | c4e4eabb 1 43 | 9973f80f 1 44 | 56be3401 1 45 | 4a449e4c 1 46 | 59e91663 1 47 | 86601e0a 1 48 | e001324a 1 49 | ba14bbcb 1 50 | 8b3e7faa 1 51 | e75c9ae9 1 52 | 4e7af834 1 53 | fa3124de 1 54 | 2fc5e3d4 1 55 | bdc8589e 1 56 | d5ca783a 1 57 | 1ba54abc 1 58 | 1793fb3f 1 59 | 8ded0b41 1 60 | 3a97b421 1 61 | 27029e68 1 62 | 070f6cb2 1 63 | 00efb483 1 64 | c0fca43d 1 65 | f4642e0e 1 66 | 2f44e540 1 67 | 8fd6bdd6 1 68 | 0facb2ea 1 69 | bd2ec696 1 70 | 0e2018ec 1 71 | 814b9a6b 1 72 | c986348f 1 73 | 6d73203e 1 74 | 33757f80 1 75 | 9c015713 1 76 | a39e1586 1 77 | f610730e 1 78 | 86174332 1 79 | df46df55 1 80 | 85fd868a 1 81 | e438a496 1 82 | 3df61e3d 1 83 | f3b1f00d 1 84 | 99f4f64c 1 85 | 1a02cbe1 1 86 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C3.dict: -------------------------------------------------------------------------------- 1 | d032c263 7 2 | 77f2f2e5 4 3 | 2cbec47f 3 4 | 02cf9876 2 5 | c5d94b65 2 6 | 5e25fa67 2 7 | 9b792af9 2 8 | aa8c1539 2 9 | 4470baf4 2 10 | fd22e418 2 11 | f1397040 2 12 | 9143c832 1 13 | 95e13fd4 1 14 | 3f55fb72 1 15 | 5d076085 1 16 | 9dd3c4fc 1 17 | fcae8bfa 1 18 | c798ded6 1 19 | ea997bbe 1 20 | c23785fe 1 21 | 25111132 1 22 | b063fe4e 1 23 | 45f68c2a 1 24 | 5d0ec1e8 1 25 | b00d1501 1 26 | fc1cad4b 1 27 | 9d427ddf 1 28 | 378112d3 1 29 | a68b0bcf 1 30 | 6bbe880c 1 31 | dd8e6407 1 32 | 98351ee6 1 33 | 6813d33b 1 34 | 5492524f 1 35 | c725873a 1 36 | 3f7f3d24 1 37 | da89f77a 1 38 | e007dfac 1 39 | 0b2640f7 1 40 | 69b028e3 1 41 | b87cffc0 1 42 | 598b72ce 1 43 | 50a6bc33 1 44 | 374195a1 1 45 | 9b953c56 1 46 | 223b0e16 1 47 | 6ef2aa66 1 48 | 15363e12 1 49 | 99815367 1 50 | b264d69e 1 51 | 8018e37d 1 52 | 13cd0697 1 53 | cedcacac 1 54 | 695a85e0 1 55 | 44e7b8ec 1 56 | 33ebdbb6 1 57 | ba1947d0 1 58 | 840eeb3a 1 59 | 909286bb 1 60 | f86649de 1 61 | 00d3cdb7 1 62 | 0d15d9b5 1 63 | 38610f2f 1 64 | eb08d440 1 65 | b009d929 1 66 | 5037b88e 1 67 | 13193952 1 68 | 60c37737 1 69 | 7442ec70 1 70 | 3fea0364 1 71 | 2273663d 1 72 | bf05882d 1 73 | 5be9b239 1 74 | 7ee60f5f 1 75 | f652979e 1 76 | 2b280564 1 77 | 4e1c9eda 1 78 | dad8b3db 1 79 | 70168f62 1 80 | 022a0b3c 1 81 | d125aecd 1 82 | fc25ffd0 1 83 | 1b5e2c32 1 84 | 58ca7e87 1 85 | 6392b1c1 1 86 | b3ee24fe 1 87 | 62acd884 1 88 | 29dbbee7 1 89 | a2b48926 1 90 | 948ee031 1 91 | 770451b6 1 92 | 79bdb97a 1 93 | c6616b04 1 94 | da3ad2bd 1 95 | 55f298ba 1 96 | 97d1681e 1 97 | 88290645 1 98 | fda0b584 1 99 | cd82408a 1 100 | 10ee5afb 1 101 | d627c43e 1 102 | b2de8002 1 103 | 7e4ea1b2 1 104 | 0739daa8 1 105 | b3693f43 1 106 | b1ecc6c4 1 107 | 0c7bb149 1 108 | a3829614 1 109 | 771a1642 1 110 | 104c93d5 1 111 | 3f850fa0 1 112 | 6858baef 1 113 | 9dfde63d 1 114 | 7fd859b3 1 115 | 700014ea 1 116 | 6d1384bc 1 117 | 0271c22e 1 118 | cce54c2c 1 119 | 619e87b2 1 120 | fdd14ae2 1 121 | 8b376137 1 122 | 027b4cc5 1 123 | 61b8caf0 1 124 | f25edca2 1 125 | 40361716 1 126 | bd4d1b8d 1 127 | f5cdf14a 1 128 | 761d2b40 1 129 | 0b793d71 1 130 | 01a0648b 1 131 | 3cb0ff62 1 132 | af21d90e 1 133 | f153af65 1 134 | ad4b77ff 1 135 | 03689820 1 136 | af5655e7 1 137 | 20fb5e45 1 138 | be0a348d 1 139 | c8b80f97 1 140 | be3b6a18 1 141 | 98bb788f 1 142 | 9ea04474 1 143 | 0d71b822 1 144 | 2ba709bb 1 145 | f1a544c6 1 146 | 8530c58f 1 147 | b0874fd0 1 148 | 57231f4a 1 149 | ac203f6f 1 150 | 1678e0d8 1 151 | bf30cf68 1 152 | 01ac13ea 1 153 | e346a5fd 1 154 | d1ffd05c 1 155 | a55127b0 1 156 | 0f09a700 1 157 | acbabfa5 1 158 | b1b6f323 1 159 | 2d8004c4 1 160 | 3a3d6eeb 1 161 | 5f8d9359 1 162 | 4993b2b2 1 163 | 7edab412 1 164 | 145f2f75 1 165 | 628b07b0 1 166 | 4255f8fd 1 167 | db151f8b 1 168 | 7e1ad1fe 1 169 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C4.dict: -------------------------------------------------------------------------------- 1 | c18be181 9 2 | d16679b9 6 3 | f922efad 5 4 | 13508380 4 5 | 85dd697c 4 6 | 3e2bfbda 3 7 | 40ed41e5 2 8 | 5cc8f91d 2 9 | dd47ba3b 2 10 | 9c6d05a0 2 11 | 8c8a4c47 2 12 | 22504558 2 13 | 82a61820 2 14 | 36375a46 2 15 | 09003f7b 2 16 | f56b7dd5 1 17 | a1e6a194 1 18 | 5de245c7 1 19 | 862b5ba0 1 20 | a09fab49 1 21 | 91e6318a 1 22 | 72bea89f 1 23 | 67dd8a70 1 24 | d13862c2 1 25 | 4b972461 1 26 | 39547932 1 27 | e63708e9 1 28 | 4eadb673 1 29 | 684abf7b 1 30 | c194aaab 1 31 | feb6eb1a 1 32 | db4eb846 1 33 | 811ce8e8 1 34 | ae59cd56 1 35 | d0189e5a 1 36 | 8eb89744 1 37 | 37ee624b 1 38 | 77b99936 1 39 | 4badfc0c 1 40 | 003ceb8c 1 41 | ffacf4e8 1 42 | 3c7eb23c 1 43 | 335e428a 1 44 | 6f5d5092 1 45 | 7be07df9 1 46 | ca55061c 1 47 | 20af9140 1 48 | f9e8a6fb 1 49 | 771966f0 1 50 | ce831e6d 1 51 | d8660950 1 52 | 352cefe6 1 53 | 7967fcf5 1 54 | d502349a 1 55 | 3b989466 1 56 | 29998ed1 1 57 | f7263320 1 58 | 252734c9 1 59 | f56f6045 1 60 | d4125c6f 1 61 | bfe24cb7 1 62 | 28d2973d 1 63 | c7043c4b 1 64 | 9dde01fd 1 65 | 8a77aa30 1 66 | bb8645c3 1 67 | 9c32fadc 1 68 | 3beb8147 1 69 | 9e3f04df 1 70 | ace52998 1 71 | bebc14b3 1 72 | 32a55192 1 73 | ad5ffc6b 1 74 | 06b1cf6e 1 75 | 585ab217 1 76 | d6b6e0bf 1 77 | 991a22ae 1 78 | 8a2b280f 1 79 | 3db5e097 1 80 | 4e1c036b 1 81 | 631a0f79 1 82 | 7736c782 1 83 | 15c721d8 1 84 | b7ab56a2 1 85 | bdbe850d 1 86 | e6996139 1 87 | a95c56ca 1 88 | 1de19bc2 1 89 | ffe40d5f 1 90 | 0676a23d 1 91 | eb45e6e4 1 92 | 1d29846e 1 93 | 759c4a2e 1 94 | f9a7e394 1 95 | bc17b20f 1 96 | 4fbef8bb 1 97 | f888df5a 1 98 | 5dff9b29 1 99 | a35517fb 1 100 | b0ed6de7 1 101 | 2e946ee2 1 102 | 90b69619 1 103 | db781543 1 104 | 3f647607 1 105 | 9c9a6068 1 106 | 19ae4fbd 1 107 | 560f248f 1 108 | 74ce146b 1 109 | caa16f04 1 110 | 6e8c7c0e 1 111 | cfc23926 1 112 | 8b7d76a3 1 113 | 270b5720 1 114 | 9affccc2 1 115 | 5ef5cf67 1 116 | 418ae7fb 1 117 | f2159098 1 118 | 097de257 1 119 | 39cc9792 1 120 | 5f379ae0 1 121 | 813cb08c 1 122 | 657dc3b9 1 123 | 9b17f367 1 124 | dc0a11c7 1 125 | 21817e80 1 126 | aafb54fa 1 127 | e0e934af 1 128 | 311f127a 1 129 | 62169fb6 1 130 | e0a2ecca 1 131 | 2b0aadf8 1 132 | 3fb81b62 1 133 | 7be47200 1 134 | 9c65ce26 1 135 | abfc27b2 1 136 | b696e406 1 137 | c38a1d7d 1 138 | bd6ffe0f 1 139 | 49c94103 1 140 | f6dbd8fb 1 141 | 9df780c1 1 142 | 90044821 1 143 | 38aca36b 1 144 | 187dc42d 1 145 | be4cb064 1 146 | eabe170f 1 147 | 2628b8d6 1 148 | 9ab05b8f 1 149 | f1d06e8a 1 150 | b63c0277 1 151 | 7501d94a 1 152 | f1b645fc 1 153 | 46ec0a38 1 154 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C5.dict: -------------------------------------------------------------------------------- 1 | 25c83c98 131 2 | 4cf72387 29 3 | 43b19349 14 4 | 30903e74 6 5 | 384874ce 6 6 | 0942e0a7 4 7 | 307e775a 2 8 | 4ea20c7d 1 9 | a9411994 1 10 | b0530c50 1 11 | db679829 1 12 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C6.dict: -------------------------------------------------------------------------------- 1 | 7e0ccccf 86 2 | fbad5c96 33 3 | fe6b92e5 24 4 | 6f6d9be8 12 5 | 13718bbd 6 6 | 3bf701e7 4 7 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C7.dict: -------------------------------------------------------------------------------- 1 | 1c86e0eb 4 2 | df5c2d18 3 3 | e14874c9 3 4 | 372a0c4c 3 5 | 0c41b6a1 2 6 | 2555b4d9 2 7 | 88002ee1 2 8 | 01620311 2 9 | d385ea68 2 10 | 16401b7d 2 11 | b87f4a4a 2 12 | 49b74ebc 2 13 | f819e175 1 14 | b72ec13d 1 15 | 17c22666 1 16 | 271190b7 1 17 | cd846c62 1 18 | 7227c706 1 19 | 2aef1419 1 20 | 5b18f3d9 1 21 | 84c427f0 1 22 | afa309bd 1 23 | 85e1a170 1 24 | bc324536 1 25 | 36b796aa 1 26 | 88afd773 1 27 | 0d15142a 1 28 | a2f7459e 1 29 | 3babeb61 1 30 | 963d99df 1 31 | 4157815a 1 32 | 4a6c02fb 1 33 | 34cbc0af 1 34 | 7925e09b 1 35 | 412cb2ce 1 36 | 07d75b52 1 37 | 86651165 1 38 | 2b3ce8b7 1 39 | adbcc874 1 40 | 2be44e4e 1 41 | 3f4ec687 1 42 | 2e62d414 1 43 | 04277bf9 1 44 | 675e81f6 1 45 | 1171550e 1 46 | 555d7949 1 47 | 5e4f7d2b 1 48 | 7f2c5a6e 1 49 | 92ce5a7d 1 50 | 65c53f25 1 51 | cdc0ad95 1 52 | 5aef82b1 1 53 | c1e20400 1 54 | 4fb73f5f 1 55 | 33b15f2c 1 56 | 82f666b6 1 57 | d0519bab 1 58 | 6ad82e7a 1 59 | ae1dfa39 1 60 | 3d63f4e6 1 61 | 3baecfcb 1 62 | b28fa88b 1 63 | 21c0ea1a 1 64 | 71ccc25b 1 65 | d9aa9d97 1 66 | 41e1828d 1 67 | a90a99c5 1 68 | aafae983 1 69 | 124131fa 1 70 | 1c63b114 1 71 | 3a7402e7 1 72 | 2773eaab 1 73 | ec1a1856 1 74 | ad82323c 1 75 | 73e2fc5e 1 76 | 82cfb145 1 77 | 4f900c22 1 78 | 5a103f30 1 79 | 6b406125 1 80 | 622305e6 1 81 | 19d92932 1 82 | 559eb1e1 1 83 | 9d8d7034 1 84 | ade953a9 1 85 | e746fe19 1 86 | b3a5258d 1 87 | 33cca6fa 1 88 | d18f8f99 1 89 | 6da2fbd6 1 90 | 6d51a5b0 1 91 | 877d7f71 1 92 | 863329da 1 93 | 86b374da 1 94 | b01d50d5 1 95 | f33e4fa1 1 96 | 879ccac6 1 97 | 38eb9cf4 1 98 | 2e8a689b 1 99 | d7f3ff9f 1 100 | 63b7fcf7 1 101 | 6c338953 1 102 | cd98cc3d 1 103 | f14f1abf 1 104 | 295cc387 1 105 | 315c76f3 1 106 | 81bb0302 1 107 | ead731f4 1 108 | 1971812a 1 109 | 61beb1aa 1 110 | 0d00feb3 1 111 | a6624a99 1 112 | ca4fd8f8 1 113 | fcf0132a 1 114 | 53ef84c0 1 115 | 0bdc3959 1 116 | 71c23d74 1 117 | 5d7d417f 1 118 | e465eb54 1 119 | e3b8f237 1 120 | b647358a 1 121 | 32da4b59 1 122 | 9ec884dc 1 123 | fe4dce68 1 124 | 26817995 1 125 | 60d4eb86 1 126 | 47aa6d2e 1 127 | c642e324 1 128 | e7698644 1 129 | 02914429 1 130 | 15ce37bc 1 131 | 67b7679f 1 132 | d2bfca2c 1 133 | a7565058 1 134 | a5a83bdd 1 135 | 6005554a 1 136 | 788ff59f 1 137 | 9ff9bbde 1 138 | 9b98e9fc 1 139 | 468a0854 1 140 | e2de05d6 1 141 | ed0714a0 1 142 | c96de117 1 143 | b00f5963 1 144 | 50a5390e 1 145 | c78204a1 1 146 | 133643ef 1 147 | bf115338 1 148 | 6978304f 1 149 | d55d70ca 1 150 | d01ba955 1 151 | 368f84ee 1 152 | 8f572b5e 1 153 | d9f4e70f 1 154 | 8a850658 1 155 | 197b4575 1 156 | dc7659bd 1 157 | 2a37bb01 1 158 | 968a6688 1 159 | e24d7cb8 1 160 | e2ec9176 1 161 | 122c542a 1 162 | a1eeac3d 1 163 | 6cdb3998 1 164 | 8f801a1a 1 165 | 55fc227e 1 166 | 6a858837 1 167 | 91282309 1 168 | 00dd27a6 1 169 | 4d9d55ae 1 170 | 19672560 1 171 | 95402f9a 1 172 | 53e14bd5 1 173 | 9e8dab66 1 174 | f74ed3c0 1 175 | ff08f605 1 176 | 0d339a25 1 177 | 0492c809 1 178 | 24c48926 1 179 | 17cdc396 1 180 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C8.dict: -------------------------------------------------------------------------------- 1 | 0b153874 117 2 | 5b392875 29 3 | 1f89b562 18 4 | 37e4aa92 6 5 | 062b5529 5 6 | 51d76abe 4 7 | 64523cfa 2 8 | 985e3fcb 2 9 | f0e5818a 2 10 | c8ddd494 2 11 | 25239412 1 12 | 966033bc 1 13 | a61cc0ef 1 14 | e8663cb1 1 15 | a6d156f4 1 16 | 66f29b89 1 17 | d7c4a8f5 1 18 | 56563555 1 19 | 7b6fecd5 1 20 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.C9.dict: -------------------------------------------------------------------------------- 1 | a73ee510 175 2 | 7cc72ec2 21 3 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I1.dict: -------------------------------------------------------------------------------- 1 | 0.0 52 2 | 1.0 18 3 | 2.0 13 4 | 8.0 4 5 | 5.0 4 6 | 4.0 4 7 | 3.0 4 8 | 9.0 2 9 | 7.0 2 10 | 19.0 1 11 | 11.0 1 12 | 10.0 1 13 | 37.0 1 14 | 12.0 1 15 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I10.dict: -------------------------------------------------------------------------------- 1 | 0.0 57 2 | 1.0 44 3 | 2.0 5 4 | 3.0 2 5 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I11.dict: -------------------------------------------------------------------------------- 1 | 1.0 70 2 | 0.0 47 3 | 2.0 19 4 | 3.0 12 5 | 4.0 10 6 | 5.0 7 7 | 9.0 6 8 | 7.0 5 9 | 10.0 3 10 | 6.0 2 11 | 21.0 1 12 | 32.0 1 13 | 16.0 1 14 | 15.0 1 15 | 11.0 1 16 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I12.dict: -------------------------------------------------------------------------------- 1 | 0.0 30 2 | 1.0 6 3 | 2.0 3 4 | 7.0 1 5 | 3.0 1 6 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I13.dict: -------------------------------------------------------------------------------- 1 | 1.0 22 2 | 2.0 17 3 | 3.0 16 4 | 5.0 11 5 | 4.0 9 6 | 0.0 9 7 | 6.0 8 8 | 7.0 7 9 | 11.0 6 10 | 18.0 4 11 | 12.0 4 12 | 25.0 3 13 | 16.0 3 14 | 14.0 3 15 | 35.0 2 16 | 43.0 2 17 | 36.0 2 18 | 20.0 2 19 | 9.0 2 20 | 15.0 2 21 | 22.0 2 22 | 31.0 2 23 | 10.0 2 24 | 46.0 2 25 | 24.0 2 26 | 27.0 1 27 | 40.0 1 28 | 62.0 1 29 | 19.0 1 30 | 39.0 1 31 | 30.0 1 32 | 63.0 1 33 | 13.0 1 34 | 17.0 1 35 | 102.0 1 36 | 21.0 1 37 | 33.0 1 38 | 38.0 1 39 | 88.0 1 40 | 29.0 1 41 | 32.0 1 42 | 26.0 1 43 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I2.dict: -------------------------------------------------------------------------------- 1 | 1 41 2 | 0 31 3 | -1 15 4 | 2 11 5 | 5 7 6 | 3 4 7 | 4 4 8 | 10 3 9 | 49 3 10 | 7 3 11 | 19 3 12 | 8 3 13 | 13 2 14 | 370 2 15 | 11 2 16 | 35 2 17 | 179 2 18 | 57 2 19 | 18 2 20 | 27 2 21 | 22 2 22 | 6 2 23 | 14 2 24 | 17 2 25 | 38 2 26 | 82 1 27 | 24 1 28 | 105 1 29 | 85 1 30 | 43 1 31 | 26 1 32 | 302 1 33 | 251 1 34 | 212 1 35 | 779 1 36 | 72 1 37 | 2865 1 38 | 119 1 39 | 25 1 40 | 180 1 41 | 84 1 42 | 54 1 43 | 58 1 44 | 30 1 45 | 68 1 46 | 304 1 47 | 64 1 48 | 53 1 49 | 498 1 50 | 90 1 51 | 29 1 52 | 78 1 53 | 113 1 54 | 1849 1 55 | 65 1 56 | 164 1 57 | 15 1 58 | 152 1 59 | 183 1 60 | 12 1 61 | 237 1 62 | 74 1 63 | 2921 1 64 | 55 1 65 | 493 1 66 | 248 1 67 | 3001 1 68 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I3.dict: -------------------------------------------------------------------------------- 1 | 1.0 22 2 | 2.0 16 3 | 3.0 14 4 | 4.0 13 5 | 5.0 10 6 | 6.0 7 7 | 7.0 6 8 | 8.0 5 9 | 9.0 5 10 | 13.0 4 11 | 20.0 3 12 | 23.0 3 13 | 14.0 3 14 | 10.0 3 15 | 19.0 2 16 | 52.0 2 17 | 60.0 2 18 | 29.0 2 19 | 34.0 2 20 | 11.0 2 21 | 25.0 2 22 | 37.0 2 23 | 260.0 1 24 | 104.0 1 25 | 63.0 1 26 | 30.0 1 27 | 36.0 1 28 | 190.0 1 29 | 24.0 1 30 | 71.0 1 31 | 22.0 1 32 | 61.0 1 33 | 53.0 1 34 | 94.0 1 35 | 0.0 1 36 | 46.0 1 37 | 131.0 1 38 | 18.0 1 39 | 75.0 1 40 | 17.0 1 41 | 2815.0 1 42 | 28.0 1 43 | 27.0 1 44 | 44.0 1 45 | 33.0 1 46 | 603.0 1 47 | 39.0 1 48 | 21.0 1 49 | 66.0 1 50 | 15.0 1 51 | 76.0 1 52 | 155.0 1 53 | 535.0 1 54 | 113.0 1 55 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I4.dict: -------------------------------------------------------------------------------- 1 | 1.0 25 2 | 3.0 16 3 | 2.0 15 4 | 5.0 12 5 | 4.0 10 6 | 0.0 10 7 | 6.0 9 8 | 7.0 8 9 | 11.0 6 10 | 12.0 5 11 | 22.0 5 12 | 20.0 4 13 | 10.0 3 14 | 14.0 3 15 | 9.0 3 16 | 15.0 3 17 | 23.0 2 18 | 36.0 2 19 | 16.0 2 20 | 18.0 2 21 | 8.0 2 22 | 35.0 1 23 | 27.0 1 24 | 40.0 1 25 | 25.0 1 26 | 30.0 1 27 | 13.0 1 28 | 21.0 1 29 | 33.0 1 30 | 38.0 1 31 | 87.0 1 32 | 29.0 1 33 | 24.0 1 34 | 17.0 1 35 | 46.0 1 36 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I5.dict: -------------------------------------------------------------------------------- 1 | 1.0 4 2 | 0.0 4 3 | 2.0 3 4 | 5.0 3 5 | 48.0 3 6 | 8.0 2 7 | 4.0 2 8 | 1464.0 2 9 | 11.0 2 10 | 3150.0 2 11 | 270.0 2 12 | 1499.0 2 13 | 357.0 2 14 | 92.0 2 15 | 17668.0 1 16 | 30251.0 1 17 | 2013.0 1 18 | 16836.0 1 19 | 1990.0 1 20 | 1470.0 1 21 | 1787.0 1 22 | 4684.0 1 23 | 30.0 1 24 | 5533.0 1 25 | 18424.0 1 26 | 732.0 1 27 | 5022.0 1 28 | 507333.0 1 29 | 10195.0 1 30 | 2200.0 1 31 | 36.0 1 32 | 239721.0 1 33 | 1572.0 1 34 | 1700.0 1 35 | 2939.0 1 36 | 18.0 1 37 | 14404.0 1 38 | 3412.0 1 39 | 21.0 1 40 | 3169.0 1 41 | 4939.0 1 42 | 59865.0 1 43 | 16732.0 1 44 | 1632.0 1 45 | 10324.0 1 46 | 676.0 1 47 | 3316.0 1 48 | 1238.0 1 49 | 11862.0 1 50 | 112.0 1 51 | 17405.0 1 52 | 3116.0 1 53 | 23584.0 1 54 | 13528.0 1 55 | 151.0 1 56 | 17907.0 1 57 | 10.0 1 58 | 3667.0 1 59 | 1046.0 1 60 | 75211.0 1 61 | 7814.0 1 62 | 24.0 1 63 | 7476.0 1 64 | 1526.0 1 65 | 475.0 1 66 | 10791.0 1 67 | 528.0 1 68 | 10467.0 1 69 | 27753.0 1 70 | 3732.0 1 71 | 178.0 1 72 | 6613.0 1 73 | 29111.0 1 74 | 21659.0 1 75 | 4325.0 1 76 | 2712.0 1 77 | 1732.0 1 78 | 37.0 1 79 | 24513.0 1 80 | 13599.0 1 81 | 1568.0 1 82 | 1751.0 1 83 | 269.0 1 84 | 14447.0 1 85 | 235065.0 1 86 | 246.0 1 87 | 14747.0 1 88 | 4317.0 1 89 | 11738.0 1 90 | 1517.0 1 91 | 3751.0 1 92 | 118.0 1 93 | 1396.0 1 94 | 15.0 1 95 | 11534.0 1 96 | 383.0 1 97 | 1683.0 1 98 | 1455.0 1 99 | 12245.0 1 100 | 285.0 1 101 | 5091.0 1 102 | 35203.0 1 103 | 11774.0 1 104 | 3008.0 1 105 | 12143.0 1 106 | 190.0 1 107 | 25660.0 1 108 | 28.0 1 109 | 10346.0 1 110 | 84.0 1 111 | 8913.0 1 112 | 20553.0 1 113 | 1539.0 1 114 | 1920.0 1 115 | 70.0 1 116 | 11665.0 1 117 | 548.0 1 118 | 1847.0 1 119 | 6431.0 1 120 | 20646.0 1 121 | 306036.0 1 122 | 1784.0 1 123 | 4501.0 1 124 | 5778.0 1 125 | 39424.0 1 126 | 5646.0 1 127 | 1795.0 1 128 | 2865.0 1 129 | 2940.0 1 130 | 4619.0 1 131 | 10327.0 1 132 | 1853.0 1 133 | 7.0 1 134 | 5781.0 1 135 | 3379.0 1 136 | 3011.0 1 137 | 63.0 1 138 | 8684.0 1 139 | 351.0 1 140 | 1398.0 1 141 | 17991.0 1 142 | 6426.0 1 143 | 14496.0 1 144 | 4108.0 1 145 | 42024.0 1 146 | 40.0 1 147 | 299.0 1 148 | 293044.0 1 149 | 39343.0 1 150 | 19088.0 1 151 | 79620.0 1 152 | 41706.0 1 153 | 872.0 1 154 | 43205.0 1 155 | 124027.0 1 156 | 300.0 1 157 | 112878.0 1 158 | 3134.0 1 159 | 2910.0 1 160 | 125.0 1 161 | 6461.0 1 162 | 2119.0 1 163 | 6288.0 1 164 | 148.0 1 165 | 61968.0 1 166 | 3036.0 1 167 | 1607.0 1 168 | 203.0 1 169 | 138.0 1 170 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I6.dict: -------------------------------------------------------------------------------- 1 | 0.0 11 2 | 11.0 6 3 | 3.0 5 4 | 1.0 5 5 | 20.0 5 6 | 4.0 4 7 | 2.0 3 8 | 5.0 3 9 | 6.0 3 10 | 9.0 3 11 | 22.0 3 12 | 164.0 2 13 | 61.0 2 14 | 65.0 2 15 | 36.0 2 16 | 21.0 2 17 | 39.0 2 18 | 79.0 2 19 | 104.0 2 20 | 38.0 2 21 | 63.0 2 22 | 15.0 2 23 | 170.0 2 24 | 32.0 2 25 | 87.0 2 26 | 24.0 2 27 | 50.0 2 28 | 247.0 1 29 | 200.0 1 30 | 142.0 1 31 | 217.0 1 32 | 26.0 1 33 | 461.0 1 34 | 436.0 1 35 | 7.0 1 36 | 163.0 1 37 | 19.0 1 38 | 147.0 1 39 | 140.0 1 40 | 292.0 1 41 | 13.0 1 42 | 30.0 1 43 | 72.0 1 44 | 59.0 1 45 | 42.0 1 46 | 112.0 1 47 | 119.0 1 48 | 1033.0 1 49 | 210.0 1 50 | 43.0 1 51 | 70.0 1 52 | 37.0 1 53 | 328.0 1 54 | 69.0 1 55 | 490.0 1 56 | 646.0 1 57 | 550.0 1 58 | 853.0 1 59 | 73.0 1 60 | 90.0 1 61 | 67.0 1 62 | 68.0 1 63 | 115.0 1 64 | 10.0 1 65 | 96.0 1 66 | 136.0 1 67 | 184.0 1 68 | 16.0 1 69 | 66.0 1 70 | 49.0 1 71 | 14.0 1 72 | 53.0 1 73 | 648.0 1 74 | 126.0 1 75 | 888.0 1 76 | 895.0 1 77 | 125.0 1 78 | 17.0 1 79 | 1820.0 1 80 | 84.0 1 81 | 31.0 1 82 | 680.0 1 83 | 25.0 1 84 | 2106.0 1 85 | 47.0 1 86 | 122.0 1 87 | 93.0 1 88 | 575.0 1 89 | 12.0 1 90 | 153.0 1 91 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I7.dict: -------------------------------------------------------------------------------- 1 | 0.0 46 2 | 1.0 28 3 | 2.0 15 4 | 4.0 13 5 | 5.0 11 6 | 9.0 7 7 | 6.0 6 8 | 11.0 5 9 | 8.0 5 10 | 10.0 4 11 | 3.0 4 12 | 12.0 4 13 | 14.0 3 14 | 25.0 3 15 | 17.0 3 16 | 34.0 2 17 | 24.0 2 18 | 15.0 2 19 | 19.0 2 20 | 33.0 1 21 | 41.0 1 22 | 23.0 1 23 | 22.0 1 24 | 30.0 1 25 | 62.0 1 26 | 27.0 1 27 | 29.0 1 28 | 110.0 1 29 | 172.0 1 30 | 26.0 1 31 | 50.0 1 32 | 248.0 1 33 | 13.0 1 34 | 69.0 1 35 | 21.0 1 36 | 20.0 1 37 | 37.0 1 38 | 70.0 1 39 | 301.0 1 40 | 80.0 1 41 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I8.dict: -------------------------------------------------------------------------------- 1 | 0.0 21 2 | 1.0 17 3 | 3.0 17 4 | 2.0 13 5 | 4.0 11 6 | 5.0 11 7 | 19.0 8 8 | 35.0 7 9 | 10.0 7 10 | 7.0 7 11 | 6.0 6 12 | 32.0 4 13 | 8.0 4 14 | 16.0 4 15 | 30.0 4 16 | 14.0 4 17 | 9.0 4 18 | 42.0 4 19 | 33.0 3 20 | 25.0 3 21 | 12.0 3 22 | 18.0 3 23 | 37.0 2 24 | 17.0 2 25 | 22.0 2 26 | 15.0 2 27 | 41.0 2 28 | 43.0 2 29 | 13.0 2 30 | 34.0 2 31 | 21.0 2 32 | 49.0 2 33 | 20.0 2 34 | 11.0 2 35 | 47.0 1 36 | 27.0 1 37 | 24.0 1 38 | 48.0 1 39 | 28.0 1 40 | 31.0 1 41 | 23.0 1 42 | -------------------------------------------------------------------------------- /config/criteo/feat_id_dict/num_static.I9.dict: -------------------------------------------------------------------------------- 1 | 1.0 9 2 | 4.0 8 3 | 0.0 8 4 | 20.0 6 5 | 98.0 6 6 | 37.0 5 7 | 2.0 5 8 | 5.0 5 9 | 11.0 5 10 | 3.0 4 11 | 16.0 3 12 | 68.0 3 13 | 160.0 2 14 | 135.0 2 15 | 25.0 2 16 | 33.0 2 17 | 55.0 2 18 | 281.0 2 19 | 21.0 2 20 | 6.0 2 21 | 32.0 2 22 | 19.0 2 23 | 113.0 2 24 | 13.0 2 25 | 89.0 2 26 | 8.0 2 27 | 26.0 2 28 | 111.0 2 29 | 30.0 2 30 | 9.0 2 31 | 432.0 2 32 | 10.0 2 33 | 18.0 2 34 | 523.0 1 35 | 29.0 1 36 | 46.0 1 37 | 489.0 1 38 | 126.0 1 39 | 23.0 1 40 | 231.0 1 41 | 192.0 1 42 | 123.0 1 43 | 437.0 1 44 | 103.0 1 45 | 39.0 1 46 | 753.0 1 47 | 61.0 1 48 | 87.0 1 49 | 69.0 1 50 | 144.0 1 51 | 48.0 1 52 | 47.0 1 53 | 35.0 1 54 | 288.0 1 55 | 148.0 1 56 | 40.0 1 57 | 803.0 1 58 | 585.0 1 59 | 96.0 1 60 | 200.0 1 61 | 74.0 1 62 | 151.0 1 63 | 242.0 1 64 | 62.0 1 65 | 117.0 1 66 | 573.0 1 67 | 140.0 1 68 | 568.0 1 69 | 196.0 1 70 | 412.0 1 71 | 73.0 1 72 | 78.0 1 73 | 22.0 1 74 | 502.0 1 75 | 146.0 1 76 | 269.0 1 77 | 88.0 1 78 | 67.0 1 79 | 168.0 1 80 | 276.0 1 81 | 1034.0 1 82 | 105.0 1 83 | 102.0 1 84 | 184.0 1 85 | 163.0 1 86 | 60.0 1 87 | 59.0 1 88 | 82.0 1 89 | 272.0 1 90 | 127.0 1 91 | 175.0 1 92 | 121.0 1 93 | 108.0 1 94 | 7.0 1 95 | 862.0 1 96 | 58.0 1 97 | 84.0 1 98 | 722.0 1 99 | 45.0 1 100 | 318.0 1 101 | 24.0 1 102 | 49.0 1 103 | 334.0 1 104 | 95.0 1 105 | 54.0 1 106 | 107.0 1 107 | 114.0 1 108 | 214.0 1 109 | 15.0 1 110 | 508.0 1 111 | -------------------------------------------------------------------------------- /config/make_feat_conf.sh: -------------------------------------------------------------------------------- 1 | rm -rf feat_config_0811 2 | rm -rf feat_config_08_all 3 | cat /home/SanJunipero/rd/tangwang/dj/rank_new/fmdata_new/20210811 | python3 make_feat_conf.py -o feat_config_0811 > log.feat_statis 2>log.feat_statis.err 4 | cat /home/SanJunipero/rd/tangwang/dj/rank_new/fmdata_new/202108* | python3 make_feat_conf.py -o feat_config_08_all > log.feat_statis_08_all 2>log.feat_statis_08_all.err 5 | -------------------------------------------------------------------------------- /data/criteo_sampled_data.csv.tar.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/data/criteo_sampled_data.csv.tar.xz -------------------------------------------------------------------------------- /data/readme.md: -------------------------------------------------------------------------------- 1 | 解压criteo_sampled_data.csv.tar.xz: 2 | 3 | xz -d criteo_sampled_data.csv.tar.xz 4 | tar -xf criteo_sampled_data.csv.tar 5 | 6 | 7 | 8 | 9 | 10 | 附: 11 | 12 | movielens数据集的使用 13 | https://www.cnblogs.com/xiaoqi/p/deepfm.html 14 | 15 | 16 | 17 | 公开数据集: 18 | 19 | https://github.com/ycjuan/kaggle-2014-criteo 20 | 21 | https://github.com/ycjuan/libffm 22 | 23 | -------------------------------------------------------------------------------- /docs/pics/AFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/AFM.png -------------------------------------------------------------------------------- /docs/pics/AFN.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/AFN.jpg -------------------------------------------------------------------------------- /docs/pics/DIFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/DIFM.png -------------------------------------------------------------------------------- /docs/pics/DIN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/DIN.png -------------------------------------------------------------------------------- /docs/pics/DeepFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/DeepFM.png -------------------------------------------------------------------------------- /docs/pics/FNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/FNN.png -------------------------------------------------------------------------------- /docs/pics/IFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/IFM.png -------------------------------------------------------------------------------- /docs/pics/InteractingLayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/InteractingLayer.png -------------------------------------------------------------------------------- /docs/pics/NFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/NFM.png -------------------------------------------------------------------------------- /docs/pics/PNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/PNN.png -------------------------------------------------------------------------------- /docs/pics/criteo_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/criteo_sample.png -------------------------------------------------------------------------------- /docs/pics/movielens_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/movielens_sample.png -------------------------------------------------------------------------------- /docs/pics/movielens_sample_with_genres.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangwang/exFM/4817da5a18a47c6d5c68faf678305c57b47de6c2/docs/pics/movielens_sample_with_genres.png -------------------------------------------------------------------------------- /docs/predict_python/fm_pred_lib_guide.md: -------------------------------------------------------------------------------- 1 | # FM Prediction Library (fm_pred.so) Python Guide 2 | 3 | ## Overview 4 | The FM Prediction Library (fm_pred.so) is a C-based library that provides factorization machine model prediction capabilities. This guide explains how to use the library in Python applications. 5 | 6 | ## Library Functions 7 | 8 | The library exposes the following main functions: 9 | 10 | 1. `fmModelCreate`: Creates a new FM model instance 11 | - Input: Model prediction config path (string) 12 | - Returns: Model handle (void pointer) 13 | 14 | 2. `fmModelRelease`: Releases a FM model instance 15 | - Input: Model handle 16 | - Returns: None 17 | 18 | 3. `fmPredictInstanceCreate`: Creates a prediction instance for a specific model 19 | - Input: Model handle 20 | - Returns: Prediction instance handle (void pointer) 21 | 22 | 4. `fmPredictInstanceRelease`: Releases a prediction instance 23 | - Input: Prediction instance handle 24 | - Returns: None 25 | 26 | 5. `fmPredictBatch`: Performs batch prediction 27 | - Inputs: 28 | - Prediction instance handle 29 | - Array of feature strings 30 | - Number of instances 31 | - Output scores array 32 | - Debug flag 33 | - Returns: Status code (0 for success) 34 | 35 | ## Setup Requirements 36 | 37 | 1. The fm_pred.so library must be accessible in your system 38 | 2. Python ctypes library for interfacing with the C library 39 | 3. Proper model configuration file 40 | 41 | ## Thread Safety 42 | 43 | The library is designed to be thread-safe: 44 | - One FM model can be shared across multiple threads 45 | - Each thread should create its own prediction instance 46 | - Use threading.local() for thread-local storage of prediction instances 47 | 48 | ## Error Handling 49 | 50 | The library implements error checking at multiple levels: 51 | - Library loading errors 52 | - Model creation errors 53 | - Prediction instance creation errors 54 | - Batch prediction errors 55 | 56 | ## Configuration 57 | 58 | The model requires a configuration file (typically in JSON format) that specifies: 59 | - Model parameters 60 | - Feature configurations 61 | - Other prediction-related settings 62 | 63 | ## Best Practices 64 | 65 | 1. Always release resources properly 66 | 2. Create one prediction instance per thread 67 | 3. Use batch prediction for better performance 68 | 4. Implement proper error handling 69 | 5. Log important operations and errors 70 | 71 | See the example code in `fm_pred_example.py` for a practical implementation. -------------------------------------------------------------------------------- /docs/predict_python/fm_pred_lib_guide_zh.md: -------------------------------------------------------------------------------- 1 | # FM预测库 (fm_pred.so) Python指南 2 | 3 | ## 概述 4 | FM预测库 (fm_pred.so) 是一个基于C的库,提供因子分解机模型的预测能力。本指南解释了如何在Python应用程序中使用该库。 5 | 6 | ## 库函数 7 | 8 | 该库暴露了以下主要函数: 9 | 10 | 1. `fmModelCreate`:创建一个新的FM模型实例 11 | - 输入:模型预测配置路径(字符串) 12 | - 返回:模型句柄(void指针) 13 | 14 | 2. `fmModelRelease`:释放FM模型实例 15 | - 输入:模型句柄 16 | - 返回:无 17 | 18 | 3. `fmPredictInstanceCreate`:为特定模型创建预测实例 19 | - 输入:模型句柄 20 | - 返回:预测实例句柄(void指针) 21 | 22 | 4. `fmPredictInstanceRelease`:释放预测实例 23 | - 输入:预测实例句柄 24 | - 返回:无 25 | 26 | 5. `fmPredictBatch`:执行批量预测 27 | - 输入: 28 | - 预测实例句柄 29 | - 特征字符串数组 30 | - 实例数量 31 | - 输出分数数组 32 | - 调试标志 33 | - 返回:状态码(0表示成功) 34 | 35 | ## 设置要求 36 | 37 | 1. fm_pred.so库必须在您的系统中可访问 38 | 2. Python ctypes库用于与C库接口 39 | 3. 正确的模型配置文件 40 | 41 | ## 线程安全 42 | 43 | 该库设计为线程安全: 44 | - 一个FM模型可以在多个线程之间共享 45 | - 每个线程应创建自己的预测实例 46 | - 使用`threading.local()`进行线程局部存储预测实例 47 | 48 | ## 错误处理 49 | 50 | 该库在多个层面实现了错误检查: 51 | - 库加载错误 52 | - 模型创建错误 53 | - 预测实例创建错误 54 | - 批量预测错误 55 | 56 | ## 配置 57 | 58 | 模型需要一个配置文件(通常为JSON格式),指定: 59 | - 模型参数 60 | - 特征配置 61 | - 其他与预测相关的设置 62 | 63 | ## 最佳实践 64 | 65 | 1. 始终正确释放资源 66 | 2. 每个线程创建一个预测实例 67 | 3. 使用批量预测以提高性能 68 | 4. 实现适当的错误处理 69 | 5. 记录重要操作和错误 70 | 71 | 请参见`fm_pred_example.py`中的示例代码以获取实际实现。 -------------------------------------------------------------------------------- /scripts/killall.sh: -------------------------------------------------------------------------------- 1 | ps -ef|grep train | grep feat_cfg | awk '{print $2}' | xargs kill -9 2 | -------------------------------------------------------------------------------- /scripts/metric.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import traceback 3 | import os 4 | 5 | test_file = sys.argv[1] 6 | test_column = int(sys.argv[2]) 7 | pred_file = sys.argv[3] 8 | pred_column = int(sys.argv[4]) 9 | 10 | def calAUC(prob,labels): 11 | f = list(zip(prob,labels)) 12 | rank = [values2 for values1,values2 in sorted(f,key=lambda x:x[0])] 13 | rankList = [i+1 for i in range(len(rank)) if rank[i]==1] 14 | posNum = 0 15 | negNum = 0 16 | for i in range(len(labels)): 17 | if(labels[i]==1): 18 | posNum+=1 19 | else: 20 | negNum+=1 21 | auc = 0 22 | 23 | auc = float(sum(rankList)- (posNum*(posNum+1))/2)/(posNum*negNum) 24 | return auc 25 | 26 | y = [] 27 | pred = [] 28 | 29 | with open(pred_file, 'r') as infile: 30 | for line in infile: 31 | pred.append(float(line.strip().split(' ')[pred_column])) 32 | with open(test_file, 'r') as infile: 33 | for line in infile: 34 | y.append(int(line.strip().split(' ')[test_column])) 35 | print(len(y)) 36 | print(len(pred)) 37 | print(calAUC(pred,y)) 38 | -------------------------------------------------------------------------------- /src/feature/common_feat.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | // #include "solver/solver_factory.h" 6 | #include "solver/parammeter_container.h" 7 | #include "nlohmann/json.hpp" 8 | #include "synchronize/mutex_adapter.h" 9 | #include "utils/base.h" 10 | #include "utils/utils.h" 11 | #include 12 | 13 | using json = nlohmann::json; 14 | 15 | class CommonFeatConfig { 16 | public: 17 | string name; 18 | 19 | mutable shared_ptr param_container; 20 | 21 | bool loadModel() { 22 | bool ret = true; 23 | if (!train_opt.init_model_path.empty()) { 24 | ret = (0 == param_container->load(train_opt.init_model_path + "/" + name, 25 | train_opt.model_format)); 26 | } 27 | return ret; 28 | } 29 | 30 | bool dumpModel() { 31 | bool ret = true; 32 | if (!train_opt.model_path.empty()) { 33 | VERBOSE_OUT(1) << "dump model for " << name << " ... "; 34 | if (param_container) { 35 | if (0 == param_container->dump(train_opt.model_path + "/" + name, 36 | train_opt.model_format)) { 37 | VERBOSE_OUT(1) << " ok " << endl; 38 | } else { 39 | ret = false; 40 | VERBOSE_OUT(1) << " faild " << endl; 41 | } 42 | } else { 43 | VERBOSE_OUT(1) << " param_container is empty! " << endl; 44 | } 45 | } 46 | return ret; 47 | } 48 | 49 | virtual bool initParams(unordered_map> & shared_param_container_map) = 0; 50 | 51 | }; 52 | 53 | class CommonFeatContext { 54 | public: 55 | virtual int feedSample(const char *feat_str, size_t feat_str_len, FmLayerNode & fm_node) = 0; 56 | virtual bool valid() const = 0; 57 | 58 | CommonFeatContext() : feat_cfg(NULL) {} 59 | 60 | virtual ~CommonFeatContext() {} 61 | 62 | const CommonFeatConfig * feat_cfg; 63 | }; 64 | -------------------------------------------------------------------------------- /src/feature/dense_feat.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/common_feat.h" 6 | 7 | class DenseFeatConfig : public CommonFeatConfig { 8 | public: 9 | real_t min; 10 | real_t max; 11 | real_t add; 12 | real_t multiply; 13 | real_t pow; 14 | real_t log_base; 15 | real_t log_divisor; 16 | 17 | real_t default_value; 18 | 19 | // 配置的等频分桶桶宽 20 | vector sparse_by_wide_bins_numbs; 21 | // 配置的分桶 22 | vector> sparse_by_splits; 23 | 24 | // 以下3个vector,长度一致,按位置一一对应 25 | vector all_splits; // 分隔值 26 | vector> feat_ids_of_each_buckets; // 分隔值对应的onehot ID列表 27 | vector> 28 | feat_params_of_each_buckets; // 分隔值对应的onehot ID列表 所对应的参数位置 29 | 30 | const vector &get_feat_ids(real_t x) const { 31 | if (x == default_value) { 32 | return feat_ids_of_each_buckets[feat_ids_of_each_buckets.size() - 1]; 33 | } 34 | x += add; 35 | if (multiply != 0.0) { 36 | x *= multiply; 37 | } 38 | if (pow != 0.0) { 39 | x = std::pow(x, pow); 40 | } 41 | if (log_divisor != 0.0) { 42 | x = std::log(x) / log_divisor; 43 | } 44 | 45 | int bucket_id = lower_bound(all_splits.begin(), all_splits.end(), x) - 46 | all_splits.begin(); 47 | 48 | if (bucket_id == (int)all_splits.size()) --bucket_id; 49 | /* gdb debug 50 | p feat_params_of_each_buckets[bucket_id] 51 | 拿到param地址后: 52 | p (*(FMParamUnit *)0x6c8138) 53 | p (*(FMParamUnit *)0x6c8138).buff@24 54 | */ 55 | return feat_ids_of_each_buckets[bucket_id]; 56 | } 57 | 58 | int getFeaBucketId(real_t x) const { 59 | assert(x != default_value); 60 | int bucket_id = lower_bound(all_splits.begin(), all_splits.end(), x) - 61 | all_splits.begin(); 62 | 63 | if (bucket_id == (int)all_splits.size()) --bucket_id; 64 | 65 | return bucket_id; 66 | } 67 | 68 | bool initParams(unordered_map> & shared_param_container_map); 69 | 70 | friend ostream & operator << (ostream &out, const DenseFeatConfig & cfg) { 71 | out << " DenseFeatConfig name <" << cfg.name << ">" << endl; 72 | out << " sparse_by_splits: " << endl << cfg.sparse_by_splits << endl; 73 | out << " sparse_by_wide_bins_numbs: " << endl << cfg.sparse_by_wide_bins_numbs << endl; 74 | out << " all_splits: " << endl << cfg.all_splits << endl; 75 | out << " feat_ids_of_each_buckets: " << endl << cfg.feat_ids_of_each_buckets << endl; 76 | out << ">\n min <" << cfg.min << "> max <" << cfg.max << ">" << endl; 77 | out << " default_value <" << cfg.default_value << ">" << endl; 78 | return out; 79 | } 80 | 81 | DenseFeatConfig(); 82 | ~DenseFeatConfig(); 83 | }; 84 | 85 | void to_json(json &j, const DenseFeatConfig &p); 86 | void from_json(const json &j, DenseFeatConfig &p); 87 | 88 | class DenseFeatContext : public CommonFeatContext { 89 | public: 90 | real_t orig_x; 91 | const vector *feat_params; 92 | 93 | const DenseFeatConfig &cfg_; 94 | 95 | int feedSample(const char *feat_str, size_t feat_str_len, FmLayerNode & fm_node); 96 | 97 | bool valid() const { 98 | // 暂时只支持离散特征 99 | return orig_x != cfg_.default_value && !cfg_.all_splits.empty(); 100 | } 101 | 102 | DenseFeatContext(const DenseFeatConfig &cfg); 103 | ~DenseFeatContext(); 104 | }; 105 | -------------------------------------------------------------------------------- /src/feature/feat_manager.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/dense_feat.h" 6 | #include "feature/sparse_feat.h" 7 | #include "feature/varlen_sparse_feat.h" 8 | #ifdef _MSC_VER 9 | #include // mdkir for windows 10 | #define mkdir(dir, mode) mkdir(dir) 11 | #else 12 | #include // mkdir for linux 13 | #endif 14 | 15 | class FeatManager { 16 | public: 17 | FeatManager() {} 18 | ~FeatManager() {} 19 | 20 | bool loadByFeatureConfig(string config_path); 21 | 22 | bool dumpModel(); 23 | 24 | vector dense_feat_cfgs; 25 | vector sparse_feat_cfgs; 26 | vector varlen_feat_cfgs; 27 | 28 | // key: 如果有shared_embedding_name则用shared_embedding_name,否则用特征的名称. 用于共享embedding 29 | unordered_map> shared_param_container_map; 30 | 31 | private: 32 | bool initModelParams(); 33 | 34 | }; 35 | -------------------------------------------------------------------------------- /src/feature/varlen_sparse_feat.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/common_feat.h" 6 | #include "feature/sparse_feat.h" 7 | 8 | 9 | class VarlenSparseFeatConfig : public CommonFeatConfig { 10 | public: 11 | SparseFeatConfig sparse_cfg; 12 | 13 | enum SeqPoolType { 14 | SeqPoolTypeSUM = 0, 15 | SeqPoolTypeAVG = 1, 16 | SeqPoolTypeMAX = 2, 17 | SeqPoolTypeFlatern = 3, 18 | SeqPoolTypeGRU = 4, 19 | }; 20 | 21 | SeqPoolType pooling_type_id; 22 | size_t max_len; 23 | 24 | bool initParams(unordered_map> & shared_param_container_map); 25 | 26 | bool dumpFeatIdDict(const string & path) const { 27 | return sparse_cfg.dumpFeatIdDict(path); 28 | } 29 | 30 | friend ostream & operator << (ostream &out, const VarlenSparseFeatConfig & cfg) { 31 | out << " VarlenSparseFeatConfig name <" << cfg.name << ">" << endl; 32 | out << " max_len <" << cfg.max_len << ">" << endl; 33 | out << " pooling_type_id <" << cfg.pooling_type_id << ">" << endl; 34 | out << cfg.sparse_cfg; 35 | return out; 36 | } 37 | 38 | VarlenSparseFeatConfig(); 39 | ~VarlenSparseFeatConfig(); 40 | }; 41 | 42 | void to_json(json& j, const VarlenSparseFeatConfig& p); 43 | void from_json(const json& j, VarlenSparseFeatConfig& p); 44 | 45 | class VarlenSparseFeatContext : public CommonFeatContext { 46 | public: 47 | const VarlenSparseFeatConfig& cfg_; 48 | 49 | vector feat_ids; 50 | 51 | bool valid() const { return !feat_ids.empty(); } 52 | 53 | int feedSample(const char *feat_str, size_t feat_str_len, FmLayerNode & fm_node); 54 | 55 | char feat_id_buff[128]; // temp variable for parse single feat_id 56 | 57 | VarlenSparseFeatContext(const VarlenSparseFeatConfig& cfg); 58 | ~VarlenSparseFeatContext(); 59 | }; 60 | -------------------------------------------------------------------------------- /src/predict/lib_fm_pred.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | * 该部分代码未测试,请不要使用 4 | */ 5 | #ifndef LIB_FM_PRED_H 6 | #define LIB_FM_PRED_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | /* 17 | * usage: 18 | // config/train.conf必须配置的参数有: 19 | // data_formart 数据格式, csv/libsvm 20 | // feat_sep 域分隔符 21 | // feat_values_sep 序列特征分隔符 22 | // feat_cfg 特征处理配置 23 | // mf 模型格式 24 | // im 模型地址 25 | // 如果是csv格式,必须通过csv_columns参数设定列名 26 | FmModel fm_model; 27 | int model_init_ret = fm_model.init("config/train.conf"); 28 | if (0 != model_init_ret) { 29 | std::cout << " model init error : " << ret << std::endl; 30 | } 31 | 32 | // 每个线程可以创建自己的instance 33 | FmPredictInstance* fm_instance = fm_model.createFmPredictInstance(); 34 | 35 | // 调用预估 36 | const char* intput_str = 37 | "123,aaa,信托|记账|酒店,2521,0.3,342|5212|839,24\n" 38 | "3423,bcd,培训|租房,342,1.2,44|3422|34|8,33\n"; 39 | char predict_output[10240]; 40 | fm_instance->fm_pred(intput_str, predict_output, sizeof(predict_output)); 41 | 42 | 或者 43 | vector input_vec; 44 | input_vec.push_back("3423,bcd,培训|租房,342,1.2,44|3422|34|8,33"); 45 | input_vec.push_back("123,aaa,信托|记账|酒店,2521,0.3,342|5212|839,24"); 46 | input_vec.push_back("3423,bcd,培训|租房,342,1.2,44|3422|34|8,33"); 47 | 48 | vector scores 49 | fm_instance->fm_pred(input_vec, scores); 50 | */ 51 | 52 | class FmPredictInstance; 53 | class BaseSolver; 54 | class FeatManager; 55 | 56 | class FmModel { 57 | public: 58 | // @param config_path 配置文件地址 59 | FmModel(); 60 | 61 | int init(const char * config_path); 62 | 63 | ~FmModel(); 64 | 65 | FmPredictInstance* createFmPredictInstance(); 66 | 67 | private: 68 | std::shared_ptr feat_manager; 69 | }; 70 | 71 | 72 | // 每个线程/进程创建自己的用于predict的instance 73 | class FmPredictInstance { 74 | public: 75 | FmPredictInstance(FeatManager& feat_manager); 76 | ~FmPredictInstance(); 77 | 78 | int fm_pred(const std::vector& p_lines, std::vector& p_scores); 79 | 80 | /* 81 | @param input_str : support csv / libsvm formart 82 | @param output_str : output memory allocated by caller, will fill with scorelist joind by ',' 83 | @param output_len : memory size of output_str 84 | @return: 0 : success; other : faild 85 | */ 86 | int fm_pred(char* input_str, char* output_str, int output_len); 87 | 88 | private: 89 | std::shared_ptr solver; 90 | std::vector lines; 91 | std::vector scores; 92 | 93 | double predict_line(const std::string& line); 94 | 95 | }; 96 | 97 | // 为java或者c项目提供的调用方式 98 | extern "C" { 99 | 100 | //创建模型 101 | FmModel* fmModelCreate(const char* config_path); 102 | void fmModelRelease(FmModel* fm_model); 103 | 104 | 105 | // 每个线程创建自己的用于predict的instance 106 | FmPredictInstance * fmPredictInstanceCreate(FmModel* fm_model); 107 | void fmPredictInstanceRelease(FmPredictInstance* fm_instance); 108 | 109 | //调用预估 110 | /* 111 | @param input_str : support csv / libsvm formart 112 | @param output_str : output memory allocated by caller, will fill with scorelist joind by ',' 113 | @param output_len : memory size of output_str 114 | @return: 0 : success; other : faild 115 | */ 116 | int fmPredict(FmPredictInstance * fm_instance, char* input_str, char* output_str, int output_len); 117 | 118 | // New function for Python interface 119 | int fmPredictBatch(FmPredictInstance* fm_instance, const char** input_strs, int input_count, double* output_scores, int print_debug_info); 120 | 121 | } 122 | 123 | 124 | #endif // LIB_FM_PRED_H -------------------------------------------------------------------------------- /src/predict/predict.cc: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #include "feature/feat_manager.h" 5 | #include "train/train_worker.h" 6 | #include "train/shulffer.h" 7 | #include "solver/ftrl/ftrl_solver.h" 8 | #include "solver/solver_factory.h" 9 | #include "solver/ftrl/ftrl_solver.h" 10 | #include "solver/adam/adam_solver.h" 11 | #include "solver/sgdm/sgdm_solver.h" 12 | #include "solver/adagrad/adagrad_solver.h" 13 | #include "solver/rmsprop/rmsprop_solver.h" 14 | 15 | 16 | int main(int argc, char *argv[]) { 17 | srand(time(NULL)); 18 | 19 | if (!train_opt.parse_cfg_and_cmdlines(argc, argv)) { 20 | cerr << "parse args faild, exit" << endl; 21 | return -1; 22 | } 23 | 24 | train_opt.solver = "pred"; 25 | 26 | cin.sync_with_stdio(false); 27 | 28 | // 如果是csv格式,解析头行 29 | if (train_opt.data_formart == TrainOption::DataFormart_CSV) { 30 | if (train_opt.csv_columns.empty()) { 31 | std::getline(cin, train_opt.csv_columns); 32 | if (train_opt.feat_seperator != ',') { 33 | utils::replace_all(train_opt.csv_columns, std::to_string(train_opt.feat_seperator), std::to_string(',')); 34 | } 35 | } 36 | } 37 | 38 | // init trainning workers 39 | FeatManager feat_manager; 40 | assert(!train_opt.feature_config_path.empty()); 41 | assert(access(train_opt.feature_config_path.c_str(), F_OK) != -1); 42 | if (!feat_manager.loadByFeatureConfig(train_opt.feature_config_path)) { 43 | cerr << "init feature manager faild, check config file " << train_opt.feature_config_path << ". exit" << endl; 44 | return -1; 45 | } 46 | 47 | BaseSolver solver(feat_manager); 48 | 49 | int y; 50 | real_t score; 51 | string line; 52 | cout << "y" << train_opt.feat_seperator << "score" << train_opt.feat_seperator << "input_line" << endl; 53 | while (std::getline(std::cin, line)) { 54 | solver.test(line, y, score); 55 | int pred = score > 0.0 ? 1 : 0; 56 | cout << pred << train_opt.feat_seperator << score << endl; 57 | } 58 | 59 | return 0; 60 | } 61 | -------------------------------------------------------------------------------- /src/solver/adagrad/adagrad_param.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | 7 | class AdagradParamUnit { 8 | public: 9 | FMParamUnit fm_param; 10 | FMParamUnit squared_sum; // 2nd raw momentum (the uncentered variance) of the gradient 11 | 12 | AdagradParamUnit() { 13 | fm_param.w = 0.0; 14 | // squared_sum原始论文是初始化为0 15 | // squared_sum初始化为1e-7相比于初始化为0(原始论文的实现)有提升。初始化为0.1或者1对其他维度的超参(lr, batch_size, l2norm)更为鲁棒,更容易收敛,但是最高AUC不如squared_sum初始化为0的情况。 16 | squared_sum.w = 1e-7; 17 | for (int f = 0; f < DIM; ++f) { 18 | fm_param.V[f] = utils::gaussian(0.0, train_opt.init_stdev); 19 | squared_sum.V[f] = 1e-7; 20 | } 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /src/solver/adagrad/adagrad_solver.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/feat_manager.h" 6 | #include "solver/adagrad/adagrad_param.h" 7 | #include "solver/base_solver.h" 8 | #include "train/train_opt.h" 9 | 10 | class AdagradSolver : public BaseSolver { 11 | public: 12 | AdagradSolver(const FeatManager &feat_manager) 13 | : BaseSolver(feat_manager), 14 | lr(train_opt.adagrad.lr), 15 | l2_norm_w(train_opt.adagrad.l2_norm_w), 16 | l2_norm_V(train_opt.adagrad.l2_norm_V) 17 | {} 18 | 19 | virtual ~AdagradSolver() {} 20 | 21 | virtual void update() { 22 | 23 | for (auto &kv : batch_params) { 24 | ParamNode ¶m_node = kv.second; 25 | FMParamUnit & grad = param_node.fm_grad; 26 | batchReduce(grad, param_node.count); 27 | 28 | AdagradParamUnit *backward_param = (AdagradParamUnit *)param_node.param; 29 | param_node.mutex->writeLock(); 30 | 31 | // update w 32 | real_t &w = backward_param->fm_param.w; 33 | real_t &wv = backward_param->squared_sum.w; 34 | 35 | wv += grad.w * grad.w; 36 | 37 | DEBUG_OUT << "adagrad_solver: grad:" << grad << " decayed_lr" << lr / (std::sqrt(wv) + eps) 38 | << " count " << param_node.count 39 | << " wv:" << wv << " update:" 40 | << lr * (grad.w + l2_norm_w * w) / (std::sqrt(wv) + eps) 41 | << endl; 42 | 43 | w -= lr * (grad.w + l2_norm_w * w) / (std::sqrt(wv) + eps); 44 | 45 | // update V 46 | for (int f = 0; f < DIM; ++f) { 47 | real_t &vf = backward_param->fm_param.V[f]; 48 | real_t &vvf = backward_param->squared_sum.V[f]; 49 | real_t vgf = grad.V[f]; 50 | 51 | vvf += vgf * vgf; 52 | vf -= lr * (vgf + l2_norm_V * vf) / (std::sqrt(vvf) + eps); 53 | } 54 | param_node.mutex->unlock(); 55 | } 56 | } 57 | 58 | const real_t lr; 59 | const real_t l2_norm_w; 60 | const real_t l2_norm_V; 61 | static constexpr real_t eps = 1e-7; 62 | static constexpr bool amsgrad = false; // 保留历史最大的v_t,记为v_{max},每次计算都是用最大的v_{max},否则是用当前v_t 63 | // amsgrad需要多一个保存一份历史最大值平方梯度v_{max}。 暂未实现 64 | // avg_grads = beta1 * avg_grads + (1-beta1) * w.grad 65 | // squared_sum = beta2 * (squared_sum) + (1-beta2) * (w.grad * w.grad) 66 | // max_squared = max(squared_sum, max_squared) 67 | // w = w - lr * avg_grads / sqrt(max_squared) 68 | }; 69 | -------------------------------------------------------------------------------- /src/solver/adam/adam_param.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | 7 | class AdamParamUnit { 8 | public: 9 | FMParamUnit fm_param; 10 | FMParamUnit avg_grad; // 1st momentum (the mean) of the gradient 11 | FMParamUnit avg_squared; // 2nd raw momentum (the uncentered variance) of the gradient 12 | real_t beta1power_t; 13 | real_t beta2power_t; 14 | 15 | AdamParamUnit() { 16 | fm_param.w = 0.0; 17 | avg_grad.w = 0.0; 18 | avg_squared.w = 0.0; 19 | beta1power_t = 1.0; 20 | beta2power_t = 1.0; 21 | for (int f = 0; f < DIM; ++f) { 22 | fm_param.V[f] = utils::gaussian(0.0, train_opt.init_stdev); 23 | avg_grad.V[f] = 0.0; 24 | avg_squared.V[f] = 0.0; 25 | } 26 | } 27 | }; 28 | 29 | -------------------------------------------------------------------------------- /src/solver/base_solver.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/feat_manager.h" 6 | #include "solver/parammeter_container.h" 7 | #include "utils/base.h" 8 | #include "train/train_opt.h" 9 | 10 | class Sample { 11 | public: 12 | Sample() {} 13 | ~Sample() {} 14 | 15 | real_t forward(); 16 | 17 | void backward(); 18 | 19 | size_t fm_layer_nodes_size; 20 | vector fm_layer_nodes; 21 | 22 | real_t logit; 23 | real_t loss; 24 | real_t grad; 25 | real_t sum[DIM]; 26 | real_t sum_sqr[DIM]; 27 | union { 28 | int i; // for classification 29 | real_t f; // for regression 30 | } label; 31 | }; 32 | 33 | class BaseSolver { 34 | public: 35 | BaseSolver(const FeatManager &feat_manager); 36 | 37 | virtual ~BaseSolver() {} 38 | 39 | void train(const string & line, int &y, real_t &logit, real_t & loss, real_t & grad); 40 | void test(const string & line, int &y, real_t &logit); 41 | 42 | protected: 43 | real_t feedLine_libSVM(const string & aline); 44 | real_t feedLine_CSV(const string & aline); 45 | 46 | virtual void update() {} 47 | 48 | void rotateSampleIdx(); 49 | 50 | void batchReduce(FMParamUnit &grad, int count); 51 | 52 | protected: 53 | const FeatManager &feat_manager_; 54 | vector dense_feats; 55 | vector sparse_feats; 56 | vector varlen_feats; 57 | std::unordered_map feat_map; 58 | vector> feat_entries; // csv格式数据的特征索引 59 | vector line_split_buff; // csv格式数据的解析中间变量 60 | const size_t batch_size; 61 | size_t sample_idx; 62 | vector batch_samples; 63 | 64 | vector csv_columns; 65 | 66 | std::unordered_map batch_params; 67 | }; 68 | -------------------------------------------------------------------------------- /src/solver/ftrl/ftrl_param.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | 7 | class FtrlParamUnit { 8 | public: 9 | FMParamUnit fm_param; 10 | FMParamUnit n; 11 | FMParamUnit z; 12 | 13 | FtrlParamUnit() { 14 | fm_param.w = 0.0; 15 | n.w = 0.0; 16 | z.w = 0.0; 17 | for (int f = 0; f < DIM; ++f) { 18 | fm_param.V[f] = utils::gaussian(0.0, train_opt.init_stdev); 19 | n.V[f] = 0.0; 20 | z.V[f] = 0.0; 21 | } 22 | } 23 | 24 | void calcFmWeights() { 25 | // calc_w 26 | if (fabs(z.w) <= train_opt.ftrl.l1_reg_w) { 27 | fm_param.w = 0.0; 28 | } else { 29 | fm_param.w = 30 | -(z.w - utils::sign_a_multiply_b(z.w, train_opt.ftrl.l1_reg_w)) / 31 | (train_opt.ftrl.l2_reg_w + 32 | (train_opt.ftrl.w_beta + std::sqrt(n.w)) / train_opt.ftrl.w_alpha); 33 | } 34 | // calc V 35 | for (int f = 0; f < DIM; ++f) { 36 | if (n.V[f] > 0) { 37 | if (fabs(z.V[f]) <= train_opt.ftrl.l1_reg_V) { 38 | fm_param.V[f] = 0.0; 39 | } else { 40 | fm_param.V[f] = -(z.V[f] - utils::sign_a_multiply_b(z.V[f], train_opt.ftrl.l1_reg_V)) / 41 | (train_opt.ftrl.l2_reg_V + (train_opt.ftrl.v_beta + std::sqrt(n.V[f])) / train_opt.ftrl.v_alpha); 42 | } 43 | } 44 | } 45 | } 46 | }; 47 | -------------------------------------------------------------------------------- /src/solver/ftrl/ftrl_solver.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/feat_manager.h" 6 | #include "solver/ftrl/ftrl_param.h" 7 | #include "solver/base_solver.h" 8 | #include "train/train_opt.h" 9 | 10 | class FtrlSolver : public BaseSolver { 11 | public: 12 | FtrlSolver(const FeatManager &feat_manager) : BaseSolver(feat_manager) {} 13 | virtual ~FtrlSolver() {} 14 | 15 | virtual void update() { 16 | 17 | for (auto & kv : batch_params) { 18 | ParamNode & param_node = kv.second; 19 | FMParamUnit & grad = param_node.fm_grad; 20 | batchReduce(grad, param_node.count); 21 | 22 | FtrlParamUnit *backward_param = (FtrlParamUnit *)param_node.param; 23 | param_node.mutex->writeLock(); 24 | real_t w_sigama = 25 | 1 / train_opt.ftrl.w_alpha * 26 | (std::sqrt(backward_param->n.w + grad.w * grad.w) - std::sqrt(backward_param->n.w)); 27 | 28 | backward_param->z.w += grad.w - w_sigama * backward_param->fm_param.w; 29 | backward_param->n.w += grad.w * grad.w; 30 | 31 | for (int f = 0; f < DIM; ++f) { 32 | real_t vgf = grad.V[f]; 33 | real_t v_sigma_f = 34 | 1 / train_opt.ftrl.v_alpha * (std::sqrt(backward_param->n.V[f] + vgf * vgf) - std::sqrt(backward_param->n.V[f])); 35 | 36 | backward_param->z.V[f] += vgf - v_sigma_f * backward_param->fm_param.V[f]; 37 | backward_param->n.V[f] += vgf * vgf; 38 | } 39 | 40 | backward_param->calcFmWeights(); 41 | 42 | param_node.mutex->unlock(); 43 | } 44 | } 45 | 46 | 47 | }; 48 | -------------------------------------------------------------------------------- /src/solver/rmsprop/rmsprop_param.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | 7 | class RmspropParamUnit { 8 | public: 9 | FMParamUnit fm_param; 10 | FMParamUnit avg_squared; // 2nd raw momentum (the uncentered variance) of the gradient 11 | 12 | RmspropParamUnit() { 13 | fm_param.w = 0.0; 14 | avg_squared.w = 1e-7; 15 | for (int f = 0; f < DIM; ++f) { 16 | fm_param.V[f] = utils::gaussian(0.0, train_opt.init_stdev); 17 | avg_squared.V[f] = 1e-7; 18 | } 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /src/solver/rmsprop/rmsprop_solver.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/feat_manager.h" 6 | #include "solver/rmsprop/rmsprop_param.h" 7 | #include "solver/base_solver.h" 8 | #include "train/train_opt.h" 9 | 10 | class RmspropSolver : public BaseSolver { 11 | public: 12 | RmspropSolver(const FeatManager &feat_manager) 13 | : BaseSolver(feat_manager), 14 | lr(train_opt.rmsprop.lr), 15 | l2_norm_w(train_opt.rmsprop.l2_norm_w), 16 | l2_norm_V(train_opt.rmsprop.l2_norm_V), 17 | beta2(train_opt.rmsprop.beta2) {} 18 | 19 | virtual ~RmspropSolver() {} 20 | 21 | virtual void update() { 22 | 23 | for (auto &kv : batch_params) { 24 | ParamNode ¶m_node = kv.second; 25 | FMParamUnit & grad = param_node.fm_grad; 26 | batchReduce(grad, param_node.count); 27 | 28 | RmspropParamUnit *backward_param = (RmspropParamUnit *)param_node.param; 29 | param_node.mutex->writeLock(); 30 | 31 | // update w 32 | real_t &w = backward_param->fm_param.w; 33 | real_t &wv = backward_param->avg_squared.w; 34 | 35 | wv = beta2 * wv + (1 - beta2) * grad.w * grad.w; 36 | 37 | DEBUG_OUT << "rmsprop_solver: grad:" << grad << " decayed_lr" << lr / (std::sqrt(wv) + eps) 38 | << " count " << param_node.count 39 | << " wv:" << wv << " update:" 40 | << lr * (grad.w + l2_norm_w * w) / (std::sqrt(wv) + eps) 41 | << endl; 42 | 43 | w -= lr * (grad.w + l2_norm_w * w) / (std::sqrt(wv) + eps); 44 | 45 | // update V 46 | for (int f = 0; f < DIM; ++f) { 47 | real_t &vf = backward_param->fm_param.V[f]; 48 | real_t &vvf = backward_param->avg_squared.V[f]; 49 | real_t vgf = grad.V[f]; 50 | 51 | vvf = beta2 * vvf + (1 - beta2) * vgf * vgf; 52 | vf -= lr * (vgf + l2_norm_V * vf) / (std::sqrt(vvf) + eps); 53 | } 54 | param_node.mutex->unlock(); 55 | } 56 | } 57 | 58 | const real_t lr; 59 | const real_t l2_norm_w; 60 | const real_t l2_norm_V; 61 | const real_t beta2; 62 | static constexpr real_t eps = 1e-7; 63 | static constexpr bool amsgrad = false; // 保留历史最大的v_t,记为v_{max},每次计算都是用最大的v_{max},否则是用当前v_t 64 | // amsgrad需要多一个保存一份历史最大值平方梯度v_{max}。 暂未实现 65 | // avg_grads = beta1 * avg_grads + (1-beta1) * w.grad 66 | // avg_squared = beta2 * (avg_squared) + (1-beta2) * (w.grad * w.grad) 67 | // max_squared = max(avg_squared, max_squared) 68 | // w = w - lr * avg_grads / sqrt(max_squared) 69 | }; 70 | -------------------------------------------------------------------------------- /src/solver/sgdm/sgdm_param.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | 7 | class SgdmParamUnit { 8 | public: 9 | FMParamUnit fm_param; 10 | FMParamUnit momentum; 11 | 12 | SgdmParamUnit() { 13 | fm_param.w = 0.0; 14 | momentum.w = 0.0; 15 | for (int f = 0; f < DIM; ++f) { 16 | fm_param.V[f] = utils::gaussian(0.0, train_opt.init_stdev); 17 | momentum.V[f] = 0.0; 18 | } 19 | } 20 | 21 | }; 22 | 23 | -------------------------------------------------------------------------------- /src/solver/sgdm/sgdm_solver.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "feature/feat_manager.h" 6 | #include "solver/sgdm/sgdm_param.h" 7 | #include "solver/base_solver.h" 8 | #include "train/train_opt.h" 9 | 10 | class SgdmSolver : public BaseSolver { 11 | public: 12 | SgdmSolver(const FeatManager &feat_manager) 13 | : BaseSolver(feat_manager), 14 | lr(train_opt.sgdm.lr), 15 | beta1(train_opt.sgdm.beta1), 16 | l1_reg_w(train_opt.sgdm.l1_reg_w), 17 | l1_reg_V(train_opt.sgdm.l1_reg_V), 18 | l2_reg_w(train_opt.sgdm.l2_reg_w), 19 | l2_reg_V(train_opt.sgdm.l2_reg_V) 20 | {} 21 | virtual ~SgdmSolver() {} 22 | 23 | virtual void update() { 24 | 25 | for (auto & kv : batch_params) { 26 | ParamNode & param_node = kv.second; 27 | FMParamUnit & grad = param_node.fm_grad; 28 | batchReduce(grad, param_node.count); 29 | 30 | SgdmParamUnit *backward_param = (SgdmParamUnit *)param_node.param; 31 | param_node.mutex->writeLock(); 32 | 33 | real_t & w = backward_param->fm_param.w; 34 | real_t & wm = backward_param->momentum.w; 35 | 36 | wm = beta1 * wm + (1-beta1) * grad.w; 37 | w -= lr * (wm + w * l2_reg_w); 38 | 39 | for (int f = 0; f < DIM; ++f) { 40 | real_t &vf = backward_param->fm_param.V[f]; 41 | real_t & vmf = backward_param->momentum.V[f]; 42 | real_t vgf = grad.V[f]; 43 | 44 | vmf = beta1 * vmf + (1-beta1) * vgf; 45 | vf -= lr * (vmf + vf * l2_reg_V); 46 | } 47 | param_node.mutex->unlock(); 48 | } 49 | } 50 | 51 | const real_t lr; 52 | const real_t beta1; 53 | const real_t l1_reg_w; 54 | const real_t l1_reg_V; 55 | const real_t l2_reg_w; 56 | const real_t l2_reg_V; 57 | }; 58 | -------------------------------------------------------------------------------- /src/solver/solver_factory.cc: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #include "feature/feat_manager.h" 5 | #include "solver/solver_factory.h" 6 | #include "solver/ftrl/ftrl_solver.h" 7 | #include "solver/adam/adam_solver.h" 8 | #include "solver/sgdm/sgdm_solver.h" 9 | #include "solver/adagrad/adagrad_solver.h" 10 | #include "solver/rmsprop/rmsprop_solver.h" 11 | 12 | shared_ptr creatParamContainer(feat_id_t feat_num, feat_id_t mutex_nums) { 13 | if (0 == strcasecmp(train_opt.solver.c_str(), "ftrl")) { 14 | return std::make_shared>(feat_num, mutex_nums); 15 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "sgd") || 0 == strcasecmp(train_opt.solver.c_str(), "sgdm")) { 16 | return std::make_shared>(feat_num, mutex_nums); 17 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "adagrad")) { 18 | return std::make_shared>(feat_num, mutex_nums); 19 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "rmsprop")) { 20 | return std::make_shared>(feat_num, mutex_nums); 21 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "adam")) { 22 | return std::make_shared>(feat_num, mutex_nums); 23 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "pred")) { 24 | return std::make_shared>(feat_num, mutex_nums); 25 | } else { 26 | cerr << "unknown solver, use adam by default." << endl; 27 | return std::make_shared>(feat_num, mutex_nums); 28 | } 29 | } 30 | 31 | BaseSolver * creatSolver(const FeatManager &feat_manager) { 32 | if (0 == strcasecmp(train_opt.solver.c_str(), "ftrl")) { 33 | return new FtrlSolver(feat_manager); 34 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "sgd") || 0 == strcasecmp(train_opt.solver.c_str(), "sgdm")) { 35 | return new SgdmSolver(feat_manager); 36 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "adagrad")) { 37 | return new AdagradSolver(feat_manager); 38 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "rmsprop")) { 39 | return new RmspropSolver(feat_manager); 40 | } else if (0 == strcasecmp(train_opt.solver.c_str(), "adam")) { 41 | return new AdamSolver(feat_manager); 42 | } else { 43 | cerr << "unknown solver, use adam by default." << endl; 44 | return new AdamSolver(feat_manager); 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /src/solver/solver_factory.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include "solver/parammeter_container.h" 6 | #include "solver/base_solver.h" 7 | 8 | 9 | shared_ptr creatParamContainer(feat_id_t feat_num, feat_id_t mutex_nums); 10 | 11 | BaseSolver * creatSolver(const FeatManager &feat_manager); 12 | -------------------------------------------------------------------------------- /src/synchronize/atomic_lock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | 10 | class AtomicflagSpinLock { 11 | public: 12 | AtomicflagSpinLock() : m_lock(ATOMIC_FLAG_INIT) { } 13 | 14 | void lock() { 15 | while (m_lock.test_and_set(std::memory_order_acquire)); 16 | } 17 | bool try_lock() { 18 | return !m_lock.test_and_set(std::memory_order_acquire); 19 | } 20 | void unlock() { 21 | m_lock.clear(std::memory_order_release); 22 | } 23 | void wait() {} 24 | 25 | void notify() {} 26 | private: 27 | std::atomic_flag m_lock; 28 | // disable copy 29 | private: 30 | AtomicflagSpinLock(const AtomicflagSpinLock &ohter); 31 | AtomicflagSpinLock &operator=(const AtomicflagSpinLock &that); 32 | AtomicflagSpinLock(AtomicflagSpinLock &ohter); 33 | AtomicflagSpinLock &operator=(AtomicflagSpinLock &that); 34 | }; 35 | 36 | 37 | // c++11支持的atomic。 38 | // std::atomic_flag可用于多线程之间的同步操作,类似于linux中的信号量。使用atomic_flag可实现mutex 39 | class AtomicSpinLockWithoutMemOder { 40 | protected: 41 | std::atomic_flag lock_; 42 | 43 | public: 44 | AtomicSpinLockWithoutMemOder() :lock_(ATOMIC_FLAG_INIT) {} 45 | 46 | void lock() { 47 | while (lock_.test_and_set()) 48 | ; 49 | } 50 | int tryLock() { 51 | lock(); 52 | return 1; 53 | } 54 | 55 | void unlock() { lock_.clear(); } 56 | 57 | void wait() {} 58 | 59 | void notify() {} 60 | // disable copy 61 | private: 62 | AtomicSpinLockWithoutMemOder(const AtomicSpinLockWithoutMemOder &ohter); 63 | AtomicSpinLockWithoutMemOder &operator=(const AtomicSpinLockWithoutMemOder &that); 64 | }; 65 | -------------------------------------------------------------------------------- /src/synchronize/folly_small_locks.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // TODO 4 | // #include "folly/SmallLocks.h" 5 | 6 | // folly/SmallLocks.h 7 | // This module is currently x64 only. 8 | 9 | // This header defines two very small mutex types. These are useful in highly memory-constrained environments where contention is unlikely. The purpose of these is to allow fine-grained locking in massive data structures where memory is at a premium. Often, each record may have a spare bit or byte lying around, so sometimes these can be tacked on with no additional memory cost. 10 | 11 | // There are two types exported from this header. MicroSpinLock is a single byte lock, and PicoSpinLock can be wrapped around an integer to use a single bit as a lock. Why do we have both? Because you can't use x64 bts on a single byte, sosizeof(MicroSpinLock) is smaller than sizeof(PicoSpinLock) can be, giving it some use cases. 12 | 13 | // Both the locks in this header model the C++11 Lockable concept. So you can use std::lock_guard or std::unique_lock to lock them in an RAII way if you want. 14 | 15 | -------------------------------------------------------------------------------- /src/synchronize/gcc_spin_lock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class GccSpinLock { 7 | public: 8 | GccSpinLock() { lock_ = 0; } 9 | 10 | void lock() { 11 | while (!(__sync_bool_compare_and_swap(&(lock_), 0, 1))) 12 | ; 13 | } 14 | 15 | void unlock() { __sync_lock_release(&lock_); } 16 | 17 | int tryLock() { 18 | return (__sync_bool_compare_and_swap(&(lock_), 0, 1) ? 0 : -1); 19 | } 20 | 21 | void wait() {} 22 | 23 | void notify() {} 24 | 25 | protected: 26 | volatile unsigned char lock_; 27 | }; 28 | -------------------------------------------------------------------------------- /src/synchronize/mutex_adapter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "synchronize/null_mutex.h" 4 | #include "synchronize/pthread_mutex.h" 5 | #include "synchronize/atomic_lock.h" 6 | #include "synchronize/pthread_rwlock.h" 7 | #include "synchronize/null_rwmutex.h" 8 | 9 | #ifdef _PREDICT_VER_ 10 | typedef NullMutex ParamMutex_t; 11 | #else 12 | // typedef AtomicflagSpinLock ParamMutex_t; 13 | // typedef PthreadMutex ParamMutex_t; 14 | typedef PthreadRWLock ParamMutex_t; 15 | #endif 16 | 17 | typedef PthreadRWLock RW_Mutex_t; 18 | // typedef NullRwMutex RW_Mutex_t; 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/synchronize/null_mutex.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class NullMutex { 7 | public: 8 | void lock() {} 9 | 10 | void unlock() {} 11 | 12 | int tryLock() { return 0; } 13 | 14 | void wait() {} 15 | 16 | void notify() {} 17 | }; 18 | 19 | -------------------------------------------------------------------------------- /src/synchronize/null_rwmutex.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class NullRwMutex { 4 | public: 5 | NullRwMutex() {} 6 | 7 | ~NullRwMutex() {} 8 | 9 | void readLock() {} 10 | 11 | int tryReadlock() { return 0; } 12 | 13 | void writeLock() {} 14 | 15 | int tryWritelock() { return 0; } 16 | 17 | void unlock() {} 18 | }; 19 | -------------------------------------------------------------------------------- /src/synchronize/pthread_cond_mutex.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class PthreadMutexWithCond { 8 | protected: 9 | pthread_mutex_t lock_; 10 | pthread_cond_t cond_; 11 | 12 | public: 13 | PthreadMutexWithCond() { 14 | pthread_mutex_init(&lock_, (pthread_mutexattr_t *)NULL); 15 | pthread_cond_init(&cond_, NULL); 16 | } 17 | 18 | void lock() { pthread_mutex_lock(&lock_); } 19 | 20 | void unlock() { pthread_mutex_unlock(&lock_); } 21 | 22 | int tryLock() { return pthread_mutex_trylock(&lock_); } 23 | 24 | void wait() { pthread_cond_wait(&cond_, &lock_); } 25 | 26 | void notify() { pthread_cond_signal(&cond_); } 27 | 28 | void readLock() { lock(); } 29 | 30 | int tryReadlock() { return tryLock();} 31 | 32 | void writeLock() { lock(); } 33 | 34 | int tryWritelock() { return tryLock(); } 35 | 36 | // disable copy 37 | private: 38 | PthreadMutexWithCond(const PthreadMutexWithCond &ohter); 39 | PthreadMutexWithCond &operator=(const PthreadMutexWithCond &that); 40 | PthreadMutexWithCond(PthreadMutexWithCond &ohter); 41 | PthreadMutexWithCond &operator=(PthreadMutexWithCond &that); 42 | }; 43 | -------------------------------------------------------------------------------- /src/synchronize/pthread_mutex.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class PthreadMutex { 8 | protected: 9 | pthread_mutex_t lock_; 10 | 11 | public: 12 | PthreadMutex() { pthread_mutex_init(&lock_, (pthread_mutexattr_t *)NULL); } 13 | ~PthreadMutex() { pthread_mutex_destroy(&lock_); } 14 | 15 | void lock() { pthread_mutex_lock(&lock_); } 16 | 17 | void unlock() { pthread_mutex_unlock(&lock_); } 18 | 19 | int tryLock() { return pthread_mutex_trylock(&lock_); } 20 | 21 | void readLock() { lock(); } 22 | 23 | int tryReadlock() { lock(); return true;} 24 | 25 | void writeLock() { lock(); } 26 | 27 | int tryWritelock() { lock(); return true; } 28 | 29 | void wait() {} 30 | 31 | void notify() {} 32 | 33 | // disable copy 34 | private: 35 | PthreadMutex(const PthreadMutex &ohter); 36 | PthreadMutex &operator=(const PthreadMutex &that); 37 | PthreadMutex(PthreadMutex &ohter); 38 | PthreadMutex &operator=(PthreadMutex &that); 39 | }; 40 | 41 | -------------------------------------------------------------------------------- /src/synchronize/pthread_rwlock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class PthreadRWLock { 8 | protected: 9 | pthread_rwlock_t lock_; 10 | 11 | public: 12 | PthreadRWLock() { pthread_rwlock_init(&lock_, NULL); } 13 | 14 | ~PthreadRWLock() { pthread_rwlock_destroy(&lock_); } 15 | 16 | void readLock() { pthread_rwlock_rdlock(&lock_); } 17 | 18 | int tryReadlock() { return pthread_rwlock_tryrdlock(&lock_); } 19 | 20 | void writeLock() { pthread_rwlock_wrlock(&lock_); } 21 | 22 | int tryWritelock() { return pthread_rwlock_trywrlock(&lock_); } 23 | 24 | void unlock() { pthread_rwlock_unlock(&lock_); } 25 | 26 | // disable copy 27 | private: 28 | PthreadRWLock(const PthreadRWLock &ohter); 29 | PthreadRWLock &operator=(const PthreadRWLock &that); 30 | PthreadRWLock(PthreadRWLock &ohter); 31 | PthreadRWLock &operator=(PthreadRWLock &that); 32 | }; 33 | 34 | -------------------------------------------------------------------------------- /src/tests/hash_test/MurmurHash3.h: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------------- 2 | // MurmurHash3 was written by Austin Appleby, and is placed in the public 3 | // domain. The author hereby disclaims copyright to this source code. 4 | 5 | #ifndef _MURMURHASH3_H_ 6 | #define _MURMURHASH3_H_ 7 | 8 | //----------------------------------------------------------------------------- 9 | // Platform-specific functions and macros 10 | 11 | // Microsoft Visual Studio 12 | 13 | #if defined(_MSC_VER) 14 | 15 | typedef unsigned char uint8_t; 16 | typedef unsigned long uint32_t; 17 | typedef unsigned __int64 uint64_t; 18 | 19 | // Other compilers 20 | 21 | #else // defined(_MSC_VER) 22 | 23 | #include 24 | 25 | #endif // !defined(_MSC_VER) 26 | 27 | //----------------------------------------------------------------------------- 28 | 29 | void MurmurHash3_x86_32 ( const void * key, int len, uint32_t seed, void * out ); 30 | 31 | void MurmurHash3_x86_128 ( const void * key, int len, uint32_t seed, void * out ); 32 | 33 | void MurmurHash3_x64_128 ( const void * key, int len, uint32_t seed, void * out ); 34 | 35 | //----------------------------------------------------------------------------- 36 | 37 | #endif // _MURMURHASH3_H_ 38 | -------------------------------------------------------------------------------- /src/tests/hash_test/find_prime.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define MAX 2010000 6 | char isPrime[MAX + 10]; //用char类型节省内存,int占4字节,char占1字节,效果都一样,因为这里用1,0代表素数与否 7 | int main() { 8 | for (int i = 2; i <= MAX; ++i) //先将所有元素都认为是素数 9 | isPrime[i] = 1; 10 | for (int i = 2; i <= MAX; ++i) { 11 | if (isPrime[i]) //只用标记素数的倍数 12 | for (int j = i * 2; j <= MAX; j += i) isPrime[j] = 0; //将其标记为非素数 13 | } 14 | for (int i = 2; i <= MAX; ++i) //依次输出素数 15 | if (isPrime[i]) cout << i << " "; 16 | return 0; 17 | } 18 | -------------------------------------------------------------------------------- /src/tests/hash_test/hash_conflict_test.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include "MurmurHash3.h" 11 | #include "hash.h" 12 | 13 | using namespace std; 14 | 15 | int main(int argc, char** argv) { 16 | std::unordered_map m; 17 | uint32_t hash_value; 18 | int hash_type = atoi(argv[1]); 19 | cout << " hash_type is : " << hash_type << endl; 20 | 21 | uint64_t hash_key; 22 | uint64_t insert_beg = 1000000; 23 | uint64_t insert_num = 1000000; 24 | for (uint64_t i = insert_beg; i < insert_num + insert_num; i++) { 25 | //hash_key = rand(); 26 | hash_key = i; 27 | 28 | switch (hash_type) { 29 | case 1 : hash_value = MurmurHash64A(&hash_key, 8, 0); break; 30 | case 2 : hash_value = MurmurHash64A(&hash_key, 8, 59985934289349208671); break; 31 | case 3 : hash_value = MurmurHash3_x86_32(&hash_key, 8, 59985934289349208671); break; 32 | case 4 : hash_value = MurmurHash3_x86_32(&hash_key, 8, 0); break; 33 | case 5 : { uint32_t temp = hash_key; hash_value = MurmurHash3_x86_32(&hash_key, 4, 0); } break; 34 | case 6 : hash_value = twang_32from64(hash_key); /*Redis对于Key是整数类型时用的hash */ break; 35 | case 7 : hash_value = hsieh_hash32_buf(&hash_key, 8); /* Paul Hsieh's hash */ break; 36 | case 8 : hash_value = jenkins_rev_unmix32(hash_key); break; 37 | case 9 : hash_value = jenkins_rev_mix32(hash_key); break; 38 | default : cout << "unknown hash_type, exit " << endl; return -1; 39 | } 40 | 41 | //hash_value = hash_value % (int(insert_num * 2)); 42 | hash_value = hash_value % (2000003); // 取余是否素数,没什么差别(2000003 与2000000,冲突个数基本一致) 43 | /* 44 | 插入100w个整数(100w到200w),如果对hash后值: 45 | 取余2000000: 46 | 213329 47 | 213535 48 | 212658 49 | 212854 50 | 213499 51 | 212798 52 | 212947 53 | 213371 54 | 212612 55 | 取余2000003(素数): 56 | 213219 57 | 212340 58 | 213221 59 | 213072 60 | 212837 61 | 213178 62 | 213285 63 | 212648 64 | 212983 65 | 取余400w: 66 | 115123 67 | 115360 68 | 115237 69 | 114771 70 | 115136 71 | 115341 72 | 114996 73 | 114383 74 | 115169 75 | 76 | 取余800w: 77 | 60238 78 | 59998 79 | 59653 80 | 60072 81 | 60226 82 | 59881 83 | 60005 84 | 60290 85 | 59408 86 | 87 | 取余1600w: 88 | 30828 89 | 30530 90 | 30525 91 | 30738 92 | 30712 93 | 30534 94 | 30544 95 | 30869 96 | 30354 97 | 98 | 不取余: 99 | 11652 100 | 11531 101 | 1 102 | 1 103 | 1 104 | 11577 105 | 1047 106 | 1 107 | 1 108 | 109 | 插入1000w个整数(1000w到2000w),如果对hash后值: 110 | 取余2000w: 111 | 2130131 112 | 2130581 113 | 2123331 114 | 2122608 115 | 2123812 116 | 2129402 117 | 2125883 118 | 2122053 119 | 2124569 120 | 121 | 取余2000w: 122 | 1152817 123 | 1152552 124 | 1142516 125 | 1142821 126 | 1143568 127 | 1151416 128 | 1143996 129 | 1141901 130 | 1144403 131 | 132 | 133 | 1)取余是否素数,没什么差别(2000003 与2000000,冲突个数基本一致) 134 | 2)各种hash方式,如果对hash后的数取余(限定hash桶数),则各种hash方法冲突概率很相近。 135 | 如果不取余,则冲突概率差异明显: 136 | Murmurhash3 hash到32位冲突概率极低(100w次hash无冲突) 137 | Murmurhash3 hash到64位然后取低32位:冲突较高(1.16%) 138 | Thomas Wang hash(redis用的) hash到64位 100w次无冲突;没有到32位的hash方法,hash到64位然后取低32位 和Murmurhash3 hash到64位然后取低32位冲突概率一致(1.16%)。 139 | Paul Hsieh's hash hash到32位,有冲突,冲突概率0.105% 140 | 141 | 3)hash桶数(200w)为插入个数(100w)的2倍时,冲突概率为21.3%左右 142 | hash桶数(2000w)为插入个数(1000w)的2倍时,冲突概率为21.3%左右 143 | hash桶数(400w)为插入个数(100w)的4倍时,冲突概率为11.5%左右 144 | hash桶数(4000w)为插入个数(1000w)的4倍时,冲突概率为11.5%左右 145 | hash桶数(800w)为插入个数(100w)的4倍时,冲突概率为6%左右 146 | hash桶数(1600w)为插入个数(100w)的16倍时,冲突概率为3.5%左右 147 | */ 148 | auto iter = m.find(hash_value); 149 | if (iter != m.end()) { 150 | cout << " conflict : " << hash_key << " v: " << iter->second << endl; 151 | } else { 152 | m[hash_value] = hash_key; 153 | } 154 | } 155 | 156 | return 0; 157 | } 158 | -------------------------------------------------------------------------------- /src/tests/hash_test/readme.md: -------------------------------------------------------------------------------- 1 | 2 | 结论: 3 | 1)取余是否素数,没什么差别(2000003 与2000000,冲突个数基本一致) 4 | 2)各种hash方式,如果对hash后的数取余(限定hash桶数),则各种hash方法冲突概率很相近。 5 | 如果不取余,则冲突概率差异明显: 6 | Murmurhash3 hash到32位冲突概率极低(100w次hash无冲突) 7 | Murmurhash3 hash到64位然后取低32位:冲突较高(1.16%) 8 | Thomas Wang hash(redis用的) hash到32位 冲突较高(1.16%)和Murmurhash3 hash到64位然后取低32位基本一致,可能用法有问题。 9 | Paul Hsieh's hash hash到32位,有冲突,冲突概率0.105% 10 | 11 | 3)hash桶数(200w)为插入个数(100w)的2倍时,冲突概率为21.3%左右 12 | hash桶数(2000w)为插入个数(1000w)的2倍时,冲突概率为21.3%左右 13 | hash桶数(400w)为插入个数(100w)的4倍时,冲突概率为11.5%左右 14 | hash桶数(4000w)为插入个数(1000w)的4倍时,冲突概率为11.5%左右 15 | hash桶数(800w)为插入个数(100w)的4倍时,冲突概率为6%左右 16 | hash桶数(1600w)为插入个数(100w)的16倍时,冲突概率为3.5%左右 17 | 18 | 19 | 数据: 20 | switch (hash_type) { 21 | case 1 : hash_value = MurmurHash64A(&hash_key, 8, 0); break; 22 | case 2 : hash_value = MurmurHash64A(&hash_key, 8, 59985934289349208671); break; 23 | case 3 : hash_value = MurmurHash3_x86_32(&hash_key, 8, 59985934289349208671); break; 24 | case 4 : hash_value = MurmurHash3_x86_32(&hash_key, 8, 0); break; 25 | case 5 : { uint32_t temp = hash_key; hash_value = MurmurHash3_x86_32(&hash_key, 4, 0); } break; 26 | case 6 : hash_value = twang_32from64(hash_key); /*Redis对于Key是整数类型时用的hash */ break; 27 | case 7 : hash_value = hsieh_hash32_buf(&hash_key, 8); /* Paul Hsieh's hash */ break; 28 | case 8 : hash_value = jenkins_rev_unmix32(hash_key); break; 29 | case 9 : hash_value = jenkins_rev_mix32(hash_key); break; 30 | default : cout << "unknown hash_type, exit " << endl; return -1; 31 | } 32 | 33 | 34 | 插入100w个整数(100w到200w),如果对hash后值: 35 | 取余2000000: 36 | 213329 37 | 213535 38 | 212658 39 | 212854 40 | 213499 41 | 212798 42 | 212947 43 | 213371 44 | 212612 45 | 取余2000003(素数): 46 | 213219 47 | 212340 48 | 213221 49 | 213072 50 | 212837 51 | 213178 52 | 213285 53 | 212648 54 | 212983 55 | 取余400w: 56 | 115123 57 | 115360 58 | 115237 59 | 114771 60 | 115136 61 | 115341 62 | 114996 63 | 114383 64 | 115169 65 | 66 | 取余800w: 67 | 60238 68 | 59998 69 | 59653 70 | 60072 71 | 60226 72 | 59881 73 | 60005 74 | 60290 75 | 59408 76 | 77 | 取余1600w: 78 | 30828 79 | 30530 80 | 30525 81 | 30738 82 | 30712 83 | 30534 84 | 30544 85 | 30869 86 | 30354 87 | 88 | 不取余: 89 | 11652 90 | 11531 91 | 1 92 | 1 93 | 1 94 | 11577 95 | 1047 96 | 1 97 | 1 98 | 99 | 插入1000w个整数(1000w到2000w),如果对hash后值: 100 | 取余2000w: 101 | 2130131 102 | 2130581 103 | 2123331 104 | 2122608 105 | 2123812 106 | 2129402 107 | 2125883 108 | 2122053 109 | 2124569 110 | 111 | 取余2000w: 112 | 1152817 113 | 1152552 114 | 1142516 115 | 1142821 116 | 1143568 117 | 1151416 118 | 1143996 119 | 1141901 120 | 1144403 121 | 122 | 123 | -------------------------------------------------------------------------------- /src/tests/hash_test/test.sh: -------------------------------------------------------------------------------- 1 | 2 | g++ --std=c++11 hash_conflict_test.cc MurmurHash3.cc 3 | 4 | ./a.out 1 | wc -l 5 | ./a.out 2 | wc -l 6 | ./a.out 3 | wc -l 7 | ./a.out 4 | wc -l 8 | ./a.out 5 | wc -l 9 | ./a.out 6 | wc -l 10 | ./a.out 7 | wc -l 11 | ./a.out 8 | wc -l 12 | ./a.out 9 | wc -l 13 | -------------------------------------------------------------------------------- /src/tests/test_dict.cc: -------------------------------------------------------------------------------- 1 | #include "utils/dict.hpp" 2 | 3 | using namespace std; 4 | using utils::Dict; 5 | using utils::Set; 6 | 7 | // // 字段解析器特化,参考: 8 | // template<> 9 | // class CommonFieldParser { 10 | // public: 11 | // typedef MyFieldStruct field_type; 12 | // bool operator()(const std::string & str, field_type & v) { 13 | // using namespace std; 14 | // bool ret = false; 15 | // vector field_segs; 16 | // boost::split(field_segs, str, boost::is_any_of(","),boost::token_compress_on); 17 | 18 | // try { 19 | // v.cat_new = boost::lexical_cast(field_segs[0]); 20 | // } catch (...) { 21 | // return ret; 22 | // } 23 | // } 24 | 25 | 26 | int main() 27 | { 28 | Dict my_dict_1; 29 | my_dict_1.create("test_dict1.dict", ' '); 30 | 31 | Set my_set_1; 32 | my_set_1.create("test_dict3.dict"); 33 | 34 | Dict > name_to_ids; 35 | Dict id_to_name; 36 | id_to_name.create("test_dict2.dict", ' '); 37 | 38 | #define DICT_FOREACH(iter, container) \ 39 | for (typeof((container).begin()) iter=(container).begin(); \ 40 | iter != (container).end(); \ 41 | ++iter) 42 | 43 | for (auto it = id_to_name.begin(); it != id_to_name.end(); ++it) { 44 | name_to_ids.get_mutable(it->second).push_back(it->first); 45 | } 46 | 47 | cout << "my_dict_1" <first << " "; 50 | cout << it->second < 4 | #include 5 | #include 6 | 7 | int main() { 8 | const int nrolls = 10000; // number of experiments 9 | const int nstars = 100; // maximum number of stars to distribute 10 | 11 | std::default_random_engine generator; 12 | std::normal_distribution distribution(0.0, 1.0); 13 | 14 | cout << " utils gaussian: " << endl; 15 | cout << gaussian(0.0, 1.0) << endl; 16 | cout << gaussian(0.0, 1.0) << endl; 17 | cout << gaussian(0.0, 1.0) << endl; 18 | cout << gaussian(0.0, 1.0) << endl; 19 | cout << gaussian(0.0, 1.0) << endl; 20 | cout << gaussian(0.0, 1.0) << endl; 21 | cout << gaussian(0.0, 1.0) << endl; 22 | cout << gaussian(0.0, 1.0) << endl; 23 | cout << gaussian(0.0, 1.0) << endl; 24 | cout << gaussian(0.0, 1.0) << endl; 25 | cout << " std gaussian: " << endl; 26 | cout << distribution(generator) << endl; 27 | cout << distribution(generator) << endl; 28 | cout << distribution(generator) << endl; 29 | cout << distribution(generator) << endl; 30 | cout << distribution(generator) << endl; 31 | cout << distribution(generator) << endl; 32 | cout << distribution(generator) << endl; 33 | cout << distribution(generator) << endl; 34 | cout << distribution(generator) << endl; 35 | cout << distribution(generator) << endl; 36 | 37 | cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " << endl; 38 | 39 | std::default_random_engine generator; 40 | std::normal_distribution distribution(5.0, 2.0); 41 | 42 | int p[10] = {}; 43 | 44 | for (int i = 0; i < nrolls; ++i) { 45 | double number = distribution(generator); 46 | if ((number >= 0.0) && (number < 10.0)) ++p[int(number)]; 47 | } 48 | 49 | std::cout << "normal_distribution (5.0,2.0):" << std::endl; 50 | 51 | for (int i = 0; i < 10; ++i) { 52 | std::cout << i << "-" << (i + 1) << ": "; 53 | std::cout << std::string(p[i] * nstars / nrolls, '*') << std::endl; 54 | } 55 | 56 | return 0; 57 | } 58 | -------------------------------------------------------------------------------- /src/tests/test_fea_config.cc: -------------------------------------------------------------------------------- 1 | #include // ifstream, ofstream 2 | #include // std::setw() 3 | #include 4 | 5 | #include "nlohmann/json.hpp" // https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp 6 | 7 | using json = nlohmann::json; 8 | using std::string; 9 | using std::vector; 10 | 11 | struct Player { 12 | string name; 13 | int credits; 14 | int ranking; 15 | }; 16 | 17 | void to_json(nlohmann::json& j, const Player& p) { 18 | j = json{{"name", p.name}, {"credits", p.credits}, {"ranking", p.ranking}}; 19 | } 20 | 21 | void from_json(const nlohmann::json& j, Player& p) { 22 | j.at("name").get_to(p.name); 23 | j.at("credits").get_to(p.credits); 24 | j.at("ranking").get_to(p.ranking); 25 | } 26 | 27 | void test_parse_str() { 28 | std::string s = R"( 29 | { 30 | "name": "Judd Trump", 31 | "credits": 1754500, 32 | "ranking": 1 33 | } 34 | )"; 35 | auto j = json::parse(s); 36 | std::string s = j.dump(); 37 | } 38 | 39 | void test_parse_struct() { 40 | auto j = R"([ 41 | { 42 | "name": "Judd Trump", 43 | "credits": 1754500, 44 | "ranking": 1 45 | }, 46 | { 47 | "name": "Neil Robertson", 48 | "credits": 1040500, 49 | "ranking": 2 50 | }, 51 | { 52 | "name": "Ronnie O'Sullivan", 53 | "credits": 954500, 54 | "ranking": 3 55 | } 56 | ])"_json; 57 | 58 | std::vector players = j.get>(); 59 | std::cout << "name: " << players[2].name << std::endl; 60 | std::cout << "credits: " << players[2].credits << std::endl; 61 | std::cout << "ranking: " << players[2].ranking << std::endl; 62 | } 63 | 64 | void test_dump() { 65 | std::ifstream fin("feat_config.json"); // 注意此处是相对路径 66 | json j; 67 | fin >> j; 68 | fin.close(); 69 | 70 | // 写入文件 71 | std::ofstream fout( 72 | "test_feat_config.json"); // 注意 object.json 和 config.json 73 | // 内容一致,但是顺序不同 74 | fout << std::setw(4) << j << std::endl; 75 | fout.close(); 76 | 77 | // 注意: 78 | // JSON标准将对象定义为“零个或多个名称 / 值对的无序集合”。 79 | // 如果希望保留插入顺序,可以使用tsl::ordered_map(integration)或nlohmann::fifo_map(integration)等容器专门化对象类型。 80 | } 81 | 82 | int main() { 83 | test_parse_str(); 84 | test_parse_struct(); 85 | test_dump(); 86 | } 87 | -------------------------------------------------------------------------------- /src/tests/test_fea_manager.cc: -------------------------------------------------------------------------------- 1 | #include "feature/dense_feat.h" 2 | #include "feature/feat_manager.h" 3 | #include "feature/sparse_feat.h" 4 | #include "feature/varlen_sparse_feat.h" 5 | #include "train/train_worker.h" 6 | #include "solver/ftrl/ftrl_param.h" 7 | #include "utils/base.h" 8 | 9 | void test_feat_manager() { 10 | 11 | FeatManager feat_manager; 12 | feat_manager.loadByFeatureConfig("./config/fea.config"); 13 | 14 | Solver trainer(feat_manager, train_opt); 15 | 16 | const static int MAX_LINE_BUFF = 10240; 17 | char line[MAX_LINE_BUFF]; 18 | size_t line_num = 0; 19 | 20 | while (true) { 21 | if (!cin.getline(line, sizeof(line))) { 22 | break; 23 | } 24 | line_num++; 25 | 26 | trainer.feedSample(line); 27 | } 28 | } 29 | 30 | int main(int argc, char *argv[]) { 31 | test_feat_manager(); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /src/tests/test_sync.cc: -------------------------------------------------------------------------------- 1 | #include "synchronize/gcc_spin_lock.h" 2 | #include "synchronize/pthread_mutex.h" 3 | #include "utils/base.h" 4 | 5 | using namespace std; 6 | // condition_variable example 7 | #include // std::condition_variable 8 | #include // std::cout 9 | #include // std::mutex, std::unique_lock 10 | #include // 11 | #include // std::thread 12 | 13 | // for splin lock 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | 24 | #include 25 | 26 | std::mutex mtx; 27 | std::condition_variable cv; 28 | bool ready = false; 29 | 30 | void print_id(int id) { 31 | std::unique_lock lck(mtx); 32 | while (!ready) cv.wait(lck); 33 | // ... 34 | std::cout << "thread " << id << '\n'; 35 | } 36 | 37 | void go() { 38 | std::unique_lock lck(mtx); 39 | ready = true; 40 | cv.notify_all(); 41 | } 42 | 43 | int main() { 44 | std::cout << " sizeof PthreadMutex " << sizeof(PthreadMutex) << endl; 45 | std::cout << " sizeof GccSpinLock " << sizeof(GccSpinLock) << endl; 46 | std::cout << " sizeof std::mutex " << sizeof(std::mutex) << endl; 47 | std::cout << " sizeof std::condition_variable " 48 | << sizeof(std::condition_variable) << endl; 49 | std::cout << " sizeof pthread_spinlock_t " << sizeof(pthread_spinlock_t) 50 | << endl; 51 | 52 | std::thread threads[10]; 53 | // spawn 10 threads: 54 | for (int i = 0; i < 10; ++i) threads[i] = std::thread(print_id, i); 55 | 56 | std::cout << "10 threads ready to race..." << endl; 57 | go(); 58 | 59 | for (auto& th : threads) th.join(); 60 | 61 | return 0; 62 | } 63 | -------------------------------------------------------------------------------- /src/train/shulffer.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | 6 | #include // std::move_backward 7 | #include // std::chrono::system_clock 8 | #include 9 | #include // std::default_random_engine 10 | #include 11 | 12 | #include "utils/base.h" // for unit8, uint16 13 | 14 | // 0~shulf_size之间打乱顺序 15 | class Shulffer { 16 | public: 17 | Shulffer(int shulf_size) 18 | : shulf_window_size(shulf_size), shulf_window(shulf_size) { 19 | for (int i = 0; i < shulf_size; i++) { 20 | shulf_window[i] = i; 21 | } 22 | } 23 | ~Shulffer() {} 24 | 25 | void reset() { 26 | unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); 27 | 28 | std::shuffle(shulf_window.begin(), shulf_window.end(), 29 | std::default_random_engine(seed)); 30 | } 31 | 32 | int next() { 33 | if (++cussor == shulf_window_size) cussor = 0; 34 | return shulf_window[cussor]; 35 | } 36 | 37 | private: 38 | int cussor; 39 | int shulf_window_size; 40 | std::vector shulf_window; 41 | }; 42 | 43 | // shulf_window_size固定为65535,next()返回0~max_id之间的任意数,max_id最多支持65535 44 | class UshortShulffer { 45 | public: 46 | UshortShulffer(uint16 max_id) { 47 | cussor = 0; 48 | for (int i = 0; i != total_uint16_counts; i++) { 49 | shulf_window[i] = i % max_id; 50 | } 51 | } 52 | ~UshortShulffer() {} 53 | 54 | void reset() { 55 | unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); 56 | 57 | std::shuffle(shulf_window, shulf_window + total_uint16_counts, 58 | std::default_random_engine(seed)); 59 | } 60 | 61 | uint16 next() { return shulf_window[cussor++]; } 62 | 63 | private: 64 | uint16 cussor; 65 | static const int total_uint16_counts = 0x10000; 66 | uint16 shulf_window[total_uint16_counts]; 67 | }; 68 | 69 | 70 | // shulf_window_size固定为65535,next()返回0~max_id之间的任意数,max_id最多支持255 71 | class MiniShuffer { 72 | public: 73 | MiniShuffer(uint8 max_id) { 74 | cussor = 0; 75 | for (int i = 0; i != total_uint16_counts; i++) { 76 | shulf_window[i] = i % max_id; 77 | } 78 | } 79 | ~MiniShuffer() {} 80 | 81 | void reset() { 82 | unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); 83 | 84 | std::shuffle(shulf_window, shulf_window + total_uint16_counts, 85 | std::default_random_engine(seed)); 86 | } 87 | 88 | uint16 next() { return shulf_window[cussor++]; } 89 | 90 | private: 91 | uint16 cussor; 92 | static const int total_uint16_counts = 0x10000; 93 | uint8 shulf_window[total_uint16_counts]; 94 | }; 95 | -------------------------------------------------------------------------------- /src/train/train_opt.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include 6 | #include "utils/base.h" 7 | #include "utils/utils.h" 8 | #include "utils/args_parser.h" 9 | 10 | class TrainOption; 11 | extern TrainOption train_opt; 12 | 13 | class TrainOption { 14 | public: 15 | TrainOption() {} 16 | ~TrainOption() {} 17 | 18 | const char* config_file_path = "config/train.conf"; 19 | 20 | bool parse_cfg_and_cmdlines(int argc, char* argv[]); 21 | 22 | public: 23 | std::string train_path; 24 | std::string valid_path; 25 | std::string feature_config_path; 26 | std::string mapping_dict_path; 27 | std::string model_path; 28 | std::string model_format; 29 | std::string init_model_path; 30 | std::string model_number_type; 31 | int epoch; 32 | 33 | enum BatchGradReduceType { 34 | BatchGradReduceType_AvgByBatchSize, 35 | BatchGradReduceType_Sum, 36 | BatchGradReduceType_AvgByOccurrences, 37 | BatchGradReduceType_AvgByOccurrencesSqrt 38 | }; 39 | 40 | static constexpr BatchGradReduceType batch_grad_reduce_type = BatchGradReduceType_AvgByBatchSize; 41 | 42 | enum DataFormart { 43 | DataFormart_CSV, 44 | DataFormart_libSVM 45 | }; 46 | DataFormart data_formart = DataFormart_libSVM; 47 | 48 | string csv_columns; 49 | 50 | int threads_num; 51 | int time_interval_of_validation; 52 | static constexpr long n_sample_per_output = 1000000; 53 | static constexpr int task_queue_size = 5000; 54 | // constexpr int shulf_window_size = 10007; 55 | // constexpr bool shuffle = false; 56 | 57 | int verbose; 58 | bool print_help; 59 | 60 | int batch_size; 61 | 62 | // train data format 63 | char feat_seperator; 64 | char feat_kv_seperator; 65 | char feat_value_list_seperator; 66 | char feat_id_dict_seperator; 67 | 68 | // params for feature_configs 69 | const string feat_type_dense = "dense_features"; 70 | const string feat_type_sparse = "sparse_features"; 71 | const string feat_type_varlen_sparse = "varlen_sparse_features"; 72 | 73 | // param initial 74 | real_t init_stdev; 75 | 76 | // solver 77 | std::string solver; 78 | 79 | // adam params 80 | struct AdamParam { 81 | real_t lr; 82 | real_t beta1; 83 | real_t beta2; 84 | real_t weight_decay_w; // 设置weight_decay,则为AdamW。对于adam,宜用weight_decay,不宜用l2正则 85 | real_t weight_decay_V; // 设置weight_decay,则为AdamW。对于adam,宜用weight_decay,不宜用l2正则 86 | } adam; 87 | 88 | // adagrad params 89 | struct AdagradParam { 90 | real_t lr; 91 | real_t l2_norm_w; 92 | real_t l2_norm_V; 93 | } adagrad; 94 | 95 | // RMSProp / adadelta params,带有二阶动量滑动平均的adagrad 96 | struct RmspropParam { 97 | real_t lr; 98 | real_t l2_norm_w; 99 | real_t l2_norm_V; 100 | real_t beta2; // 二阶动量滑动平均 101 | } rmsprop; 102 | 103 | // SGDM params (SGD with Momentum) 104 | struct SgdmParam { 105 | real_t lr; 106 | real_t beta1; 107 | real_t l1_reg_w; 108 | real_t l2_reg_w; 109 | real_t l1_reg_V; 110 | real_t l2_reg_V; 111 | } sgdm; 112 | 113 | // FTRL params 114 | struct FtrlParam { 115 | real_t w_alpha; 116 | real_t w_beta; 117 | real_t v_alpha; 118 | real_t v_beta; 119 | real_t l1_reg_w; 120 | real_t l2_reg_w; 121 | real_t l1_reg_V; 122 | real_t l2_reg_V; 123 | } ftrl; 124 | 125 | private: 126 | char parse_seperator_chars(const char* param) const { 127 | if (0 == strcasecmp(param, "blank")) 128 | return ' '; 129 | else if (0 == strcasecmp(param, "tab")) 130 | return '\t'; 131 | else if (0 == strcasecmp(param, "equal")) 132 | return '='; 133 | 134 | return param[0]; 135 | } 136 | ArgsParser arg_parser; 137 | }; 138 | -------------------------------------------------------------------------------- /src/train/train_worker.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include 6 | #include 7 | 8 | #include "solver/base_solver.h" 9 | #include "train/evalution.h" 10 | #include "utils/busy_consumer_queue.h" 11 | 12 | class TrainWorker { 13 | public: 14 | TrainWorker(const string & task_name, int task_id) 15 | : task_name_(task_name), 16 | task_id_(task_id), 17 | solver(NULL), 18 | task_queue(train_opt.task_queue_size), 19 | stop_flag(false) {} 20 | ~TrainWorker() { 21 | if (solver) { 22 | delete solver; 23 | } 24 | } 25 | 26 | void RegisteSolver(BaseSolver *_solver) { 27 | if (solver) { 28 | delete solver; 29 | } 30 | solver = _solver; 31 | } 32 | 33 | // thread 34 | void StartTrainLoop() { 35 | thread_handler = std::thread(&TrainWorker::task_process_thread_loop, this); 36 | } 37 | void StartValidationLoop(std::ifstream &input_stream) { 38 | thread_handler = std::thread(&TrainWorker::validation_thread_loop, this, 39 | std::ref(input_stream)); 40 | } 41 | void Join() { thread_handler.join(); } 42 | void Stop() { stop_flag = true; } 43 | bool TryPush(const string &v) { return task_queue.TryPush(v); } 44 | void WaitAndPush(const string &v) { task_queue.WaitAndPush(v); } 45 | 46 | void CollectEvalInfo(Evalution &collect_to) { collect_to += eval; } 47 | 48 | private: 49 | void task_process_thread_loop() { 50 | std::vector local_task_queue; 51 | int counter_for_evalution = 0; 52 | 53 | sleep(2); 54 | 55 | int y; 56 | real_t logit, loss, grad; 57 | do { 58 | task_queue.FeachAll(local_task_queue); 59 | int task_queue_size = local_task_queue.size(); 60 | DEBUG_OUT << "task " << task_name_ << " fetched " << task_queue_size 61 | << " lines" << std::endl; 62 | 63 | for (int i = 0; i < task_queue_size; i++) { 64 | // train_fm_flattern(y, logit); 65 | solver->train(local_task_queue[i], y, logit, loss, grad); 66 | eval.add(y, logit, loss, grad); 67 | } 68 | 69 | local_task_queue.clear(); 70 | counter_for_evalution += task_queue_size; 71 | if (counter_for_evalution >= train_opt.n_sample_per_output) { 72 | counter_for_evalution = 0; 73 | eval.output(task_name_.c_str()); 74 | } 75 | } while (!stop_flag); 76 | } 77 | 78 | void validation_thread_loop(std::ifstream &input_stream) { 79 | string line_buff; 80 | int sleep_seconds = 0; 81 | do { 82 | sleep(2); 83 | sleep_seconds += 2; 84 | if (stop_flag) 85 | break; 86 | else if (sleep_seconds < train_opt.time_interval_of_validation) 87 | continue; 88 | else 89 | sleep_seconds = 0; 90 | 91 | while (std::getline(input_stream, line_buff)) { 92 | // solver->train_fm_flattern(y, logit, true); 93 | real_t logit; 94 | int y; 95 | solver->test(line_buff, y, logit); 96 | eval.add(y, logit, 0.0, 0.0); 97 | } 98 | eval.output(task_name_.c_str(), true); 99 | eval.reset(); 100 | input_stream.clear(); 101 | input_stream.seekg(0); 102 | } while (!stop_flag); 103 | // do validation after tranning finished 104 | while (std::getline(input_stream, line_buff)) { 105 | // solver->train_fm_flattern(true); 106 | real_t logit; 107 | int y; 108 | solver->test(line_buff, y, logit); 109 | eval.add(y, logit, 0.0, 0.0); 110 | } 111 | eval.output(task_name_.c_str(), true); 112 | } 113 | 114 | private: 115 | string task_name_; 116 | int task_id_; 117 | BaseSolver *solver; 118 | Evalution eval; 119 | utils::BusyConsumerQueue task_queue; 120 | std::thread thread_handler; 121 | std::atomic stop_flag; 122 | }; 123 | -------------------------------------------------------------------------------- /src/utils/base.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include // strcasecmp ... 6 | #include 7 | #include // for sleep 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include // std::setw() 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | // containers 21 | using std::string; 22 | using std::vector; 23 | using std::unordered_map; 24 | 25 | using std::pair; 26 | using std::shared_ptr; 27 | using std::make_pair; 28 | using std::make_shared; 29 | 30 | // IO 31 | using std::cin; 32 | using std::cout; 33 | using std::cerr; 34 | using std::endl; 35 | #define VERBOSE_OUT(level) if (train_opt.verbose >= level) std::cout 36 | 37 | // file IO 38 | using std::istream; 39 | using std::ostream; 40 | using std::fstream; 41 | using std::ifstream; 42 | using std::ofstream; 43 | 44 | // math 45 | using std::max; 46 | using std::min; 47 | using std::sqrt; 48 | using std::log; 49 | using std::exp; 50 | 51 | // exception 52 | using std::exception; 53 | 54 | // debugs 55 | // #define _DEBUG_VER_ 56 | 57 | #ifdef _DEBUG_VER_ 58 | #include 59 | #define DEBUG_OUT std::cout 60 | #else 61 | #define DEBUG_OUT NULL&& std::cout 62 | #ifdef assert 63 | #undef assert 64 | #endif 65 | #define assert(test) (void(0)) 66 | #endif 67 | 68 | #ifndef likely // likely and unlikely is attribute keywords in C++20 69 | #define likely(x) __builtin_expect(!!(x), 1) 70 | #endif 71 | #ifndef unlikely 72 | #define unlikely(x) __builtin_expect(!!(x), 0) 73 | #endif 74 | 75 | // FM 76 | #ifndef DIM 77 | #define DIM 15 78 | #endif 79 | #if !DIM 80 | #define DIM 15 81 | #endif 82 | 83 | #ifdef uint 84 | #undef uint 85 | #endif 86 | typedef unsigned int uint; 87 | 88 | #ifdef uint16 89 | #undef uint16 90 | #endif 91 | typedef unsigned short uint16; 92 | 93 | #ifdef uint8 94 | #undef uint8 95 | #endif 96 | typedef unsigned char uint8; 97 | 98 | // typedef float real_t; 99 | typedef double real_t; 100 | 101 | // typedef unsigned long feat_id_t; 102 | typedef unsigned int feat_id_t; 103 | -------------------------------------------------------------------------------- /src/utils/busy_consumer_queue.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | #include 6 | #include 7 | #include 8 | #include 9 | namespace utils { 10 | 11 | template 12 | class BusyConsumerQueue { 13 | public: 14 | BusyConsumerQueue(size_t full_size = 8000) : full_size_(full_size) {} 15 | ~BusyConsumerQueue() {} 16 | 17 | bool TryPush(T new_value) { 18 | bool ret = false; 19 | if (mu_.try_lock()) { 20 | if (tasks.size() < full_size_) { 21 | tasks.push_back(std::move(new_value)); 22 | ret = true; 23 | } 24 | mu_.unlock(); 25 | } 26 | return ret; 27 | } 28 | 29 | // push when the task is not full 30 | void WaitAndPush(T new_value) { 31 | std::unique_lock lk(mu_); 32 | cond_.wait(lk, [this] { return tasks.size() < full_size_; }); 33 | tasks.push_back(std::move(new_value)); 34 | } 35 | 36 | void FeachAll(std::vector& feach_to) { 37 | mu_.lock(); 38 | feach_to.swap(tasks); 39 | mu_.unlock(); 40 | cond_.notify_all(); 41 | } 42 | 43 | private: 44 | size_t full_size_; 45 | mutable std::mutex mu_; 46 | std::vector tasks; 47 | std::condition_variable cond_; 48 | }; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/utils/busy_produer_queue.h: -------------------------------------------------------------------------------- 1 | /** 2 | * copy from Difacto : https://github.com/dmlc/difacto 3 | */ 4 | #pragma once 5 | #include 6 | #include 7 | #include 8 | #include 9 | namespace utils { 10 | 11 | /** 12 | * \brief thread-safe queue allowing push and waited pop 13 | */ 14 | template class ThreadsafeQueue { 15 | public: 16 | ThreadsafeQueue() { } 17 | ~ThreadsafeQueue() { } 18 | 19 | /** 20 | * \brief push an value into the end. threadsafe. 21 | * \param new_value the value 22 | */ 23 | void Push(T new_value) { 24 | mu_.lock(); 25 | queue_.push(std::move(new_value)); 26 | mu_.unlock(); 27 | cond_.notify_all(); 28 | } 29 | 30 | /** 31 | * \brief wait until pop an element from the beginning, threadsafe 32 | * \param value the poped value 33 | */ 34 | void WaitAndPop(T* value) { 35 | std::unique_lock lk(mu_); 36 | cond_.wait(lk, [this]{return !queue_.empty();}); 37 | *value = std::move(queue_.front()); 38 | queue_.pop(); 39 | } 40 | 41 | bool TryPop(T& value) { 42 | std::lock_guard lk(mu_); 43 | if(queue_.empty()) 44 | return false; 45 | value=std::move(queue_.front()); 46 | queue_.pop(); 47 | return true; 48 | } 49 | 50 | bool Empty() const { 51 | std::lock_guard lk(mu_); 52 | return queue_.empty(); 53 | } 54 | 55 | private: 56 | mutable std::mutex mu_; 57 | std::queue queue_; 58 | std::condition_variable cond_; 59 | }; 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/utils/list.h: -------------------------------------------------------------------------------- 1 | // copy from linux list 2 | #pragma once 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | // **************************************************************************** 9 | 10 | struct list_head { 11 | struct list_head *prev; 12 | struct list_head *next; 13 | }; 14 | 15 | // **************************************************************************** 16 | 17 | #define offset(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 18 | 19 | #define container_of(ptr, type, member) ({ \ 20 | const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 21 | (type *)( (char *)__mptr - offset(type,member) );}) 22 | 23 | #define list_entry(ptr, type, member) container_of(ptr, type, member) 24 | 25 | /** 26 | * list_for_each_entry_safe - iterate over list of given type safe against 27 | * removal of list entry 28 | * @pos: the type * to use as a loop cursor. 29 | * @n: another type * to use as temporary storage 30 | * @head: the head for your list. 31 | * @member: the name of the list_struct within the struct. 32 | */ 33 | #define list_for_each_entry_safe(pos, n, head, member) \ 34 | for (pos = list_entry((head)->next, typeof(*pos), member), \ 35 | n = list_entry(pos->member.next, typeof(*pos), member); \ 36 | &pos->member != (head); \ 37 | pos = n, n = list_entry(n->member.next, typeof(*n), member)) 38 | 39 | 40 | /** 41 | * list_for_each_entry - iterate over list of given type 42 | * @pos: the type * to use as a loop cursor. 43 | * @head: the head for your list. 44 | * @member: the name of the list_struct within the struct. 45 | */ 46 | #define list_for_each_entry(pos, head, member) \ 47 | for (pos = list_entry((head)->next, typeof(*pos), member); \ 48 | tmc_mem_prefetch(pos->member.next, sizeof(*pos)), &pos->member != (head); \ 49 | pos = list_entry(pos->member.next, typeof(*pos), member)) 50 | 51 | 52 | // **************************************************************************** 53 | 54 | static inline void 55 | list_head_init(struct list_head *list) 56 | { 57 | list->prev = list; 58 | list->next = list; 59 | } 60 | 61 | static inline int 62 | list_empty(const struct list_head *head) 63 | { 64 | return head->next == head; 65 | } 66 | 67 | static inline void 68 | __list_add(struct list_head *new_node, 69 | struct list_head *prev, 70 | struct list_head *next) 71 | { 72 | next->prev = new_node; 73 | new_node->next = next; 74 | new_node->prev = prev; 75 | prev->next = new_node; 76 | } 77 | 78 | static inline void 79 | list_add_(struct list_head *new_node, 80 | struct list_head *head) 81 | { 82 | __list_add(new_node, head, head->next); 83 | } 84 | 85 | static inline void 86 | list_add_tail_(struct list_head *new_node, 87 | struct list_head *head) 88 | { 89 | __list_add(new_node, head->prev, head); 90 | } 91 | 92 | static inline void 93 | __list_del(struct list_head *prev, 94 | struct list_head *next) 95 | { 96 | next->prev = prev; 97 | prev->next = next; 98 | } 99 | 100 | static inline void 101 | list_del_(struct list_head *entry) 102 | { 103 | __list_del(entry->prev, entry->next); 104 | entry->next = entry; 105 | entry->prev = entry; 106 | } 107 | 108 | // **************************************************************************** 109 | 110 | #ifdef __cplusplus 111 | } 112 | #endif // cplusplus 113 | 114 | // **************************************************************************** 115 | -------------------------------------------------------------------------------- /src/utils/stopwatch.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace utils { 14 | 15 | // 计时器 16 | class Stopwatch { 17 | public: 18 | Stopwatch() { 19 | _clear(); 20 | } 21 | 22 | // 停止时间间隔测量,并将运行时间重置为零。 23 | void reset() { 24 | _clear(); 25 | } 26 | 27 | // 停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。 28 | void restart() { 29 | reset(); 30 | _begin(); 31 | } 32 | 33 | // 开始或继续测量某个时间间隔的运行时间。 34 | void start() { 35 | _begin(); 36 | } 37 | 38 | // 停止测量某个时间间隔的运行时间, 并返回计时的us数 39 | long stop() { 40 | _elapsed = get_elapsed(); 41 | is_running = false; 42 | return _elapsed; 43 | } 44 | 45 | long get_elapsed() { 46 | long ret = _elapsed; 47 | if (is_running) { 48 | gettimeofday(&_stop_time, NULL); 49 | long elapsed_in_this_round = (_stop_time.tv_sec - _start_time.tv_sec) * 1000000 50 | + (_stop_time.tv_usec - _start_time.tv_usec); 51 | ret += elapsed_in_this_round; 52 | } 53 | return ret; 54 | } 55 | 56 | double get_elapsed_by_seconds() { 57 | return ((double)get_elapsed()) / 1000000.0; 58 | } 59 | 60 | double get_elapsed_by_ms() { 61 | return ((double)get_elapsed()) / 1000.0; 62 | } 63 | 64 | const struct timeval & get_start_time() const { 65 | return _start_time; 66 | } 67 | 68 | const struct timeval & get_stop_time() const { 69 | return _stop_time; 70 | } 71 | 72 | private: 73 | void _begin() { 74 | gettimeofday(&_start_time, NULL); 75 | is_running = true; 76 | } 77 | 78 | void _clear() { 79 | memset(&_start_time, 0, sizeof(struct timeval)); 80 | memset(&_stop_time, 0, sizeof(struct timeval)); 81 | _elapsed = 0; 82 | is_running = false; 83 | } 84 | 85 | bool is_running; 86 | 87 | struct timeval _start_time; // 开始计时时间 88 | struct timeval _stop_time; 89 | long _elapsed; // 耗时,单位us 90 | }; 91 | 92 | } // namespace utils 93 | 94 | -------------------------------------------------------------------------------- /src/utils/utils.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2021 by exFM Contributors 3 | */ 4 | #pragma once 5 | 6 | #include // for sampling from distributions 7 | #include 8 | #include 9 | 10 | #include "utils/base.h" 11 | #include "utils/str_utils.h" 12 | #include "utils/numeric.h" 13 | #include "utils/console_color.h" 14 | 15 | namespace utils { 16 | 17 | template 18 | inline bool judgeByPairFirst(const std::pair &a, 19 | const std::pair &b) { 20 | return a.first < b.first; 21 | } 22 | 23 | template 24 | inline bool judgeByPairSecond(const std::pair &a, 25 | const std::pair &b) { 26 | return a.second < b.second; 27 | } 28 | 29 | template 30 | inline bool judgeByPairFirstGreater(const std::pair &a, 31 | const std::pair &b) { 32 | return a.first > b.first; 33 | } 34 | 35 | template 36 | inline bool judgeByPairSecondGreater(const std::pair &a, 37 | const std::pair &b) { 38 | return a.second > b.second; 39 | } 40 | 41 | 42 | } // namespace utils 43 | -------------------------------------------------------------------------------- /third_party/cityhash/COPYING: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2011 Google, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /third_party/cityhash/Makefile.am: -------------------------------------------------------------------------------- 1 | ACLOCAL_AMFLAGS = -I m4 2 | SUBDIRS = src 3 | 4 | dist_doc_DATA = README NEWS COPYING 5 | -------------------------------------------------------------------------------- /third_party/cityhash/NEWS: -------------------------------------------------------------------------------- 1 | CityHash v1.1.1, June 17, 2013 2 | 3 | * Fix CityHash32() so platforms that disagree about whether 'char' is signed 4 | use the same mathematical function. For most people this changes nothing 5 | as most popular platforms agree with x86 about whether 'char' is signed. 6 | * No changes to any of the functions, unless you had been using CityHash32() 7 | despite "make check" reporting a failure on your platform. 8 | * Slightly modernize and improve configuration and portability. 9 | 10 | CityHash v1.1, October 22, 2012 11 | 12 | * Add CityHash32(), intended for 32-bit platforms. 13 | * Change existing functions to improve their hash quality and/or speed. Most 14 | of the changes were minor, but CityHashCrc* was substantially reworked 15 | (and made perhaps 10% slower, unfortunately). 16 | * Improve README. 17 | 18 | CityHash v1.0.3, October 6, 2011 19 | 20 | * Change all the functions to improve their hash quality. Most of the 21 | changes were minor. Special thanks to Bob Jenkins for reporting some 22 | issues that he'd found. The speed of the functions after these changes is 23 | roughly unchanged, except that CityHash128() and CityHash128WithSeed() are 24 | slower. 25 | * To improve portability, replace the one use of ssize_t with signed long. 26 | * Improve README. 27 | 28 | CityHash v1.0.2, May 8, 2011 29 | 30 | * Correct a problem in CityHashCrc256(); for inputs under 240 bytes the 31 | scheme of padding to 240 bytes was causing the empty string and an input 32 | of exactly 240 NULs to have the same hash code. That is now fixed. 33 | Most strings less than 240 bytes long will have a different hash than 34 | they did in v1.0.1. 35 | * Other hash functions are unchanged. 36 | * Minor corrections and improvements to README. 37 | 38 | CityHash v1.0.1, April 28, 2011 39 | 40 | * Added README, NEWS, and COPYING. The README contains installation and 41 | usage instructions, information on "hash quality," and other goodies. 42 | * Improved how CityHash128() and CityHash128WithSeed() handle very short 43 | input strings. 44 | * Added new functions that are faster on long strings on 64-bit CPUs with 45 | a CRC32 instruction: CityHashCrc128(), CityHashCrc128WithSeed(), and 46 | CityHashCrc256(). 47 | * Removed our assumption that "*(const uint64*)p" and such is safe. Now we 48 | memcpy() instead. It has no speed penalty and makes our intent explicit 49 | to the compiler. 50 | * Changed #include "city.h" to #include , suggested by Robert Escriva. 51 | * Added build system, a modified version of one contributed by Robert Escriva. 52 | * We now use __builtin_expect if the configure script can make it work, rather 53 | than just on gcc. 54 | * Added a test: use "make check" to run it. If you compile CityHash in a way 55 | that causes it to return unexpected results, the test should fail. 56 | * Added untested big-endian support. Please let us know if you try it! 57 | * Other than CityHash128() and CityHash128WithSeed(), the hash functions in 58 | the previous release are unchanged. 59 | 60 | CityHash v1, April 11, 2011 61 | 62 | * Initial release 63 | -------------------------------------------------------------------------------- /third_party/cityhash/config.h.in: -------------------------------------------------------------------------------- 1 | /* config.h.in. Generated from configure.ac by autoheader. */ 2 | 3 | /* Define if building universal (internal helper macro) */ 4 | #undef AC_APPLE_UNIVERSAL_BUILD 5 | 6 | /* Define to 1 if the compiler supports __builtin_expect. */ 7 | #undef HAVE_BUILTIN_EXPECT 8 | 9 | /* Define to 1 if you have the header file. */ 10 | #undef HAVE_DLFCN_H 11 | 12 | /* Define to 1 if you have the header file. */ 13 | #undef HAVE_INTTYPES_H 14 | 15 | /* Define to 1 if you have the header file. */ 16 | #undef HAVE_MEMORY_H 17 | 18 | /* Define to 1 if you have the header file. */ 19 | #undef HAVE_STDINT_H 20 | 21 | /* Define to 1 if you have the header file. */ 22 | #undef HAVE_STDLIB_H 23 | 24 | /* Define to 1 if you have the header file. */ 25 | #undef HAVE_STRINGS_H 26 | 27 | /* Define to 1 if you have the header file. */ 28 | #undef HAVE_STRING_H 29 | 30 | /* Define to 1 if you have the header file. */ 31 | #undef HAVE_SYS_STAT_H 32 | 33 | /* Define to 1 if you have the header file. */ 34 | #undef HAVE_SYS_TYPES_H 35 | 36 | /* Define to 1 if you have the header file. */ 37 | #undef HAVE_UNISTD_H 38 | 39 | /* Define to the sub-directory in which libtool stores uninstalled libraries. 40 | */ 41 | #undef LT_OBJDIR 42 | 43 | /* Define to the address where bug reports for this package should be sent. */ 44 | #undef PACKAGE_BUGREPORT 45 | 46 | /* Define to the full name of this package. */ 47 | #undef PACKAGE_NAME 48 | 49 | /* Define to the full name and version of this package. */ 50 | #undef PACKAGE_STRING 51 | 52 | /* Define to the one symbol short name of this package. */ 53 | #undef PACKAGE_TARNAME 54 | 55 | /* Define to the home page for this package. */ 56 | #undef PACKAGE_URL 57 | 58 | /* Define to the version of this package. */ 59 | #undef PACKAGE_VERSION 60 | 61 | /* Define to 1 if you have the ANSI C header files. */ 62 | #undef STDC_HEADERS 63 | 64 | /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most 65 | significant byte first (like Motorola and SPARC, unlike Intel). */ 66 | #if defined AC_APPLE_UNIVERSAL_BUILD 67 | # if defined __BIG_ENDIAN__ 68 | # define WORDS_BIGENDIAN 1 69 | # endif 70 | #else 71 | # ifndef WORDS_BIGENDIAN 72 | # undef WORDS_BIGENDIAN 73 | # endif 74 | #endif 75 | 76 | /* Define for Solaris 2.5.1 so the uint32_t typedef from , 77 | , or is not used. If the typedef were allowed, the 78 | #define below would cause a syntax error. */ 79 | #undef _UINT32_T 80 | 81 | /* Define for Solaris 2.5.1 so the uint64_t typedef from , 82 | , or is not used. If the typedef were allowed, the 83 | #define below would cause a syntax error. */ 84 | #undef _UINT64_T 85 | 86 | /* Define for Solaris 2.5.1 so the uint8_t typedef from , 87 | , or is not used. If the typedef were allowed, the 88 | #define below would cause a syntax error. */ 89 | #undef _UINT8_T 90 | 91 | /* Define to `__inline__' or `__inline' if that's what the C compiler 92 | calls it, or to nothing if 'inline' is not supported under any name. */ 93 | #ifndef __cplusplus 94 | #undef inline 95 | #endif 96 | 97 | /* Define to `unsigned int' if does not define. */ 98 | #undef size_t 99 | 100 | /* Define to `int' if does not define. */ 101 | #undef ssize_t 102 | 103 | /* Define to the type of an unsigned integer type of width exactly 32 bits if 104 | such a type exists and the standard includes do not define it. */ 105 | #undef uint32_t 106 | 107 | /* Define to the type of an unsigned integer type of width exactly 64 bits if 108 | such a type exists and the standard includes do not define it. */ 109 | #undef uint64_t 110 | 111 | /* Define to the type of an unsigned integer type of width exactly 8 bits if 112 | such a type exists and the standard includes do not define it. */ 113 | #undef uint8_t 114 | -------------------------------------------------------------------------------- /third_party/cityhash/configure.ac: -------------------------------------------------------------------------------- 1 | m4_define([cityhash_major], [1]) 2 | m4_define([cityhash_minor], [1]) 3 | m4_define([cityhash_patchlevel], [1]) 4 | 5 | # Libtool shared library interface versions (current:revision:age) 6 | # Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) 7 | # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 8 | m4_define([cityhash_ltversion], [4:0:0]) 9 | 10 | AC_PREREQ([2.65]) 11 | AC_INIT([CityHash], [cityhash_major.cityhash_minor.cityhash_patchlevel], [cityhash-discuss@googlegroups.com]) 12 | AC_CONFIG_HEADERS([config.h]) 13 | AM_INIT_AUTOMAKE([1.10 no-define foreign]) 14 | LT_PREREQ([2.2]) 15 | LT_INIT 16 | 17 | AC_CONFIG_FILES([Makefile 18 | src/Makefile]) 19 | AC_CONFIG_SRCDIR([src/city.h]) 20 | AC_CONFIG_MACRO_DIR([m4]) 21 | 22 | AC_ARG_ENABLE([sse4.2], 23 | AS_HELP_STRING("Build CityHash variants that depend on the _mm_crc32_u64 intrinsic."), 24 | [ cityhash_sse42=true ], 25 | []) 26 | AM_CONDITIONAL([SSE42], [test x$cityhash_sse42 = xtrue ]) 27 | 28 | # Checks for programs. 29 | AC_PROG_CXX 30 | AC_LANG([C++]) 31 | AC_C_BIGENDIAN 32 | 33 | # Checks for libraries. 34 | 35 | # Checks for header files. 36 | AC_CHECK_HEADERS([stdint.h stdlib.h]) 37 | 38 | # Checks for typedefs, structures, and compiler characteristics. 39 | AC_C_INLINE 40 | AC_TYPE_SIZE_T 41 | AC_TYPE_SSIZE_T 42 | AC_TYPE_UINT32_T 43 | AC_TYPE_UINT64_T 44 | AC_TYPE_UINT8_T 45 | 46 | # Check for __builtin_expect 47 | AC_MSG_CHECKING([if the compiler supports __builtin_expect]) 48 | AC_COMPILE_IFELSE( 49 | [AC_LANG_PROGRAM(, [[return __builtin_expect(1, 1) ? 1 : 0;]])], 50 | [ 51 | cityhash_have_builtin_expect=yes 52 | AC_MSG_RESULT([yes]) 53 | ], [ 54 | cityhash_have_builtin_expect=no 55 | AC_MSG_RESULT([no]) 56 | ]) 57 | if test x$cityhash_have_builtin_expect = xyes ; then 58 | AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler supports __builtin_expect.]) 59 | fi 60 | 61 | AC_OUTPUT 62 | 63 | echo \ 64 | "------------------------------------------------- 65 | 66 | ${PACKAGE_NAME} Version ${PACKAGE_VERSION} 67 | 68 | Prefix: '${prefix}'. 69 | Compiler: '${CXX} ${CXXFLAGS}' 70 | 71 | Now type 'make @<:@@:>@' 72 | where the optional is: 73 | all - build everything 74 | check - build and run tests 75 | install - install everything 76 | 77 | --------------------------------------------------" 78 | -------------------------------------------------------------------------------- /third_party/cityhash/m4/ltversion.m4: -------------------------------------------------------------------------------- 1 | # ltversion.m4 -- version numbers -*- Autoconf -*- 2 | # 3 | # Copyright (C) 2004 Free Software Foundation, Inc. 4 | # Written by Scott James Remnant, 2004 5 | # 6 | # This file is free software; the Free Software Foundation gives 7 | # unlimited permission to copy and/or distribute it, with or without 8 | # modifications, as long as this notice is preserved. 9 | 10 | # @configure_input@ 11 | 12 | # serial 3293 ltversion.m4 13 | # This file is part of GNU Libtool 14 | 15 | m4_define([LT_PACKAGE_VERSION], [2.4]) 16 | m4_define([LT_PACKAGE_REVISION], [1.3293]) 17 | 18 | AC_DEFUN([LTVERSION_VERSION], 19 | [macro_version='2.4' 20 | macro_revision='1.3293' 21 | _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) 22 | _LT_DECL(, macro_revision, 0) 23 | ]) 24 | -------------------------------------------------------------------------------- /third_party/cityhash/src/Makefile.am: -------------------------------------------------------------------------------- 1 | # library 2 | lib_LTLIBRARIES = libcityhash.la 3 | libcityhash_la_SOURCES = city.cc 4 | if SSE42 5 | include_HEADERS = city.h citycrc.h 6 | else 7 | include_HEADERS = city.h 8 | endif 9 | 10 | # test 11 | cityhash_unittest_SOURCES = city-test.cc 12 | cityhash_unittest_LDADD = libcityhash.la 13 | TESTS = cityhash_unittest 14 | noinst_PROGRAMS = $(TESTS) 15 | -------------------------------------------------------------------------------- /third_party/cityhash/src/citycrc.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2011 Google, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | // 21 | // CityHash, by Geoff Pike and Jyrki Alakuijala 22 | // 23 | // This file declares the subset of the CityHash functions that require 24 | // _mm_crc32_u64(). See the CityHash README for details. 25 | // 26 | // Functions in the CityHash family are not suitable for cryptography. 27 | 28 | #ifndef CITY_HASH_CRC_H_ 29 | #define CITY_HASH_CRC_H_ 30 | 31 | #include 32 | 33 | // Hash function for a byte array. 34 | uint128 CityHashCrc128(const char *s, size_t len); 35 | 36 | // Hash function for a byte array. For convenience, a 128-bit seed is also 37 | // hashed into the result. 38 | uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed); 39 | 40 | // Hash function for a byte array. Sets result[0] ... result[3]. 41 | void CityHashCrc256(const char *s, size_t len, uint64 *result); 42 | 43 | #endif // CITY_HASH_CRC_H_ 44 | -------------------------------------------------------------------------------- /third_party/murmur_hash3/MurmurHash3.h: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------------- 2 | // MurmurHash3 was written by Austin Appleby, and is placed in the public 3 | // domain. The author hereby disclaims copyright to this source code. 4 | 5 | #ifndef _MURMURHASH3_H_ 6 | #define _MURMURHASH3_H_ 7 | 8 | //----------------------------------------------------------------------------- 9 | // Platform-specific functions and macros 10 | 11 | // Microsoft Visual Studio 12 | 13 | #if defined(_MSC_VER) 14 | 15 | typedef unsigned char uint8_t; 16 | typedef unsigned long uint32_t; 17 | typedef unsigned __int64 uint64_t; 18 | 19 | // Other compilers 20 | 21 | #else // defined(_MSC_VER) 22 | 23 | #include 24 | 25 | #endif // !defined(_MSC_VER) 26 | 27 | //----------------------------------------------------------------------------- 28 | 29 | uint32_t MurmurHash3_x86_32 ( const void * key, int len, uint32_t seed); 30 | 31 | void MurmurHash3_x86_128 ( const void * key, int len, uint32_t seed, void * out ); 32 | 33 | void MurmurHash3_x64_128 ( const void * key, int len, uint32_t seed, void * out ); 34 | 35 | //----------------------------------------------------------------------------- 36 | 37 | #endif // _MURMURHASH3_H_ 38 | -------------------------------------------------------------------------------- /train.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cpu_num=30 4 | 5 | bin/train \ 6 | data_formart=csv \ 7 | feat_sep=, \ 8 | feat_cfg=conf1 \ 9 | train=data/train.csv \ 10 | valid=data/test.csv \ 11 | threads=$cpu_num \ 12 | verbose=1 \ 13 | epoch=1 \ 14 | solver=ftrl \ 15 | batch_size=10 \ 16 | mf=txt \ 17 | om=model_output 18 | 19 | 20 | --------------------------------------------------------------------------------