隐马尔可夫,隐,说明模型里面含有隐含节点,是咱们所没法直接观测到的,这些隐含节点上的状态能够称为隐含状态;马尔科夫,说明模型具备马尔科夫性,一个节点的状态只跟它的邻居有关,与其余节点无关,与时间也无关。html
咱们把节点分为两类,状态节点(隐)和可观察节点(显)。而且假设状态节点为链式结构,每一个输出(可观察节点)仅与当前状态有关。算法
所以咱们有两个矩阵$A$和$B$,前者是状态转移几率矩阵$A_{i,j}$表示状态从$i$转移到$j$的几率,后者是生成几率矩阵$B_{i,j}$表示从状态$i$生成到观测值$j$的几率,加上初始状态几率向量$\pi$构成整个HMM模型参数集。shell
用法:函数
1)当整个模型的参数已知,给定观察序列$O$,咱们能够求出其生成几率:优化
$$P(O|\lambda)=\sum_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(1)$$url
其中$Q$是状态序列,即在全部状态序列下生成该观察序列几率之和。根据马尔科夫假设与两个几率矩阵咱们能够计算出$P(Q|\lambda)$和$P(O|Q)$.net
具体计算方法能够用前向算法(一种动态规划)来计算。若咱们有不少HMM模型,能够选择几率最大的那个做为最可能的模型。指针
2)当整个模型的参数已知,给定观察序列$O$,咱们能够求出其对应最大几率的隐含状态序列:htm
$$Q=\max_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(2)$$blog
具体可用Viterbi算法(也是一种动态规划算法)计算,内部用了后向指针指明了隐含状态序列的路径,与最短路径算法Dijkstra相似。
普遍用在词性标注以及各类标注,词性序列看作隐含状态序列,找出最可能的标注序列。
3)估计HMM参数。当之给定观察序列,咱们要训练出一个HMM模型,评估其参数$A$和$B$。因为HMM是一个生成模型,根据隐含状态生成观察序列,即$P(O|Q)$,这里咱们要根据观察序列反推隐含状态,所以用到了贝叶斯公式。
咱们的优化目标是使得$P(O|\lambda)$最大,也即最大似然估计。
训练过程为,在初始状态给参数赋随机值,而后在每次迭代,计算在观察序列条件下全部参数的指望值,做为下次迭代的估计值,一直到收敛。这是一个EM算法,具体计算过程能够采用动态规划前向后向算法,最终达到的是一个局部最优解。
条件随机场,是在条件给出的状况下,导出的一个场。条件能够看作是系统的外部环境,全局信息,当系统所处环境给定时,系统状态的分布服从能量函数。好比当温度和体积给定时,系统粒子状态分布是玻尔兹曼分布。
在此,条件便是咱们的训练样本集,一系列的观察序列,场由隐含状态节点构成,隐含状态节点的结构为一无向马尔科夫链,每一个状态节点只与它相邻的两个节点有联系,并受全局信息观察序列$X$的影响。
全部能量模型都要给出能量的定义,该模型中能量定义基于的最小粒度是最大团,这个最大团的成员为$\{X,y_i,y_{i+1}\}$,其中$y_i$是第$i$个隐含节点的状态。所以咱们能量函数的定义格式便为
$$E_i=E(y_i,y_{i+1},X,i)$$
该系统处于状态$Y$的几率为
$$P(Y|X)=\frac{e^{\sum_i E(y_i,y_{i+1},X,i)}}{Z}$$
更细化来讲,咱们每一个最大团的总能量函数能够分为多个子能量,这多个子能量以必定的权重累加获得最终总能量。这比如一个粒子的总能量能够分为动能、势能、内能三个子能量的累加。
$$E_i=\sum_k \lambda_k e_k(y_i,y_{i+1},X,i)$$
方便起见,更简单的,咱们能够定义子能量函数$e_k$为二值函数,知足条件为1,不然为0。在给定子能量函数(或者称做特征函数)前提下,模型的参数为$\{\lambda_i\}$。
模型的训练过程。
训练前人工定义好子能量函数,训练的每一个样本形如$X,Y$,即观察序列和隐含序列已经给定。初始时随机化参数,而后对每一个样本能够计算出其几率值,整个样本空间的几率为全部样本几率的连乘。能够用最大似然log-likehood进行参数估计。
模型训练好后,给定$X$,求出最可能的$Y$,能够用Viterbi算法。
使用场景为词性标注,实体识别。
奇异值分解。把原始矩阵$R$分解为以下形式$R=U^TSV$,其中$S$是对角阵,对角线上从大到小排列的是奇异值,表明该对应特征的权重。$U$的每一列对应原始矩阵行实体的特征向量,$V$的每一列对应原始矩阵列实体的特征向量。
把对角阵保留其前$k$个特征,其它置0,从新获得一个近似矩阵$R_f$,能够作预测用。
使用场景。
1)数据压缩,保留其主要特征的$R_f$为降维后的原始矩阵$R$的近似表示。
2)打分预测,假设原始矩阵的$R_{ij}$表示第$i$个用户对第$j$个东西的打分,那么$R_f$重对应的值即是预测的结果。
3)聚类。分解并降维后的$U$和$V$两个矩阵保存了对应实体的特征向量,这些特征向量具备相同的维度$k$,咱们能够用来聚类,好比找到类似用户,找到跟用户相关度最近的几个物品。若是有一个新用户,咱们有他的评分向量,根据必定的公式咱们能够获得这个新用户的特征向量。query检索,对用户的query生成k维特征向量,对全部文档计算余弦值获得最类似的文档。
4)主题抽取。假设原始矩阵表示文档和词汇,分解并降维后,每一个文档对应一个$k$维的特征向量,每一个词语一样如此。特征向量的每个维度能够看作一个主题(LSA)。
潜在几率语义分析。潜在,说明主题是隐含状态,不可直接观察到,语义分析是用主题来表示语义。是一个生成模型,生成模型是,根据该模型能够计算出可观察样本的生成几率,而后利用最大似然估计反推模型的参数,因此生成模型有一个生成流程。
样本集有多个文档构成,文档由多个字构成。而后再文档和词语之间,咱们假设出一层主题层来,咱们假设文档是由主题构成的,咱们固定主题个数为k,那么每一个文档对应一个主题分布,这个主题是固定的,可是未知的;而后假设一个主题装了好多单词,每一个主题对应一个单词的几率分布,这个分布也是固定的,可是未知的。由此咱们便有了连个矩阵$A$和$B$,$A_{ij}=P(z_j|d_i)$表示第i个文档中主题j出现的几率,$B_{ij}=P(w_j|z_i)$表示第i个主题中单词j出现的几率。这两个矩阵即是模型的参数。
咱们的语料库被生成的流程是这样滴,首先,以$P(d_i)=\frac{count(d_i)}{|all~word|}$的几率选出一个文档,这个几率是已知的可统计出来;而后根据$P(z_j|d_i)$几率选择一个主题$z_j$,这个几率对应A矩阵,是须要估计的;最后根据$P(w_j|z_i)$几率生成一个单词$w_j$,这个几率对应B矩阵是须要估计的。
那么,一个文档$d_i$被生成的几率便为文档中全部单词生成几率的连乘:
$$P(W|d_i)=\prod_j P(w_j|d_i)$$
整个语料的生成几率为
$$P(W|D)=\prod_i P(W|d_i)P(d_i)$$
最大化这个几率便可。
根据生成流程,P(w_j|d_i)能够经过对全部路径$d_i\rightarrow z_k \rightarrow w_j$的几率求和获得
$$P(w_j|d_i)=\sum_k P(z_k|d_i)P(w_j|z_k)$$
训练方法采用EM法,首先随机初始化参数,而后根据条件求出各参数的指望做为下次迭代的估值。参数的指望是一句可观测的$d_i$和$w_j$反推获得的,因此用到了贝叶斯公式。具体的思想是该条路径的几率$d_i\rightarrow z_k \rightarrow w_j$占全部路径几率总和的比例。
使用场景。当模型训练好后,预料中的全部文档都有一个对应的主题向量,能够用来文档聚类,另外,对于每个单词,咱们也能够获得对应的主题向量能够用做基于语义的query检索。便可以依据主题计算文档类似性和词语类似性。
那么,当来了一个新的文档时,咱们怎么计算它的主题分布呢,个人想法是,把它里面全部词语的主题向量加和求平均便可。
潜在Dirichlet分布主题语义分析。与PLSA模型很是相似,也是经过主题生成文档。不一样的是,PLSA假设每一个文档必对应一个固定的主题分布,每一个主题必对应一个固定的词语分布,这有点相似于经典几率论,几率是先天存在好的,只是等着咱们测量而已。LDA并不这样假设,二者的分布并非固定的,其分布是经过更高层的分布生成机制来生成的,只有当你测量时,它才坍缩成一个具体的分布,当你不测量时,它的具体分布是不定的,有点相似于量子几率,处在一个量子状态中,这个量子状态在被测量时会以必定的几率生成可观测的值,这个值在这里就是一个具体的分布。这个“必定的几率”代表了生成分布的倾向,对应Dirichlet分布中的参数$\alpha$和$\beta$,是模型的超参数,根据经验指定。相比于PLSA每一个文档都有一个主题分布的向量参数,LDA的参数会很是少,只有$\alpha$和$\beta$两个参数,是两个向量,这个参数表征了训练样本集的"量子态"。
生成语料库的具体流程为:1)根据参数$\beta$生成每一个主题的词语分布。2)对每一个文档,根据参数$\alpha$生成该文档的主题分布。3)根据第二步的主题分布生成一个主题。4)根据生成的主题和在第一步生成的该主题对应的词语分布,生成一个单词。
训练过程采用gibbs采样。固定全部参数以及状态,而后能够计算出给定词语对应主题的几率,而后根据这几率以轮盘法采样一个主题更新这个词语的主题,直到算法收敛。训练后会求得相似PLSA的两个分布矩阵,用法参考PLSA。
【待续】
参考文献:
http://blog.csdn.net/likelet/article/details/7056068
http://blog.csdn.net/wuyanyi/article/details/7964883
http://blog.csdn.net/sunmenggmail/article/details/8566275
http://blog.csdn.net/v_july_v/article/details/41209515
http://www.shellsec.com/tech/158684.html
http://vdisk.weibo.com/s/aR2Sk3ifABoZM
http://www.shellsec.com/tech/63868.html