加载vowpalwabbit模型后,如何输出带特征名的json_weights()权重?
解决Vowpal Wabbit加载模型后输出带特征名权重的问题
问题核心在于:训练时启用--invert_hash生成的特征名-哈希映射,默认不会被保存到模型文件里,所以重新加载模型后,模型没有特征名的映射信息,自然输出的权重不带特征名。
你可以按以下步骤解决:
训练阶段:除了
--dump_json_weights_include_feature_names_experimental和--invert_hash,明确指定特征映射的保存路径,比如:vw -d train_data.txt --dump_json_weights_include_feature_names_experimental --invert_hash feature_map.txt -f model.vw这里的
feature_map.txt会保存特征名与哈希值的对应关系,必须保留好这个文件。加载模型阶段:加载模型时,需要同时加载这个特征映射文件,让模型能把哈希值对应回特征名:
- 如果用命令行:
vw -i model.vw --invert_hash feature_map.txt --dump_json_weights_include_feature_names_experimental -o weights_with_names.json - 如果用Python绑定:
import vowpalwabbit # 加载模型时指定特征映射文件 vw = vowpalwabbit.Workspace("-i model.vw --invert_hash feature_map.txt") # 调用json_weights()就能得到带特征名的结果 weights = vw.json_weights()
- 如果用命令行:
这样操作后,不管是命令行输出还是API调用,都能得到和训练时输出一致的带特征名的可读权重了。
内容的提问来源于stack exchange,提问作者MrE
相关产品推荐
相关产品推荐

