第六章 有限状态机与动态规划
- 地图与本地搜索的核心技术
6.1 地址分析和有限状态机
-
地址的分析是复杂的上下文有关,而不是上下文无关,所以在地址正确但是写法不同的情况下,快递员依然能识别。上下文有关文法的分析既复杂又耗时, 它的分析器也不好写, 还有很多情况覆盖不了。比如这样的地址描述:
(深圳市) 深南大道和南山大道交口西 100 米 \text{(深圳市) 深南大道和南山大道交口西 100 米} (深圳市) 深南大道和南山大道交口西 100 米
所幸的是, 地址的文法是上下文有关文法中相对简单的一种, 因此有许多识别和分析的方法, 但最有效的是有限状态机。是一个特殊的有向图 ,它包括一些状态 (节点) 和连接这些状态的有向弧。下面是个识别地址的有限状态机。
-
有限状态机
每一个有限状态机都有一个开始状态和一个终止状态, 以及若干中间状态。每一条弧上带有从一个状态进人下一个状态的条件。如果一条地址能从状态机的开始状态经过状态机的若干中间状态, 走到终止状态, 则这条地址有效, 否则无效。比如, “北京市双清路 83 号” 对于上面的有限状态来讲有效, 而 “上海市辽宁省马家庄”则无效 (因为无法从 “市” 走回到“省”)。
上述基于有限状态机的地址识别方法在实用中会有一些问题:当用户输人的地址不太标准或者有错别字时, 有限状态机会束手无策, 因为它只能进行严格风配。(其实, 有限状态机在计算机科学中早期的成功应用是在程序语言编译器的设计中。一个能运行的程序在语法上必须是没有错的, 所以不需要模糊匹配。而自然语言则很随意, 无法用简单的语法描述。
为了解决这个问题, 我们希望看到可以进行模糊匹配, 并给出一个字串为正确地址的可能性。为了实现这一目的,科学家们提出了基于概率的有限状态机。这种基于概率的有限状态机和离散的马尔可夫链、基本上等效。
6.2 全球导航与动态规划
-
全球导航的关键算法是计算机科学图论中的动态规划 (Dynamic Programming) 的算法。
在图论中, 一个抽象的图包括一些节点和连接它们的弧。如果再考虑每条弧的长度, 或者说权重, 那么这个图就是加权图 (Weighted Graph)。比如说中国公路网就是一个很好的“加权图”
每个城市是一个节点, 每一条公路是一条弧。图中弧的权重对应于地图上的距离, 或者是行车时间、过路费金额, 等等。图论中很常见的一个问题是要找一个图中给定两个点之间的最短路径(Shortest Path)。 最直接的笨办法是把所有可能的路线看一遍,然后找到最优的。这种办法在节点数是个位数的图中还行得通, 当图的节点数 (城市数目) 达到几十个时,计算的复杂度就已经让人甚至计算机﨎以接受了, 显然导航系统不会用这种笨办法—任何导航仪或者导航软件都能在几秒钟内就找到最佳行车路线。
-
所有的导航系统都采用了
动态规划 (
Dynamic Programming, DP) 的办法。要想找到从北京到广州的最短路线, 先要找到从北京到郑州的最短路线。当然,、在还没有找到全程最短路线前, 不能肯定它一定经过郑州。不过没有关系, 只要在图上横切一刀,这一刀要保证将任何从北京到广州的路线一分为二
那么从广州到北京的最短路径必须经过这一条线上的某个城市 (乌鲁木齐、西宁、兰州、西安、郑州、济南)。我们可以先找到从北京出发到这条线上所有城市的最短路径, 最后得到的全程最短路线一定包括这些局部最短路线中的一条, 这样, 就可以将一个 “寻找全程最短路线” 的问题, 分解成一个个寻找局部最短路线的小问题。只要将这条横切线从北京向广州推移, 直到广州为止, 我们的全程最短路线就找到了。
-
动态规划降低的复杂度
采用动态规划可以大大降低最短路径的计算复杂度。在上面的例子中, 每加人一条横切线, 线上平均有 10 个城市, 从广州到北京最多经过 15 个城市, 那么采用动态规划的计算量是 10 × 10 × 15 10 \times 10 \times 15 10×10×15, 而采用穷举路径的策办法是 1 0 15 10^{15} 1015, 前后差了万亿倍。正确的数学模型可以将一个计算量看似很大的问题的计算复杂度大大降低。这便是数学的妙用。
6.3 有限状态传感器
-
有限状态机
有限状态机的应用远不止地址的识别, 今天的语音识别解码器基本上是基于有限状态机的原理。另外, 它在编译原理、数字电路设计上有着非常重要的应用, 因此在这里给出有限状态机严格的数学模型。
定义 (有限状态机) : 有限状态机是一个五元组 ( Σ , S , S 0 , δ , f ) \left(\Sigma, S, S_0, \delta, f\right) (Σ,S,S0,δ,f), 其中:
Σ \Sigma Σ 是输人符号的集合,
S S S 是一个非空的有限状态集合,
S 0 S_0 S0 是 S S S 中的一个特殊状态, 起始状态,
δ \delta δ 是一个从空间 S × Σ S \times \Sigma S×Σ 到 S S S 的映射函数,即 δ : S × Σ → S \delta: S \times \Sigma \rightarrow S δ:S×Σ→S 。
f f f 是 S S S 中另外一个特殊状态, 终止状态。这里面映射函数 δ \delta δ 对于一些变量, 即状态和输人符号的组合可能没有合适的对应状态 (函数值), 也就是说, 在一些状态下, 有的符号不能被接受。如果一个状态序列在有限状态机中能够从 s 0 s_0 s0 开始经过一些状态进人终止状态 f f f, 那么它就是可以由这个有限状态机生成的合法序列, 反之则不是。
-
有限状态传感器
(Finite State Transducer)有限状态机在语音识别和自然语言理解中起着非常重要的作用, 不过这些领域使用的是一种特殊的有限状态机一加权的有限状态传感器 (Weighted Finite State Transducer, 简称 WFST)。用法。
有限状态传感器 的特殊性在于, 有限状态机中的每个状态由输人和输出符号定义
状态 4 的定义是 “输人为 is 或者 are, 输出为 better 或者 worse” 的状态。不管整个符号序列前后如何, 只要在某一时刻前后的符号为 is / are 和 better / worse 的组合, 就能进人此状态。状态可以有不同输人和输出,如果这些输人和输出的可能性不同, 即赋予了不同的权重, 那么相应的有限状态传感器就是加权的。对比之前提到的二元模型, 可以发现任何一个词的前后二元组, 都可以对应到 WFST 的一个状态。因此,WFST 是天然的自然语言处理的分析工具和解码工具。
在语音识别中, 每个被识别的句子都可以用一个 WFST 来表示。
WFST 中的每一条路径就是一个候选的句子, 其中概率最大的那条路径就是这个句子的识别结果。而这个算法的原理是上节介绍的动态规划。