Posts tagged with 自然语言处理

回顾一阶HMM

在一阶HMM中,下一个隐藏状态是当前隐藏状态的条件概率:
$$ P(q_{t+1} = S_j | q_t = S_i, q_{t-1} = S_k, \cdots ) \approx P(q_{t+1} = S_j | q_t = S_i) $$

即转移矩阵:
$$ A = [a_{ij}] \quad \text{where} \quad a_{ij} \equiv P(q_{t+1} = S_j | q_t = S_i) $$

且特定时刻观察状态只和当前隐藏状态有关。
$$ b_j(m) \equiv P(O_t = \nu_m | q_t = S_j) $$

即观测矩阵:
$$ B = [b_j(m)] \quad \text{where} \quad b_j(m) \equiv P(O_t = \nu_m | q_t = S_j) $$

二阶HMM

对于字序列标记分词,当前分词标记和上一个字的分词标记相关,这是二元组 Bigram,但分析样本发现切分位置并不一定只和上一个字相关,可能会有更长远的关系,比如假设当前字标记和之前两个字标记有关,那么就成为了三元组。即 $ Trigram $:

$$ P(q_{t+1} = S_j | q_t = S_i, q_{t-1} = S_k, \cdots ) \approx P(q_{t+1} = S_j | q_t = S_i, q_{t-1} = S_k) $$

同时还假设当前观测到的字符除和当前分词标记(隐藏状态)相关外,也与上一个隐藏状态相关:

$$ b_{ij}(m) \equiv P(O_t = \nu_m | q_t = S_j, q_{t-1} = S_i) $$

对应转移矩阵和观测矩阵也改动为:

$$ \begin{align} A &= [a_{ijk}] \quad \text{where} \quad a_{ijk} \equiv P(q_{t+1} = S_k | q_t = S_j , q_{t-1} = S_i ) \\ B &= [b_{ij}(m)] \quad \text{where} \quad b_{ij}(m) \equiv P(O_t = \nu_m | q_t = S_j , q_{t-1} = S_i) \end{align} $$

- 阅读剩余部分 -

之前的分词算法都需要附带词表,最大概率法需要计算词频,对于词表中不存在的新词,算法效果并不是很好。HMM是基于字统计的分词算法。无需词表,无需统计词频。对新词识别友好。

HMM用于分词的原理。

基于字标注词语切分

共同创造美好的新世纪
共同 创造 美好 的 新世纪

用字母B表示词语开始,M表示词语中间,E表示词语结束,S表示独立成词。那么上面的切分以字为单位重新标注

$$ \begin{array}{cccccccccccccc} B & E & \quad & B & E & \quad & B & E & \quad & S & \quad & B & M & E \\ 共 & 同 & \quad & 创 & 造 & \quad & 美 & 好 & \quad & 的 & \quad & 新 & 世 & 纪 \end{array} $$

- 阅读剩余部分 -

正向最大匹配分词和逆向最大匹配分词

词表

词表为所有可能出现的词语组成的集合。当然,实践中不可能准备包含全所有已知和未知词语词表。

建立词表

  1. 从人工标注语料中得到词表。
    由多人讨论并且得到共识的分词标注语料建立词表。这是效果最好,但也是成本最高的方案。
  2. 从未标注语料中建立词表。
    可以认为经常重复出现连续字符串属于词语。统计大量未标注语料中的连续字串重复出现频率,将多次重复出现的连续字串作为词语,以此建立词典。
  3. 使用输入法,辞典,翻译(例如中英词语互译)词表.
    这是比较容易实现的方法,且这些数据大多能免费下载,有些输入法词表还带词频。

- 阅读剩余部分 -