• LDA(Latent Dirichlet Allocation)


    LDA包含隐藏的主题。但是我们为什么要用隐藏主题,自己定义主题不好吗?有两方面原因:

    1.我们不知道自己的定义的主题是否符合规模。如果对每个单词都定以个主题,粒度就太细,没有多样性。如果以大方向(如NBA)为一个主题,那么就太大太空,用户很难一下找到自己喜欢的东西。

    2.基于上述理由,我们就想:那么定义个适中的主题粒度不就行了?但是,人怎么定义这些不大不小粒度的主题?而且有些抽象主题是融合了人类主观上的多个主题的加权联合主题,人类很难进行语言描述(比如可能是个50%的苹果+50%的科技的联合抽象主题)。就算我们给定了主题的数量(比如1000),人很难合理恰当地分出1000个主题来。

    而LDA就能对给定的主题数量,学习出恰当地隐藏主题。虽然说主题是隐藏的,但是我们可以根据主题-单词分布,找出概率较高的单词,给这个主题加一些标签,相当于对这个主题进行了可视化。

    重要数学公式:

    伽马函数:

    二项分布:

    beta分布:

    Beta分布的期望:

     Dirichlet分布的期望:

     多项式分布:

     

    dirichlet distribution:

    LDA的应用:

    (1)Peacock:大规模主题模型及其在腾讯业务中的应用

    (2)文档匹配

    就是给你两篇文档,你计算出它门的文档-主题概率分布,然后计算距离:

    (3)自动文档加标签

    计算文档的文档-主题概率分布,找出最大概率的主题,从该概率主题中找出概率最大的几个单词,就是该文档的标签

    (4)文档推荐系统

    分为两种方法:

    (a)收集用户喜欢的文档,对文档-topic矩阵按列求和,得到各个topic的权重,然后用这个权重点乘上每个文档的文档-topic向量,得到对这篇文档的打分,选择打分高的文档推荐给用户。可能单个用户喜欢的文档较少,需要把用户分组,增加文档数。

    (b)上面的那个方法不便于动态更新,这里举个可以动态更新的方法。首先初始化用户对各个topic的喜爱程度为0,然后每当用户浏览一篇文档,计算得到文档主要的几个topic,然后在把用户喜爱的topic向量中相应的值加1。这样,我们就存储好了用户对各个topic的喜爱程度,并且能够不断更新。推荐的时候可以按照上一条方法。

    (5)主题排序

    主题排序可以算是热门主题推荐。如果一个topic是随机的,那么它在每个文档中出现的概率会差不多,而且每个词出现在该主题的概率也差不多,所以可以计算主题-文档分布和主题-单词分布和平均分布之间的欧几里得距离,然后对两个距离加权求和。距离越近说明主题越没有特色。

    (6)单词排序

    原理和上条一样,可以得到特色鲜明的词语。主要应用场景是:我们想给用户推荐关键词,那么像"我""你"这种词就没有特色,在排序中会被排在比较靠后的位置,我们更想推荐更有特色的词,比如当前实时的关键词,那么排序靠前的词更符合要求。这里我们主要计算单词-主题分布和平均分布的距离,不考虑单词-文档分布和平局分布的距离。

    (7)word embedding

    把单词表示为单词-topic分布,也就是每个单词可以表示为给定单词上topic概率分布的向量。纯属脑洞。

  • 相关阅读:
    如何在一台主机上管理自己的多个git repository
    Linux deepin 中Jetbrain Idea等软件中文显示异常
    使用openmp进行并行编程
    使用pthread进行编程
    使用openmp进行共享内存编程
    并行与分布式计算之并行硬件与并行软件
    算法笔记刷题5(PAT A1025)
    算法笔记刷题4(PAT B1009)
    算法笔记刷题3(codeup 5901)
    算法笔记刷题2(codeup 1928)
  • 原文地址:https://www.cnblogs.com/huangshiyu13/p/6148217.html
Copyright © 2020-2023  润新知