EM算法与NLP
来源:互联网 发布:java怎么卸载干净 编辑:程序博客网 时间:2024/06/08 18:42
EM算法即期望最大化(expectation maximization)方法,是一种解决存在隐含变量优化问题的有效方法。
举个例子,你要统计你们学校男生的平均身高,首先你得抽样,比方说随机选100个男生,然后量一下每个人的身高,把每个人的身高加起来再除以总人数就可以了。如果你要统计你们学校男生和女生的平均身高,首先也得抽样(统计学的精髓就是抽样),比方说随机选了100个男生和100个女生,把每个人的身高量了一下,但是你粗心大意忘了记录每个身高对应的是男生还是女生,也就是说,你现在只知道200个身高,男生和女生的身高服从高斯分布,你不知道每个身高对应的性别,你现在怎么计算男生和女生的平均身高?这时候,性别就是我们所谓的隐变量了。EM方法可以解决你的难题,首先你对每个身高随机给一个性别(对应EM算法初始化隐变量过程),现在你知道了200个身高和对应的性别,你可以计算男生和女生的平均身高了(对应EM方法的M过程),然后根据平均身高(高斯分布)你再去修改每个身高对应的性别。当然这里说的比较简单,旨在直观的了解一下EM方法的过程。
首先需要知道jesen不等式是什么玩意。
假设我们有一个样本集{x(1),…,x(m)}(对应身高),包含m个独立的样本。但每个样本i对应的类别z(i)(对应性别)是未知的(相当于聚类),也即隐含变量。故我们需要估计概率模型p(x,z)的参数θ,但是由于里面包含隐含变量z,所以很难用最大似然求解,但如果z知道了,那我们就很容易求解了。 对于参数估计,我们本质上还是想获得一个使似然函数最大化的那个参数θ,现在与最大似然不同的只是似然函数式中多了一个未知的变量z,见下式。也就是说我们的目标是找到适合的θ和z让L(θ)最大,即当前数据出现的可能性最大。
第一步是对极大似然取对数,第二步是对每个样例的每个可能类别z求联合分布概率和。但是直接求一般比较困难,因为有隐藏变量z存在,但是一般确定了z后,求解就容易了。
EM是一种解决存在隐含变量优化问题的有效方法。竟然不能直接最大化 L(theta),我们可以不断地建立 L的下界(E步),然后优化下界(M步)。
设Y是随机变量X的函数,Y=g(X),那么X是离散型随机变量,它的分布律为P(X=xk)=pk,Y的期望就是E(Y)。根据jesen不等式我们可以从(2)得到(3)。我们利用(3)的上界来近似求解(1)。那么怎么选择Q函数呢?见下图
matlab代码:
clear;
clc;
% Pseudo-code of EM for IBM Model 1:
%
% initialize t(e|f) uniformly
% do until convergence
% set count(e|f) to 0 for all e,f
% set total(f) to 0 for all f
% for all sentence pairs (e_s,f_s)
% set total_s(e) = 0 for all e
% for all words e in e_s
% for all words f in f_s
% total_s(e) += t(e|f)
% for all words e in e_s
% for all words f in f_s
% count(e|f) += t(e|f) / total_s(e)
% total(f) += t(e|f) / total_s(e)
% for all f
% for all e
% t(e|f) = count(e|f) / total(f)
sentence=cell(4,1);
sentence{1,1}={'dog','barked','null'}; %english
sentence{2,1}={'hund','bjeffet'}; %french
sentence{3,1}={'dog','bit','dog','null'};
sentence{4,1}={'hund','bet','hund'};
voc_english = containers.Map({'dog','bit','barked','null'},{1,2,3,4});
voc_french = containers.Map({'hund','bet','bjeffet'},{1,2,3});
%initialize t(e|f) uniformly
t(length(voc_english),length(voc_french)) = 0;
for i = 1:length(voc_english)
for j = 1:length(voc_french)
t(i,j) = 1/length(voc_french);
end
end
% EM iterations
maxIter = 50;
count(length(voc_english),length(voc_french)) = 0;
total(length(voc_french)) = 0;
total_s(length(voc_english)) = 0;
while( maxIter > 0 )
for i = 1:(length(sentence)/2) % num of sentence pair
total_s(1:length(voc_english)) = 0;
for m = 1:length(sentence{2*i-1})
for n = 1:length(sentence{2*i})
index_fre = voc_french(sentence{2*i, 1}{n});
index_eng = voc_english(sentence{2*i-1, 1}{m});
total_s(index_eng) = total_s(index_eng) + t(index_eng, index_fre);
end
end
for m = 1:length(sentence{2*i-1})
for n = 1:length(sentence{2*i})
index_fre = voc_french(sentence{2*i, 1}{n});
index_eng = voc_english(sentence{2*i-1, 1}{m});
count(index_eng, index_fre) = count(index_eng, index_fre) + t(index_eng, index_fre)/total_s(index_eng);
total(index_fre) = total(index_fre) + t(index_eng, index_fre)/total_s(index_eng);
end
end
end
for i = 1:length(voc_french)
for j = 1:length(voc_english)
t(j, i) = count(j, i)/total(i);
end
end
maxIter = maxIter - 1;
end
t
本文参考:
http://blog.csdn.net/zouxy09/article/details/8537620
一个EM算法在机器翻译模型IBM1上的应用:
http://www.uio.no/studier/emner/matnat/ifi/INF5820/h12/undervisningsmateriale/emtraining.pdf
- EM算法与NLP
- 52nlp:理解EM算法
- EM算法与思想
- EM算法与GMM
- EM算法与思想
- 机器学习与em算法
- EM算法与Baum-Welch算法
- Kmeans与Meanshift、EM算法的关系
- GMM与EM算法(一)
- GMM与EM算法(二)
- GMM与EM算法(零)
- 极大似然 与 EM算法
- EM算法与混合高斯模型
- EM算法与GMM的训练应用
- 实战EM算法与图像分割
- EM算法与高斯混合分布
- EM算法与高斯混合分布
- EM算法与混合高斯模型
- 每日一得--修改SQL表结构[字段类型]示例代码
- C#之Console输入输出实用的
- Mysql事件创建
- ios企业证书打包操作
- Java导出Excel
- EM算法与NLP
- Xcode6.0 解决无法输入中文的办法.
- nginx lua php
- 插入排序和归并排序
- java 容器
- 39、MySQL-视图创建
- Hibernate学习笔记
- C++ 运算符重载
- CMENU类