精华内容
下载资源
问答
  • 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聚相关的词还是很牛的

    展开全文
  • 简单的说,词向量所体现的是语义...所以Word2vec的一些比较精细的应用,LDA是做不了的。比如: 1)计算词的相似度。同样在电子产品这个主题下,“苹果”是更接近于“三星”还是“小米”? 2)词的类比关系:vecto
    简单的说,词向量所体现的是语义(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

    展开全文
  • 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)
    

    在这里插入图片描述

    展开全文
  • kmeans DBSCAN LDA聚类 TSNE对聚类效果进行可视化展示 对代码进行记录,方便以后使用 kmeans聚类代码 from sklearn.cluster import KMeans km_cluster = KMeans(n_clusters=3, max_iter=300, n_init=40,init='k-...

    kmeans DBSCAN LDA聚类 TSNE对聚类效果进行可视化展示

    对代码进行记录,方便以后使用

    kmeans聚类代码

    from sklearn.cluster import KMeans
    km_cluster = KMeans(n_clusters=3, max_iter=300, n_init=40,init='k-means++', n_jobs=-1)
    result = km_cluster.fit_predict(data)#对句子进行聚类时,data是一个二维的nparray,每个内层的nparray代表每个句子的语义向量,示例  data = np.array([[1.12486,-2.1483,0.1482],[-0.1473,-1.2564,3.1452]])
    

    参数备注:
    1)n_clusters:聚类类别数,人为指定
    2)max_iter:迭代次数
    3)n_jobs:进程数量,值为-1时代表线程全开
    4)result:每一个句子的聚类结果标签,数据类型为np.array,假如对句子1,句子2,句子3进行聚类,句子1和句子2是一类,句子3单独是一类,则result的值为[0,0,1]

    DBSCAN聚类代码

    import numpy as np  # 数据结构
    import sklearn.cluster as skc  # 密度聚类
    from sklearn import metrics  # 评估模型
    result = skc.DBSCAN(eps=1.5, min_samples=3).fit(data)#对句子进行聚类时,data是一个二维的nparray,每个内层的nparray代表每个句子的语义向量,示例  data = np.array([[1.12486,-2.1483,0.1482],[-0.1473,-1.2564,3.1452]])
    labels = result.labels_.tolist()
    

    备注:
    1)DBSCAN与kmeans不同的是,Kemans可以预先指定聚类类别,而DBSCAN不可以

    2)labels代表每个句子聚类的类别标签,数据类型为np.array,假如对句子1,句子2,句子3进行聚类,句子1和句子2是一类,句子3单独是一类,则result的值为[0,0,1]

    LDA聚类代码

    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.decomposition import LatentDirichletAllocation
    import jieba
    import numpy as np
    #使用LDA对文档中的多个句子进行聚类
    
    #读文件分词
    with open(filepath,'r') as rf:
        lines = rf.readlines()
    split_words = []
    for line in lines:
        words = jieba.lcut(line)
        split_words.append(' '.join(words))#split_words用于训练LDA模型,其数据格式为列表,详细情况见备注1)
        
    #构造词频向量
    vectorizer = CountVectorizer()
    vec_ft = vectorizer.fit_transform(split_words)#见备注2)
    
    #创建LDA对象
    lda = LatentDirichletAllocation(n_components=3, learning_offset=50, random_state=0,n_jobs=-1,max_iter=1000)
    #训练LDA模型,得到聚类结果
    lda_result = lda.fit_transform(vec_ft)
    

    备注
    1)split_words。如果是对多个句子进行聚类,则列表中的每一个元素为:每个句子分词以后,以空格作为连接符将所有词汇拼接起来,形成一个字符串,以“我喜欢吃苹果”和“今天晴天”两个句子为例,split_words中的数据为[‘我 喜欢 吃 苹果’,‘今天 晴天’],若是对文档进行聚类,则将示例中的句子转换成文档

    2)vec_ft。其数据类型为scipy.sparse.csr.csr_matrix 使用vec_ft.toarray()可得到二维的np.array,其中每一个内层的array代表每一个句子的向量

    3)lda_result。聚类结果,同样是一个二维的np.array,每一个内层的array代表每一个句子分别属于哪一类的概率,将概率大的类别作为该句子所属类别,例如对三个句子进行聚类,且聚类类别为2,lda_result的结果是[[0.1,0.7],[0.4,0.6],[0.2,0.8]],则三个句子的聚类类别标签分别为2,1,1

    TSNE对聚类效果进行可视化展示代码

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.manifold import TSNE
    vec = np.array([0.1457,0.2496,0.3548],[0.1259,0.1473,0.2846],[5.1478,5.2896,6.2484])#见备注1)
    target = np.array([0,0,1])#见备注2)
    
    tsne = TSNE(n_components = 2,init = 'pca',random_state = 0,n_jobs = -1)
    output = tsne.fit_transform(vec)
    plt.rcParam['figure.figsize'] = 20,20#画布大小
    plt.scatter(output[:,0],output[:,1],c=target)
    plt.title('cluster result')
    plt.save(filepath,bbox_inches = 'tight')
    plt.show()
    

    备注:
    1)vec。数据类型为二维的np.array,其中每一个内层的array代表每一个句子的向量,也就是输入到kmeans,DBSCAN,LDA等聚类模型中的向量

    2)target。数据类型为一维的np.array,其中每一个元素为vec中每一个向量所对应的聚类类别。

    展开全文
  • 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 -*- ...
  • 随着互联网与信息技术的发展,大数据分析成为目前热门话题之...的分类、聚类等工作,依赖于对文本中词汇的分析。从文本词汇集中 提取主要的信息是分析文本的基础工作。关键词是文本数据的重要特 征,是分析文本数据的重
  • 2.Word2VecLDA的区别和联系 2.1 主题模型与词嵌入方法 总述: Word2Vec是2013年谷歌提出来目前最为常用的词嵌入模型之一。 Word2Vec是一种浅层的神经网络模型,包含有两种网络结构:CBOW(Continues Bag ...
  • 17.LDA与word2vec区别

    千次阅读 2018-11-21 19:46:41
    LDA涉及到的数据知识不是一般的多,...总的来说LDA与word2vec区别如下: 区别 LDA word2vec 输出 文档-主题概率分布矩阵和主题-词概率分布矩阵 词对应的词向量 训练方法 利用文档中单词的贡献关...
  • (Word2Vec原理可以看这里) ...LDA是基于文档中单词的共现关系来对单词进行主题聚类,或者说是对“文档-单词”矩阵进行分解为“文档-主题”和“主题-单词”。 接下来我们对其区别和联系进行具体分析: Word2Vec生...
  • word2vecLDA的区别

    2020-06-22 01:21:54
    两者本来没有啥关系。但从学习的层次而言,模型关注的...LDA是基于文档中单词的共现关系来对单词进行主题聚类,或者说是对“文档-单词”矩阵进行分解为“文档-主题”和“主题-单词”。 接下来我们对其区别和联系进行.
  • 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也有实现,中文的先做分词处理,然后生成
  • Word2Vec,隐狄利克雷模型(LDA),CBOW,Skip-gram 问题 Word2Vec是如何工作的?它和LDA有什么区别与联系? 分析与解答 CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,如图 1.3(a)所示;而Skip-gr
  • 文本聚类-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代码...
  • Word2vec是目前最常用的词嵌入模型之一。...Word2vec 隐狄利克雷模型(LDA),CBOW,Skip-gram Word2vec是如何工作的? CBOW的目标是根据上下文出现的词语来预测当前词的生成概率: Skip-gram模型是根据当前词来...
  • Word2Vec和Doc2Vec模型

    2019-01-12 23:44:14
    Word2Vec Word2Vec是Google在2013年开源的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram 两种。Word2Vec通过训练,可以把对文本内容的处理简化为K...
  • spark的lda有两个一个是mllib下 一个是ml下的,下面代码是使用ml的 from pyspark import SparkConf, SparkContext,SQLContext ...from pyspark.ml.feature import Word2Vec,CountVectorizer from p...
  • 今天不会讲LDA模型的很多细节和原理,没有满屏的数学公式,只讲一讲LDA模型是个什么东西,简单的原理,用什么技术实现的LDA,以及LDA能做什么开发和LDA在实现中的一些问题。什么是主题对于一篇新闻报道,看到里面讲...
  • 转自:[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型 阅读目录 1. 词向量 2.Distributed representation词向量表示 3.词向量模型 4.word2vec算法思想 5.doc2vec算法...
  • 笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼“深度学习在自然语言领域开始发力 了”。 基于word2vec现在还出现了doc...
  • 关于doc2vec

    2019-01-22 20:15:50
      1.“句向量”简介 ...word2vec提供了高质量的词向量,并在一些任务中表现良好。  关于word2vec的原理可以参考这几篇论文: https://arxiv.org/pdf/1310.4546.pdf https://arxiv.org/pdf/1301.37...
  • [Algorithm &amp; NLP] 文本深度表示模型——word2vec&...词向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突...

空空如也

空空如也

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

lda2vec聚类