我正在尝试了解潜在狄利克雷分配(LDA)。我有机器学习和概率论的基本知识,并且基于这篇博客文章http://goo.gl/ccPvE,我能够开发 LDA 背后的直觉。但是,我仍然没有完全理解其中的各种计算。我想知道有人可以向我展示使用非常小的语料库的计算(比如说 3-5 个句子和 2-3 个主题)。
2 回答
Edwin Chen(他在 Twitter 工作)在他的博客中有一个例子。5 句话,2 个主题:
- 我喜欢吃西兰花和香蕉。
- 我早餐吃了香蕉和菠菜冰沙。
- 龙猫和小猫很可爱。
- 我姐姐昨天收养了一只小猫。
- 看看这只可爱的仓鼠正在咀嚼一块西兰花。
然后他做了一些“计算”
- 句子 1 和 2:100% 主题 A
- 第 3 句和第 4 句:100% 主题 B
- 句子 5:60% 主题 A,40% 主题 B
并猜测主题:
- 主题 A:30% 的西兰花、15% 的香蕉、10% 的早餐、10% 的咀嚼……
- 此时,您可以将主题 A 解释为与食物有关
- 话题 B:20% 的栗鼠,20% 的小猫,20% 的可爱,15% 的仓鼠,……
- 此时,您可以将主题 B 解释为关于可爱的动物
你的问题是他是怎么得出这些数字的?这些句子中的哪些词带有“信息”:
- 西兰花, 香蕉, 冰沙, 早餐, 咀嚼, 吃
- 栗鼠, 小猫, 可爱, 采用, 仓鼠
现在让我们逐句从每个主题中获取单词:
- 食物 3,可爱 0 -->食物
- 食物 5,可爱 0 -->食物
- 食物 0,可爱 3 -->可爱
- 食物 0,可爱 2 -->可爱
- 食物 2,可爱 2 --> 50%食物+ 50%可爱
所以我的数字,与陈的略有不同。也许他在“一块西兰花”中加入了“一块”这个词来计入食物。
我们在脑海中做了两个计算:
- 查看句子并首先提出2个主题。LDA 通过将每个句子视为主题的“混合”并猜测每个主题的参数来做到这一点。
- 来决定哪些词是重要的。LDA 使用“词频/逆文档频率”来理解这一点。
LDA 程序
Step1:遍历每个文档,将文档中的每个单词随机分配给K个主题之一(K是预先选择的)
Step2:这个随机分配给出了所有文档的主题表示和所有主题的单词分布,尽管不是很好
因此,为了改进它们:对于每个文档 d,遍历每个单词 w 并计算:
p(主题 t | 文档 d):文档 d 中分配给主题 t 的单词的比例
p(word w| topic t):在所有文档 d 中,来自 word w 的分配给主题 t 的比例
Step3: 重新分配单词 wa 新主题 t',我们选择主题 t' 的概率
- p(主题 t' | 文档 d) * p(单词 w | 主题 t')
该生成模型预测主题 t' 生成单词 w 的概率。我们将为语料库中的每个文档多次迭代最后一步以获得稳定状态。
求解计算
假设您有两个文件。
Doc i:“银行打电话询问这笔钱。”</p>
Doc ii:“银行说这笔钱已获批准。”</p>
删除停用词、大写和标点符号后。
语料库中唯一词: bank call about money boat 已批准 Next then,
之后,我们将从 doc i(主题分配为1的词库) 中随机选择一个词,我们将删除其分配的主题,并计算其新分配的概率。
主题 2(面积大于)比主题 1 更适合文档和单词。因此,我们对词库的新分配将是主题 2。