diff --git a/CH04/README.md b/CH04/README.md index 014e1e9..a17319b 100755 --- a/CH04/README.md +++ b/CH04/README.md @@ -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](#导读)** \ No newline at end of file diff --git a/CH09/README.md b/CH09/README.md index 071731d..cae251d 100755 --- a/CH09/README.md +++ b/CH09/README.md @@ -73,7 +73,8 @@ - 书中图9.1说一下,可以参考[CH08](../CH08/README.md)的部分内容,关于Bregman distance的那部分说明。 -- HMM作了两个基本假设,实际上是在说在图模型中,存在哪些**边**。 +- HMM作了两个基本假设,实际上是在说在图模型中,存在哪些**边**,边对应了条件概率分布。 +- EM算法的核心是定义$Q$函数 ### 符号说明 diff --git a/CH18/README.md b/CH18/README.md new file mode 100755 index 0000000..95876f0 --- /dev/null +++ b/CH18/README.md @@ -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) \ No newline at end of file diff --git a/CH18/plsa.py b/CH18/plsa.py new file mode 100755 index 0000000..9e60d90 --- /dev/null +++ b/CH18/plsa.py @@ -0,0 +1,35 @@ +#! /usr/bin/env python + +# -*- coding:utf-8 -*- +# Project: Lihang +# Filename: plsa +# Date: 6/13/19 +# Author: 😏 + + +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 \ No newline at end of file diff --git a/CH18/unit_test.py b/CH18/unit_test.py new file mode 100755 index 0000000..749f26c --- /dev/null +++ b/CH18/unit_test.py @@ -0,0 +1,22 @@ +#! /usr/bin/env python + +# -*- coding:utf-8 -*- +# Project: Lihang +# Filename: unit_test +# Date: 6/13/19 +# Author: 😏 +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() + diff --git a/CH18/utils.py b/CH18/utils.py new file mode 100755 index 0000000..cdfb31c --- /dev/null +++ b/CH18/utils.py @@ -0,0 +1,9 @@ +#! /usr/bin/env python + +# -*- coding:utf-8 -*- +# Project: Lihang +# Filename: utils +# Date: 6/13/19 +# Author: 😏 + +# TODO: corpora related diff --git a/errata_se.md b/errata_se.md index 8e8c46d..5d832b9 100755 --- a/errata_se.md +++ b/errata_se.md @@ -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}$中的表格,也没有表格编号和标题。下面截断奇异值分解的结果,其实应该算是个图。 diff --git a/glossary_index.md b/glossary_index.md index ed04822..95a9127 100755 --- a/glossary_index.md +++ b/glossary_index.md @@ -66,6 +66,10 @@ $P_{421}$ 基本定义的基础上导入平滑项 ### Topic Modeling $P_{321}$ 试图从大量的文本数据中发现潜在的话题,以话题向量表示文本的语义内容,以话题向量空间的度量更准确的表示文本之间的语义相似度。这是话题分析(Topic Modeling)的基本想法。 +## 几何解释 +### PLSA +$P_{344}$ 概率潜在语义分析的几何解释 + ## Glossary ### 贝叶斯学习 @@ -106,6 +110,8 @@ $P_{182}$ BW算法中求Q函数极大化,因为$\pi,A,B$都满足等式约束 $P_{301}$ PCA中关于总体主成分的定理的证明。 $P_{346}$ EM算法M步 +$P_{346}$ EM算法中$Q$函数极大化 + ### 样本 $P_{4}$ 输入和输出对又称为样本 @@ -187,6 +193,8 @@ $P_{81}$,$P_{96}$单纯形是$n$维欧式空间中的$n+1$个仿射无关的 $P_{348}$ 模型的参数分布可以由参数空间中的单纯形表示。 $P_{344}$ 单词单纯形与话题单纯形 +$P_{344}$ 子单纯形 + ### 熵,条件熵 $P_{60}$在决策树中首先提到 @@ -217,6 +225,10 @@ $P_{184}$维特比算法实际上是用动态规划求解隐马尔可夫模型 ### 贝叶斯估计 $P_{59}$ 强调朴素贝叶斯和贝叶斯估计是不同的概念。 +### 条件独立 +$P_{341}$ 生成模型的条件独立假设 +$P_{342}$ 共现模型的条件独立假设 + ### 目标函数 $P_9$在经验风险最小化的策略或者结构风险最小化策略的情况下,经验或结构风险函数是最优化的目标函数 @@ -562,6 +574,8 @@ $P_{247}$ 在降维部分有提到,但是没有展开 算法17.1 非负矩阵分解的迭代算法 +算法18.1 概率潜在语义模型参数估计的EM算法 + 算法A.1 梯度下降法 算法B.1 牛顿法 diff --git a/math_markdown.md b/math_markdown.md index 65cff44..a6c86d4 100755 --- a/math_markdown.md +++ b/math_markdown.md @@ -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** diff --git a/symbol_index.md b/symbol_index.md index bfc22ff..46444bb 100755 --- a/symbol_index.md +++ b/symbol_index.md @@ -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}$ @@ -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$ \ No newline at end of file +1. $\mathcal{Z}$隐式结构空间 $P_8$