“HMM学习最佳范例”与“崔晓源的博客”本来是不搭边的,由于自己花了几乎一个晚上浏览崔师兄的博客,没有时间写文章了,所以最终决定放在这里做成大杂烩,不过我觉得这个大杂烩还是有点价值的。
  先说说HMM,通过Google Analytics 发现,读者经常通过与“隐马尔科夫模型、HMM”相关的关键字访问52nlp的,因为这里曾经写了一篇简单的介绍HMM的文章。事实上,对于HMM,由于自己没有直接实践过,仅停留在“纸上得来”的程度,所以心里也虚。某天赶巧遇到了国外这个专门介绍HMM及其相关算法的主页:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html
  里面图文并茂还动感十足,写得又通俗易懂,可以说是我见到过的介绍HMM最好的范例了。读完了立即有翻译全文的冲动,这样一方面可以给有需要的读者以帮助,另一方面翻译虽然耗时,但却能仔细把握一下比较细节的地方,这也是我翻译“MIT自然语言处理”的初衷。不过Google了一下,发现已经有人把这件事做了,这个人就是崔晓源,中文译名是“隐马尔科夫模型HMM自学”。
  原计划这一篇博客题目为“HMM学习最佳范例”的,准备介绍这个英文主页和崔晓源的翻译,出于尊重译者劳动的缘故,Google“隐马尔科夫模型HMM自学”,可是发现其被转载了很多,除了知道译者是“崔晓源”外,原始出处似乎被丢失了。不过最终还是找到了原始出处:
  http://blogcui.spaces.live.com/blog/cns!46BDB23E24219CE9!144.entry?_c=BlogPart
  其实就是崔师兄在msn spaces上的博客,仔细对比了一下原文,发现崔师兄的这个翻译是一个简化和缩略版本,有些地方只是概况性的翻译了一下,省去了一些内容,所以这个介绍HMM主页还有再翻译的必要。有可能的话,今后在52nlp上我会慢慢翻译HMM这个系列。
  对比完之后,我就浏览开他的博客了,没想到,一发而不可收,主要在于他的博客多数内容都很有价值。博客最集中更新的一段时间,是在05年5月到9月份他在MSRA-NLC组实习的时候,不过可惜的是,现在几乎不更新了,但是技术博客的好处再于其有效期更长,所以许多东西仍很可以参考,读者如果对NLP,IR或者机器学习感兴趣,不妨按时间顺序读读他的日志,定会有不小收获的,这里绝非广告。他目前在MSRA工作,以下是他的“About me”:
  ”A man full of enthusiasm for advanced technology business, natrual language processing, IR and search engine technology. I'm finding my way. You never do a bad job only if you choose the right time. So keep your pace accordingly.“
  我在上面最大的发现是这个关于机器学习的英文博客:
       http://hunch.net/

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:https://www.52nlp.cn/hmm-learn-best-practices-and-cui-johnny-blog/

作者 52nlp

《HMM学习最佳范例与崔晓源的博客》有17条评论
  1. 不知道作者能不能看到,关于这篇文章的原始网站上那个forward的演示实例有一点小小的疑问。在计算alpha变量的时候,从状态i变换到j的时候,应该是是alpha_t_i*a_i_j,i是从1到N的变量,而一次计算的时候j是不变的,但是看了作者的这个演示系统,好像是i不动,j在变啊,就是a_i_j是行不动,列标j从0到2这样的。比如http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg5.html
    中的天气状态转移矩阵中的{0.5, 0.375, 0.125},他的演示有这么一步:
    Alpha = (((0.37800002*0.5) + (0.0425*0.375) + (0.010000001*0.125)) * 0.15) = 0.03092813
    这一点我不太明白,呵呵

    [回复]

  2. 补充一下演示的网址:
    http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg3.html

    [回复]

    52nlp 回复:

    是有问题,我在《HMM学习最佳范例五:前向算法5》里提了一下,可以看看:
    如果从原文给出的状态转移矩阵来看,第一行代表的是从前一时刻的状态“Sunny”分别到当前时刻的状态 “Sunny”,“Cloudy”,“Rainy”的概率;而第一列代表的是从前一时刻的状态“Sunny”,“Cloudy”,“Rainy”分别到当前时刻状态“Sunny”的概率。这样看来似乎原文的计算过程有误,

    [回复]

  3. 想请教您一个问题:目前主流公司开发都是用C++。所以想学习下C++,可是发现C++做自然语言处理:主要是处理字符串部分非常麻烦(比如汉字编码种类,UTF-8,gb2312..)。楼主有没有什么好办法。

    [回复]

    52nlp 回复:

    字符串处理本身就比较麻烦,尤其对于汉字来说,我也没有什么好办法,不过觉得统一到utf-8下还是比较好的。可以研究一些基于C++的优秀的自然语言处理工具,看看它们是如何处理字符串的。

    [回复]

  4. 你好,我一个课题中想用HMM做预测,但遇到很多问题,希望多多指教,谢谢,QQ517766734

    [回复]

    52nlp 回复:

    抱歉,比较忙,不方便加qq!有问题最好多Google一下,实在不行可以发邮件给我,但是不能保证能解决你的问题。

    [回复]

    李辉 回复:

    我的问题是,每一时刻的观测值是一个参数序列,该怎么处理?

    [回复]

    52nlp 回复:

    抱歉,不太明白。

    李辉 回复:

    我做机器启动过程预测,观测值为转速,状态为正常和故障,也就是说启动中的转速变化过程(60个离散点)来预测状态,怎么做?谢谢赐教

    52nlp 回复:

    可以参考一下如何利用HMM做词性标注来建模,你既然已经定义了观测值和状态,再找一些样本来确定或训练观察概率以及转移概率吧,具体的“怎么做”还是要你来思考和决定的。

  5. 谢谢了,有样本,训练观测概率和转移概率是不是用B-W算法?算法需不需要改动?

    [回复]

    52nlp 回复:

    建议看一看我在词性标注中举得例子,这样可以先弄明白B-W算法应用的场景,至于算法需不需要改动,根据你自己的实际需求决定!

    [回复]

  6. 您好,请给一下崔师兄的博客地址 或者主页 想拜读他的日志

    [回复]

    52nlp 回复:

    抱歉,好多年前的,刚才google了一下,没有找到原始博客

    [回复]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注