精华内容
下载资源
问答
  • 2016-03-21 22:46:09
    简单的说,词向量所体现的是语义(semantic)和语法(syntactic)这些 low-level的信息。而LDA的主题词表现的是更 high-level的文章主题(topic)这一层的信息。

    所以Word2vec的一些比较精细的应用,LDA是做不了的。比如:

    1)计算词的相似度。同样在电子产品这个主题下,“苹果”是更接近于“三星”还是“小米”?

    2)词的类比关系:vector(小米)- vector(苹果)+ vector(乔布斯)近似于 vector(雷军)。

    3)计算文章的相似度。这个LDA也能做但是效果不好。而用词向量,即使在文章topic接近的情况下,计算出的相似度也能体现相同、相似、相关的区别。

    反过来说,想用词向量的聚类去得到topic这一级别的信息也是很难的。很有可能,“苹果”和“小米”被聚到了一类,而“乔布斯”和“雷军”则聚到另一类。

    这种差别,本质上说是因为Word2vec利用的是词与上下文的共现,而LDA利用的是词与文章之间的共现。

    PS. 说起来,拿LDA和doc2vec比较才比较合理啊

    链接:https://www.zhihu.com/question/26680505/answer/34014109

    更多相关内容
  • 基于LDA模型和Doc2vec的学术摘要聚类方法.pdf
  • Word2vecLDA聚类区别

    万次阅读 2016-03-02 17:54:18
    1、首先,Word2vec是词聚类LDA是主题词聚类 2、也许在方法模型上,他们两者是不同的,但是产生的结果从语义上来说,都是相当于近义词的聚类,只不过LDA是基于隐含主题的,WORD2VEC是基于词的上下文的。 3、更...

    1、首先,Word2vec是词聚类,LDA是主题词聚类

    2、也许在方法模型上,他们两者是不同的,但是产生的结果从语义上来说,都是相当于近义词的聚类,只不过LDA是基于隐含主题的,WORD2VEC是基于词的上下文的,或者说LDA关注doc和word的共现,而word2vec真正关注的是word和context的共现

    3、更严谨的说,词向量所体现的是语义(semantic)和语法(syntactic)这些 low-level的信息。而LDA的主题词表现的是更 high-level的文章主题(topic)这一层的信息。比如:
    1)计算词的相似度。同样在电子产品这个主题下,“苹果”是更接近于“三星”还是“小米”?
    2)词的类比关系:vector(小米)- vector(苹果)+ vector(乔布斯)近似于 vector(雷军)。
    3)计算文章的相似度。这个LDA也能做但是效果不好。而用词向量,即使在文章topic接近的情况下,计算出的相似度也能体现相同、相似、相关的区别。

    反过来说,想用词向量的聚类去得到topic这一级别的信息也是很难的。很有可能,“苹果”和“小米”被聚到了一类,而“乔布斯”和“雷军”则聚到另一类。
    这种差别,本质上说是因为Word2vec利用的是词与上下文的共现,而LDA利用的是词与文章之间的共现。
    PS. 说起来,拿LDA和doc2vec比较才比较合理啊~~
    4、word2vec+kmeans 和lda

    word2vec+kmeans是先用word2vec把词表示为向量,然后用kmeans聚类,聚类的结果 应该是挺好的,但是和lda比,多了一些无用词的聚类,比如,我拿技术博客做预料,用lda聚类,聚出来的  都是技术相关的,因为lda是有个主题提取的过程;

    而word2vec除了聚出一些技术的类,比如

    结点
    根节点
    此树
    结点数目
    空树
    子树中
    子树结
    叶子结点
    子树
    历根结
    叶子
    前趋
    树上
    第一棵
    历树
    二叉树
    左子结
    这棵
    子树根
    一棵
    子树递
    前驱
    任一结
    孩子
    节点均
    父节点
    rightchild
    后继结
    树种
    子结点
    叶结点
    右子树
    三叉
    左子树
    这颗
    整棵
    兄弟结点
    叶结
    leftchild
    满二叉
    满二叉树
    后继
    整棵树
    左子
    叶子节点
    rchild
    孩子结点
    树节点


    fileinputstream
    newfileinputstream
    newfileoutputstream
    fileoutputstream
    向文件写入
    输入流
    readchar
    inputstream
    fos
    outputstream
    printstream
    readbyte
    readstring
    filereader
    printwriter
    writeto
    bufferreader
    writer
    reader
    readlong
    bufferedoutputstream
    bufferedinputstream
    bufferwriter
    stringbufferinputstream
    outstream
    pushbackinputstream
    instream
    filewriter
    raf
    readline
    datastream
    stringreader
    bytearrayinputstream
    writelines
    getchannel
    dataoutputstream
    filterreader
    stringwriter
    从文件
    readbytes
    datainputstream
    bufferedreader
    bytearrayoutputstream
    streamwriter
    writebytes
    randomaccessfile

    还聚出非技术类的

    算出
    加起来
    求出
    之和
    算出来
    就求
    所求
    求得
    易得
    减去
    易知
    无解
    可得
    题中
    上数
    则有
    记为
    数了
    本题
    数里
    可求
    找出
    18次
    种数
    乘起来
    连加
    数算
    求异
    规律
    乘积
    算下
    算过
    凑出
    二倍
    理得
    是多少
    推求
    数对
    数模
    0数
    乘了
    数遍
    奇偶
    累加
    多解
    数出
    多1个推求 



    年度
    五天
    月初
    上个月
    7月
    12月
    09月
    月底
    月末
    一个月
    这一天
    05月
    31日
    几月
    一年
    4月
    10年
    5日
    11日
    6日
    当天
    15日
    那天
    27日
    第一年
    14日
    国庆节
    上月
    每年
    13日
    2013年
    28日
    7日
    25号
    5月
    日子
    今天是
    4年
    8日


    开始我是不太理解,看了上面的原理解释,瞬间释怀,不得不说 word2vec聚相关的词还是很牛的

    展开全文
  • 基于Word2VecLDA主题模型的Web服务聚类方法.pdf
  • word2vec wpt = nltk . WordPunctTokenizer ( ) tokenized_corpus = [ wpt . tokenize ( document ) for document in norm_corpus ] feature_size = 10 window_context = 10 min_word_count ...

    接上一篇<sklearn文本特征预处理1: WordPunctTokenizer, CountVectorizer, TF-IDF>

    五. Similarity特征

    # 余弦相似度
    from sklearn.metrics.pairwise import cosine_similarity
    
    similarity_matrix = cosine_similarity(tv_matrix)
    similarity_df = pd.DataFrame(similarity_matrix)
    similarity_df
    

    在这里插入图片描述

    六. 聚类特征

    from sklearn.cluster import KMeans
    
    km = KMeans(n_clusters = 2)
    km.fit_transform(similarity_df)
    cluster_labels = km.labels_
    cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])
    pd.concat([corpus_df, cluster_labels], axis =1)
    

    在这里插入图片描述

    七. (降维)主题模型LDA

    from sklearn.decomposition import LatentDirichletAllocation
    
    lda = LatentDirichletAllocation(n_components=2, max_iter=100, random_state=42)
    dt_matrix = lda.fit_transform(tv_matrix)
    features = pd.DataFrame(dt_matrix, columns = ['T1', 'T2'])
    features
    

    在这里插入图片描述

    八. 词嵌入模型

    from gensim.models import word2vec
    
    wpt = nltk.WordPunctTokenizer()
    tokenized_corpus = [wpt.tokenize(document) for document in norm_corpus]
    
    feature_size = 10
    window_context = 10
    min_word_count = 1
    sample = 1e-3
    
    w2v_model=word2vec.Word2Vec(tokenized_corpus, size=feature_size,window=window_context,
                               min_count = min_word_count, sample = sample)
    w2v_model.wv['sky']
    

    在这里插入图片描述

    tokenized_corpus
    

    在这里插入图片描述

    def average_word_vectors(words, model, vocabulary, num_features):
        feature_vector = np.zeros((num_features,), dtype='float64')
        nwords = 0.
        
        for word in words:
            if word in vocabulary:
                nwords = nwords + 1.
                feature_vector = np.add(feature_vector, model[word])
        if nwords:
            feature_vector = np.divide(feature_vector, nwords) # np.divide(数列a,数列b): 数列a除以数列b
        return feature_vector
    
    def averaged_word_vectorizer(corpus, model, num_features):
        vocabulary = set(model.wv.index2word)
        features=[average_word_vectors(tokenized_sentense,model,vocabulary,num_features) for tokenized_sentense in corpus]
        return np.array(features)
    
    w2v_feature_array=averaged_word_vectorizer(corpus=tokenized_corpus,model=w2v_model,num_features=feature_size)
    pd.DataFrame(w2v_feature_array)
    

    在这里插入图片描述

    展开全文
  • lda+word2vec 主题模型结合深度学习

    万次阅读 多人点赞 2017-11-20 21:32:19
    最近硕士毕业小论文想写LDA结合深度学习的,论文看来看去,看的头大,也没什么好的创新点,杂七杂八小的创新带你想了一大堆,要么自己给否了,要么后来在看论文的时候发现写过了(那么LOW的点也能写),想写个差不多...

             最近硕士毕业小论文想写LDA结合深度学习的,论文看来看去,看的头大,也没什么好的创新点,杂七杂八小的创新带你想了一大堆,要么自己给否了,要么后来在看论文的时候发现写过了(那么LOW的点也能写),想写个差不多的’有价值意义的创新点,结果想来想去想着头大,就继续看论文。

             言归正传,看了大几十篇外文文献了(外文的闻起来就厉害,实际上好的也没几个),结合点就一两个有价值的,推荐几篇有创新点的论文《A Hybrid Document Feature Extraction Method Using Latent Dirichlet Allocation andWord2Vec》;《 Improving topic models with latent featureword representations》;《Topic2Vec:learning distributed representations of topics》,别的大多在应用层面,创新的遇见的比较少,当然要是有好的论文求推荐(脑海里一万个感谢)。

            这里实现了《AHybrid Document Feature Extraction Method Using Latent Dirichlet Allocation andWord2Vec》里面的方法,这里简要说下他的思路:

    1、  选取主题T的前N个词作为主题词

    2、对主题词做归一化处理,即,计算每个词w占主题的权重

    3、将主题映射到word2vec空间上,即:w在ord2vec空间的坐标*w占主题T的权重

    4、计算文档在word2vec空间的坐标:每个词在word2vec空间下的坐标相加,再除以总词数

    5、计算每篇文档与各个主题的距离doc_t

    6、这里我用KNN分类器,做分类模型

    7、计算测试文档与各个主题的距离,计算过程如4、5,将得到的矩阵带入模型中预测

           上代码了:

     

    from gensim import models,corpora,similarities
    from sklearn.cross_validation import train_test_split
    from gensim.models.doc2vec import TaggedDocument,Doc2Vec
    from gensim.models import LdaModel
    import numpy as np
    import os
    import random
    from sklearn.neighbors import KNeighborsClassifier 
    from gensim.models import word2vec
    import sklearn.metrics as metrics 
    doc=[] 
    label_c=[]
    ii=0
    for x in os.listdir("D:\Documents\data\zhaiyao\\1\\"):
        print x
        for line in open("D:\Documents\data\zhaiyao\\1\\"+x,"r").readlines():
            doc.append(line.strip().split("  "))
            label_c.append(ii)
        ii+=1
    size_word=100
    size_lda=200
    print "训练词向量"
    model_wv=word2vec.Word2Vec(doc, size=size_word,workers=2,min_count=1,iter=10)#size维度,min_count最少出现次数
    x_train_1, x_test_1, y_train_1, y_test_1 = train_test_split(doc, label_c, test_size=0.2)
    dictionary = corpora.Dictionary(doc)
    corpus = [ dictionary.doc2bow(text) for text in x_train_1 ]
    print "训练LDA"
    lda = LdaModel(corpus=corpus,id2word=dictionary, num_topics=size_lda)
    #lda.get_document_topics
    for doc_num in x_test_1:
        doc_bow=dictionary.doc2bow(doc_num)#将训练集转
        doc_lda = lda[doc_bow]
        print "输出新文档的主题分布",doc_lda#输出新文档的主题分布
        break
    for topic in doc_lda:
        print "该主题站的比例","%s\t%f\n"%(lda.print_topic(topic[0]), topic[1])
    print lda.get_topic_terms(0, topn=10)#获取某个主题0下的前topn个词语,越相关的在前面 
    aa=[x[0] for x in lda.get_topic_terms(0, topn=10)]
    for it in aa:
        print "第%d个主题的第%d个主题词"%(0,it), dictionary[it]
    #在整个样本下,某个词属于某些主题的可能性;获取某个词最有可能的主题列表,word_id为词id值,minimum_probability为阈值;
    print  lda.get_term_topics(0, minimum_probability=0.05)
    #per_word_topics为True时还得到文档中每个词属于的主题列表,minimum_probability确定主题的阈值,minimum_phi_value判断词属于主题的阈值
    print lda.get_document_topics(corpus[0], minimum_probability=None, minimum_phi_value=0.1, per_word_topics=False)
    
    
    print "映射主题到word2vec空间"
    the_id=[]#每个主题的前10个词的ID
    the_vl=[]#每个主题的前10个词的value
    the_w =[]#每个主题的前10个词的占权重
    print "计算主题内个词的权重"
    for x in range(size_lda):
        the_id.append([xx[0] for xx in lda.get_topic_terms(x,topn=5)])
        the_sum=sum([xx[1] for xx in lda.get_topic_terms(x,topn=5)])
        the_w.append([xx[1]/the_sum for xx in lda.get_topic_terms(x,topn=5)])
        #print x,"主题",the_sum,the_w
    print "开始映射到坐标"
    m=0
    the_wv=np.zeros([size_lda,size_word])#每个主题映射到word2vec,主题数,word2vec
    #主题下每个词在word2vec下坐标加权求和
    for it in the_id:
        n=0
        for it_id in it:
            word_t=dictionary[it_id]
            #print word_t+"**",np.shape(model_wv[word_t]),the_w[m][n]
            the_wv[m]+=[x_word*the_w[m][n] for x_word in model_wv[word_t.encode("utf-8")]]
            n+=1
        m+=1
    doc_word=np.zeros([len(x_train_1),size_word])
    print "映射训练文档到word2vec"
    m=0
    for each_doc in x_train_1:
        for each_word in each_doc:
            #print each_word
            doc_word[m]+=model_wv[each_word]
        n=0
        for doc_word_each in doc_word[m]:
            doc_word[m][n]=doc_word[m][n]/len(doc_word[m])
            n+=1
        m+=1
    print "计算训练集文档与个主题间距"
    def destince(a,b):#计算a,b间欧氏距离距离
        dt=0
        for each_dt in range(len(a)):
            dt+=(a[each_dt]-b[each_dt])*(a[each_dt]-b[each_dt])
        return np.sqrt(dt)
    doc_t=np.zeros([len(doc_word),size_lda])
    m=0
    for each_d in doc_word:
        n=0
        for each_t in the_wv:
            doc_t[m][n]=destince(each_d,each_t)
            n+=1
        m+=1
    doc_word_test=np.zeros([len(x_test_1),size_word])
    print "映射测试文档到word2vec"
    m=0
    for each_doc in x_test_1:
        for each_word in each_doc:
            #print each_word
            doc_word_test[m]+=model_wv[each_word]
        n=0
        for doc_word_each in doc_word_test[m]:
            doc_word_test[m][n]=doc_word_test[m][n]/size_word
            n+=1
        m+=1
    print "计算测试集文档与个主题间距"
    doc_t_test=np.zeros([len(doc_word_test),size_lda])
    m=0
    for each_d in doc_word_test:
        n=0
        for each_t in the_wv:
            doc_t_test[m][n]=destince(each_d,each_t)
            n+=1
        m+=1
    
    KN =KNeighborsClassifier(n_neighbors=10, algorithm='brute', metric='cosine') 
    KN.fit(doc_t,y_train_1) 
    test_labels_KN=KN.predict(doc_t_test)
    print "准确率",metrics.accuracy_score(test_labels_KN,y_test_1)#准确率
    print "召回率",confusion_matrix(test_labels_KN,y_test_1)#召回率

    过程打印的比较多,我就捡最后的贴下:

     

     

    预测结果
    训练集大小 (5932L, 100L)
    准确率 0.433962264151
    召回率 [[428  83  63 389]
     [ 11   0   2   9]
     [ 14   0   2  25]
     [193  25  26 214]]
    2017-11-20  16:15:07,Mon doc2vec.py INFO precomputing L2-norms of doc weight vectors
    相似度计算 0.927223719677

     

    还没有调参什么的,笔记本不咋地懒得等,有条件了多运行几次,语料再大些,效果肯定好.

    这里也可以用doc2vec代替word2vec ,效果更好

    呃,doc2vec 模型就是

    model

    ,再上一篇博客里有源代码,直接运行就行,我这里懒得加了

     

    代码如下:

     

    #doc2vec +lda
    print "开始映射到坐标"
    m=0
    the_wv=np.zeros([size_lda,size_doc2])#
    #主题下每个词在doc2vec下坐标加权求和
    for it in the_id:
        n=0
        for it_id in it:
            word_t=dictionary[it_id]
            #print word_t+"**",np.shape(model[word_t.encode("utf-8")]),the_w[m][n]
            the_wv[m]+=[x_word*the_w[m][n] for x_word in model[word_t.encode("utf-8")]]
            n+=1
        m+=1
    doc_word=np.zeros([len(x_train_1),size_word])
    print "映射训练文档到doc2vec"
    m=0
    for each_doc in x_train_1:
        for each_word in each_doc:
            #print each_word
            doc_word[m]+=model[each_word]
        n=0
        for doc_word_each in doc_word[m]:
            doc_word[m][n]=doc_word[m][n]/len(doc_word[m])
            n+=1
        m+=1
    print "计算训练集文档与个主题间距"
    def destince(a,b):#计算a,b间欧氏距离距离
        dt=0
        for each_dt in range(len(a)):
            dt+=(a[each_dt]-b[each_dt])*(a[each_dt]-b[each_dt])
        return np.sqrt(dt)
    doc_t=np.zeros([len(doc_word),size_lda])
    m=0
    for each_d in doc_word:
        n=0
        for each_t in the_wv:
            doc_t[m][n]=destince(each_d,each_t)
            n+=1
        m+=1
    doc_word_test=np.zeros([len(x_test_1),size_word])
    print "映射测试文档到doc2vec"
    m=0
    for each_doc in x_test_1:
        for each_word in each_doc:
            #print each_word
            doc_word_test[m]+=model[each_word]
        n=0
        for doc_word_each in doc_word_test[m]:
            doc_word_test[m][n]=doc_word_test[m][n]/size_word
            n+=1
        m+=1
    print "计算测试集文档与个主题间距"
    doc_t_test=np.zeros([len(doc_word_test),size_lda])
    m=0
    for each_d in doc_word_test:
        n=0
        for each_t in the_wv:
            doc_t_test[m][n]=destince(each_d,each_t)
            n+=1
        m+=1
    
    KN =KNeighborsClassifier(n_neighbors=10, algorithm='brute', metric='cosine') 
    KN.fit(doc_t,y_train_1) 
    test_labels_KN=KN.predict(doc_t_test)
    print "准确率",metrics.accuracy_score(test_labels_KN,y_test_1)#准确率
    print "召回率",confusion_matrix(test_labels_KN,y_test_1)#召回率
    pret=0.0
    for doc_num in range(len(x_test_1)):
        inferred_vector = model.infer_vector(x_test_1[doc_num])
        sims = model.docvecs.most_similar([inferred_vector], topn=3)
        pre=[to[0] for to in sims ]
        sims_doc=[label_c[ind] for ind in pre]
        label_=dict([(sims_doc.count(i),i) for i in sims_doc])
        if y_test_1[doc_num]==label_[max(label_.keys())]:#sims是一个tuples,(index_of_document, similarity)
            pret+=1
    print "相似度计算",pret/len(x_test)

     

     

     

     

     

    展开全文
  • 随着互联网与信息技术的发展,大数据分析成为目前热门话题之...的分类、聚类等工作,依赖于对文本中词汇的分析。从文本词汇集中 提取主要的信息是分析文本的基础工作。关键词是文本数据的重要特 征,是分析文本数据的重
  • 文本聚类-LDA

    2019-07-17 16:00:06
    :Python,实现模型,LDA,Dynamic Topic Model,Dynamic Influence Model,HDP,LSI,Random Projections,深度学习的word2vec,paragraph2vec。 官网地址: http://radimrehurek.com/gensim/index.html   github代码...
  • LDA(二) 文本聚类

    千次阅读 2018-12-17 14:56:33
    一、算法原理:使用Kmeans...2. 构造词典,corpus_tfidf, 最后构造 corpus_lda 3. Kmeans聚类,pred 是对语料的聚类结果列表。 pred = kmean.predict(tfidf_vec) #!/usr/bin/python # -*- coding:utf8 -*- ...
  • 接下来我们对其区别和联系进行具体分析: Word2Vec生成的词向量,由于词向量信息的丰富,不同词向量之间会存在一定的联系,那么其实也可以被理解为一种聚类,那么这样就和LDA的主题词聚类对应上了。 Word2Vec是基于...
  • kmeans DBSCAN LDA聚类 TSNE对聚类效果进行可视化展示 对代码进行记录,方便以后使用 kmeans聚类代码 from sklearn.cluster import KMeans km_cluster = KMeans(n_clusters=3, max_iter=300, n_init=40,init='k-...
  • Word2vec是目前最常用的词嵌入模型之一。...Word2vec 隐狄利克雷模型(LDA),CBOW,Skip-gram Word2vec是如何工作的? CBOW的目标是根据上下文出现的词语来预测当前词的生成概率: Skip-gram模型是根据当前词来...
  • 利用Python,结合LDA + Word2Vec + Pagerank 实现关键词的挖掘。先用 LDA 方法初步选择出主题及其词分布,接着将每个主题下的词表示为词向量,用相似性表示词与词之间的权重,最后用 TextRank 方法对于主题下的...
  • word2vecLDA的区别

    2020-06-22 01:21:54
    两者本来没有啥关系。但从学习的层次而言,模型关注的...LDA是基于文档中单词的共现关系来对单词进行主题聚类,或者说是对“文档-单词”矩阵进行分解为“文档-主题”和“主题-单词”。 接下来我们对其区别和联系进行.
  • 17.LDA与word2vec区别

    千次阅读 2018-11-21 19:46:41
    LDA涉及到的数据知识不是一般的多,...总的来说LDA与word2vec区别如下: 区别 LDA word2vec 输出 文档-主题概率分布矩阵和主题-词概率分布矩阵 词对应的词向量 训练方法 利用文档中单词的贡献关...
  • 文中介绍了四种最流行的技术,用于探讨主题建模,它们分别是:LSA、pLSA、LDA,以及最新的、基于深度学习的 lda2vec。 在自然语言理解任务中,我们可以通过一系列的层次来提取含义——从单词、句子、段落,...
  • 笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼“深度学习在自然语言领域开始发力 了”。 基于word2vec现在还出现了doc...
  • 2.Word2VecLDA的区别和联系 2.1 主题模型与词嵌入方法 总述: Word2Vec是2013年谷歌提出来目前最为常用的词嵌入模型之一。 Word2Vec是一种浅层的神经网络模型,包含有两种网络结构:CBOW(Continues Bag ...
  • LDA主题模型、Word2Vec

    万次阅读 2017-05-07 19:46:48
    原文地址:...LDA的出现是为了解决类似TFIDF只能从词频衡量文档相似度,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的情形: 乔布斯、苹果。LDA通常用
  • 文本分析之TFIDF/LDA/Word2vec实践

    万次阅读 多人点赞 2016-02-03 10:35:44
    写在最前面的话,最好的学习材料是官方文档及API: ...  以下内空有部分是出自官方文档。   使用TFIDF/LDA来对中文文档做主题分类,TFIDF scikit-learn也有实现,中文的先做分词处理,然后生成
  • 基于LDA模型的文本聚类研究[J] . 情报科学, 2015, 33(1):63-68. (Wang Peng, Gao Cheng, Chen Xiao-mei. Research on LDA model based on text clustering[J] . Information Science, 2015, 33(1):63-68. ) [17] ...
  • 目录论文标题引言标题论文学术结构1、相关研究综述(先前学者的研究)2、研究方法3、基于 Word2Vec 和 SVM 的微博情感演化分析4、基于 Word2Vec 词相似度的舆情主体对象情感演化分析5、结论与展望(摘自原文,原文讲...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,739
精华内容 695
关键字:

lda2vec聚类