文档章节

机学走起第四式:起飞

厉力文武
 厉力文武
发布于 2017/08/12 09:53
字数 643
阅读 25
收藏 0

    LDA(Latent Dirichlet Allocation)是一种文档主题提取模型,也叫词题档三层贝叶斯,按照单词 -> 主题 -> 文档从属分布概率来隐式推导归档类目,属于无监督机器学习范畴。实际效果和训练样本的质量关系极其密切,目标类目不宜期待过多过细,否则效果的衰减将远超预期,另外脸书一款开源监督机器学习主题提取模型效果更佳,今天先挖个坑留着以后再说。核心的实现借用吉布斯采样算法,自己要做的是输入输出和准备训练样本。样本导入需要两个参数,cps,二维向量对应文档,size,整数对应词表尺寸,定义目标主题数可以根据需要指定,主题概率和单词概率默认配置即可,训练完毕根据模型提取主题词。

获取词表:

	public static XxCorpus loadSample(String f) throws Exception {
		File fds = new File(f);
		XxCorpus cps = new XxCorpus ();
		
        for (File v : fds.listFiles()) {
        	String buf = new String();
    		List<String> lst = new LinkedList<String>();
    		BufferedReader brd = new BufferedReader(new InputStreamReader(new FileInputStream(v), "UTF-8"));
            
			while (null != (buf = brd.readLine())) {
				for (String w : buf.split(" ")) {
					if (w.trim().length() < 2) continue;
					lst.add(w);
				}
			}

			cps.addDoc(lst);
			brd.close();
        }
		
		return cps;
	}

	public int[] addDoc(List<String> l) {
		int idx = 0;
		int[] doc = new int[l.size()];
		
		for (String v : l) {
			doc[idx ++] = voc.getId(v, true);
		}
		lst.add(doc);
		
		return doc;
	}

	public Integer getId(String w, boolean b) {
		Integer id = w2i.get(w);
		if (true == b) {
			if (null == id) {
				id = w2i.size();
			}
			w2i.put(w, id);

			if (i2w.length - 1 < id) {
        		String[] arr = new String[w2i.size() * 2];
        		System.arraycopy(i2w, 0, arr, 0, i2w.length);
        		i2w = arr;
        	}
        	i2w[id] = w;
        }

        return id;
	}

样本训练:new LdaGibbsSampler(cps.getDoc(), cps.getSize()).gibbs(10);

提主题词:

    public static Map<String, Double>[] translate(double[][] p, CmVocab v, int l) {
		l = Math.min(l, p[0].length);
        Map<String, Double>[] rst = new Map[p.length];
        
        for (int k = 0; k < p.length; k++) {
        	Map<Double, String> map = new TreeMap<Double, String>(Collections.reverseOrder());
        	for (int i = 0; i < p[k].length; i++) {
        		map.put(p[k][i], v.getWord(i));
            }
            Iterator<Map.Entry<Double, String>> iterator = map.entrySet().iterator();
            rst[k] = new LinkedHashMap<String, Double>();
            for (int i = 0; i < l; ++i) {
                Map.Entry<Double, String> val = iterator.next();
                rst[k].put(val.getValue(), val.getKey());
            }
        }
        
        return rst;
    }

    主题预测:随机一篇文章去停用词分词备用,根据词表生成一份一维向量表,连同训练结果模型一并作为参数执行主题预测,返回结果是一个双精度向量集合。

   public static Map<String, Double> translate(double[] t/* 双精度向量 */, double[][] p, CmVocab v, int l) {
		int n = -1;
		double d = -1.0;
        Map<String, Double>[] tpc = translate(p, v, l);
        
        for (int k = 0; k < t.length; k++) {
        	if (t[k] > d) {
                d = t[k];
                n = k;
            }
        }
        
        return tpc[n];
    }

    把结果打印出来看看,亲咋样?

    预告:《机学走起第五式:加速》之基于TF向量的相似度算法与实现。

© 著作权归作者所有

共有 人打赏支持
厉力文武
粉丝 30
博文 86
码字总数 81619
作品 0
朝阳
程序员
私信 提问
数据库课程之分布式数据库设计(二)

前言 在第一篇文章中,笔者又做了一些补充。因为补充内容属于该课程第一章节的内容。此后笔者文章的更新主要会以完整章节为主,而不是上一次课更新一次。这篇文章将主要是记录分布式数据库系...

ZhengYaWei
03/26
0
0
SAP成都研究院飞机哥:程序猿和飞机的不解之缘

今天的文章来自Jerry的老同事张航。 张航和Jerry一样于2007年毕业后加入SAP成都研究院工作至今。进入SAP后的第一个开发部门是SAP Business by Design Infrastructure团队,该团队老大就是昔日...

JerryWang_SAP
10/18
0
0
iOS实现网易云音乐右上角view跳动效果

效果走起! 链接:https://github.com/xiaojin1123/AnimationDemo.git 第一步还是先添加layer到红色的View上面,然后初始化设置第二和第四的Layer动画,目的是为了让它们的高度减少到原来的0...

MR小锦
08/25
0
0
嵌入式系统定制开发的分层与专业的分类

嵌入式系统这个名词还是比较难以准确定义的,一般把“用于控制、监视或者辅助操作机器和设备的装置”称为嵌入式系统,系统包括一系列软硬件设施等,比如:手机的系统开发(Android、IOS等),...

gunser
05/31
0
0
Husky数据分析——全球航班信息的研究

在莱特兄弟制造了第一架可控飞机100年后的今天,坐飞机已然成为了大众化的出行方式。可是我们大多数人对航空领域的相关情况了解得还并不多,例如历史上各国航空器制造公司的兴衰、全球各个机...

happengft
2017/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

&和&&,==和equals的区别

&和&& 相同点:都可以表示逻辑与(and),当运算符两边的结果都为true时,结果才为true,只要有一边为false,结果就为false。 不同点:&&还有短路的作用,即如果第一个表达式的结果为false,就...

森林之下
34分钟前
2
0
我和 Spring 大神的一天

摘要: 先介绍一下故事的5位主人公。 Josh Long 龙之春:Spring 技术布道师,撰写过5部著作,录制过3部畅销的培训视频,是一位开源软件贡献者。 Spencer Gibb:Spring 技术布道师,Spring Cl...

阿里云官方博客
37分钟前
3
0
【Zookeeper】源码分析目录(保存)

https://www.cnblogs.com/leesf456/p/6518040.html

Java搬砖工程师
40分钟前
2
0
vue-cli图片路径使用

https://www.cnblogs.com/minigrasshopper/p/8011630.html

LM_Mike
40分钟前
2
0
前方高能,重要通知!明珠不蒙尘,有才你就来。

11月开源众包服务之星计划--开发商招募正式开启了! 您还是否在为能接更多的订单而操碎了心? 开源众包即将迎来三周年华诞,重磅上线服务之星品牌计划。你有强大的技术实力?你有丰富的案例经...

开源中国众包平台
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部