01 主题模型 - 大纲
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01 主题模型 - 大纲相关的知识,希望对你有一定的参考价值。
参考技术A主题模型 是机器语言在自然语言处理中的一个应用,主要做的是无监督的任务。
一般情况下,如果我们拿到一篇文章,这篇文章是无标记的文章。我希望通过机器学习的相关算法,帮助我们得到文章的分类结果。这是我们的初衷。
之前提到过,在传统的聚类算法中,当我们的数据量足够大、特征非常多的时候, 我们的距离度量公式就相对得失去了某种意义。即高维的数据会面临维度爆炸的问题,高维空间里边边角角里的数据之间的距离就没有什么意思了。如果距离的度量失效,那么聚类算法的结果就会非常差。
因此,传统的无监督的算法在处理文本分类的时候就起不到很好的作用了。因为文本分类在特征处理的时候我们会使用词袋法和TF-IDF,这些方法基于我们的语料库生成一个当前文章的词向量,即根据单词在文章中出现的频率/频数,来决定词向量中每一个元素的大小。
相对而来,生成的词向量是比较稀疏的,因为一篇文章中不太可能包含语料库中的所有词组。这种情况下怎么办呢? 我们引入了主题模型来解决这种距离度量失效的情况。 相对来说,这个结果可能会稍微的好一些。
但目前业界中,对主题模型的争议也比较大。很多人也认为主题模型的效果不太好。或者可以这么理解:模型再好,不如语料好。即, 优质的语料可以帮助提高文章分类的效果,不管你用的是什么模型。
根据 LSA模型 ,引申出了一个基于概率的模型PLSA, PLSA模型 本质上是一个生成式模型。
之前在聊统计学的时候,我们认为 统计学 是分两个学派的:
1、传统统计学的频率派;
2、贝叶斯学派。
实际上 频率派 在传统统计学中,我们认为其少了一个先验条件。
而 贝叶斯 认为世界上任何一件事情的发生都是由之前的某些事情来决定的。
所以贝叶斯要考虑很多先验条件。即 P(A|B) = P(A)×P(B|A)/P(B); 贝叶斯考虑A事件发生概率前,先要考虑其后验条件B;
LDA模型 是基于PLSA这个模型,在加入了一些先验的条件后得到的一个主题模型。
传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。
举个例子,有两个句子分别如下:
“乔布斯离我们而去了。”
“苹果价格会不会降?
实际上有生活常识的人都知道,一个公司的创始人去世后,意味着股价肯定会跌。所以上面两句话本质上在说苹果公司的事情,但这两句话中没有任何一个词是一样的。如果我们用传统的词袋法去分析,我们会发现两篇文章的相似度是0。 这种情况下我们得考虑主题模型。
主题模型 (Topic Model)是用来在一系列文档中发现 抽象主题 的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一定存在一些特定词语会出现的比较频繁。比方说,如果现在一篇文章是在讲苹果公司的,那么“乔布斯”和“IPhone”等词语出现的频率会更高一些;如果现在一篇文章是在描述微软公司的,那么“Windows”和“Microsoft”等词语出现的频率会更高一些;但真实情况下,一篇文章中通常包含多种主题,而且每个主题所占的比例各不相同,比如一篇文章中10%和苹果公司有关,90%和微软公司有关,那么和微软有关的关键字出现的次数应该是苹果关键字出现次数的9倍。
主题模型就是一种自动分析每个文档,统计文档内词语,根据统计的信息判断当前文档包含哪些主题以及各个主题所占比例各为多少。
主题模型是对文本中隐含主题的一种建模方法,每个主题其实是词表上单词的概率分布;
主题模型是一种生成模型,一篇文章中每个词都是通过“以一定概率选择某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的;
模拟一个自由撰稿人的写作思路:
1、作者为写一篇文章构思了很多主题→以72%的概率选中了“苹果公司”为主题写文章→以0.23%的概率以“篮球”这个词开头写这篇文章。→以87%的概率以“Iphone”这个词为第二段的开头。
2、作者为写一篇文章构思了很多主题→以5%的概率选中了“篮球”为主题写文章→以90%的概率以“某个球星”这个词开头写这篇文章。→以0.035%的概率以“Iphone”这个词为第二段的开头。
分析 以我们对社会的认知,我们知道当以苹果公司为主题时写的文章,Iphone这个词出现的概率,会比以篮球为主题写文章时出现的概率高很多。反之在以篮球为主题写文章时,Iphone这个词可能就压根不会出现。
我们想对当前文章生成一个主题的时候,我们会从文章库中进行寻找。比如现在是NBA的休赛期,我们认为在新闻发布的文章库中,NBA的新闻出现的比较少。而当苹果开新的发布会时,我们认为新闻文章库中,苹果公司主题的文章会变多。
本质上我们刚刚构建的两个 自由撰稿人的写作思路 是一个贝叶斯网络。
结合上述这些基本概念我们来看下面的公式:
分析公式:
首先思考:P(词组,主题,文章) = P(w,t,d) 的联合概率如何求?
主题模型 克服了传统信息检索中文档相似度计算方法的缺点,并且能够在 海量的数据中找出文字间的语义主题 。主题模型在自然语言和给予文本的搜索上起到了重要的作用。
怎样才能生成主题?对文章的主题应该怎么分析?这是主题模型要解决的问题。
02 主题模型 - SVD矩阵分解、LSA模型
第十九篇:主题建模Topic Modelling
目录
概率 LSA(Latent Semantic Analysis)潜在语义分析
Latent Dirichlet Allocation潜在狄利克雷分配
理解文本
• 英文维基百科:600 万篇文章
• Twitter:每天 5 亿条推文
• 纽约时报:1500 万篇文章
• arXiv:100 万篇文章
• 如果我们想了解有关这些文档集的一些信息,我们可以做什么?
问题
• 维基百科上不太受欢迎的主题是什么?
• 过去一个月 Twitter 上的主要趋势是什么?
• 从 1900 年代到 2000 年代,《纽约时报》的主题/话题是如何随着时间演变的?
• 有哪些有影响的研究领域?
救援主题模型
• 主题模型学习文档集合中常见的、重叠的主题
• 无监督模型
‣ 无标签; 输入只是文件!
• 主题模型的输出是什么?
‣ 主题:每个主题与单词列表相关联
‣ 主题分配:每个文档关联一个主题列表
主题是什么样的?
• 单词列表
• 集体描述一个概念或主题
• 主题词通常出现在语料库中的同一组文档中
主题模型的应用?
• 个性化广告
• 搜索引擎
• 发现多义词的含义
• 词性标注
大纲
• 主题模型简史
• 潜在狄利克雷分配
• 评估
主题模型简史
之前在第九篇文章中,讲过SVD分解,建议先看一下
其中A 是V*D的,V是单词词表,D是文章
分解后的U代表着词嵌入。
U 是V*m的,我们需要去截断成V*k的,对应Σ就变成k*k,V转置就变成k*D.
问题
• U 和 VT 中的正值和负值
• 难以解释
概率 LSA(Latent Semantic Analysis)潜在语义分析
• 基于概率模型
P(w,d):单词和文档的联合概率
P(w|t):主题词分布
P(t|d):文档的主题分布
T:主题数
问题
• 不再有负值!
• PLSA 可以学习训练语料库中文档的主题和主题分配
• 但无法推断新文档的主题分布
• PLSA 需要针对新文件进行再培训
Latent Dirichlet Allocation潜在狄利克雷分配
• 在文档主题和主题词分布之前引入
• 完全生成:经过训练的LDA 模型可以推断未见文档的主题!
• LDA 是 PLSA 的贝叶斯版本
潜在狄利克雷分配
• 核心理念:假设每个文档都包含多个主题
• 但主题结构是隐藏的(潜在的)
• LDA 根据观察到的单词和文档推断主题结构
• LDA 生成文档的软集群(基于主题重叠),而不是硬集群
• 给定一个经过训练的 LDA 模型,它可以推断新文档的主题(不是训练数据的一部分)
输入
• 文档集合
• 词袋
• 良好的预处理实践:
‣ 移除停用词
‣ 去除低频和高频词类型
‣ 词形还原
输出
• 主题:每个主题的词分布
• 主题分配:在每个文档中的主题分布
学习
• 我们如何学习潜在主题?
• 两个主要的算法系列:
‣ 变分方法
‣ 基于采样的方法
采样方法(吉布斯)
1. 给文档中的所有token随机分配topic
2.根据分配收集topic-word和document-topic共现统计
用 β (=0.01) 和 α (=0.1) 先验初始化共现矩阵
3. 遍历语料库中的每个单词标记并采样一个新主题:
需要在采样前取消分配当前主题分配并更新共现矩阵
=
4.转到步骤2并重复直到收敛
我们什么时候停止?
• 训练直到收敛
• 收敛 = 训练集的模型概率变得稳定
• 如何计算模型概率?
‣ m = #word tokens
超参数
• T:主题数
低 T (<10):广泛的主题
High T (100+):细粒度的、特定的主题
• β:主题词分布的先验
• α:文档主题分布的先验
• 类似于 N-gram LM 中的 add-k 平滑中的 k
• 初始化共生矩阵的伪计数
• 高先验值 → 更平坦的分布
‣ 非常大的值会导致均匀分布
• 低先验值 → 峰值分布
• β:通常很小 (< 0.01)
‣ 词汇量大,但我们希望每个主题都专注于特定主题
• α:通常更大 (> 0.1)
‣ 文档中的多个主题
评估
如何评估主题模型?
• 无监督学习 → 无标签
• 内在评估:
‣ 模拟 logprob / 测试文档的困惑度
困惑度相关的问题
• 更多主题 = 更好(更低)的困惑
• 更少的词汇量 = 更好的困惑度
‣ 不同语料库或不同标记化/预处理方法的困惑度不可比
• 与人类对主题质量的感知无关
• 外部评估的方法:
‣ 基于下游任务评估主题模型
话题连贯
• 更好的内在评估方法
• 衡量生成的主题的连贯性
• 一个好的主题模型能够生成更连贯的主题
单词入侵
• 想法:为主题注入一个随机词
• 让用户猜测哪个是入侵者词
• 猜对 → 话题连贯
• 尝试猜测以下入侵者的词:
‣ {choice, count, village, i.e., simply, unionist}
• 手动操作; 不缩放
PMI ≈ 一致性?
• 一对词的 PMI高 → 词是相关的;PMI之前的文章有讲过
• 如果主题中的所有词对都具有高 PMI → 主题是连贯的
• 如果大多数主题具有高 PMI → 良好的主题模型
• 哪里可以获得PMI 的词共现统计数据?
‣ 主题模型可以使用相同的语料库
‣ 更好的方法是使用外部语料库(例如维基百科)
PMI
• 计算主题中前 N 个词的成对 PMI
•给定主题: {farmers, farm, food, rice, agriculture}
• 连贯性 = 所有词对的总和 PMI:
变体
• 标准化 PMI
• 条件概率
最后
• 主题模型:一种用于学习文档集合中潜在概念的无监督模型
• LDA:流行的主题模型
‣ 学习
‣ 超参数
• 如何评估主题模型?
‣ 主题连贯性
ok,今天内容到这里就ok,辛苦大家观看!有问题欢迎评论交流!
以上是关于01 主题模型 - 大纲的主要内容,如果未能解决你的问题,请参考以下文章