zoukankan      html  css  js  c++  java
  • BTM学习小记

    BTM的原理跟LDA很像,下面是该模型的概率图:

    由该图可以看出来,与LDA的区别在于确定主题分布和词分布后相应地取两个词(而LDA只取一个,即类比常见的骰子说法:先投掷K面的骰子得到主题z,再根据相应的V面骰子,连续投掷两次,得到一对词汇),这俩词叫做biterm(就是在把一个文档分词之后,对这些词的设置一个距离指标,从第I个到第j个词之间两两结对,都可以看作一对biterm).从原文档得到biterm代码如下:

    def build_Biterms(self, sentence):

    """

    获取 document 的 biterms

    :param sentence: word id list sentence 是切词后的每一词的ID 的列表

    :return: biterm list

    """

        win = 15 # 设置窗口大小

        biterms = []

        for i in xrange(len(sentence)-1):

             for j in xrange(i+1, min(i+win+1, len(sentence))):

                  biterms.append(Biterm(int(sentence[i]),int(sentence[j])))

        return biterms

    BTM利用了整个文本集合来估计一个theta,解决了稀疏问题(我们通常有海量数据)。放宽了mixture of unigram中对整个文档必须同属于一个主题z的约束(相当于从整个文档放松到了窗口长度内的两个词),加强了LDA中每个词对应于一个Z的假设(BTM中约束了窗长内的两个词组成一个biterm对应于一个z)。这个假设很接近于人类认知,因为我们知道,通常在较短的一段文本内,topic变化不大。

  • 相关阅读:
    [转载]instanceof和typeof区别
    【转载】DNN架构
    Delphi实现高性能的Socket通讯服务器(完成端口模型IOCP)
    record, packed record和变体记录
    Delphi操作Word的几个知识点
    WinSock学习笔记6:IOCP完成端口模型
    MyEclipse 常用设置和操作方法
    PAIP.一些流氓软件的流氓营销方法.txt
    qq安全使用指南.txt
    海量数据高性能分页
  • 原文地址:https://www.cnblogs.com/kjkj/p/9822888.html
Copyright © 2011-2022 走看看