Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plsa #88

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Plsa #88

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CH04/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,6 @@ IID强限制放宽,就是TAN(Tree Augmented Naive Bayes)。可以看做是NB

3. [^3]: [Machine Learning New Chapter](http://www.cs.cmu.edu/~tom/NewChapters.html)

4. [^4 ]: [An Introduction to Conditional Random Fields for Relational Learning](-)
4. [^4 ]: [An Introduction to Conditional Random Fields for Relational Learning](https://people.cs.umass.edu/~mccallum/papers/crf-tutorial.pdf)

**[⬆ top](#导读)**
3 changes: 2 additions & 1 deletion CH09/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@

- 书中图9.1说一下,可以参考[CH08](../CH08/README.md)的部分内容,关于Bregman distance的那部分说明。

- HMM作了两个基本假设,实际上是在说在图模型中,存在哪些**边**。
- HMM作了两个基本假设,实际上是在说在图模型中,存在哪些**边**,边对应了条件概率分布。
- EM算法的核心是定义$Q$函数

### 符号说明

Expand Down
127 changes: 127 additions & 0 deletions CH18/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# CH18 概率潜在语义分析

[TOC]

## 前言

### 章节目录

1. 概率潜在语义分析模型
1. 基本想法
1. 生成模型
1. 共现模型
1. 模型性质
1. 概率潜在语义分析的算法

### 导读

- 这章就是按照三要素的顺序来讲的:模型,策略,算法
- Use a probabilistic method instead of SVD to tackle the problem[^1],一个具体的概率分布的存储形式就是矩阵,能用矩阵处理的,都能弄到数据库里。
- 概率潜在语义分析受潜在语义分析启发,两者可以通过**矩阵分解**关联起来,矩阵分解是个框架,在这个框架下有很多算法。
- 模型的最大特点是用隐变量表示话题。其实之前的潜在语义分析应该也是用隐变量表示话题吧?所有的话题模型,都基于同样的假设[^1]:1. 文本由话题组成;2 话题由单词组成。
- 一个话题表示一个语义内容,这部分内容算是NLU(nature language understanding),在检索情况下,提供一个检索词,可以使用近义词集合去寻找。
- LSA可以解决多词一义(同义词)的问题,PLSA可以解决一词多义的问题。
- 生成模型和共现模型在概率公式意义上是等价的,生成模型刻画文本-单词共现数据生成的过程,共现模型描述文本-单词共现数据拥有的模式。
- 讨论模型参数的部分,和DL里面参数实际上是一样的。好好看下图18.4,对应了生成模型的参数情况。参数数量的说明也表示了你需要用一个什么样的数组来保存这些关系。参数,算模型的性质。
- EM算法的核心在是定义$Q$函数
- 在[第九章](../CH09/README.md)中就有专门小节提到EM算法在无监督学习中的应用,EM算法可以用在生成模型的无监督学习,这一章诠释了这一点。
- 单词-文本矩阵就是文本-单词共现数据。
- 参考文献1是1999年发表的,文中有提到data-driven,1999年就数据驱动了,20年过去了。参考文献2里面提到了LSA存在一些不足,`mainly due to its unsatisfactory statistical foundation.`然后提到PLSA`has solid statistical foundation.`
- 注意在[^1]中有提到PLSA中概率与SVD中奇异向量的对应关系,和书中的描述是相反的。但是在书中的参考文献2中,Hofmann有说明这个对应关系,和书中描述一致。

## 内容

### 模型
#### 生成模型
1. 依据概率分布$P(d)$从文本集合中选取一个文本$d$,共生成$N$个文本,针对每个文本执行以下操作:
1. 文本$d$给定的条件下,依据条件概率分布$P(z|d)$,从话题集合随机选取一个单词$w$,生成$L$个话题,这里$L$是文本长度。
1. 在话题$z$给定的条件下,依据条件概率分布$P(w|z)$,从单词集合中随机选取一个单词$w$

模型生成的是单词-话题-文本三元组$(w,z,d)$,观测到的是$(w,d)$二元组的集合。观测数据表示为单词文本矩阵$T$的形式,行表示单词,列表示文本,元素表示单词-文本对$(w,d)$的出现次数。
$P(T)=\prod\limits_{(w,d)}P(w,d)^{n(w,d)}$,其中$n(w,d)$表示$(w,d)$出现的次数,这个$n$的作用可以和前面[LR部分](../CH06/README.md)中$f^\#$对比看,差不多。
$$
\begin{aligned}
P(w,d)&=P(d)P(w|d)\\
&=P(d)\sum_z \color{red}P(w,z|d)\\
&=P(d)\sum_z \color{red}P(w|z)P(z|d)
\end{aligned}
$$
以上红色部分来自iid假设,在给定$z$条件下单词$w$和文本$d$条件独立。

#### 共现模型

首先有话题的概率分布,然后有话题给定条件下文本的条件概率分布,以及话题给定条件下单词的条件概率分布。

共现模型,联合概率分布。
$$
\begin{aligned}
P(w,d)
&=\sum\limits_{z\in Z}P(z)\color{red}P(w,d|z)\\
&=\sum\limits_{z\in Z}P(z)\color{red}P(w|z)P(d|z)
\end{aligned}
$$
以上红色部分来自iid假设,在给定$z$的条件下,单词$w$和文本$d$是条件独立的,这个相对好理解一点。
#### 与潜在语义分析的关系

$$
\begin{aligned}
X^\prime&=U^\prime\mit{\Sigma}^\prime V^{\prime\mathrm{T}}\\
X^\prime&=[P(w,d)]_{M\times N}\\
U^\prime&=[P(w|z)]_{M\times K}\\
\mit\Sigma^\prime&=[P(z)]_{K\times K}\\
V^\prime&=[P(d|z)]_{N\times K}
\end{aligned}
$$

概率潜在语义分析模型中$U^\prime$和$V^\prime$是非负的、规范化的,表示条件概率分布。
潜在语义分析模型中$U$和$V$是正交的,未必非负,并不表示概率分布。

### 策略
极大似然估计

### 算法

生成模型的EM算法
**已知:**
单词集合$W=\{w_1, w_2, \cdots, w_M\}$
文本集合$D=\{d_1, d_2, \cdots, d_N\}$
话题集合$Z=\{z_1, z_2, \cdots, z_K\}$
共现数据$T={n(w_i, d_j)}, i=1,2,\cdots, M, j=1,2,\cdots,N$
**求解:**
概率潜在语义分析模型(生成模型)的参数。

对数似然函数
$$
\begin{aligned}
L&=\sum_{i=1}^M\sum_{j=1}^N n(w_i,d_j) \log P(w_i,d_j)\\
&=\sum_{i=1}^M\sum_{j=1}^N n(w_i,d_j) \log \left[\sum_{k=1}^K P(w_i|z_k)P(z_k|d_j)\right]
\end{aligned}
$$

E步:计算$Q$函数
M步:极大化$Q$函数

**算法18.1** 概率潜在语义模型参数估计的EM算法

1. 设置参数$P(w_i|z_k)$和$P(z_k|d_j)$的初始值
1. 迭代执行E和M步骤
1. E步:
$$
P(z_k|w_i,d_j)=\frac{P(w_i|z_k)P(z_k|d_j)}{\sum_{k=1}^K P(w_i|z_k)P(z_k|d_j)}
$$
4. M步:
$$
\begin{aligned}
P(w_i|z_k)&=
\frac
{\sum_{j=1}^N n(w_i,d_j)P(z_k|w_i,d_j)}
{\sum_{m=1}^M\sum_{j=1}^N n(w_m,d_j)P(z_k|w_m,d_j)}\\
P(z_k|d_j)&=\frac{\sum_{i=1}^M n(w_i,d_j) P(z_k|w_i, d_j)}{n(d_j)}
\end{aligned}
$$



## 参考

[^1]: [Topic Modeling with LSA, PLSA, LDA & lda2Vec](https://medium.com/nanonets/topic-modeling-with-lsa-psla-lda-and-lda2vec-555ff65b0b05)
35 changes: 35 additions & 0 deletions CH18/plsa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#! /usr/bin/env python

# -*- coding:utf-8 -*-
# Project: Lihang
# Filename: plsa
# Date: 6/13/19
# Author: 😏 <smirk dot cao at gmail dot com>


class PLSA(object):
def __init__(self, n_iter=100):
self.w = None
self.d = None
self.z = None
self.pz_wd = None
self.pw_k = None
self.pz_d = None
self.n_iter = n_iter

def fit(self, x):
for idx in range(n_iter):
self.e_step()
self.m_step()
if self.is_convergence():
break

def m_step(self,):
self.pw_z = None
self.pz_d = None

def e_step(self,):
self.pz_wd = None

def is_convergence(self):
pass
22 changes: 22 additions & 0 deletions CH18/unit_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#! /usr/bin/env python

# -*- coding:utf-8 -*-
# Project: Lihang
# Filename: unit_test
# Date: 6/13/19
# Author: 😏 <smirk dot cao at gmail dot com>
from plsa import PLSA
import matplotlib.pyplot as plt
import numpy as np


class TestPLSAMethods(unittest.TestCase):
def test_plsa(self):
w = None
d = None
z = None
pz_wd = None
pw_k = None
pz_d = None
plsa_test = PLSA()

9 changes: 9 additions & 0 deletions CH18/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#! /usr/bin/env python

# -*- coding:utf-8 -*-
# Project: Lihang
# Filename: utils
# Date: 6/13/19
# Author: 😏 <smirk dot cao at gmail dot com>

# TODO: corpora related
9 changes: 6 additions & 3 deletions errata_se.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,12 @@

24. $P_{310}$ 样本矩阵$\mit \boldsymbol{X}$,应该是$X$。或者说,写成$X$才和其他表达是一致的。

25. $P_{327}$ 17.1节最后一句,`这一结果完全从话题-文本矩阵的信息中获得`应该是`单词-文本矩阵`吧
25. $P_{344}$ 图18.6 这个图标题是`概率潜在语义分析与潜在语义分析的关系`,实际上并没有体现PLSA相关的内容。图上面段落的文字描述中也说`图18.6显示潜在语义分析`。这部分感觉没写完整,或者可以在图中对应$X,U,\mit\Sigma,V^{\mathrm{T}}$下面对应标注$X^\prime,U^\prime,\mit\Sigma^\prime,V^{\prime\mathrm{T}}$也可。

26. $P_{329}$ 这个例子并没有按照书中其他例子的格式编号,$P_{330}$中的表格,也没有表格编号和标题。下面截断奇异值分解的结果,其实应该算是个图
26. $P_{341}$ 这一章里面,用$T$表示单词-文本矩阵,而这个矩阵在书中前面章节都是用$X$表示的。而$T$在前面章节表示过$P_{325}$单词话题矩阵。看到这里可能会稍微有点晕。在后面PLSA与LSA对比的部分,用了$X^\prime$和$X$对应表示

27.
27. $P_{340}$ 生成模型的生成步骤第一点中`从文本(指标)`这句中的指标,没有解释过,后续也没有提到过。

28. $P_{327}$ 17.1节最后一句,`这一结果完全从话题-文本矩阵的信息中获得`应该是`单词-文本矩阵`吧

29. $P_{329}$ 这个例子并没有按照书中其他例子的格式编号,$P_{330}$中的表格,也没有表格编号和标题。下面截断奇异值分解的结果,其实应该算是个图。
14 changes: 14 additions & 0 deletions glossary_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ $P_{421}$ 基本定义的基础上导入平滑项
### Topic Modeling
$P_{321}$ 试图从大量的文本数据中发现潜在的话题,以话题向量表示文本的语义内容,以话题向量空间的度量更准确的表示文本之间的语义相似度。这是话题分析(Topic Modeling)的基本想法。

## 几何解释
### PLSA
$P_{344}$ 概率潜在语义分析的几何解释

## Glossary

### 贝叶斯学习
Expand Down Expand Up @@ -106,6 +110,8 @@ $P_{182}$ BW算法中求Q函数极大化,因为$\pi,A,B$都满足等式约束
$P_{301}$ PCA中关于总体主成分的定理的证明。
$P_{346}$ EM算法M步

$P_{346}$ EM算法中$Q$函数极大化

### 样本

$P_{4}$ 输入和输出对又称为样本
Expand Down Expand Up @@ -187,6 +193,8 @@ $P_{81}$,$P_{96}$单纯形是$n$维欧式空间中的$n+1$个仿射无关的
$P_{348}$ 模型的参数分布可以由参数空间中的单纯形表示。
$P_{344}$ 单词单纯形与话题单纯形

$P_{344}$ 子单纯形

### 熵,条件熵

$P_{60}$在决策树中首先提到
Expand Down Expand Up @@ -217,6 +225,10 @@ $P_{184}$维特比算法实际上是用动态规划求解隐马尔可夫模型
### 贝叶斯估计
$P_{59}$ 强调朴素贝叶斯和贝叶斯估计是不同的概念。

### 条件独立
$P_{341}$ 生成模型的条件独立假设
$P_{342}$ 共现模型的条件独立假设

### 目标函数

$P_9$在经验风险最小化的策略或者结构风险最小化策略的情况下,经验或结构风险函数是最优化的目标函数
Expand Down Expand Up @@ -562,6 +574,8 @@ $P_{247}$ 在降维部分有提到,但是没有展开

算法17.1 非负矩阵分解的迭代算法

算法18.1 概率潜在语义模型参数估计的EM算法

算法A.1 梯度下降法

算法B.1 牛顿法
Expand Down
1 change: 1 addition & 0 deletions math_markdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
| $\perp $ | **\perp** | $\angle$ | \angle | $\varpropto$ | \varpropto |
| $\infty$ | \infty | $g^\prime$ | g^\prime | $\forall$ | \forall |
| $\exist$ | \exist | $\bot$ | **\bot** | $\top$ | **\top** |
| $\#$ | **\\#**需要转义下 | | | | |

注意**\bot**和**\perp**的区别,垂直是**\perp**

Expand Down
13 changes: 12 additions & 1 deletion symbol_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
1. $m$ 协方差矩阵的特征值之和 $P_{309}$
1. $n,N,n_G$ 样本数,类的样本数
1. $\theta$ 参数
1. $U$ 训练数据 $P_8, P_{248}, P_{245}$
1. $U$ 表示$m$阶正交矩阵 ,$V$表示$n$阶正交矩阵,$\mit\Sigma$表示矩形对角矩阵,$P_{271}$
1. $T$ 训练数据集 $P_{59}$
1. $T$ 文本-单词共现数据 $P_{341}$
1. $T$ 和$V$给定的两个正数 $P_{259}$
1. $T$ 决策树 $P_{78}$
1. $T:x\rightarrow Ax$ 线性变换 $P_{279}$
1. $A_G$类的样本散布矩阵 $P_{259}$
1. $R(A)$ $A$的值域 $P_{275}$
1. $R(A)^\bot$ 表示$R(A)$的正交补 $P_{276}$
1. $r$ 矩阵的秩 $P_{277}$
Expand All @@ -32,9 +40,12 @@
1. $W=\{w_1,w_2,\cdots, w_m\}$ $m$个单词集合 $P_{322}$
1. $\mathcal{W}=\{w_1,w_2,\cdots, w_k\}$ $k$个元素组成的集合 $P_{389}$
1. $x_i^*$是$x_i$的规范化随机变量。 $P_{309}$
1. $L$ 概率潜在语义分析模型中文本生成话题的过程中,文本长度。$P_{340}$
1. $\mathcal{H}$ 特征空间$P_{134}$
1. $Z=\{z_1, z_2,\cdots, z_K\}$ 话题集合 $P_{345}$
1. $X=[x_{ij}]_{m\times n}$ 矩阵
1. $X=\{x_1, x_2, \dots ,x_n\}$ $n$个样本的集合 $P_{263}$
1. $X$ 定义在输入空间$\mathcal X$上的随机向量
1. $X=\{X_0,X_1,\cdots,\X_t,\cdots\}$ 马尔可夫链 $P_{360}$
1. $Y$ 定义在输出空间$\mathcal Y$上的随机向量
1. $\mathcal{Z}$隐式结构空间 $P_8$
1. $\mathcal{Z}$隐式结构空间 $P_8$