理论
- 痛点
“乔布斯离我们而去了” 和 “苹果什么时候降价”如何关联?
- 思路
- 将word映射到topic维度
- 概率表示
- 概率表示
- 将word映射到topic维度
- 演进:Unigram Model
- 演进:Bayes Unigram Model
- 演进:PLSA
- 演进:LDA
- 参数估计:统计
- 参数估计:似然
- 参数估计:后验
- 参数估计:贝叶斯
- 参数估计:对比
- 马尔可夫链条
- 吉布斯采样
- 实现代码
- Ref:
- Parameter estimation for text analysis (http://www.arbylon.net/publications/text-est.pdf)
- LDA数学八卦
- LDA简介 http://blog.csdn.net/huagong_adu/article/details/7937616
- Gibbs采样 https://www.youtube.com/watch?v=a_08GKWHFWo
Dirichlet Distribution
- 公式: p(P = {pi} | ai)
- E(p) = ai/sum(ai)
- 极大似然 = (ai-1) / sum(ai-1)
实践
基础数据
- 豌豆荚软件的描述信息
- 星级>3星
- 下载数>100
- 安装数>100
- 用户数>100
目的
- 得到基于内容(描述)的item2item
- 得到“词–主题–包名” 的关系
代码
获取数据
1
2
3
4
5
6
7hive -e "
select a.user_id, a.item_id, a.preference
from
(
...
)
" > input_lda数据概况
- 基础数据获取:见hql
- 数据整理:cat input_lda | awk -F”\t” ‘{ print $1”\t”$2 }’ > input
- 数据形式:user_id \t item_id (后期可考虑tf-idf优化)
- 行数:1849296
- 用户数:678588
- 游戏数:3377
运行命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15./lda -a 0.2 -b 0.01 -k 50 -n 1000 -s 100 -d ./input -o ./output
参数说明:
--------------------------------------------
-t 算法类型1:基本lda,2:lda-collective,3:lda_time
-r 运行模式,1:建模,2:burn-in
-a p(z|d) 的 Dirichlet 参数
-b p(w|z) 的 Dirichlet 参数
-k Topic个数
-n 迭代次数
-s 每多少次迭代输出一次结果
-d 输入数据
-o 输出文件目录,实现需要存在
运行时长:10分钟左右关联名称
- 处理word_topic矩阵,将ID和名称关联起来
- 处理word_topic矩阵,将ID和名称关联起来
1 | Hql如下, |
- Item2Item计算
1 | mport sys |
效果展示
doc2topic
topic2word
矩阵分解图谱
生成模型 VS 判别模型
- 判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。
- 生成方法:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)
- 判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。
手写LDA
- code
1 | import sys |
train corpus
1
2
3
4
5
6
7doc1 枪 游戏 计算机 dota 电脑
doc4 娃娃 美丽 面膜 高跟鞋 裙子
doc5 购物 娃娃 裙子 SPA 指甲
doc2 枪 帅 电脑 坦克 飞机
doc3 游戏 坦克 飞机 数学 美丽
doc7 计算机 帅 枪 dota
doc6 美丽 购物 面膜 SPA 飘柔result
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34doc2 枪 1
doc2 帅 1
doc2 电脑 1
doc2 坦克 1
doc2 飞机 1
doc3 游戏 1
doc3 坦克 1
doc3 飞机 1
doc3 数学 1
doc3 美丽 0
doc1 枪 1
doc1 游戏 1
doc1 计算机 1
doc1 dota 1
doc1 电脑 1
doc6 美丽 0
doc6 购物 0
doc6 面膜 0
doc6 SPA 0
doc6 飘柔 0
doc7 计算机 1
doc7 帅 1
doc7 枪 1
doc7 dota 1
doc4 娃娃 0
doc4 美丽 0
doc4 面膜 0
doc4 高跟鞋 0
doc4 裙子 0
doc5 购物 0
doc5 娃娃 0
doc5 裙子 0
doc5 SPA 0
doc5 指甲 0
写的样例默认有2个主题,一个是男生主题,一个是女生主题,lda的结果是可以把两个topic分开的。1-男生,0-女生。