GibbsLDA utils.cpp分析
来源:互联网 发布:人工智能三贤者理论 编辑:程序博客网 时间:2024/05/18 02:11
GibbsLDA utils.cpp分析
头文件
都看到了这儿,头文件有啥已经不重要了,都在心中。
函数
函数1:
int utils::parse_args(int argc, char ** argv, model * pmodel);
变量:
model_status就是当前model的状态,现在因为还不确定,所以是KNOWN。
dir就是存有model的文件夹的路径?
model_name是model的名称?
dfile肯定是最后要执行的file的名称。
alpha,beta,k,niters,savestep,twords,withrawdata这些都是文档中就有的参数。
然后就开始分析参数。
if (arg == "-est") { model_status = MODEL_STATUS_EST;} else if (arg == "-estc") { model_status = MODEL_STATUS_ESTC;} else if (arg == "-inf") { model_status = MODEL_STATUS_INF;}
以上是对于状态的确定
else if (arg == "-dir") { dir = argv[++i]; }
以上是已经训练好的模型的文件夹的路径
else if (arg == "-dfile") { dfile = argv[++i]; }
以上是要进行训练的或者要进行inference的文件的路径,以.dat结尾
else if (arg == "-model") { model_name = argv[++i]; } else if (arg == "-alpha") { alpha = atof(argv[++i]); } else if (arg == "-beta") { beta = atof(argv[++i]); } else if (arg == "-ntopics") { K = atoi(argv[++i]); } else if (arg == "-niters") { niters = atoi(argv[++i]); } else if (arg == "-savestep") { savestep = atoi(argv[++i]);} else if (arg == "-twords") { twords = atoi(argv[++i]);} else if (arg == "-withrawdata") { withrawdata = 1;} else { // any more?}
以上是模型的名称和各种参数的设置。虽然说,这里面有withrawdata,但是似乎手册中并没有说道这一点,可能也用不到。
pmodel
pmodel是一个传入的model,似乎是,一个指针。因为已经确定了各种的参数,所以要讲各种参数设置到这个model的各项设置中,可以看到其中的设置很有趣,都是直接赋值,我想在pmodel的初始化过程中应该已经进行了文档中数值的初始化的操作。
string::size_type idx = dfile.find_last_of("/"); if (idx == string::npos) { pmodel->dir = "./";} else { pmodel->dir = dfile.substr(0, idx + 1); pmodel->dfile = dfile.substr(idx + 1, dfile.size() - pmodel->dir.size()); printf("dir = %s\n", pmodel->dir.c_str()); printf("dfile = %s\n", pmodel->dfile.c_str());}}
以上代码是为了确定model的文件夹和文件名。
下面的两段巨长的代码是分别是-estc 和 -inf的时候才会分别执行的。
if (model_status == MODEL_STATUS_INF) {if (dir == "") { printf("Please specify model directory please!\n"); return 1;}if (model_name == "") { printf("Please specify model name for inference!\n"); return 1;} if (dfile == "") { printf("Please specify the new data file for inference!\n"); return 1;}pmodel->model_status = model_status;if (dir[dir.size() - 1] != '/') { dir += "/";}pmodel->dir = dir;pmodel->model_name = model_name;pmodel->dfile = dfile;if (niters > 0) { pmodel->niters = niters;} else { // default number of Gibbs sampling iterations for doing inference pmodel->niters = 20;}if (twords > 0) { pmodel->twords = twords;}if (withrawdata > 0) { pmodel->withrawstrs = withrawdata;}// read <model>.others file to assign values for ntopics, alpha, beta, etc.if (read_and_parse(pmodel->dir + pmodel->model_name + pmodel->others_suffix, pmodel)) { return 1;}}
这个源码缩进的方式我也是醉了。。
以上是inference的判断,需要文件夹,模型的名称和需要判断的文件的名称。
函数2:
int utils::read_and_parse(string filename, model * pmodel);
这个从文件进行读取的就很简单了。不过我觉得也只有在特殊情况-estc和-inf的情况才会使用的。
比较简单,不必多言。
函数3:
string utils::generate_model_name(int iter);
这个函数的作用就是产生输出的model的name。
可以看到对于不同的iter,前面需要进行0的补充操作。modelname = “model-buff”/”model-final”
函数4:
void utils::sort(vector<double> & probs, vector<int> & words);
根据prob的大小对于probs和words进行降序排序。
函数5:
void utils::quicksort(vector<pair<int, double> > & vect, int left, int right);
根据第二个元素double进行排序的小快排。也是降序排序。
- GibbsLDA utils.cpp分析
- GibbsLDA utils.h分析
- GibbsLDA lda.cpp分析
- GibbsLDA strtokenizer.cpp分析
- GibbsLDA dataset.cpp分析
- GibbsLDA model.cpp分析
- GibbsLDA constants.h分析
- GibbsLDA dataset.h分析
- GibbsLDA strtokenizer.h分析
- GibbsLDA model.h分析
- 根据《LDA漫游指南》来对gibbsLDA++结果进行分析
- GibbsLDA++使用手册
- UTILS
- Utils
- utils
- utils
- Utils
- Utils
- Codeforces 686 D Kay and Snowflake (树重心)
- 3Sum Closest
- 32位 plsql连接 64位Oracle教程
- Android自定义组合控件
- Android面试总结
- GibbsLDA utils.cpp分析
- 进程间的通信方式(二)
- 算法导论_第五章_概率分析和随机算法
- springboot 连接池wait_timeout超时设置
- ui2
- Hyperion 配置
- Html5的数据存储
- margin和padding有关参数图解
- linux常用命令总结