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};  

FST(Finite-State Transducer) 原理_第1张图片

使用场景

to be continue…

你可能感兴趣的:(JAVA高级)