核心概念#

本章將有限狀態機(Finite State Machine)和動態規劃(Dynamic Programming)兩個重要的計算機科學概念結合起來,說明它們在地圖服務和本地搜索中的核心應用。

1. 地址分析和有限狀態機#

  • 智能手機的定位和導航功能依賴三項關鍵技術:衛星定位、地址識別最短路線規劃
  • 地址識別看似簡單,實際上涉及上下文有關的文法,用程式處理並不容易
  • 例如「北京東路」在上海是路名,在南京也是路名,需要根據上下文(城市名)判斷

有限狀態機的結構#

  • 有限狀態機是一種特殊的有向圖,包含若干狀態(節點)和連接狀態的有向弧
  • 每個有限狀態機有一個開始狀態和一個終止狀態,以及若干中間狀態
  • 以中國地址識別為例:開始 → 省 → 市 → 區縣 → 街道 → 號 → 終止
  • 如果一條地址能從開始狀態走到終止狀態,則該地址有效

有限狀態機的用途遠不止地址識別。Google Now 的核心就是一個有限狀態機,它根據用戶的地理位置、日曆和其他資訊,提供個人化的服務(導航、撥打電話等)。

  • 使用有限狀態機識別地址的兩個關鍵問題:建立狀態機、設計匹配算法——兩者都有現成的解決方案
  • 當用戶輸入不標準或有錯別字時,基於概率的有限狀態機和馬爾可夫鏈可以進行模糊匹配

2. 全球導航和動態規劃#

  • 全球導航的核心算法是動態規劃(Dynamic Programming, DP)
  • 在加權圖(Weighted Graph)中,尋找兩點之間的最短路徑(Shortest Path)是常見問題
  • 窮舉法的複雜度隨節點數呈指數級增長,完全不可行

動態規劃的原理#

  • 以從北京到廣州為例:假設最短路線經過鄭州,那麼北京到鄭州的這段路必然也是所有北京到鄭州路線中最短的
  • 否則就能找到更短的替代路線,與「全程最短」矛盾
  • 因此可以將「全程最短路線」分解為多個「局部最短路線」的小問題
  • 具體做法:在圖上畫一條橫切線,從北京到廣州的路線必經切線上的某個城市,只需找到切線上每個城市的局部最短路徑,再逐步推進至終點

動態規劃的精髓:正確的數學模型可以將一個看似計算量巨大的問題,大幅降低計算複雜度。例如從北京到廣州,動態規劃的計算量約為 $10 \times 10 \times 15 = 1500$,而窮舉法則是 $10^{15}$,相差萬億倍。

3. 延伸閱讀:有限狀態傳感器#

  • 有限狀態機在語音識別和自然語言處理中極為重要,其中常用的是加權的有限狀態傳感器(Weighted Finite State Transducer, WFST
  • WFST 的特殊性:每個狀態由輸入和輸出符號定義,並且可以有不同的概率權重

嚴格定義#

有限狀態機是一個五元組 $(\Sigma, S, s_0, \delta, f)$:

  • $\Sigma$:輸入符號的集合

  • $S$:有限狀態集合

  • $s_0$:起始狀態

  • $\delta$:從 $S \times \Sigma$ 到 $S$ 的映射函數

  • $f$:終止狀態

  • 在語音識別中,每個被識別的句子都可以用一個 WFST 表示,其中概率最大的路徑就是識別結果,而找最佳路徑的算法正是動態規劃

  • AT&T 實驗室的三位科學家莫瑞(Mehryar Mohri)、皮耶爾(Fernando Pereira)和瑞利(Michael Riley)花了很多年編寫了通用的基於概率的有限狀態機 C 語言工具庫

本章小結#

有限狀態機和動態規劃的應用非常廣泛,遠不止地址識別和導航。它們在語音識別、拼寫和語法糾錯、拼音輸入法、工業控制和生物序列分析等領域都有極其重要的應用。