FST(Finite-State Transducer) 原理

參考依據:Weighted Finite-State Transducer Algorithms An Overview
這是一篇由紐約計算機和數學教授,同時也是全球人工智能超級大咖Mehryar Mohri在美國最大電信公司AT & T 工作期間撰寫的論文《加權有限狀態轉換器算法概述》,原文專業術語和數學概念太多,非數學和計算機科學專業的很難讀懂,但是身爲一個IT民工也不需要我們能完全讀懂,所以這裏我只講FST在Lucene中的應用,用來補充我的上一篇文章《Elasticsearch原理分析》

Finite StateTransducers 簡稱 FST,通常中文譯作有窮狀態轉換器或者有限狀態傳感器,我更偏向於後者,因爲後者更加貼近原意。FST目前在語音識別和自然語言搜索、處理等方向被廣泛應用。
FST的功能更類似於字典,Lucene4.0在查找Term時使用了FST算法,用來快速定位Term的位置。FST的數據結構可以理解成(key,value)的形式,
在同義詞過濾器SynonymFilter的實現中甚至可以用HashMap代替,不過相比較於HashMap,它的優點是:

  1. 可以用O(length(key)) 也就是查詢時間複雜度來找到key對應的value。
  2. 以字節的方式來存儲所有的Term,重複利用Term Index的前綴和後綴,使Term Index小到可以放進內存,減少存儲空間,不過相對的也會佔用更多的cpu資源。
  3. FST還可以用來快速確定term是否在系統中。
    如何構建一個FST?假設有如下的Term Index(是排序過的):
String inputValues[] = {"mop","moth","pop","star","stop","top"};
long outputValues[] = {0,1,2,3,4,5};  

圖片和例子來自於commandingofficer的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章