LDA 初见(JGibbLDA-v.1.0 eclipse使用)

时间:2022-09-28 23:53:09

参考:Eclipse下使用JGibbLDA使用总结

一、下载和初次使用JGibbLDA

  1、导入JGibbLDA-v.1.0项目(参考上面链接)

  2、在LDA.java右键“run”--->“run configurations”填入

    -est -dir models/casestudy-en/ -alpha 0.5 -beta 0.1 -ntopics 100 -niters 1000 -savestep 100 -twords 20 -dfile newdocs.dat

    -est -dir models/hanz/ -alpha 0.5 -beta 0.1 -ntopics 100 -niters 1000 -savestep 100 -twords 20 -dfile newdocs.dat

-est 表示进行模型估计;另外还有两个可选的为-estc继续估计;还有一个-inf为利用训练好的模型来估计新文档。

    -alpha 0.5 -beta 0.1

    这个两个参数涉及了很多看了就头大的公式,直观上比较好理解的引用梁斌penny的说法“其中α,大家可以调大调小了试试看,调大了的结果是每个文档接近同一个topic,即让p(wi|topici)发挥的作用小,这样p(di|topici)发挥的作用就大。其中的β,调大的结    果是让p(di|topici)发挥的作用变下,而让p(wi|topici)发挥的作用变大,体现在每个topic更集中在几个词汇上面,或者而每个词汇都尽可能的百分百概率转移到一个topic上。”

    就我个人而言,因为不知道怎么用。所以一直都是选用的0.5和0.1这两个。

    GibbsLDA++的文档中说明了alpha默认使用topic数目除以100.

     -niters 2000  迭代次数,一般需要1000次以上才能收敛,达到较好的效果。

LDA [options ...] [arguments...]
-alpha N : Specify alpha
-beta N : Specify beta
-dfile VAL : Specify data file
-dir VAL : Specify directory
-est : Specify whether we want to estimate model from scratch /×-est 此参数初次训练lda模型;
 -estc        : Specify whether we want to continue the last estimation   -estc:此参数用于从已有的模型当中训练lda模型;
-inf : Specify whether we want to do inference -inf: 此参数用于对新的文档进行测试;×/
 -model VAL   : Specify the model name
-niters N : Specify the number of iterations
-ntopics N : Specify the number of topics
-savestep N : Specify the number of steps to save the model since the last save
-twords N : Specify the number of most likely words to be printed for each topic
-withrawdata : Specify whether we include raw data in the input
-wordmap VAL : Specify the wordmap file

参考:http://blog.csdn.net/memray/article/details/16810763

http://blog.csdn.net/huagong_adu/article/details/7937616

二、JGibbLDA的参数基本上有下面几个

LDA 初见(JGibbLDA-v.1.0 eclipse使用)

 从上图可以看出,LDA的三个表示层被三种颜色表示出来:

        . corpus-level(红色):α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。

        .document-level(橙色):θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所有生成每个文档采样一次θ。

        . word-level(绿色):z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个 单词w对应一个主题z。

        通过上面对LDA生成模型的讨论,可以知道LDA模型主要是从给定的输入语料中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

        α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量;

        β:各个主题对应的单词概率分布矩阵p(w|z)。

        把w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来近似求解,原文使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到收敛。
  1. #-est 此参数初次训练lda模型;
  2. #-estc:此参数用于从已有的模型当中训练lda模型;
  3. #-inf: 此参数用于对新的文档进行测试;
  4. #-model <string>: 已有的模型的名称;
  5. #-alpha<double>:α超参数,默认是50/k,k为主题数量;
  6. #-beta <double>: β超参数,默认为0.1;
  7. #-ntopics <int>: 主题数量,默认100;
  8. #-niters <int>: gibbs抽样迭代次数,默认为2000;
  9. #-savestep <int>: 保持模型的迭代次数,即每迭代多少次将保持一次结果模型。默认为200;
  10. # -tword s <int>: 每个主题最可能的单车数量。默认为0,如果设定大于0,比如20,jgibblda将会根据此参数在每次保持模型时为每个主题打印出最可能的20个词;
  11. #-dir <string>: 输入词集文件夹目录;此目录也是模型结果输出目录
  12. # -dfile <string>: 输入词集文件名称

   参数说明和设置

//Specify whether we want to estimate modelfrom scratch

boolean est= false;  /////是否开始训练模型

//Specify whether we want to continue thelast estimation

决定是否是基于先前已有的模型基础上继续用新数据训练模型

boolean estc= false;

//Specify whether we want to do inference

boolean inf= true;    /////是否使用先前已经训练好的模型进行推断

String dir= "";  //Specify directory  ////数据结果(模型数据)保存位置

String dfile= "";  //Specify resource data filename    /////训练数据或原始数据文件名

//Specify the model level to which you wantto applied. ///

String modelName= "";  ////选择使用哪一个迭代的模型结果来进行推断

int K= 100;  //Specify the number of topics  /////类簇数目,谨慎设置

double alpha= 0.2;  //Specify alpha //////平滑系数

double beta= 0.1;  //Specify beta

int niters= 1000;  //Specify the number of iterations  /////迭代数目,谨慎设置

//Specify the number of steps to save themodel since the last save.

//The step (counted by the number ofGibbssampling iterations)

//at which the LDA model is saved to harddisk.

//指定把迭代结果模型保存到硬盘上的迭代跨度,即每迭代10次保存一次。

int savestep= 100;

//Specify the number of most likely wordsto be printed for each topic

int twords= 100;   /////对每一个类别(话题)选前多少个最大概率词项

//Specify whether we include raw data in theinput

public boolean withrawdata= false;

//Specify thewordmapfile

publicString wordMapFileName= "wordmap.txt";  /////生成的副产品的文件名

三、输入词集格式

  一般如下

    [m]
    [document1]
    [document2]
    ...
    [documentm]

  其中:

    第一行为该数据文件有多少条记录数。然后每一行记录按行排列。

    这里的“记录”的格式又规定为:

    [documenti]= [wordi1] [wordi2] ... [wordiNi]

    其中:[wordiNi]为[documenti]的各个词项,以空格分隔。

  众所周知,对词项集合进行预处理,如去除停用词、主干提取等,对结果精度的提升有较大帮助。

  在基于所属宝贝属性序列的用户聚类中,预处理这一步可以省略。因为提取属性序列的主干是一件较为困难的事。

四、输出数据

  建立模型阶段,会输出5类以如下规则命名的文件类型

    model-xxxxx.others:

    model-xxxxx.phi

    model-xxxxx.theta

    model-xxxxx.tassign

    model-xxxxx.tword s

  xxxxx都以数字组成。最后一次迭代所保存的这些数字将会换成“final”。

  其中:

  •    .others为“信息文件”。文件保存的是跟该LDA模型有关的参数,比如alpha,beta,ntopiccs,ndocs,nwords,liter(the Gibbssampling iteration at which the model was saved)
  •    .phi文件为“词项-主题概率分布文件”。表现上是一个大矩阵M。其中,假设设类簇的数目topict为1000个,每一个主题需要列出top 100个词项wordw,则M以100为行,1000为列。即M每一行是词项,每一列是主题。M元素值则为条件概率p(wordw|topict),即每个词属于每个主题的概率。
  • 0.007328 0.000014 0.000014 0.001421 0.000014 0.000014 ……

    0.000293 0.001132 0.000154 0.000293 0.000293 0.000154……(节选部分矩阵,实际上这个矩阵很大)

    代表两个主题,wordmap中编号为0的词语对主题0贡献了0.007328,对主题1贡献了0.000293。

  •      .theta文件为“文档-主题概率分布文件”。表现上也是一个大矩阵M。每行i代表训练数据的一个文档,每一列代表一个主题,元素值则为条件概率 p(topict|documentm),即该文档属于不同主题的概率。
  •      .tassign文件为“文档-词项-主题分布文件”。该文件与输入文件的格式一致,一行一个文档,只不过原来的输入文件中的词项换成了一个一个“词项ID:类别”。文件每一行代表训练数据的一条文档,原文档由一组词项组成,现每一行为原来的记录词项指派了其最大可能的所属主题。注意,该文档所属主题分布是在theta文件中,并未在tassign文件中指明。
  • 表示了该文档中每个词语与其匹配的主题。

    836:26 837:29 1087:12 200:12 1241:3 450:26 1242:26 1172:12 910:12 4:22 5:22 6:22 1243:22 1117:26 852:26

    此行表示一个输入文档有在wordmap中标号为836,837,1087等的词语组成,这些词语分别被分配给了主题26,29,12

  •      .twords文件为“词项-主题推断文件”。这个文件作为模型参数结果推断出了每一个主题下最优的topN个词项及其概率。请注意这里的主题数和N都是事先指定的。

  这5个文件包括副产品wordmap.txt在有些应用场景下有时并不是完全需要的,是否生成可视情况而定。如果利用主题下topN词项来做基于距离的聚类,可能只需.twords即可。

关键代码:初始化一个模型:

LDACmdOptionldaOption = new LDACmdOption(); 
ldaOption.inf =true; 
ldaOption.dir ="C:\\LDAModelDir"; 
ldaOption.modelName= "newdocs"; 
ldaOption.niters =100;

推断新数据

Inferencerinferencer = new Inferencer(); 
inferencer.init(option);

ldaOption.dfile= "input-lda-data.txt"; 
Model newModel =inferencer.inference();

数据也可以是词项的一组数组:

String[] test = {"politics bill clinton", "lawcourt", "football match"};
Model newModel =inferencer.inference(test);

propertyutils.java读取配置文件src/option.properties

转自:http://blog.csdn.net/memray/article/details/16810763

Python版本的LDA

http://blog.csdn.net/pirage/article/details/8898544

概率主题模型简介 Introduction to Probabilistic Topic Models

http://blog.csdn.net/pi9nc/article/details/9017153

LDA 初见(JGibbLDA-v.1.0 eclipse使用)的更多相关文章

  1. Micosoft&period;ReportViewer&period;WebForms v 11&period;0&period;&period;&period; 1&period;0&period;1

    his dll is required for the use of Microsoft's forms based ReportViewer control. This version is to ...

  2. 仅仅需手动添加一行代码就可以让Laravel4执行在SAE &lpar;v&period; 1&period;0&period;0&rpar;

    Github:https://github.com/chariothy/laravel4-sae (已更新至v1.1.0) laravel4-sae (v. 1.0.0) 仅仅需手动添加一行代码就可以 ...

  3. 高屋建瓴 cocos2d-x-3&period;0架构设计 Cocos2d &lpar;v&period;3&period;0&rpar; rendering pipeline roadmap&lpar;原文&rpar;

    Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...

  4. C&plus;&plus;:vector中的v&period;at&lpar;0&rpar;和v&lbrack;0&rsqb;的区别

    设v是一个vector的对象, 如果v是非空的,则v.at(0)和v[0]是没有区别的,都是取数组中第一个值: 如果v是空的,则v.at(0)会抛出异常(exception std::out_of_r ...

  5. BayaiM&lowbar;&lowbar;ORACLE之ASM概念 --V 1&period;0&period;0

    BayaiM__ORACLE之ASM概念                                --V 1.0.0 -------------------------------------- ...

  6. python学习&lowbar;新闻联播文字版爬虫(V 1&period;0&period;1版)

    更新记录: 1.新增了headers头的随机获取: 2.新增了logging模块添加日志信息(学习用): #!/usr/bin/env python # -*- coding: utf-8 -*- ' ...

  7. 搭建Hadoop2&period;6&period;0&plus;Eclipse开发调试环境

    上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna ...

  8. hadoop-1&period;2&period;0 eclipse插件编译

    linux.windows下通用,亲测. 下面以window为例,假设:hadoop工程目录位于D:\work\eclipse64\hadoop-1.2.0.1.3.0.0,eclipse安装目录为E ...

  9. hadoop2&period;6&period;0&plus;eclipse配置

    [0]安装前的声明 0.1) 所用节点2个 master : 192.168.119.105 hadoop5 slave : 192.168.119.101 hadoop1 (先用一个slave,跑成 ...

随机推荐

  1. RPC和Socket&comma;RMI和RPC之间的关系

    远程通信机制RPC与RMI的关系 http://blog.csdn.net/zolalad/article/details/25161133       1.RPC RPC(Remote Proced ...

  2. Linux 中的 wheel 组和 staff 组

    wheel 组的概念 wheel 组的概念继承自 UNIX.当服务器需要进行一些日常系统管理员无法执行的高级维护时,往往就要用到 root 权限:而“wheel” 组就是一个包含这些特殊权限的用户池: ...

  3. Unity3D 批量图片资源导入设置

    原地址:http://blog.csdn.net/asd237241291/article/details/8433548 创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:[] 本 ...

  4. Centos &plus; nginx &plus; JBOSS AS 7 搭建Java web application

    最近做了一个Java的web app,一直想在Centos环境中搭建一个完整的web服务器,现在开始动手. 先说说环境: 操作系统: Centos 6.3 WEB服务器: nginx-1.2.5 Ap ...

  5. 【多重背包】HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...

  6. 对于IO流的个人理解

    Samuel 2018-04-21 在这之前,我给你们构造这样一个生活用水的场景: 人们日常生活需要生活用水,那么,水从哪里来呢? 大家都学过初中的物理常识,水在地表,通过蒸发,变成水蒸气去到空中,在 ...

  7. Mybatis类型转换介绍

    1.1     目录 1.2     建立TypeHandler 1.2.1    TypeHandler接口 1.2.2    BaseTypeHandler抽象类 1.3     注册TypeHa ...

  8. 安装VS2012出问题后,反复重启电脑。

    安装VS2012在装 VC++相关部分时出了问题,自动重启了. 重启后安装仍重启. 系统设置里取消了“自动重启”, 出现0x000000F4,网上搜索下,说是和硬盘有关,电源线.数据线.或电源不稳. ...

  9. RHCE 共享文件系统

    9.1 共享文件系统 概述: 共享文件系统通常有两种方式: 基于文件共享,一种直接共享文件夹给client端,常见的技术有NFS(Network File System )和 SMB (Server ...

  10. No&period;3一步步学习vuejs之计算属性和观察者

    一.计算属性运行结果 <div id = "demo1"> <p>Original message: "{{message}}"< ...