lda php,主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现

[导读]百度最近开源了一个新的关于主题模型的项目。文档主题推断工具、语义匹配计算工具以及基于工业级语料训练的三种主题模型:Latent

Dirichlet Allocation(LDA)、SentenceLDA 和Topical Word Embedding(TWE)。

一、Familia简介

帮Familia,打个小广告~  Familia的github

主题模型在工业界的应用范式可以抽象为两大类: 语义表示和语义匹配。

语义表示 (Semantic Representation)

对文档进行主题降维,获得文档的语义表示,这些语义表示可以应用于文本分类、文本内容分析、CTR预估等下游应用。

语义匹配 (Semantic Matching)

计算文本间的语义匹配度,我们提供两种文本类型的相似度计算方式:- 短文本-长文本相似度计算,使用场景包括文档关键词抽取、计算搜索引擎查询和网页的相似度等等。

- 长文本-长文本相似度计算,使用场景包括计算两篇文档的相似度、计算用户画像和新闻的相似度等等。

Familia自带的Demo包含以下功能:

语义表示计算

利用主题模型对输入文档进行主题推断,以得到文档的主题降维表示。

语义匹配计算

计算文本之间的相似度,包括短文本-长文本、长文本-长文本间的相似度计算。

模型内容展现

对模型的主题词,近邻词进行展现,方便用户对模型的主题有直观的理解。

.

二、Topical Word Embedding(TWE)

Zhiyuan Liu老师的文章,paper下载以及github

In this way, contextual word embeddings can be flexibly obtained to measure contextual word similarity. We can also build document representations.

且有三款:TWE-1,TWE-2,TWE-3,来看看和传统的skip-gram的结构区别:

20170715203145804.jpg

在多标签文本分类的精确度:

20170715203259973.jpg

百度开源项目 Familia中TWE模型的内容展现:请输入主题编号(0-10000):    105

Embedding Result              Multinomial Result

------------------------------------------------

对话                                    对话

磋商                                    合作

合作                                    中国

非方                                    磋商

探讨                                    交流

对话会议                                联合

议题                                    国家

中方                                    讨论

对话会                                  支持

交流                                    包括

第一列为基于embedding的结果,第二列为基于多项分布的结果,均按照在主题中的重要程度从大到小的顺序排序。

来简单看一下train文件:import gensim #modified gensim version

import pre_process # read the wordmap and the tassgin file and create the sentence

import sys

if __name__=="__main__":

if len(sys.argv)!=4:

print "Usage : python train.py wordmap tassign topic_number"

sys.exit(1)

reload(sys)

sys.setdefaultencoding('utf-8')

wordmapfile = sys.argv[1]

tassignfile = sys.argv[2]

topic_number = int(sys.argv[3])

id2word = pre_process.load_id2word(wordmapfile)

pre_process.load_sentences(tassignfile, id2word)

sentence_word = gensim.models.word2vec.LineSentence("tmp/word.file")

print "Training the word vector..."

w = gensim.models.Word2Vec(sentence_word,size=400, workers=20)

sentence = gensim.models.word2vec.CombinedSentence("tmp/word.file","tmp/topic.file")

print "Training the topic vector..."

w.train_topic(topic_number, sentence)

print "Saving the topic vectors..."

w.save_topic("output/topic_vector.txt")

print "Saving the word vectors..."

w.save_wordvector("output/word_vector.txt")

.

三、SentenceLDA

paper链接 +  github:balikasg/topicModelling

SentenceLDA是什么?

an extension of LDA whose goal is to overcome this limitation by incorporating the structure of

the text in the generative and inference processes.

SentenceLDA和LDA区别?

LDA and senLDA differ in that the second assumes a very strong dependence of the latent topics between the words of sentences, whereas the first ssumes independence between the words of documents in general

SentenceLDA和LDA两者对比实验:

We illustrate the advantages of sentenceLDA by comparing it with LDA using both intrinsic (perplexity) and extrinsic (text classification) evaluation tasks on different text collections

20170715204602644.jpg

20170715204224627.jpg

原作者的github的结果:

https://github.com/balikasg/topicModelling/tree/master/senLDA

截取一部分code:import numpy as np, vocabulary_sentenceLayer, string, nltk.data, sys, codecs, json, time

from nltk.tokenize import sent_tokenize

from lda_sentenceLayer import lda_gibbs_sampling1

from sklearn.cross_validation import train_test_split, StratifiedKFold

from nltk.stem import WordNetLemmatizer

from sklearn.utils import shuffle

from functions import *

path2training = sys.argv[1]

training = codecs.open(path2training, 'r', encoding='utf8').read().splitlines()

topics = int(sys.argv[2])

alpha, beta = 0.5 / float(topics), 0.5 / float(topics)

voca_en = vocabulary_sentenceLayer.VocabularySentenceLayer(set(nltk.corpus.stopwords.words('english')), WordNetLemmatizer(), excluds_stopwords=True)

ldaTrainingData = change_raw_2_lda_input(training, voca_en, True)

ldaTrainingData = voca_en.cut_low_freq(ldaTrainingData, 1)

iterations = 201

classificationData, y = load_classification_data(sys.argv[3], sys.argv[4])

classificationData = change_raw_2_lda_input(classificationData, voca_en, False)

classificationData = voca_en.cut_low_freq(classificationData, 1)

final_acc, final_mif, final_perpl, final_ar, final_nmi, final_p, final_r, final_f = [], [], [], [], [], [], [], []

start = time.time()

for j in range(5):

perpl, cnt, acc, mif, ar, nmi, p, r, f = [], 0, [], [], [], [], [], [], []

lda = lda_gibbs_sampling1(K=topics, alpha=alpha, beta=beta, docs= ldaTrainingData, V=voca_en.size())

for i in range(iterations):

lda.inference()

if i % 5 == 0:

print "Iteration:", i, "Perplexity:", lda.perplexity()

features = lda.heldOutPerplexity(classificationData, 3)

print "Held-out:", features[0]

scores = perform_class(features[1], y)

acc.append(scores[0][0])

mif.append(scores[1][0])

perpl.append(features[0])

final_acc.append(acc)

final_mif.append(mif)

final_perpl.append(perpl)

来看看百度开源项目的最终效果,LDA和SentenceLDA的内容展现:

LDA结果:请输入主题编号(0-1999): 105

--------------------------------------------

对话    0.189676

合作    0.0805558

中国    0.0276284

磋商    0.0269797

交流    0.021069

联合    0.0208559

国家    0.0183163

讨论    0.0154165

支持    0.0146714

包括    0.014198

第二列的数值表示词在该主题下的重要程度。

SentenceLDA结果:请输入主题编号(0-1999): 105

--------------------------------------------

浙江    0.0300595

浙江省  0.0290975

宁波    0.0195277

记者    0.0174735

宁波市  0.0132504

长春市  0.0123353

街道    0.0107271

吉林省  0.00954326

金华    0.00772971

公安局  0.00678163

.

四、CopulaLDA

SentenceLDA和CopulaLDA同一作者,可见github:balikasg/topicModelling

没细看,来贴效果好了:

20170715204821023.jpg

20170715204846448.jpg

20170715204855818.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring项目中的Netflix Archaius属性

Archaius基础 Netflix Archaius是用于管理应用程序配置的库。 考虑一个属性文件“ sample.properties”,其中包含一个名为“ myprop”的属性: mypropmyprop_value_default这是使用Archaius加载文件的方式: ConfigurationManager.loadCascad…

linux进程之间传递句柄

参考网上的实现&#xff0c;进行了一点改进&#xff0c;本来想用FIFO实现的&#xff0c;后来发现不行&#xff0c;必须使用系统的sendmsg函数&#xff0c;代码格式有点乱&#xff0c;不过功能可以实现&#xff0c;改天有空整理一下~~ 讲究看哈~ #include <sys/types.h>#i…

php 中间代码,PHP内核中用户函数、内部函数和中间代码的转换

昨天和一朋友在邮件中讨论这样一个问题&#xff1a;zend_internal_function&#xff0c;zend_function&#xff0c;zend_op_array这三种结构是可以相互转化的&#xff0c;这三者的转化是如何进行的呢&#xff1f; 以此文&#xff0c;总结。在函数调用的执行代码中我们会看到这样…

Byteman –用于字节码操纵的瑞士军刀

我正在JBoss的许多社区中工作&#xff0c;有很多有趣的事情要谈论&#xff0c;以至于我自己无法将自己的每一分都缠住。 这就是为什么我非常感谢有机会不时地欢迎客座博客的主要原因。 今天是Jochen Mader&#xff0c;他是以代码为中心的书呆子群的一部分。 目前&#xff0c;他…

最短路径问题matlab作图,[MATLAB基础] matlab最短路径的输出问题,用了递归,但程序出错了,请大虾指点...

matlab最短路径的输出问题,用了递归,但程序出错了,请大虾指点 程序如下function shortestpath(w,p,q)c->;l;f;tsize(w);mt(1,1);azeros(m,m);vw;for k1:mfor i1:mfor j1:mb[w(i,j),w(i,k)w(k,j)];w(i,j)min(b);if w(i,j)~v(i,j)a(i,j)k;%a(i,j)10*a(i,j)k;vw;endendendendw;…

快速浏览JAX-RS请求与方法匹配

在本文中&#xff0c;我们来看一下JAX-RS中与资源方法匹配的HTTP请求 。 它是JAX-RS的最基本功能之一。 通常&#xff0c;使用JAX-RS API的开发人员不会接触&#xff08;或真正不需要知道&#xff09; 匹配过程的细节&#xff0c;请放心&#xff0c;由于我们的RESTful&#xff…

$stat php,php stat函数怎么用

php stat函数用于返回关于文件的信息&#xff0c;其语法是fstat(file)&#xff0c;参数file必需&#xff0c;指规定要检查的文件。php stat函数怎么用&#xff1f;定义和用法stat() 函数返回关于文件的信息。语法fstat(file)参数file必需。规定要检查的文件。说明获取由 file 指…

在Java中调用祖父母方法:您不能

在文章保护的重点中&#xff0c;我详细介绍了“受保护”如何扩展“包私有”访问。 我在那儿写道&#xff1a; 你能做的是 覆盖子类中的方法或 使用关键字super调用parent方法。 通常&#xff0c;这实际上是您可以使用受保护的方法完成的所有操作。 &#xff08;请注意&…

Handler(2)

andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。1)Looper: 一个线程可以产生一个Looper对象&#xff0c;由它来管理此线程里的MessageQueue(消息队列)。 2)Handler: 你可以构造Han…

OSGi服务测试助手:ServiceCollector

OSGi服务对于基于松耦合组件的系统开发非常有用。 但是&#xff0c;松散的耦合可能使得难以识别与悬挂服务引用有关的问题。 因此&#xff0c;我们通常运行集成测试以确保运行时服务组件的可用性。 为了减少此类测试所需的样板&#xff0c;我编写了一个简单的实用程序类来获取…

搭建struts2框架

struts是一个经典的MVC模式拦截器比过滤器拦截的力度更大 搭建struts2框架1.引入lib包 9个(2.3版本的)common-fileupload;common-io;common-lang3;common-logging;freemaker;javassistGA;ognl;struts2-core;xwork-core; 2. struts2.xml3. web.xml将所有的跳转都交给struts2处…

adams与matlab联合仿真天线,雷达天线模型MATLAB与ADAMS联合仿真 实验.doc

雷达天线模型MATLAB与ADAMS联合仿真 实验雷达天线模型MATLAB与ADAMS联合仿真实验1.导入雷达天线机械系统模型启动ADAMS&#xff0c;弹出如图1所示的对话框&#xff0c;选择“Open an existing database”,打开保存雷达天线模型的文件夹X:\antenna_test(注&#xff1a;X表示盘符…

【ACM】nyoj_139_我排第几个_201308062046

我排第几个时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB 难度&#xff1a;3描述 现在有"abcdefghijkl”12个字符&#xff0c;将其所有的排列中按字典序排列&#xff0c;给出任意一种排列&#xff0c;说出这个排列在所有的排列中是第几小的&#xff1f; …

Apache Cassandra和低延迟应用程序

介绍 多年来&#xff0c; Grid Dynamics拥有许多与NoSQL相关的项目&#xff0c;尤其是Apache Cassandra。 在这篇文章中&#xff0c;我们要讨论一个给我们带来挑战的项目&#xff0c;而我们在该项目中试图回答的问题今天也仍然适用。 数字营销和在线广告在2012年很受欢迎&…

php换设备登录逻辑,登录和退出登录的操作逻辑

登录功能的操作逻辑步骤如下&#xff1a;可以分为五个步骤来实现。1、进入页面先判断用户是否已经登录private void isLogin() {//查看本地是否有用户的登录信息SharedPreferences sp this.getActivity().getSharedPreferences("user_info", Context.MODE_PRIVATE);…

Visual studio代码行数统计

Visual studio代码行数统计 Visual Studio中的搜索功能支持正则表达式&#xff08;虽然语法比较诡异&#xff09;&#xff0c;我们完全可以通过正则表达式来遍历整个解决方案从而获得代码行数。 ^:b*[^:b#/].*$ 需要注意&#xff1a;#开头和/开头或者空行都不计入代码量。 如…

在JAX-RS中处理异步请求中的超时

JAX-RS 2.0在客户端和服务器端都支持异步编程范例。 这篇文章重点介绍了使用JAX-RS&#xff08;2.0&#xff09;API在服务器端执行异步REST请求时的超时功能 无需过多介绍&#xff0c;这里是一个快速概述。 为了以异步方式执行方法&#xff0c;您只需 需要指定AsyncResponse接…

strspn php,php返回在字符串中包含 charlist 参数中指定的字符数目的函数strspn()

实例返回在字符串 "Hello world!" 中包含字符 "kHlleo" 的数目&#xff1a;<?php echo strspn("Hello world!","kHlleo");?>定义和用法strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。提示&#xff1a;请使…

Java十大简单性能优化

关于“ web scale ”这个流行词有很多炒作&#xff0c;人们花了很多时间来重新组织他们的应用程序体系结构&#xff0c;以使其系统“规模化”。 但是什么是扩展&#xff0c;我们如何确保可以扩展&#xff1f; 缩放的不同方面 上面提到的炒作主要是关于扩展负载 &#xff0c;即…

C#_获取汉字拼音

using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; namespace Ctr.Common.Tools {/// <summary>/// 汉字转拼音静态类,包括功能全拼和缩写&#xff0c;方法全部是静态的/// </summary>public static cla…