<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>我爱自然语言处理 &#187; 隐马尔科夫模型</title>
	<atom:link href="http://www.52nlp.cn/category/hidden-markov-model/feed" rel="self" type="application/rss+xml" />
	<link>http://www.52nlp.cn</link>
	<description>I Love Natural Language Processing</description>
	<lastBuildDate>Wed, 21 Jul 2010 15:33:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HMM在自然语言处理中的应用一：词性标注6</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6#comments</comments>
		<pubDate>Sun, 06 Dec 2009 16:11:04 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Brown语料库]]></category>
		<category><![CDATA[citar]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[nltk]]></category>
		<category><![CDATA[TnT]]></category>
		<category><![CDATA[UMDHMM]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2744</guid>
		<description><![CDATA[　　有一段时间没有谈HMM和词性标注了，今天我们继续这个系列的最后一个部分：介绍一个开源的HMM词性标注工具并且利用Brown语料库构造一个英文词性标注器。
　　上一节借用umdhmm构造的HMM词性标注工具是二元语法(bigram)标注器，因为我们只考虑了前一个词性标记和当前词性标记，算的上是最基本的马尔科夫模型标注器。这个HMM词性标注器可以通过好几种方式进行扩展，一种方式就是考虑更多的上下文，不只考虑前面一个词性标记，而是考虑前面两个词性标记，这样的标注器称之为三元语法（trigram）标注器，是非常经典的一种词性标注方法，在《自然语言处理综论》及《统计自然语言处理基础》中被拿来介绍。
　　正因为经典， 所以老外已经做足了功课，包括paper以及开源工具，我查了一下，其中比较有名的一个是TnT，作者既写了一篇“TnT &#8212; Statistical Part-of-Speech Tagging”，被引用869次，又开发了一套开源工具(http://www.coli.uni-saarland.de/~thorsten/tnt/)，可谓“知行合一”。但是要获得这个工具必须填一个表，并且传真给对方，比较麻烦。不过幸好在英文维基百科关于词性标注的介绍页面上有替代品：Part-of-speech_tagging.
　　在这个页面的“External links（外部链接）”的最后一行，提到了一个名叫Citar的利用C++开发的隐马尔科夫模型（HMM）三元语法词性标注器：
　　“Citar LGPL C++ Hidden Markov Model trigram POS tagger, a Java port named Jitar is also available”
　　同时，它也提供Java版本的Jitar。不过可惜，这个页面目前无法直接访问到。如果读者对这个词性标注工具感兴趣的话，这里提供一个Citar的下载链接： citar-0.0.2.zip
　　以下是citar的简要介绍：
　　Citar is a simple part-of-speech tagger, based on a trigram Hidden Markov Model (HMM). It (partly) implements the ideas set forth in [1]. Citaris written in C++. There is also a Java/JDK [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第一部分）'>MIT自然语言处理第四讲：标注（第一部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-second-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第二部分）'>MIT自然语言处理第四讲：标注（第二部分）</a></li>
<li><a href='http://www.52nlp.cn/%e4%b8%ad%e6%96%87%e5%88%86%e8%af%8d%e5%85%a5%e9%97%a8%e4%b9%8b%e5%ad%97%e6%a0%87%e6%b3%a8%e6%b3%951' rel='bookmark' title='Permanent Link: 中文分词入门之字标注法1'>中文分词入门之字标注法1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　有一段时间没有谈HMM和词性标注了，今天我们继续这个系列的最后一个部分：介绍一个开源的HMM词性标注工具并且利用Brown语料库构造一个英文词性标注器。<br />
　　<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5">上一节</a>借用umdhmm构造的HMM词性标注工具是二元语法(bigram)标注器，因为我们只考虑了前一个词性标记和当前词性标记，算的上是最基本的马尔科夫模型标注器。这个HMM词性标注器可以通过好几种方式进行扩展，一种方式就是考虑更多的上下文，不只考虑前面一个词性标记，而是考虑前面两个词性标记，这样的标注器称之为三元语法（trigram）标注器，是非常经典的一种词性标注方法，在《自然语言处理综论》及《统计自然语言处理基础》中被拿来介绍。<span id="more-2744"></span><br />
　　正因为经典， 所以老外已经做足了功课，包括paper以及开源工具，我查了一下，其中比较有名的一个是TnT，作者既写了一篇“<a href="http://www.xun6.com/file/ad4afd816/a00-1031.pdf.html"target=_blank>TnT &#8212; Statistical Part-of-Speech Tagging</a>”，被引用869次，又开发了一套开源工具(http://www.coli.uni-saarland.de/~thorsten/tnt/)，可谓“知行合一”。但是要获得这个工具必须填一个表，并且传真给对方，比较麻烦。不过幸好在英文维基百科关于词性标注的介绍页面上有替代品：<a href="http://en.wikipedia.org/wiki/Part-of-speech_tagging"target=_blank>Part-of-speech_tagging</a>.<br />
　　在这个页面的“External links（外部链接）”的最后一行，提到了一个名叫Citar的利用C++开发的隐马尔科夫模型（HMM）三元语法词性标注器：<br />
　　“Citar LGPL C++ Hidden Markov Model trigram POS tagger, a Java port named Jitar is also available”<br />
　　同时，它也提供Java版本的Jitar。不过可惜，这个页面目前无法直接访问到。如果读者对这个词性标注工具感兴趣的话，这里提供一个Citar的下载链接： <a href="http://www.xun6.com/file/fcb40ab16/citar-0.0.2.zip.html"target=_blank>citar-0.0.2.zip</a><br />
　　以下是citar的简要介绍：<br />
　　Citar is a simple part-of-speech tagger, based on a trigram Hidden Markov Model (HMM). It (partly) implements the ideas set forth in [1]. Citaris written in C++. There is also a Java/JDK counterpart named Jitar,<br />
which is available at: http://code.google.com/p/jitar/<br />
　　其中[1]指的是“<a href="http://www.xun6.com/file/ad4afd816/a00-1031.pdf.html"target=_blank>TnT &#8212; Statistical Part-of-Speech Tagging</a>”，其具体的实现思想在这篇文章里描述的很细致，我觉得主要需要注意的几个地方是trigram的平滑算法，未登录词的处理方法（主要是针对英文的），以及柱搜索(beam search)解码算法。<br />
　　编译citar直接make就可以了，生成三个可执行文件：train,tag,evaluate。顾名思义，“train”是用来一些必要的文件的，tag则是进行标注的，而evaluate则是用来评价标注结果的。下面我们以Brown语料库为例来演示如何使用这三个可执行程序。<br />
　　关于Brown语料库，我是从NLTK的包中得到的，NLTK提供了两个版本的语料库，一个是纯文本格式，另外一个是XML格式，都进行了词性标注，如果你对NLTK不熟悉，可以从下面两个链接直接下载这两个语料库：<br />
　　1、<a href="http://www.xun6.com/file/fe1271a16/brown_tei.zip.html"target=_blank>XML格式的brown语料库</a>，带词性标注；<br />
　　2、<a href="http://www.xun6.com/file/7b4ab4816/brown.zip.html"target=_blank>普通文本格式的brown语料库</a>，带词性标注；<br />
　　至于Brown语料库的具体介绍，大家可以参考这个页面：<a href="http://icame.uib.no/brown/bcm.html"target=_blank>BROWN CORPUS MANUAL</a>。在这个练习中，我采用的是纯文本格式的brown语料库，但是这些文件是按照类别分布在很多小文件里，并且包含很多空行，所以我处理了一下这个文件，把它们合并到一个大的文件中，并且去除了行首的空格及空行，共得到57340个带词性标注的句子(brown.corpus)。我们首先对这个语料库进行划分，从中选取前55340句作为训练集(brown.train)，选取剩余的2000句作为测试集(brown.test)，现在我们就来运行这三个命令。<br />
　　首先利用train来训练：<br />
　　../train brown.train brown.lex brown.ngram<br />
　　其中输入文件是训练集brown.train，而输出文件是brown.lex及brown.ngram，如果大家还记着上一节里我也生成了两个前处理文件lex和ngram的话，那么就不难理解这两个文件的内容含义了。事实上，我当时就是模仿citar的这个预处理思想做得，只是结果文件里的格式稍有不同而已。<br />
　　有了上述两个文件，就可以利用tag进行词性标注了，我们拿citar里的一个示例句子来实验一下：<br />
　　echo &#8220;The cat is on the mat .&#8221; | ../tag brown.lex brown.ngram<br />
　　得到如下的结果：<br />
　　The/at cat/nn is/bez on/in the/at mat/nn ./.<br />
　　如果对一个没有标注的文件进行标注，可以利用如下的命令：<br />
　　../tag brown.lex brown.ngram < input > output<br />
　　最后，我利用evaluate来验证一下基于brown.train训练出来的词性标注器的准确率,在测试集brown.test上进行测试：<br />
　　../evaluate brown.lex brown.ngram brown.test<br />
　　得到如下的结果：<br />
　　Accuracy (known): 0.964621<br />
　　Accuracy (unknown): 0.740937<br />
　　Accuracy (overall): 0.956389<br />
　　说明这个词性标注器对于语料库中已存在的词的标注准确率是96.46%，对于未登录词的标注准确率是74.09%，而整体标注准确虑是95.63%。<br />
　　好了，关于Citar我们就到此为止，有兴趣的读者可以找一些标注好的语料库来试试，包括中文的词性标注语料库，只不过它用于英文的未登录词处理方法对于中文并不合适而已。上面所提到的几个文件，包括处理好的brown.corpus,训练集brown.train,测试集brown.test及中间生成的brown.lex,brown.ngram我已经打包放在了网络硬盘里，可以在如下地址下载：<a href="http://www.xun6.com/file/cdf8c0b16/browntest.zip.html"target=_blank>browntest.zip</a><br />
　　关于HMM在词性标注中的应用就说完了，再次回头说词性标注时，我会基于其他的模型来作相关的词性标注练习。下一个关于HMM在自然语言处理的应用，将会谈谈中文分词的相关问题，欢迎继续关注52nlp。</p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第一部分）'>MIT自然语言处理第四讲：标注（第一部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-second-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第二部分）'>MIT自然语言处理第四讲：标注（第二部分）</a></li>
<li><a href='http://www.52nlp.cn/%e4%b8%ad%e6%96%87%e5%88%86%e8%af%8d%e5%85%a5%e9%97%a8%e4%b9%8b%e5%ad%97%e6%a0%87%e6%b3%a8%e6%b3%951' rel='bookmark' title='Permanent Link: 中文分词入门之字标注法1'>中文分词入门之字标注法1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>HMM在自然语言处理中的应用一：词性标注5</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5#comments</comments>
		<pubDate>Sat, 21 Nov 2009 17:59:47 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[Philip Resnik]]></category>
		<category><![CDATA[UMDHMM]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2630</guid>
		<description><![CDATA[　　上一节我们谈完了Resnik教授基于UMDHMM设计的词性标注的练习，不过自始至终，还没有见到一个词性标记的影子。虽然这一过程展示了自然语言处理中EM算法在无监督学习任务中的重要作用，但是这类方法的标注准确性还相对较低，在实际应用中多是那些建立在有词性标注训练集基础上的机器学习算法，如最大熵模型、决策树等，所学习的词性标注器能获得较高的标注准确率。本节我们就以一个标注好的训练集为基础，来学习一个最简单的HMM词性标注器。
　　首先就是准备训练集，作为一个练习，52nlp也本着尽量简单的原则，所以这里仍然选用Resnik教授所使用的example0.train，这个训练集虽然包含了一百句“似英语”的句子，但是只有一行，所以我们首先做一个断句处理，不过这些句子只采用了“.”和“?”作为句尾标志，因此断句相对简单。不过实际处理中英文断句问题比较麻烦，也有很多学者这方面做了很多研究工作。这里52nlp写了一个简单的sentsplit.pl脚本来处理这个训练集：
　　./sentsplit.pl example0.train example0.sentences
　　example0.sentences就成了每一句为一行的训练集，如下所示：
the plane can fly .
the typical plane can see the plane .
a typical fly can see .
who might see ?
the large can might see a can .
the can can destroy a large can .
…
　　但是，这个训练集只包含纯粹的单词句子，因此需要做一下词性标注，当然人工标注并检查是最好的了，但是我不懂，于是找了一个开源的词性标注工具对这些句子进行了标注，关于这个词性标注器的细节，下一节我会具体介绍，先来看标注后得到的包含词性标记的训练集example0.all，部分示例如下：
	the/at plane/nn can/md fly/vb ./.
	the/at typical/jj plane/nn can/md see/vb the/at plane/nn ./.
	a/at typical/jj fly/nn can/md see/vb ./.
	who/wps might/md see/vb ?/.
	the/at [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-eight-summary' rel='bookmark' title='Permanent Link: HMM学习最佳范例八：总结'>HMM学习最佳范例八：总结</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法5'>HMM学习最佳范例五：前向算法5</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　上一节我们谈完了Resnik教授基于UMDHMM设计的词性标注的练习，不过自始至终，还没有见到一个词性标记的影子。虽然这一过程展示了自然语言处理中EM算法在无监督学习任务中的重要作用，但是这类方法的标注准确性还相对较低，在实际应用中多是那些建立在有词性标注训练集基础上的机器学习算法，如最大熵模型、决策树等，所学习的词性标注器能获得较高的标注准确率。本节我们就以一个标注好的训练集为基础，来学习一个最简单的HMM词性标注器。<span id="more-2630"></span><br />
　　首先就是准备训练集，作为一个练习，52nlp也本着尽量简单的原则，所以这里仍然选用Resnik教授所使用的<a href="http://www.52nlp.org/postagging/example/example0.train"target=_blank>example0.train</a>，这个训练集虽然包含了一百句“似英语”的句子，但是只有一行，所以我们首先做一个断句处理，不过这些句子只采用了“.”和“?”作为句尾标志，因此断句相对简单。不过实际处理中英文断句问题比较麻烦，也有很多学者这方面做了很多研究工作。这里52nlp写了一个简单的<a href="http://www.52nlp.org/postagging/example/sentsplit.txt"target=_blank>sentsplit.pl</a>脚本来处理这个训练集：<br />
　　./sentsplit.pl example0.train example0.sentences<br />
　　<a href="http://www.52nlp.org/postagging/example/example0.sentences"target=_blank>example0.sentences</a>就成了每一句为一行的训练集，如下所示：</p>
<blockquote><p>the plane can fly .<br />
the typical plane can see the plane .<br />
a typical fly can see .<br />
who might see ?<br />
the large can might see a can .<br />
the can can destroy a large can .<br />
…</p></blockquote>
<p>　　但是，这个训练集只包含纯粹的单词句子，因此需要做一下词性标注，当然人工标注并检查是最好的了，但是我不懂，于是找了一个开源的词性标注工具对这些句子进行了标注，关于这个词性标注器的细节，下一节我会具体介绍，先来看标注后得到的包含词性标记的训练集<a href="http://www.52nlp.org/postagging/example/example0.all"target=_blank>example0.all</a>，部分示例如下：</p>
<blockquote><p>	the/at plane/nn can/md fly/vb ./.<br />
	the/at typical/jj plane/nn can/md see/vb the/at plane/nn ./.<br />
	a/at typical/jj fly/nn can/md see/vb ./.<br />
	who/wps might/md see/vb ?/.<br />
	the/at large/jj can/nn might/md see/vb a/at can/nn ./.<br />
	…</p></blockquote>
<p>　　无论什么方法，建立HMM词性标注器的关键就是根据这个训练集来学习一个合适的HMM模型了。我们先来确定HMM模型中的隐藏状态（词性标记）和观察符号（词型），这里只考察能从训练集中观察的到的词性标记和词型，因此上一节用到的create_key.pl这个脚本就可以派上用处了。对于确定训练集中的词型，利用example0.sentences就可以:<br />
　　../create_key.pl words.key < example0.sentences > example0.seq 　　<br />
　　所得到的<a href="http://www.52nlp.org/postagging/example/words.key"target=_blank>words.key</a>就包含了训练集中的词型及其数字编号：</p>
<blockquote><p>1        the<br />
2        plane<br />
8        a<br />
4        fly<br />
3        can<br />
7        see<br />
12       large<br />
11       ?<br />
10       might<br />
9        who<br />
6        typical<br />
5        .<br />
13       destroy </p></blockquote>
<p>　　注意另一个副产品example0.seq在这一节里并不需要。同样我们也需要利用create_key.pl来确定训练集中的词性标记及其编号，不过这里我们需要先将example0.all中的词性标记序列抽取出来。这里52nlp写了一个简单的脚本<a href="http://www.52nlp.org/postagging/example/extractpos.txt"target=_blank>extractpos.pl</a>来处理此事：<br />
　　./extractpos.pl example0.all example0.pos<br />
　　所得到的example0.pos文件部分示例如下：</p>
<blockquote><p>at nn md vb .<br />
at jj nn md vb at nn .<br />
at jj nn md vb .<br />
wps md vb .<br />
at jj nn md vb at nn .<br />
at nn md vb at jj nn .<br />
…</p></blockquote>
<p>　　有了这个文件，就可以再次利用create_key.pl了：<br />
　　../create_key.pl pos.key < example0.pos > example0.posseq<br />
　　所得到的<a href="http://www.52nlp.org/postagging/example/pos.key"target=_blank>pos.key</a>就包含了训练集中的词性标记及其数字编号：</p>
<blockquote><p>4        vb<br />
6        jj<br />
3        md<br />
2        nn<br />
7        wps<br />
5        .<br />
1        at </p></blockquote>
<p>　　同样，另一个副产品example0.posseq这里也不需要。<br />
　　确定好了该HMM模型中的隐藏状态（词性标记）和观察符号（词型）后，下一步便是要计算HMM模型中其他三个基本要素了，包括初始概率向量<img src="http://www.52nlp.cn/wp-content/plugins/WpMathEditor/phpmathpublisher/img/math_994.5_8edb2cf68079344a2edd739531259f6c.png" style="vertical-align:-5.5px; display: inline-block ;" alt="pi" title="pi"/>, 状态转移矩阵A，混淆矩阵B。<br />
　　我们先预处理一下语料库，主要的目标是对一元词性、二元词性及词型与词性的组合进行计数，这里52nlp写了一个脚本<a href="http://www.52nlp.org/postagging/example/pretrain.txt"target=_blank>pretrain.pl</a>来处理此事：<br />
　　./pretrain.pl example0.all lex ngram<br />
　　所得到的<a href="http://www.52nlp.org/postagging/example/lex"target=_blank>lex</a>文件主要是统计词型及其词性标记的组合在训练集中出现的次数：</p>
<blockquote><p>typical jj 25<br />
large jj 22<br />
might md 42<br />
fly nn 20<br />
a at 58<br />
? . 57<br />
plane nn 34<br />
the at 35<br />
who wps 57<br />
can nn 39<br />
see vb 45<br />
destroy vb 9<br />
fly vb 46<br />
. . 43<br />
can md 58 </p></blockquote>
<p>　　ngram文件主要包含的是一元词性及二元词性在训练集中的出现次数：</p>
<blockquote><p>vb 100<br />
jj 47<br />
md 100<br />
nn 93<br />
wps 57<br />
. 100<br />
at 93<br />
vb . 50<br />
md vb 100<br />
vb at 50<br />
at jj 47<br />
wps md 57<br />
nn . 50<br />
at nn 46<br />
jj nn 47<br />
nn md 43 </p></blockquote>
<p>　　有了这几个预处理文件，我们就可以训练一个简单的HMM词性标注模型了,这里52nlp写了一个约100行的脚本<a href="http://www.52nlp.org/postagging/example/hmmtrain.txt"target=_blank>hmmtrain.pl</a>来处理此事：<br />
　　./hmmtrain.pl words.key pos.key ngram lex example.hmm<br />
　　其中前四个是输入（准备）文件，最后一个<a href="http://www.52nlp.org/postagging/example/example.hmm"target=_blank>example.hmm</a>是输出文件，也就是本节的核心目标：一个合适的HMM词性标注模型，我们来简单看一下example.hmm：</p>
<blockquote><p>M= 13<br />
N= 7<br />
A:<br />
0.0100 0.4700 0.0100 0.0100 0.0100 0.4800 0.0100<br />
&#8230;<br />
B:<br />
0.3396 0.0094 0.0094 0.0094 0.0094 0.0094 0.0094 0.5566 0.0094 0.0094 0.0094 0.0094 0.0094<br />
&#8230;<br />
pi:<br />
0.1576 0.1576 0.1695 0.1695 0.1695 0.0797 0.0966 </p></blockquote>
<p>　　有兴趣的读者，可以对比一下上一节利用BaumWelch算法（前向-后向算法）所学习的HMM词性标注模型example0.hmm。<br />
　　关于这个脚本，其中对于状态转移矩阵A，混淆矩阵B的计算采用了最简单的加一平滑来处理那些在训练集中的未出现事件， 关于加一平滑，不清楚读者可以在“<a href="http://www.52nlp.cn/mit-nlp-third-lesson-probabilistic-language-modeling-fourth-part">MIT自然语言处理第三讲：概率语言模型（第四部分）</a>”  中找到参考，或者任何一本自然语言处理书中关于ngram语言模型的章节都会介绍的。<br />
　　现在我们就可以作上一节最后一个词性标注的练习了，仍然选择训练集中的第91句：</p>
<blockquote><p>the can can destroy the typical fly .</p></blockquote>
<p>　　可以利用Resnik教授的words2seq.pl来对此句进行转换，或者利用上一节已经处理好的UMDHMM可读的<a href="http://www.52nlp.org/postagging/example/example0.test"target=_blank>example0.test</a>：</p>
<blockquote><p>T= 8<br />
1 3 3 13 1 6 4 5</p></blockquote>
<p>　　现在就可以使用testvit及刚刚训练好的example.hmm来作词性标注了：<br />
　　../testvit example.hmm example0.test<br />
　　同样得到了一个隐藏状态序列：</p>
<blockquote><p>…<br />
Optimal state sequence:<br />
T= 8<br />
1 2 3 4 1 6 2 5<br />
…</p></blockquote>
<p>　　不过这次我们已经有了词性标记序列及其数字编号，可以对应着把它们写出来：</p>
<blockquote><p>at nn md vb at jj nn .</p></blockquote>
<p>　　与测试句子合在一起即是：</p>
<blockquote><p>the/at can/nn can/md destroy/vb the/at typical/jj fly/nn ./. </p></blockquote>
<p>　　对照example.all里的第91句：</p>
<blockquote><p>the/at can/nn can/md destroy/vb the/at typical/jj fly/nn ./. </p></blockquote>
<p>　　二者是一样的，不过这个绝不能说明此HMM词性标注器是100％正确的。<br />
　　好了，本节就到此为止了，这一节的相关例子及小脚本可以单独按链接下载，也可以打包在这里供下载：<a href="http://www.xun6.com/file/5b43de614/52nlpexample.zip.html"target=_blank>52nlpexample.zip</a><br />
　　不过这套小工具还不足以处理实际问题中的词性标注问题，下一节我将介绍一个更加健壮的HMM词性标注开源工具。</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6">词性标注6</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-eight-summary' rel='bookmark' title='Permanent Link: HMM学习最佳范例八：总结'>HMM学习最佳范例八：总结</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法5'>HMM学习最佳范例五：前向算法5</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HMM在自然语言处理中的应用一：词性标注4</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4#comments</comments>
		<pubDate>Fri, 13 Nov 2009 15:37:36 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[Philip Resnik]]></category>
		<category><![CDATA[UMDHMM]]></category>
		<category><![CDATA[层次短语模型]]></category>
		<category><![CDATA[统计机器翻译]]></category>
		<category><![CDATA[蒋伟]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2595</guid>
		<description><![CDATA[　　在继续昨晚的工作之前，先聊两句Philip Resnik教授。作为美国马里兰大学的教授，他的主要研究领域是自然语言处理，不过最近他被美国某个网站评为“当代卫生保健领域最具创新性和最有影响力的百位革新者之一(the most creative and influential innovators working in healthcare today)&#8221; ,Resnik教授也非常吃惊（Much to my surprise），之所以入选，再于他利用自然语言处理来提高医用编码（medical coding）的水平，具体什么是医用编码我不太清楚，不过这项工作至少说明自然语言处理还是有相当的应用前景的。
　　另外，05年的时候，他的一个学生开发了一套统计机器翻译系统，取名为“Hiero”，在当年NIST机器翻译评测中表现出色，虽然没有拿到第一，但是其提出的“层次短语模型”的论文获得了当年ACL的最佳论文，此人名叫David Chiang ，中文名蒋伟。
　　一年之前有一段时间我对Web平行语料库自动采集比较感兴趣，就找了很多这方面的paper,其中最有名的当属Resnik教授的Strand和LDC的BITS了，只是当时没有仔细考虑过他是何方神圣。今天仔细读了一下他的个人主页，觉得他在自然语言处理领域也是一个比较神奇的人物，有兴趣的读者不妨看看他的这个主页，对于扩展研究思路和把握当前的研究动态还是非常有好处的。好了，以下我们转入HMM词性标注的正题。
　　在将训练集转换成UMDHMM需要的形式后，就可以利用UMDHMM中编译好的可执行程序esthmm来训练HMM模型了。esthmm的作用是，对于给定的观察符号序列，利用BaumWelch算法（前向-后向算法）学习隐马尔科夫模型HMM。这里采用如下的命令训练HMM模型：
　　../esthmm -N 7 -M 13 example0.seq > example0.hmm
　　其中 N指示的隐藏状态数目，这里代表词性标记，这个例子中可以随便选，我选的是7，下一节会用到。注意Resnik教授给出的命令：
　　esthmm 6 13 example0.seq > example0.hmm
　　是错误的，需要加上”-N”和“-M”。example0.hmm的部分形式如下：
M= 13
N= 7
A:
0.001002 0.001003 0.001000 0.001000 0.462993 0.001000 0.538002
&#8230;
B:
0.001000 0.366300 0.420021 0.215676 0.001000 0.001001 0.001001 0.001000 0.001001 0.001000 0.001000 0.001001 0.001000
&#8230;
pi:
0.001000 0.001000 0.001005 0.001000 0.001000 [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　在继续昨晚的工作之前，先聊两句Philip Resnik教授。作为美国马里兰大学的教授，他的主要研究领域是自然语言处理，不过最近他被美国某个网站评为“当代卫生保健领域最具创新性和最有影响力的百位革新者之一(the most creative and influential innovators working in healthcare today)&#8221; ,Resnik教授也非常吃惊（Much to my surprise），之所以入选，再于他利用自然语言处理来提高医用编码（medical coding）的水平，具体什么是医用编码我不太清楚，不过这项工作至少说明自然语言处理还是有相当的应用前景的。<span id="more-2595"></span><br />
　　另外，05年的时候，他的一个学生开发了一套统计机器翻译系统，取名为“Hiero”，在当年NIST机器翻译评测中表现出色，虽然没有拿到第一，但是其提出的“层次短语模型”的论文获得了当年ACL的最佳论文，此人名叫David Chiang ，中文名蒋伟。<br />
　　一年之前有一段时间我对Web<a href="http://www.52nlp.cn/bits-structure-analysis">平行语料库自动采集</a>比较感兴趣，就找了很多这方面的paper,其中最有名的当属Resnik教授的Strand和LDC的BITS了，只是当时没有仔细考虑过他是何方神圣。今天仔细读了一下他的个人主页，觉得他在自然语言处理领域也是一个比较神奇的人物，有兴趣的读者不妨看看他的这个<a href="http://www.umiacs.umd.edu/~resnik/"target=_blank>主页</a>，对于扩展研究思路和把握当前的研究动态还是非常有好处的。好了，以下我们转入HMM词性标注的正题。</p>
<p>　　在将训练集转换成<a href="http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4">UMDHMM</a>需要的形式后，就可以利用UMDHMM中编译好的可执行程序esthmm来训练HMM模型了。esthmm的作用是，对于给定的观察符号序列，利用BaumWelch算法（前向-后向算法）学习隐马尔科夫模型HMM。这里采用如下的命令训练HMM模型：<br />
　　../esthmm -N 7 -M 13 example0.seq > example0.hmm<br />
　　其中 N指示的隐藏状态数目，这里代表词性标记，这个例子中可以随便选，我选的是7，下一节会用到。注意Resnik教授给出的命令：<br />
　　esthmm 6 13 example0.seq > example0.hmm<br />
　　是错误的，需要加上”-N”和“-M”。example0.hmm的部分形式如下：</p>
<blockquote><p>M= 13<br />
N= 7<br />
A:<br />
0.001002 0.001003 0.001000 0.001000 0.462993 0.001000 0.538002<br />
&#8230;<br />
B:<br />
0.001000 0.366300 0.420021 0.215676 0.001000 0.001001 0.001001 0.001000 0.001001 0.001000 0.001000 0.001001 0.001000<br />
&#8230;<br />
pi:<br />
0.001000 0.001000 0.001005 0.001000 0.001000 0.999995 0.001000</p></blockquote>
<p>　　抛开这个HMM模型的效果如何，这里不得不感叹前向－后向算法或者EM算法的神奇。当然这里只是一个练习，实际处理中需要加上一些辅助手段，譬如词典之类的，这种无监督的学习是非常有难度的。<br />
　　有了这个HMM模型，就可以作些练习了。首先我们利用genseq来随机生成句子：<br />
　　../genseq -T 10 example0.hmm > example0.sen.seq<br />
　　其中T指示的是输出序列的长度，如下所示：</p>
<blockquote><p>T= 10<br />
8 12 4 5 9 3 7 5 9 3</p></blockquote>
<p>　　注意 Resink教授给出的命令仍然是错的，上面的输出结果可读性不好，读者可以对照着example0.key将这个句子写出来，不过Resnik教授写了一个ints2words.pl的脚本，帮助我们完成了这件事：<br />
　　../ints2words.pl example0.key < example0.sen.seq > example0.sen<br />
　　example0.sen中包含的就是这个HMM模型随机生成的句子：</p>
<blockquote><p>a large fly . who can see . who can</p></blockquote>
<p>　　虽然不是一句整句，但是局部还是可读的，注意这两步可以利用管道命令合并在一起：<br />
　　../genseq -T 10 example0.hmm | ../ints2words.pl example0.key<br />
　　注意每次的结果并不相同。<br />
　　最后一个练习也是最重要的一个：对于一个测试句子寻找其最可能的隐藏状态序列（Finding the Hidden State Sequence for a Test Sentence），对于本文来说，也就是词性序列了。我们使用testvit来完成这个任务，当然，前提是先准备好测试句子。可以根据exampl0.key中的单词和标点自己组织句子，也可以利用上一个练习随机生成一个句子，不过我选择了训练集中的第91句，比较典型：</p>
<blockquote><p>the can can destroy the typical fly .</p></blockquote>
<p>　　虽然违背了自然语言处理中实验的训练集与测试集分离的原则，不过考虑到这只是一个练习，另外也是为下一节做个小准备，我们就以此句话为例建立一个文件example0.test.words。不过UMDHMM还是只认数字，所以Resnik教授有为我们写了一个words2seq.pl处理此事：<br />
　　../words2seq.pl example0.key < example0.test.words > example0.test<br />
　　example0.test就是UMDHMM可以使用的测试集了，如下所示：</p>
<blockquote><p>T= 8<br />
1 3 3 13 1 6 4 5</p></blockquote>
<p>　　现在就可以使用testvit，这次Resnik教授没有写错：<br />
 　　../testvit example0.hmm example0.test<br />
　　看到结果了吗？我们得到了一个隐藏状态序列：</p>
<blockquote><p>…<br />
Optimal state sequence:<br />
T= 8<br />
6 1 5 2 6 3 1 7<br />
…</p></blockquote>
<p>　　如果之前你已经建立好了隐藏状态与词性标记的一一映射，那么就可以把它们所对应的词性标记一个一个写出来了！这个词性标注结果是否与你的期望一样？<br />
　　如果你还没有建立这个映射，那么就可以好好发挥一下想象力了！无论如何，恭喜你和52nlp一起完成了Philip Resnik教授布置的这个练习。</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5">词性标注5</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HMM在自然语言处理中的应用一：词性标注3</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:53:27 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Brown语料库]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[Philip Resnik]]></category>
		<category><![CDATA[UMDHMM]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2577</guid>
		<description><![CDATA[　　原计划这一节讲解如何利用UMDHMM这个HMM工具包来实现一个toy版本的HMM词性标注器，自己也写了几个相关的小脚本，不过由于处理过程中需要借用Philip Resnik教授写的另外几个小脚本，所以这里先介绍一下他的工作。
　　Resnik教授利用UMDHMM写了一个关于如何使用隐马尔科夫模型的介绍和练习，主要目标包括以下四个方面：
　　1、 在一个“似英语”的文本上训练一个HMM模型（Train an HMM on a sample of English-like text ）；
　　2、对于训练好的模型进行检测（Inspect the resulting model）；
　　3、根据训练好的模型随机生成句子（Generate sentences at random from the model）；
　　4、对于测试句子寻找最可能隐藏状态序列（Create test sentences and find the most likely hidden state sequence）。
　　我的工作和Resnik教授的主要区别再于，他的训练集没有进行词性标注，利用了前向－后向算法生成HMM模型，并且需要读者有一定想象能力来作虚拟词性标注；而我所用的训练集是有标注的，主要是通过统计的方法生成HMM模型，并且对于测试集标注是直观的。但是，殊途同归，都是为了建立一个HMM模型，都是为了能利用UMDHMM。
　　关于如何下载和使用这个工具包具体请参考“Exercise: Using a Hidden Markov Model”，这里我主要讲解一些要点和一个例子。
　　下载这个工具包主要是在命令行方式下利用ftp命令，估计有的读者不太习惯这种方式，所以我在网络硬盘上上传了一个已下载的版本，有需要的读者可以去这个地址下载： solaris.tar.gz。
　　首先对这个工具包解压：tar -zxvf solaris.tar.gz
　　主要包括几个perl脚本，UMDHMM编译后生成的几个可执行程序以及两个样例文件夹，需要注意的是，几个perl脚本需要根据你所使用的环境修改perl的执行路径，另外UMDHMM的几个可执行程序是Resnik教授在Solaris 5.5系统下编译的，并不适用于其他操作系统，因此最好自己单独编译一下UMDHMM，关于UMDHMM的编译和使用，不太清楚的读者可以先看一下我之前写得一点介绍：UMDHMM。
　　对于这几个perl脚本，需要作一点预处理，第一使其可执行：chmod u+x *.pl 或 chmod 755 *.pl；第二，修改每个脚本的perl解释器目录，由于我用的是ubuntu9.04，所以处理的方法是，注释掉第一行，将第二行”/usr/local/bin/perl5“修改为“/usr/bin/perl”。
　　修改完毕perl脚本使其可执行之后，就可以进入example0目录进行练习了：cd example0
　　example0目录下有一个example0.train文件，只有一行，但是包含了一百句英语句子，这一百句英语句子只用了11个单词和两个标点符号”.”和“？”生成，是一个“似英语”句子生成器生成的，主目录下有这个程序，是lisp程序写的，我不明白怎么使用。如下所示部分句子：
the plane can fly . the typical plane can [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/several-different-programming-language-version-of-hmm' rel='bookmark' title='Permanent Link: 几种不同程序语言的HMM版本'>几种不同程序语言的HMM版本</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-three-hidden-patterns' rel='bookmark' title='Permanent Link: HMM学习最佳范例三：隐藏模式'>HMM学习最佳范例三：隐藏模式</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　原计划这一节讲解如何利用UMDHMM这个HMM工具包来实现一个toy版本的HMM词性标注器，自己也写了几个相关的小脚本，不过由于处理过程中需要借用Philip Resnik教授写的另外几个小脚本，所以这里先介绍一下他的工作。<span id="more-2577"></span><br />
　　Resnik教授利用UMDHMM写了一个关于如何使用隐马尔科夫模型的介绍和练习，主要目标包括以下四个方面：<br />
　　1、 在一个“似英语”的文本上训练一个HMM模型（Train an HMM on a sample of English-like text ）；<br />
　　2、对于训练好的模型进行检测（Inspect the resulting model）；<br />
　　3、根据训练好的模型随机生成句子（Generate sentences at random from the model）；<br />
　　4、对于测试句子寻找最可能隐藏状态序列（Create test sentences and find the most likely hidden state sequence）。<br />
　　我的工作和Resnik教授的主要区别再于，他的训练集没有进行词性标注，利用了前向－后向算法生成HMM模型，并且需要读者有一定想象能力来作虚拟词性标注；而我所用的训练集是有标注的，主要是通过统计的方法生成HMM模型，并且对于测试集标注是直观的。但是，殊途同归，都是为了建立一个HMM模型，都是为了能利用UMDHMM。<br />
　　关于如何下载和使用这个工具包具体请参考“<a href="http://www.umiacs.umd.edu/~resnik/nlstat_tutorial_summer1998/Lab_hmm.html"target=_blank>Exercise: Using a Hidden Markov Model</a>”，这里我主要讲解一些要点和一个例子。<br />
　　下载这个工具包主要是在命令行方式下利用ftp命令，估计有的读者不太习惯这种方式，所以我在网络硬盘上上传了一个已下载的版本，有需要的读者可以去这个地址下载： <a href="http://www.xun6.com/file/108fa6ae5/solaris.tar.gz.html"target=_blank>solaris.tar.gz</a>。<br />
　　首先对这个工具包解压：tar -zxvf solaris.tar.gz<br />
　　主要包括几个perl脚本，UMDHMM编译后生成的几个可执行程序以及两个样例文件夹，需要注意的是，几个perl脚本需要根据你所使用的环境修改perl的执行路径，另外UMDHMM的几个可执行程序是Resnik教授在Solaris 5.5系统下编译的，并不适用于其他操作系统，因此最好自己单独编译一下UMDHMM，关于UMDHMM的编译和使用，不太清楚的读者可以先看一下我之前写得一点介绍：<a href="http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4">UMDHMM</a>。<br />
　　对于这几个perl脚本，需要作一点预处理，第一使其可执行：chmod u+x *.pl 或 chmod 755 *.pl；第二，修改每个脚本的perl解释器目录，由于我用的是ubuntu9.04，所以处理的方法是，注释掉第一行，将第二行”/usr/local/bin/perl5“修改为“/usr/bin/perl”。<br />
　　修改完毕perl脚本使其可执行之后，就可以进入example0目录进行练习了：cd example0<br />
　　example0目录下有一个example0.train文件，只有一行，但是包含了一百句英语句子，这一百句英语句子只用了11个单词和两个标点符号”.”和“？”生成，是一个“似英语”句子生成器生成的，主目录下有这个程序，是lisp程序写的，我不明白怎么使用。如下所示部分句子：</p>
<blockquote><p>the plane can fly . the typical plane can see the plane . a typical fly can see . who might see ? the large can might see a can . the can can destroy a large can … </p></blockquote>
<p>　　对于这个训练集，Resnik教授建议读者写一个简单的词性列表，并尝试为每一个单词分配一个词性标记，并且同一个单词可以有不同的标记。注意这个练习并不是要在这个文件中进行，可以在别的地方，譬如纸上或者心里都可以，不做也行的。我就偷懒了，因为不知道如何标记，并且手工标记的工作量较大，我用了一个基于Brown语料库训练的词性标注器标注了一下，这个之后再详细说明。<br />
　　由于UMDHMM这个工具包处理的都是数字而非符号，所以需要先将这个训练集转换为数字序列，由create_key.pl这个脚本完成：<br />
　　../create_key.pl example0.key < example0.train > example0.seq<br />
　　这一步生成两个文件：example0.key及example0.seq，前者主要将训练集中出现的单词符号映射为数字编号,如：</p>
<blockquote><p>1        the<br />
2        plane<br />
8        a<br />
4        fly<br />
3        can<br />
7        see<br />
12       large<br />
11       ?<br />
10       might<br />
9        who<br />
6        typical<br />
5        .<br />
13       destroy
</p></blockquote>
<p>　　后者主要根据example0.key中的编号对训练集进行转换，并且形式为UMDHH中的训练集输入形式，如：</p>
<blockquote><p>T= 590<br />
1 2 3 4 5 1 6 2 3 7 1 2 5 8 6 4 3 7 5 9 10 7 11 1 12 3 10 7 8 3 5 1 3 3 13 8 12 3 5 9 10 7 11 9 10 4 11 9 3 4 11 1 3 10 7 5 1 2 3 4 8 6 4 5 9 3 4 11 1 12 4 3 4 5 9 3 7 11 9 3 7 8 3 11&#8230;</p></blockquote>
<p>　　其中T代表了训练集中的单词符号数目。<br />
　　今晚有点晚了，先到此为止吧，明晚继续！</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4">词性标注4</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/several-different-programming-language-version-of-hmm' rel='bookmark' title='Permanent Link: 几种不同程序语言的HMM版本'>几种不同程序语言的HMM版本</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-three-hidden-patterns' rel='bookmark' title='Permanent Link: HMM学习最佳范例三：隐藏模式'>HMM学习最佳范例三：隐藏模式</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HMM在自然语言处理中的应用一：词性标注2</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2#comments</comments>
		<pubDate>Sat, 07 Nov 2009 10:52:17 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Brown语料库]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[数学建模]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2519</guid>
		<description><![CDATA[　　上一节我们对自然语言处理中词性标注的基本问题进行了描述，从本节开始我们将详细介绍HMM与词性标注的关系以及如何利用HMM进行词性标注。首先回顾一下隐马尔科夫模型(HMM)的定义和三大基本问题，并由此与词性标注的基本问题进行一个对比。
　　隐马尔科夫模型(HMM)是什么？说白了，就是一个数学模型，用一堆数学符号和参数表示而已，包括隐藏状态集合、观察符号集合、初始概率向量, 状态转移矩阵A，混淆矩阵B。
　　隐马尔科夫模型(HMM)的三大基本问题与解决方案包括：
　　1. 对于一个观察序列匹配最可能的系统——评估，使用前向算法（forward algorithm）解决；
　　2. 对于已生成的一个观察序列，确定最可能的隐藏状态序列——解码，使用维特比算法（Viterbi algorithm）解决；
　　3. 对于已生成的观察序列，决定最可能的模型参数——学习，使用前向-后向算法（forward-backward algorithm）解决。
　　回顾完HMM，这里暂且先放下词性标注，瞎扯一下数学建模。
　　记得以前在大学里参加数学建模竞赛，本着拿奖的目的，稀里糊涂的就和几个同学一起组队参加，并没有仔细考虑过数学建模的本质到底是什么。反正感觉和平常作数学题不同，数学题都是定义好的，只需给出一个解答就行，而数学建模给的问题都很实际，并没有按数学题的形式出题，不仅要把这个实际问题转化为一个合理的数学问题，还要给出一个解答，由于自己概括问题的能力有限，在数学建模竞赛上也基本毫无建树。
　　我在Google上搜索了一下数学建模的定义，有好几种解释，觉得下面这个最符合本质：
　　把现实世界中的实际问题加以提炼，抽象为数学模型，求出模型的 解，验证模型的合理性，并用该数学模型所提供的解答来解释现实问题，我们把 数学知识的这一应用过程称为数学 建模。
　　好了，这就是数学建模，如果把词性标注问题作为一个数学建模的题目来出，该如何作答？套用上面的定义，可以解释为：
　　1、对词性标注问题进行提炼：词性标注本质上是一个分类问题，对于句子中的每一个单词W，找到一个合适的词类类别T，也就是词性标记，不过词性标注考虑的是整体标记的好坏，既整个句子的序列标记问题；
　　2、抽象为数学模型：对于分类问题，有很多现成的数学模型和框架可以套用，譬如HMM、最大熵模型、条件随机场、SVM等等；
　　3、求出模型的解：上述模型和框架一旦可以套用，如何求解就基本确定好了，就像HMM中不仅描述了三大基本问题，并相应的给出了求解方案一样；
　　4、验证模型的合理性：就是词性标注的准确率等评测指标了，在自然语言处理中属于必不可少的评测环节；
　　5、解释现实问题：如果词性标注的各项指标够好，就可以利用该数学模型构造一个词性标注器来解决某种语言的标注问题了！
　　词性标注的数学建模就这样了，自然语言处理中的多数分类问题与此相似。这里讲得是HMM的应用，所以其他模型暂且不表，以后有机会有条件了我们再说。
　　如何建立一个与词性标注问题相关联的HMM模型？首先必须确定HMM模型中的隐藏状态和观察符号，也可以说成观察状态，由于我们是根据输入句子输出词性序列，因此可以将词性标记序列作为隐藏状态，而把句子中的单词作为观察符号，那么对于Brown语料库来说，就有87个隐藏状态（标记集）和将近4万多个观察符号（词型）。
　　确定了隐藏状态和观察符号，我们就可以根据训练语料库的性质来学习HMM的各项参数了。如果训练语料已经做好了标注，那么学习这个HMM模型的问题就比较简单，只需要计数就可以完成HMM各个模型参数的统计，如标记间的状态转移概率可以通过如下公式求出：
　　　　　　　　P（Ti&#124;Tj) = C(Tj,Tk)/C(Tj)
　　而每个状态（标记）随对应的符号（单词）的发射概率可由下式求出：
　　　　　　　　P（Wm&#124;Tj) = C(Wm,Tj)/C(Tj)
　　其中符号C代表的是其括号内因子在语料库中的计数。
　　如果训练语料库没有标注，那么HMM的第三大基本问题“学习”就可以派上用处了，通过一些辅助资源，如词典等，利用前向－后向算法也可以学习一个HMM模型，不过这个模型比之有标注语料库训练出来的模型要差一些。
　　总之，我们已经训练了一个与语料库对应的HMM词性标注模型，那么如何利用这个模型来解决词性标注问题呢？当然是采用维特比算法解码了， HMM模型第二大基本问题就是专门来解决这个问题的。
　　说完了如何建模，下一节我们将利用UMDHMM这个HMM工具包来实现一个toy版本的HMM词性标注器。
未完待续：词性标注3
注：原创文章，转载请注明出处“我爱自然语言处理”：www.52nlp.cn
本文链接地址：http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2










相关文章:HMM在自然语言处理中的应用一：词性标注3
HMM在自然语言处理中的应用一：词性标注1
HMM在自然语言处理中的应用一：词性标注6
HMM在自然语言处理中的应用一：词性标注4
HMM在自然语言处理中的应用一：词性标注5
HMM学习最佳范例七：前向-后向算法4
HMM学习最佳范例四：隐马尔科夫模型
MIT自然语言处理第四讲：标注（第四部分）
HMM学习最佳范例五：前向算法3
MIT自然语言处理第四讲：标注（第三部分）



相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　上一节我们对自然语言处理中词性标注的基本问题进行了描述，从本节开始我们将详细介绍HMM与词性标注的关系以及如何利用HMM进行词性标注。首先回顾一下隐马尔科夫模型(HMM)的定义和三大基本问题，并由此与词性标注的基本问题进行一个对比。<span id="more-2519"></span><br />
　　隐马尔科夫模型(HMM)是什么？说白了，就是一个数学模型，用一堆数学符号和参数表示而已，包括隐藏状态集合、观察符号集合、初始概率向量<img src="http://www.52nlp.cn/wp-content/plugins/WpMathEditor/phpmathpublisher/img/math_994.5_8edb2cf68079344a2edd739531259f6c.png" style="vertical-align:-5.5px; display: inline-block ;" alt="pi" title="pi"/>, 状态转移矩阵A，混淆矩阵B。<br />
　　隐马尔科夫模型(HMM)的三大基本问题与解决方案包括：<br />
　　1. 对于一个观察序列匹配最可能的系统——评估，使用前向算法（forward algorithm）解决；<br />
　　2. 对于已生成的一个观察序列，确定最可能的隐藏状态序列——解码，使用维特比算法（Viterbi algorithm）解决；<br />
　　3. 对于已生成的观察序列，决定最可能的模型参数——学习，使用前向-后向算法（forward-backward algorithm）解决。<br />
　　回顾完HMM，这里暂且先放下词性标注，瞎扯一下数学建模。<br />
　　记得以前在大学里参加数学建模竞赛，本着拿奖的目的，稀里糊涂的就和几个同学一起组队参加，并没有仔细考虑过数学建模的本质到底是什么。反正感觉和平常作数学题不同，数学题都是定义好的，只需给出一个解答就行，而数学建模给的问题都很实际，并没有按数学题的形式出题，不仅要把这个实际问题转化为一个合理的数学问题，还要给出一个解答，由于自己概括问题的能力有限，在数学建模竞赛上也基本毫无建树。<br />
　　我在Google上搜索了一下数学建模的定义，有好几种解释，觉得下面这个最符合本质：<br />
　　把现实世界中的实际问题加以提炼，抽象为数学模型，求出模型的 解，验证模型的合理性，并用该数学模型所提供的解答来解释现实问题，我们把 数学知识的这一应用过程称为数学 建模。<br />
　　好了，这就是数学建模，如果把词性标注问题作为一个数学建模的题目来出，该如何作答？套用上面的定义，可以解释为：<br />
　　1、对词性标注问题进行提炼：词性标注本质上是一个分类问题，对于句子中的每一个单词W，找到一个合适的词类类别T，也就是词性标记，不过词性标注考虑的是整体标记的好坏，既整个句子的序列标记问题；<br />
　　2、抽象为数学模型：对于分类问题，有很多现成的数学模型和框架可以套用，譬如HMM、最大熵模型、条件随机场、SVM等等；<br />
　　3、求出模型的解：上述模型和框架一旦可以套用，如何求解就基本确定好了，就像HMM中不仅描述了三大基本问题，并相应的给出了求解方案一样；<br />
　　4、验证模型的合理性：就是词性标注的准确率等评测指标了，在自然语言处理中属于必不可少的评测环节；<br />
　　5、解释现实问题：如果词性标注的各项指标够好，就可以利用该数学模型构造一个词性标注器来解决某种语言的标注问题了！<br />
　　词性标注的数学建模就这样了，自然语言处理中的多数分类问题与此相似。这里讲得是HMM的应用，所以其他模型暂且不表，以后有机会有条件了我们再说。<br />
　　如何建立一个与词性标注问题相关联的HMM模型？首先必须确定HMM模型中的隐藏状态和观察符号，也可以说成观察状态，由于我们是根据输入句子输出词性序列，因此可以将词性标记序列作为隐藏状态，而把句子中的单词作为观察符号，那么对于Brown语料库来说，就有87个隐藏状态（标记集）和将近4万多个观察符号（词型）。<br />
　　确定了隐藏状态和观察符号，我们就可以根据训练语料库的性质来学习HMM的各项参数了。如果训练语料已经做好了标注，那么学习这个HMM模型的问题就比较简单，只需要计数就可以完成HMM各个模型参数的统计，如标记间的状态转移概率可以通过如下公式求出：<br />
　　　　　　　　P（Ti|Tj) = C(Tj,Tk)/C(Tj)<br />
　　而每个状态（标记）随对应的符号（单词）的发射概率可由下式求出：<br />
　　　　　　　　P（Wm|Tj) = C(Wm,Tj)/C(Tj)<br />
　　其中符号C代表的是其括号内因子在语料库中的计数。<br />
　　如果训练语料库没有标注，那么HMM的第三大基本问题“学习”就可以派上用处了，通过一些辅助资源，如词典等，利用前向－后向算法也可以学习一个HMM模型，不过这个模型比之有标注语料库训练出来的模型要差一些。<br />
　　总之，我们已经训练了一个与语料库对应的HMM词性标注模型，那么如何利用这个模型来解决词性标注问题呢？当然是采用维特比算法解码了， HMM模型第二大基本问题就是专门来解决这个问题的。<br />
　　说完了如何建模，下一节我们将利用<a href="http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4">UMDHMM</a>这个HMM工具包来实现一个toy版本的HMM词性标注器。</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3">词性标注3</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注1'>HMM在自然语言处理中的应用一：词性标注1</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HMM在自然语言处理中的应用一：词性标注1</title>
		<link>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1</link>
		<comments>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1#comments</comments>
		<pubDate>Sun, 01 Nov 2009 11:06:31 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[标注]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Brown语料库]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[hmm应用]]></category>
		<category><![CDATA[统计自然语言处理基础]]></category>
		<category><![CDATA[自然语言处理综论]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2480</guid>
		<description><![CDATA[　　词性标注（Part-of-Speech tagging 或 POS tagging)是指对于句子中的每个词都指派一个合适的词性，也就是要确定每个词是名词、动词、形容词或其他词性的过程，又称词类标注或者简称标注。词性标注是自然语言处理中的一项基础任务，在语音识别、信息检索及自然语言处理的许多领域都发挥着重要的作用。因此，在关于自然语言处理的书籍中，都会将词性标注单列一章重点讲解，对此有兴趣的读者可参考《自然语言处理综论》第一版第8章或《统计自然语言处理基础》第10章，本文部分内容也参考自这两本自然语言处理的经典书籍。
　　我们以Brown语料库中的句子为例，词性标注的任务指的是，对于输入句子：
　The Fulton County Grand Jury said Friday an investigation of Atlanta&#8217;s recent primary election produced &#8220; no evidence &#8221; that any irregularities took place .
　　需要为句子中的每个单词标上一个合适的词性标记，既输出含有词性标记句子：
　The/at-tl Fulton/np-tl County/nn-tl Grand/jj-tl Jury/nn-tl said/vbd Friday/nr an/at investigation/nn of/in Atlanta&#8217;s/np$ recent/jj primary/jj election/nn produced/vbn &#8220;/&#8220; no/at evidence/nn &#8221;/&#8221; that/cs any/dti irregularities/nns took/vbd place/nn ./.
　　在进行词性标注时，前提条件之一便是选择什么样的标记集？Brown语料库标记集有87个，而英语中其他标记集多数是从Brown语料库中的标记集发展而来的，如最常用的Penn Treebank标记集，包含45个标记，是小标记集。汉语标记集中常用的有北大《人民日报》语料库词性标记集、计算所汉语词性标记集等。
　　关于Brwon语料库标记集的详细信息可参考：		　　　
　　　http://www.comp.leeds.ac.uk/amalgam/tagsets/brown.html
　　关于计算所汉语词性标记集的详细信息可参考：
　　　http://www.ictclas.org/ictclas_docs_003.html
　　在确定使用某个标记集之后，下一步便是如何进行词性标注了！如果每个单词仅仅对应一个词性标记，那么词性标注就非常容易了。但是语言本身的复杂性导致了并非每一个单词只有一个词性标记，而存在一部分单词有多个词性标记可以选择，如book这个单词，既可以是动词（book that [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-second-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第二部分）'>MIT自然语言处理第四讲：标注（第二部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第一部分）'>MIT自然语言处理第四讲：标注（第一部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fifth-lesson-maximum-entropy-and-log-linear-models-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第五讲：最大熵和对数线性模型（第一部分）'>MIT自然语言处理第五讲：最大熵和对数线性模型（第一部分）</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>　　词性标注（Part-of-Speech tagging 或 POS tagging)是指对于句子中的每个词都指派一个合适的词性，也就是要确定每个词是名词、动词、形容词或其他词性的过程，又称词类标注或者简称标注。词性标注是自然语言处理中的一项基础任务，在语音识别、信息检索及自然语言处理的许多领域都发挥着重要的作用。因此，在关于自然语言处理的书籍中，都会将词性标注单列一章重点讲解，对此有兴趣的读者可参考《自然语言处理综论》第一版第8章或《统计自然语言处理基础》第10章，本文部分内容也参考自这两本自然语言处理的经典书籍。<span id="more-2480"></span><br />
　　我们以Brown语料库中的句子为例，词性标注的任务指的是，对于输入句子：<br />
　The Fulton County Grand Jury said Friday an investigation of Atlanta&#8217;s recent primary election produced &#8220; no evidence &#8221; that any irregularities took place .<br />
　　需要为句子中的每个单词标上一个合适的词性标记，既输出含有词性标记句子：<br />
　The/at-tl Fulton/np-tl County/nn-tl Grand/jj-tl Jury/nn-tl said/vbd Friday/nr an/at investigation/nn of/in Atlanta&#8217;s/np$ recent/jj primary/jj election/nn produced/vbn &#8220;/&#8220; no/at evidence/nn &#8221;/&#8221; that/cs any/dti irregularities/nns took/vbd place/nn ./.<br />
　　在进行词性标注时，前提条件之一便是选择什么样的标记集？Brown语料库标记集有87个，而英语中其他标记集多数是从Brown语料库中的标记集发展而来的，如最常用的Penn Treebank标记集，包含45个标记，是小标记集。汉语标记集中常用的有北大《人民日报》语料库词性标记集、计算所汉语词性标记集等。<br />
　　关于Brwon语料库标记集的详细信息可参考：		　　　<br />
　　　<a href="http://www.comp.leeds.ac.uk/amalgam/tagsets/brown.html"target=_blank>http://www.comp.leeds.ac.uk/amalgam/tagsets/brown.html</a><br />
　　关于计算所汉语词性标记集的详细信息可参考：<br />
　　　<a href="http://www.ictclas.org/ictclas_docs_003.html"target=_blank>http://www.ictclas.org/ictclas_docs_003.html</a><br />
　　在确定使用某个标记集之后，下一步便是如何进行词性标注了！如果每个单词仅仅对应一个词性标记，那么词性标注就非常容易了。但是语言本身的复杂性导致了并非每一个单词只有一个词性标记，而存在一部分单词有多个词性标记可以选择，如book这个单词，既可以是动词（book that flight)，也可以是名词(hand me that book)，因此，词性标注的关键问题就是消解这样的歧义，也就是对于句子中的每一个单词在一定的上下文中选择恰如其分的标记。<br />
　　关于词性标注歧义问题，对Brown语料库进行统计，按歧义程度排列的词型数目（The number of word types in Brown corpus by degree of ambiguity）DeRose(1988)给出了如下的标记歧义表：<br />
　　无歧义（Unambiguous）只有1个标记： 35,340<br />
　　　　歧义（Ambiguous） 有2-7个标记：  	4,100<br />
　　　　　　　　　　　　　　　　2个标记：3,764<br />
　　　　　　　　　　　　　　　　3个标记：264<br />
　　　　　　　　　　　　　　　　4个标记：61<br />
　　　　　　　　　　　　　　　　5个标记：12<br />
　　　　　　　　　　　　　　　　6个标记：2<br />
　　　　　　　　　　　　　　　　7个标记：1<br />
　　可见英语中的大多数单词都是没有歧义的，也就是这些单词只有一个单独的标记。但是，英语中的最常用单词很多都是有歧义的，因此，任何一个词性标注算法的关键归根结底还是如何解决词性标注中的歧义消解问题。<br />
　　大多数的标注算法可以归纳为三类：一类是基于规则的标注算法（rule-based tagger)，一类是随机标注算法（stochastic tagger)，最后一类是混合型的标注算法。基于规则的标注算法一般都包括一个手工制作的歧义消解规则库；随机标注算法一般会使用一个训练语料库来计算在给定的上下文中某一给定单词具有某一给定标记的概率，如基于HMM的标注算法；而混合型标注算法具有上述两种算法的特点，如TBL标注算法。<br />
　　关于词性标注的基本问题本节就到此为止了，也算是一点准备工作，下一节我们将进入与HMM相关的词性标注问题的正题！</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2">词性标注2</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1">http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-6' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注6'>HMM在自然语言处理中的应用一：词性标注6</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-2' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注2'>HMM在自然语言处理中的应用一：词性标注2</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-3' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注3'>HMM在自然语言处理中的应用一：词性标注3</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-4' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注4'>HMM在自然语言处理中的应用一：词性标注4</a></li>
<li><a href='http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-5' rel='bookmark' title='Permanent Link: HMM在自然语言处理中的应用一：词性标注5'>HMM在自然语言处理中的应用一：词性标注5</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-fourth-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第四部分）'>MIT自然语言处理第四讲：标注（第四部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-third-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第三部分）'>MIT自然语言处理第四讲：标注（第三部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-second-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第二部分）'>MIT自然语言处理第四讲：标注（第二部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fourth-lesson-tagging-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第四讲：标注（第一部分）'>MIT自然语言处理第四讲：标注（第一部分）</a></li>
<li><a href='http://www.52nlp.cn/mit-nlp-fifth-lesson-maximum-entropy-and-log-linear-models-first-part' rel='bookmark' title='Permanent Link: MIT自然语言处理第五讲：最大熵和对数线性模型（第一部分）'>MIT自然语言处理第五讲：最大熵和对数线性模型（第一部分）</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HMM学习最佳范例八：总结</title>
		<link>http://www.52nlp.cn/hmm-learn-best-practices-eight-summary</link>
		<comments>http://www.52nlp.cn/hmm-learn-best-practices-eight-summary#comments</comments>
		<pubDate>Sun, 18 Oct 2009 07:24:25 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[HMM学习]]></category>
		<category><![CDATA[中文分词]]></category>
		<category><![CDATA[前向-后向算法]]></category>
		<category><![CDATA[前向算法]]></category>
		<category><![CDATA[维特比算法]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[词性标注]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2376</guid>
		<description><![CDATA[八、总结(Summary)
　　通常，模式并不是单独的出现，而是作为时间序列中的一个部分——这个过程有时候可以被辅助用来对它们进行识别。在基于时间的进程中，通常都会使用一些假设——一个最常用的假设是进程的状态只依赖于前面N个状态——这样我们就有了一个N阶马尔科夫模型。最简单的例子是N = 1。
　　存在很多例子，在这些例子中进程的状态（模式）是不能够被直接观察的，但是可以非直接地，或者概率地被观察为模式的另外一种集合——这样我们就可以定义一类隐马尔科夫模型——这些模型已被证明在当前许多研究领域，尤其是语音识别领域具有非常大的价值。
　　在实际的过程中这些模型提出了三个问题都可以得到立即有效的解决，分别是：
　　* 评估：对于一个给定的隐马尔科夫模型其生成一个给定的观察序列的概率是多少。前向算法可以有效的解决此问题。
　　* 解码：什么样的隐藏（底层）状态序列最有可能生成一个给定的观察序列。维特比算法可以有效的解决此问题。
　　* 学习：对于一个给定的观察序列样本，什么样的模型最可能生成该序列——也就是说，该模型的参数是什么。这个问题可以通过使用前向-后向算法解决。
　　隐马尔科夫模型（HMM）在分析实际系统中已被证明有很大的价值；它们通常的缺点是过于简化的假设，这与马尔可夫假设相关——即一个状态只依赖于前一个状态，并且这种依赖关系是独立于时间之外的（与时间无关）。
　　关于隐马尔科夫模型的完整论述，可参阅：
　　L R Rabiner and B H Juang, `An introduction to HMMs&#8217;, iEEE ASSP Magazine, 3, 4-16.
　　全文完！
　　后记：这个翻译系列终于可以告一段落了，从6月2日起至今，历史四个多月，期间断断续续翻译并夹杂些自己个人的理解，希望这个系列对于HMM的学习者能有些用处，我个人也就很满足了。接下来，我会结合HMM在自然语言处理中的一些典型应用，譬如词性标注、中文分词等，从实践的角度讲讲自己的理解，欢迎大家继续关注52nlp。
本文翻译自：http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html
部分翻译参考：隐马尔科夫模型HMM自学
转载请注明出处“我爱自然语言处理”：www.52nlp.cn
本文链接地址：http://www.52nlp.cn/hmm-learn-best-practices-eight-summary










相关文章:HMM学习最佳范例五：前向算法3
HMM学习最佳范例四：隐马尔科夫模型
HMM学习最佳范例七：前向-后向算法1
HMM学习最佳范例六：维特比算法4
HMM学习最佳范例七：前向-后向算法5
几种不同程序语言的HMM版本
HMM学习最佳范例六：维特比算法3
HMM学习最佳范例七：前向-后向算法2
HMM学习最佳范例七：前向-后向算法3
HMM学习最佳范例六：维特比算法5



相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法4'>HMM学习最佳范例六：维特比算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/several-different-programming-language-version-of-hmm' rel='bookmark' title='Permanent Link: 几种不同程序语言的HMM版本'>几种不同程序语言的HMM版本</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法3'>HMM学习最佳范例六：维特比算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>八、总结(Summary)</strong></p>
<p>　　通常，模式并不是单独的出现，而是作为时间序列中的一个部分——这个过程有时候可以被辅助用来对它们进行识别。在基于时间的进程中，通常都会使用一些假设——一个最常用的假设是进程的状态只依赖于前面N个状态——这样我们就有了一个N阶马尔科夫模型。最简单的例子是N = 1。<span id="more-2376"></span><br />
　　存在很多例子，在这些例子中进程的状态（模式）是不能够被直接观察的，但是可以非直接地，或者概率地被观察为模式的另外一种集合——这样我们就可以定义一类隐马尔科夫模型——这些模型已被证明在当前许多研究领域，尤其是语音识别领域具有非常大的价值。<br />
　　在实际的过程中这些模型提出了三个问题都可以得到立即有效的解决，分别是：<br />
　　* 评估：对于一个给定的隐马尔科夫模型其生成一个给定的观察序列的概率是多少。前向算法可以有效的解决此问题。<br />
　　* 解码：什么样的隐藏（底层）状态序列最有可能生成一个给定的观察序列。维特比算法可以有效的解决此问题。<br />
　　* 学习：对于一个给定的观察序列样本，什么样的模型最可能生成该序列——也就是说，该模型的参数是什么。这个问题可以通过使用前向-后向算法解决。<br />
　　隐马尔科夫模型（HMM）在分析实际系统中已被证明有很大的价值；它们通常的缺点是过于简化的假设，这与马尔可夫假设相关——即一个状态只依赖于前一个状态，并且这种依赖关系是独立于时间之外的（与时间无关）。<br />
　　关于隐马尔科夫模型的完整论述，可参阅：<br />
　　<em>L R Rabiner and B H Juang, `An introduction to HMMs&#8217;, iEEE ASSP Magazine, 3, 4-16.</em></p>
<p>　　<strong>全文完！</strong></p>
<p>　　后记：这个翻译系列终于可以告一段落了，从6月2日起至今，历史四个多月，期间断断续续翻译并夹杂些自己个人的理解，希望这个系列对于HMM的学习者能有些用处，我个人也就很满足了。接下来，我会结合HMM在自然语言处理中的一些典型应用，譬如词性标注、中文分词等，从实践的角度讲讲自己的理解，欢迎大家继续关注52nlp。</p>
<p>本文翻译自：<a href="http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html"target=_blank>http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html</a><br />
部分翻译参考：<a href="http://blogcui.spaces.live.com/blog/cns!46BDB23E24219CE9!144.entry?_c=BlogPart"target=_blank>隐马尔科夫模型HMM自学</a></p>
<p>转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-learn-best-practices-eight-summary">http://www.52nlp.cn/hmm-learn-best-practices-eight-summary</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法4'>HMM学习最佳范例六：维特比算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/several-different-programming-language-version-of-hmm' rel='bookmark' title='Permanent Link: 几种不同程序语言的HMM版本'>几种不同程序语言的HMM版本</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法3'>HMM学习最佳范例六：维特比算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-learn-best-practices-eight-summary/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>HMM学习最佳范例七：前向-后向算法5</title>
		<link>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5</link>
		<comments>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5#comments</comments>
		<pubDate>Sat, 10 Oct 2009 13:32:21 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Baum-Welch算法]]></category>
		<category><![CDATA[EM算法]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[HMM学习]]></category>
		<category><![CDATA[UMDHMM]]></category>
		<category><![CDATA[前向-后向算法]]></category>
		<category><![CDATA[前向算法]]></category>
		<category><![CDATA[后向算法]]></category>
		<category><![CDATA[自然语言处理]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2333</guid>
		<description><![CDATA[七、前向-后向算法(Forward-backward algorithm)
　　上一节我们定义了两个变量及相应的期望值，本节我们利用这两个变量及其期望值来重新估计隐马尔科夫模型（HMM）的参数，A及B：

　　如果我们定义当前的HMM模型为，那么可以利用该模型计算上面三个式子的右端；我们再定义重新估计的HMM模型为，那么上面三个式子的左端就是重估的HMM模型参数。Baum及他的同事在70年代证明了因此如果我们迭代地的计算上面三个式子，由此不断地重新估计HMM的参数，那么在多次迭代后可以得到的HMM模型的一个最大似然估计。不过需要注意的是，前向-后向算法所得的这个结果（最大似然估计）是一个局部最优解。
　　关于前向-后向算法和EM算法的具体关系的解释，大家可以参考HMM经典论文《A tutorial on Hidden Markov Models and selected applications in speech recognition》，这里就不详述了。下面我们给出UMDHMM中的前向-后向算法示例，这个算法比较复杂，这里只取主函数，其中所引用的函数大家如果感兴趣的话可以自行参考UMDHMM。
前向-后向算法程序示例如下（在baum.c中):
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283void BaumWelch(HMM *phmm, int T, int *O, double **alpha, double **beta, double **gamma, int *pniter, double *plogprobinit, double *plogprobfinal)
{
　　int &#160; i, j, k;
　　int &#160; t, l = 0;

　　double&#160; &#160; logprobf, logprobb, &#160;threshold;
　　double&#160; &#160; numeratorA, denominatorA;
　　double&#160; &#160; numeratorB, denominatorB;

　　double ***xi, *scale;
　　double delta, deltaprev, logprobprev;

　　deltaprev [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法5'>HMM学习最佳范例五：前向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法4'>HMM学习最佳范例六：维特比算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法2'>HMM学习最佳范例六：维特比算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>七、前向-后向算法(Forward-backward algorithm)</strong></p>
<p>　　上一节我们定义了两个变量及相应的期望值，本节我们利用这两个变量及其期望值来重新估计隐马尔科夫模型（HMM）的参数<img src="http://www.52nlp.cn/wp-content/plugins/WpMathEditor/phpmathpublisher/img/math_994.5_8edb2cf68079344a2edd739531259f6c.png" style="vertical-align:-5.5px; display: inline-block ;" alt="pi" title="pi"/>，A及B：<span id="more-2333"></span></p>
<p><img src="http://www.52nlp.cn/images/fb12.png" alt="fb12" /></p>
<p>　　如果我们定义当前的HMM模型为<img src="http://www.52nlp.cn/images/fb13.png" alt="fb13" />，那么可以利用该模型计算上面三个式子的右端；我们再定义重新估计的HMM模型为<img src="http://www.52nlp.cn/images/fb14.png" alt="fb14" />，那么上面三个式子的左端就是重估的HMM模型参数。Baum及他的同事在70年代证明了<img src="http://www.52nlp.cn/images/fb15.png" alt="fb15" />因此如果我们迭代地的计算上面三个式子，由此不断地重新估计HMM的参数，那么在多次迭代后可以得到的HMM模型的一个最大似然估计。不过需要注意的是，前向-后向算法所得的这个结果（最大似然估计）是一个局部最优解。<br />
　　关于前向-后向算法和EM算法的具体关系的解释，大家可以参考HMM经典论文《A tutorial on Hidden Markov Models and selected applications in speech recognition》，这里就不详述了。下面我们给出<a href="http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4">UMDHMM</a>中的前向-后向算法示例，这个算法比较复杂，这里只取主函数，其中所引用的函数大家如果感兴趣的话可以自行参考UMDHMM。</p>
<p><strong>前向-后向算法程序示例如下（在baum.c中):</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">void BaumWelch(HMM *phmm, int T, int *O, double **alpha, double **beta, double **gamma, int *pniter, double *plogprobinit, double *plogprobfinal)<br />
{<br />
　　int &nbsp; i, j, k;<br />
　　int &nbsp; t, l = 0;<br />
<br />
　　double&nbsp; &nbsp; logprobf, logprobb, &nbsp;threshold;<br />
　　double&nbsp; &nbsp; numeratorA, denominatorA;<br />
　　double&nbsp; &nbsp; numeratorB, denominatorB;<br />
<br />
　　double ***xi, *scale;<br />
　　double delta, deltaprev, logprobprev;<br />
<br />
　　deltaprev = 10e-70;<br />
<br />
　　xi = AllocXi(T, phmm-&gt;N);<br />
　　scale = dvector(1, T);<br />
<br />
　　ForwardWithScale(phmm, T, O, alpha, scale, &amp;logprobf);<br />
　　*plogprobinit = logprobf; /* log P(O |intial model) */<br />
　　BackwardWithScale(phmm, T, O, beta, scale, &amp;logprobb);<br />
　　ComputeGamma(phmm, T, alpha, beta, gamma);<br />
　　ComputeXi(phmm, T, O, alpha, beta, xi);<br />
　　logprobprev = logprobf;<br />
<br />
　　do &nbsp;<br />
　　{ <br />
<br />
　　　　/* reestimate frequency of state i in time t=1 */<br />
　　　　for (i = 1; i &lt;= phmm-&gt;N; i++) <br />
　　　　　　phmm-&gt;pi[i] = .001 + .999*gamma[1][i];<br />
<br />
　　　　/* reestimate transition matrix &nbsp;and symbol prob in<br />
　　　　　　　　each state */<br />
　　　　for (i = 1; i &lt;= phmm-&gt;N; i++) <br />
　　　　{ <br />
　　　　　　denominatorA = 0.0;<br />
　　　　　　for (t = 1; t &lt;= T - 1; t++) <br />
　　　　　　　　denominatorA += gamma[t][i];<br />
<br />
　　　　　　for (j = 1; j &lt;= phmm-&gt;N; j++) <br />
　　　　　　{<br />
　　　　　　　　numeratorA = 0.0;<br />
　　　　　　　　for (t = 1; t &lt;= T - 1; t++) <br />
　　　　　　　　　　numeratorA += xi[t][i][j];<br />
　　　　　　　　phmm-&gt;A[i][j] = .001 +<br />
　　　　　　　　　　　　　　　　　.999*numeratorA/denominatorA;<br />
　　　　　　}<br />
<br />
　　　　　　denominatorB = denominatorA + gamma[T][i]; <br />
　　　　　　for (k = 1; k &lt;= phmm-&gt;M; k++) <br />
　　　　　　{<br />
　　　　　　　　numeratorB = 0.0;<br />
　　　　　　　　for (t = 1; t &lt;= T; t++) <br />
　　　　　　　　{<br />
　　　　　　　　　　if (O[t] == k) <br />
　　　　　　　　　　　　numeratorB += gamma[t][i];<br />
　　　　　　　　}<br />
<br />
　　　　　　　　phmm-&gt;B[i][k] = .001 +<br />
　　　　　　　　　　　　　　　　　.999*numeratorB/denominatorB;<br />
　　　　　　}<br />
　　　　}<br />
<br />
　　　　ForwardWithScale(phmm, T, O, alpha, scale, &amp;logprobf);<br />
　　　　BackwardWithScale(phmm, T, O, beta, scale, &amp;logprobb);<br />
　　　　ComputeGamma(phmm, T, alpha, beta, gamma);<br />
　　　　ComputeXi(phmm, T, O, alpha, beta, xi);<br />
<br />
　　　　/* compute difference between log probability of <br />
　　　　　　two iterations */<br />
　　　　delta = logprobf - logprobprev; <br />
　　　　logprobprev = logprobf;<br />
　　　　l++;<br />
<br />
　　}<br />
　　while (delta &gt; DELTA); /* if log probability does not <br />
　　　　　　　　　　　　　　change much, exit */ <br />
&nbsp;<br />
　　*pniter = l;<br />
　　*plogprobfinal = logprobf; /* log P(O|estimated model) */<br />
　　FreeXi(xi, T, phmm-&gt;N);<br />
　　free_dvector(scale, 1, T);<br />
}</div></td></tr></tbody></table></div>
<p>　　<br />
　　前向-后向算法就到此为止了。</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-learn-best-practices-eight-summary">总结</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5">http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法5'>HMM学习最佳范例五：前向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法4'>HMM学习最佳范例六：维特比算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法2'>HMM学习最佳范例六：维特比算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>HMM学习最佳范例七：前向-后向算法4</title>
		<link>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4</link>
		<comments>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4#comments</comments>
		<pubDate>Sat, 26 Sep 2009 05:04:04 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Baum-Welch算法]]></category>
		<category><![CDATA[EM算法]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[HMM学习]]></category>
		<category><![CDATA[前向-后向算法]]></category>
		<category><![CDATA[前向算法]]></category>
		<category><![CDATA[后向算法]]></category>
		<category><![CDATA[自然语言处理]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2282</guid>
		<description><![CDATA[七、前向-后向算法(Forward-backward algorithm)
　　隐马尔科夫模型（HMM）的三个基本问题中，第三个HMM参数学习的问题是最难的，因为对于给定的观察序列O，没有任何一种方法可以精确地找到一组最优的隐马尔科夫模型参数（A、B、）使P(O&#124;)最大。因而，学者们退而求其次，不能使P(O&#124;)全局最优，就寻求使其局部最优（最大化）的解决方法，而前向-后向算法（又称之为Baum-Welch算法）就成了隐马尔科夫模型学习问题的一种替代（近似）解决方法。
　　我们首先定义两个变量。给定观察序列O及隐马尔科夫模型，定义t时刻位于隐藏状态Si的概率变量为：
　　　　　　　　
　　回顾一下第二节中关于前向变量at(i)及后向变量Bt(i)的定义，我们可以很容易地将上式用前向、后向变量表示为：
　　　
　　其中分母的作用是确保：
　　给定观察序列O及隐马尔科夫模型，定义t时刻位于隐藏状态Si及t+1时刻位于隐藏状态Sj的概率变量为：
　　　　
　　该变量在网格中所代表的关系如下图所示：
　
　　同样，该变量也可以由前向、后向变量表示：
　　　
　　而上述定义的两个变量间也存在着如下关系：
　　　　　　　　　　　　
　　如果对于时间轴t上的所有相加，我们可以得到一个总和，它可以被解释为从其他隐藏状态访问Si的期望值（网格中的所有时间的期望），或者，如果我们求和时不包括时间轴上的t=T时刻，那么它可以被解释为从隐藏状态Si出发的状态转移期望值。相似地，如果对在时间轴t上求和（从t=1到t=T-1），那么该和可以被解释为从状态Si到状态Sj的状态转移期望值。即：
　　　
　　　 
未完待续：前向-后向算法5
注：原创文章，转载请注明出处“我爱自然语言处理”：www.52nlp.cn
本文链接地址：http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4










相关文章:HMM学习最佳范例七：前向-后向算法2
HMM学习最佳范例七：前向-后向算法3
HMM学习最佳范例七：前向-后向算法1
HMM学习最佳范例七：前向-后向算法5
HMM学习最佳范例四：隐马尔科夫模型
HMM学习最佳范例六：维特比算法5
HMM学习最佳范例五：前向算法3
HMM学习最佳范例五：前向算法4
HMM学习最佳范例五：前向算法1
HMM学习最佳范例五：前向算法2



相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法1'>HMM学习最佳范例五：前向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>七、前向-后向算法(Forward-backward algorithm)</strong></p>
<p>　　隐马尔科夫模型（HMM）的三个基本问题中，第三个HMM参数学习的问题是最难的，因为对于给定的观察序列O，没有任何一种方法可以精确地找到一组最优的隐马尔科夫模型参数（A、B、<img src="http://www.52nlp.cn/wp-content/plugins/WpMathEditor/phpmathpublisher/img/math_994.5_8edb2cf68079344a2edd739531259f6c.png" style="vertical-align:-5.5px; display: inline-block ;" alt="pi" title="pi"/>）使P(O|<img src="http://www.52nlp.cn/images/lamda.gif" alt="lamda" />)最大。因而，学者们退而求其次，不能使P(O|<img src="http://www.52nlp.cn/images/lamda.gif" alt="lamda" />)全局最优，就寻求使其局部最优（最大化）的解决方法，而前向-后向算法（又称之为Baum-Welch算法）就成了隐马尔科夫模型学习问题的一种替代（近似）解决方法。<span id="more-2282"></span><br />
　　我们首先定义两个变量。<strong>给定观察序列O及隐马尔科夫模型<img src="http://www.52nlp.cn/images/lamda.gif" alt="lamda" />，定义t时刻位于隐藏状态Si的概率变量为：</strong><br />
　　　　　　　　<img src="http://www.52nlp.cn/images/fb1.png" alt="fb1" /><br />
　　回顾一下<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2">第二节</a>中关于前向变量at(i)及后向变量Bt(i)的定义，我们可以很容易地将上式用前向、后向变量表示为：<br />
　　　<img src="http://www.52nlp.cn/images/fb2.png" alt="fb2" /><br />
　　其中分母的作用是确保：<img src="http://www.52nlp.cn/images/fb3.png" alt="fb3" /><br />
　　<strong>给定观察序列O及隐马尔科夫模型<img src="http://www.52nlp.cn/images/lamda.gif" alt="lamda" />，定义t时刻位于隐藏状态Si及t+1时刻位于隐藏状态Sj的概率变量为：</strong><br />
　　　　<img src="http://www.52nlp.cn/images/fb4.png" alt="fb4" /><br />
　　该变量在网格中所代表的关系如下图所示：<br />
　<img src="http://www.52nlp.cn/images/fb5.png" alt="fb5" /><br />
　　同样，该变量也可以由前向、后向变量表示：<br />
　　　<img src="http://www.52nlp.cn/images/fb6.png" alt="fb6" /><br />
　　而上述定义的两个变量间也存在着如下关系：<br />
　　　　　　　　　　　　<img src="http://www.52nlp.cn/images/fb7.png" alt="fb7" /><br />
　　如果对于时间轴t上的所有<img src="http://www.52nlp.cn/images/fb10.png" alt="fb10" />相加，我们可以得到一个总和，它可以被解释为从其他隐藏状态访问Si的期望值（网格中的所有时间的期望），或者，如果我们求和时不包括时间轴上的t=T时刻，那么它可以被解释为从隐藏状态Si出发的状态转移期望值。相似地，如果对<img src="http://www.52nlp.cn/images/fb11.png" alt="fb11" />在时间轴t上求和（从t=1到t=T-1），那么该和可以被解释为从状态Si到状态Sj的状态转移期望值。即：<br />
　　　<img src="http://www.52nlp.cn/images/fb8.png" alt="fb8" /><br />
　　　<img src="http://www.52nlp.cn/images/fb9.png" alt="fb9" /> </p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5">前向-后向算法5</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4">http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法3'>HMM学习最佳范例七：前向-后向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法1'>HMM学习最佳范例五：前向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HMM学习最佳范例七：前向-后向算法3</title>
		<link>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3</link>
		<comments>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3#comments</comments>
		<pubDate>Sun, 20 Sep 2009 03:38:00 +0000</pubDate>
		<dc:creator>52nlp</dc:creator>
				<category><![CDATA[隐马尔科夫模型]]></category>
		<category><![CDATA[Baum]]></category>
		<category><![CDATA[Baum-Welch算法]]></category>
		<category><![CDATA[EM算法]]></category>
		<category><![CDATA[hmm]]></category>
		<category><![CDATA[HMM学习]]></category>
		<category><![CDATA[前向-后向算法]]></category>
		<category><![CDATA[前向算法]]></category>
		<category><![CDATA[后向算法]]></category>
		<category><![CDATA[自然语言处理]]></category>
		<category><![CDATA[贾里尼克]]></category>

		<guid isPermaLink="false">http://www.52nlp.cn/?p=2266</guid>
		<description><![CDATA[七、前向-后向算法(Forward-backward algorithm)
　　前向-后向算法是Baum于1972年提出来的，又称之为Baum-Welch算法，虽然它是EM(Expectation-Maximization)算法的一个特例，但EM算法却是于1977年提出的。那么为什么说前向-后向算法是EM算法的一个特例呢？这里有两点需要说明一下。
　　第一，1977年A. P. Dempster、N. M. Laird、 D. B. Rubin在其论文“Maximum Likelihood from Incomplete Data via the EM Algorithm”中首次提出了EM算法的概念，但是他们也在论文的介绍中提到了在此之前就有一些学者利用了EM算法的思想解决了一些特殊问题，其中就包括了Baum在70年代初期的相关工作，只是这类方法没有被总结而已，他们的工作就是对这类解决问题的方法在更高的层次上定义了一个完整的EM算法框架。
　　第二，对于前向-后向算法与EM算法的关系，此后在许多与HMM或EM相关的论文里都被提及，其中贾里尼克（Jelinek）老先生在1997所著的书“Statistical Methods for Speech Recognition”中对于前向-后向算法与EM算法的关系进行了完整的描述，读者有兴趣的话可以找来这本书读读。
　　关于EM算法的讲解，网上有很多，这里我就不献丑了，直接拿目前搜索“EM算法”在Google排名第一的文章做了参考，希望读者不要拍砖：
　　EM 算法是 Dempster，Laind，Rubin 于 1977 年提出的求参数极大似然估计的一种方法，它可以从非完整数据集中对参数进行 MLE 估计，是一种非常简单实用的学习算法。这种方法可以广泛地应用于处理缺损数据，截尾数据，带有讨厌数据等所谓的不完全数据(incomplete data)。
　　假定集合Z = (X,Y)由观测数据 X 和未观测数据Y 组成，Z = (X,Y)和 X 分别称为完整数据和不完整数据。假设Z的联合概率密度被参数化地定义为P(X，Y&#124;Θ)，其中Θ 表示要被估计的参数。Θ 的最大似然估计是求不完整数据的对数似然函数L(X;Θ)的最大值而得到的：
　　　L(Θ; X )= log p(X &#124;Θ) = ∫log p(X ,Y &#124;Θ)dY ；(1)
　　EM算法包括两个步骤：由E步和M步组成，它是通过迭代地最大化完整数据的对数似然函数Lc( X;Θ )的期望来最大化不完整数据的对数似然函数，其中：
　　　Lc(X;Θ) =log p(X，Y [...]


相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法1'>HMM学习最佳范例五：前向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>七、前向-后向算法(Forward-backward algorithm)</strong></p>
<p>　　前向-后向算法是Baum于1972年提出来的，又称之为Baum-Welch算法，虽然它是EM(Expectation-Maximization)算法的一个特例，但EM算法却是于1977年提出的。那么为什么说前向-后向算法是EM算法的一个特例呢？这里有两点需要说明一下。<span id="more-2266"></span><br />
　　第一，1977年A. P. Dempster、N. M. Laird、 D. B. Rubin在其论文“Maximum Likelihood from Incomplete Data via the EM Algorithm”中首次提出了EM算法的概念，但是他们也在论文的介绍中提到了在此之前就有一些学者利用了EM算法的思想解决了一些特殊问题，其中就包括了Baum在70年代初期的相关工作，只是这类方法没有被总结而已，他们的工作就是对这类解决问题的方法在更高的层次上定义了一个完整的EM算法框架。<br />
　　第二，对于前向-后向算法与EM算法的关系，此后在许多与HMM或EM相关的论文里都被提及，其中贾里尼克（Jelinek）老先生在1997所著的书“Statistical Methods for Speech Recognition”中对于前向-后向算法与EM算法的关系进行了完整的描述，读者有兴趣的话可以找来这本书读读。<br />
　　关于EM算法的讲解，网上有很多，这里我就不献丑了，直接拿目前搜索“EM算法”在Google排名第一的文章做了参考，希望读者不要拍砖：</p>
<p>　　EM 算法是 Dempster，Laind，Rubin 于 1977 年提出的求参数极大似然估计的一种方法，它可以从非完整数据集中对参数进行 MLE 估计，是一种非常简单实用的学习算法。这种方法可以广泛地应用于处理缺损数据，截尾数据，带有讨厌数据等所谓的不完全数据(incomplete data)。<br />
　　假定集合Z = (X,Y)由观测数据 X 和未观测数据Y 组成，Z = (X,Y)和 X 分别称为完整数据和不完整数据。假设Z的联合概率密度被参数化地定义为P(X，Y|Θ)，其中Θ 表示要被估计的参数。Θ 的最大似然估计是求不完整数据的对数似然函数L(X;Θ)的最大值而得到的：<br />
　　　L(Θ; X )= log p(X |Θ) = ∫log p(X ,Y |Θ)dY ；(1)<br />
　　EM算法包括两个步骤：由E步和M步组成，它是通过迭代地最大化完整数据的对数似然函数Lc( X;Θ )的期望来最大化不完整数据的对数似然函数，其中：<br />
　　　Lc(X;Θ) =log p(X，Y |Θ) ；                     (2)<br />
　　假设在算法第t次迭代后Θ 获得的估计记为Θ(t ) ，则在（t+1）次迭代时，<br />
　　E-步：计算完整数据的对数似然函数的期望，记为：<br />
　　　Q(Θ |Θ (t) ) = E{Lc(Θ;Z)|X;Θ(t) }；      (3)<br />
　　M-步：通过最大化Q(Θ |Θ(t) ) 来获得新的Θ 。<br />
　　通过交替使用这两个步骤，EM算法逐步改进模型的参数，使参数和训练样本的似然概率逐渐增大，最后终止于一个极大点。<br />
　　<strong>直观地理解EM算法，它也可被看作为一个逐次逼近算法：事先并不知道模型的参数，可以随机的选择一套参数或者事先粗略地给定某个初始参数λ0 ，确定出对应于这组参数的最可能的状态，计算每个训练样本的可能结果的概率，在当前的状态下再由样本对参数修正，重新估计参数λ ，并在新的参数下重新确定模型的状态，这样，通过多次的迭代，循环直至某个收敛条件满足为止，就可以使得模型的参数逐渐逼近真实参数。</strong><br />
　　EM算法的主要目的是提供一个简单的迭代算法计算后验密度函数，它的最大优点是简单和稳定，但容易陷入局部最优。<br />
　　参考原文见：<a href="http://49805085.spaces.live.com/Blog/cns!145C40DDDB4C6E5!670.entry"target=_blank>http://49805085.spaces.live.com/Blog/cns!145C40DDDB4C6E5!670.entry</a></p>
<p>　　注意上面那段粗体字，读者如果觉得EM算法不好理解的话，就记住这段粗体字的意思吧！<br />
　　有了<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2">后向算法</a>和EM算法的预备知识，下一节我们就正式的谈一谈前向-后向算法。</p>
<p>未完待续：<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4">前向-后向算法4</a></p>
<p>注：原创文章，转载请注明出处“<a href="http://www.52nlp.cn">我爱自然语言处理</a>”：<a href="http://www.52nlp.cn">www.52nlp.cn</a></p>
<p>本文链接地址：<a href="http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3">http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3</a></p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-4332174469367599";
/* 336x280, 创建于 09-2-7 */
google_ad_slot = "5707022987";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>


<p>相关文章:<ol><li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法4'>HMM学习最佳范例七：前向-后向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法2'>HMM学习最佳范例七：前向-后向算法2</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法1'>HMM学习最佳范例七：前向-后向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例七：前向-后向算法5'>HMM学习最佳范例七：前向-后向算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models' rel='bookmark' title='Permanent Link: HMM学习最佳范例四：隐马尔科夫模型'>HMM学习最佳范例四：隐马尔科夫模型</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-5' rel='bookmark' title='Permanent Link: HMM学习最佳范例六：维特比算法5'>HMM学习最佳范例六：维特比算法5</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法3'>HMM学习最佳范例五：前向算法3</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法4'>HMM学习最佳范例五：前向算法4</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法1'>HMM学习最佳范例五：前向算法1</a></li>
<li><a href='http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2' rel='bookmark' title='Permanent Link: HMM学习最佳范例五：前向算法2'>HMM学习最佳范例五：前向算法2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
