zoukankan      html  css  js  c++  java
  • 自然语言基础之分词、标注、命名实体识别

    一、HMM隐马尔可夫模型分词、词性标注、命名实体识别

      HMM是用来描述隐含未知参数的统计模型,经典的例子:一个东京的朋友每天根据天气{下雨、晴天}决定当天的活动{公园散步、购物、清理房间}中的一种,我每天只能在twitter上看到她发的“今前天去公园散步了、昨天购物、今天清理房间了!”,那么我可以根据她发的推特推断东京这三天的天气。在这个例子里,观测状态序列是活动,隐藏状态序列是天气。

      任何一个HMM都可以通过下列五元组描述:

      :param obs:  观测序列

      :param states: 隐藏状态序列

      :param start_p: 初始状态概率(隐藏状态,天气{晴、雨})

      :param trans_p:状态转移矩阵概率 (隐藏状态、)

      :param 观测序列概率(在时刻t隐藏状态条件下,生成观测序列的概率)

    用python代码来描述如下:

      

    求解最可能的天气:

      维特比算法:实际是用动态规划解隐马尔可夫模型预测问题,即用动态规划求概率最大路径(最优路径)。这时一条路径对应着一个状态序列。

      求解最可能的隐藏状态序列是HMM的三个典型问题之一、通常用维特比算法解决。维特比算法就是求解HMM上的最短路径(-log(prob),也即是最大概率)的算法

      思路如下:第一天天晴还是下雨可以算出来:

      1、定义V[时间][今天天气] =  概率,注意今年天天气指的是,前几天的天气确定下来了(概率最大)今天天气是X的概率,这里的概率 就是一个累乘的概率

      2、因为第一天我的朋友去散步了,所以第一天下雨的概率V[第一天][下雨] = 初始概率[下雨]*观测概率[下雨][散步] = 0.6*0.1=0.06,同理可得V[第一天][天晴] = 0.24。因为第一天朋友出门了,她一般喜欢在

    晴天的时候散步,所以第一天天晴的概率比较大,直觉上来看也是这样。

      3、从第二天开始,对于这种每天天气Y,都有前一天天气是X的概率*X转移到Y的概率*Y天气下朋友进行这天这种活动的概率。因为前一天天气X有两种可能,所以Y的概率有两个,选取其中较大一个作为V[第二天][天气Y]的概率,同时将今天的天气加入到结果序列中

      4、比较V[最后一天][下雨]和[最后一天][天晴]的概率,找出较大的哪一个对应的序列,就是最终结果。

      只需从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率。

    具体HMM应用在分词系统,可以将天气当成“标签”,活动当成“字或者词”。那么nlp几个问题可以转化为:
      词性标注:给定一个词的序列(句子),找出最可能的词性序列(标签是词性)。

      分词:给定一个字的序列,找出最可能的标签序列(BMES),比如结巴分词目前就是利用BMES标签来分词的,

      命名实体识别:给定一个词的序列,找出最可能的标签序列(内外符号:[内]表示词属于命名实体,[外]表示不属于)。如ICTCLAS实现的人名识别、翻译人名识别、地名识别都是用同一个Tagger实现的。

  • 相关阅读:
    随时积累随手记(持续更新...)
    Zookeeper集群搭建
    Dubbo——基于Zookeeper服务框架搭建及案例演示
    nginx配置浅析
    阿里面试回来,想和Java程序员谈一谈
    博客收藏列表
    启示录:打造用户喜爱的产品
    js深拷贝和浅拷贝
    MyBatis 总结记录
    ActiveMQ初体验
  • 原文地址:https://www.cnblogs.com/lxw003/p/8696470.html
Copyright © 2011-2022 走看看