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,可以表示成:FST<key,value>的形式。
它的优点是:
- 可以用O(length(key)) 也就是查询时间复杂度来找到key对应的value。
- 在Lucene的term压缩存储中,FST以字节的方式来存储所有的Term,重复利用Term Index的前缀和后缀,使Term Index小到可以放进内存,减少存储空间,不过相对的也会占用更多的cpu资源。
- FST还可以用来快速确定term是否在系统中。
如何构建一个FST?假设有如下的Term Index(是排序过的):
String inputValues[] = {"mop","moth","pop","star","stop","top"};
long outputValues[] = {0,1,2,3,4,5};
从上图我们可以感知一下FST的构建过程
1.创建一个节点node作为所有key的入口
2.如果还要未处理的key,则枚举出该key的每一个label
3.如果当前节点存在含此label的边,
则如果Value包含该边的out值,则
value = value – out
否则 temp=out–Value;
out =value并使下一个节点的所有边out都加上temp。
如果下一节点是Final节点 则FinalOut += temp
进入下一个节点
否则: 新建一个节点另其out = Value, Value = 0。
使用场景
to be continue…
FST(Finite-State Transducer) 原理相关推荐
- lucene随笔-FST(Finite State Transducer)有限状态传感器
lucene版本:6.5.1 有限状态传感器,FST(Finite State Transducer)在lucene中扮演着非常重要的一个角色,在4.0后的版本lucene大量使用了这种数据结构,主要 ...
- 字典数据结构-FST(Finite State Transducers)
http://www.cnblogs.com/LBSer/p/4119841.html 1 lucene字典 使用lucene进行查询不可避免都会使用到其提供的字典功能,即根据给定的term找到该te ...
- FST(Finite State Transducers, 有限状态转换器)简介及示例
一.简介 Finite State Transducers 简称 FST, 中文名:有穷状态转换器.FST目前在语音识别和自然语言搜索.处理等方向被广泛应用. 例如,在自然语言处理中,经常会遇到一些针 ...
- 【Elasticsearch】es FST (Finite State Tranduer) 有限状态转换器
1.概述 FST 有限状态转换器 有一篇博客我有翻译到这篇博客. 参考:[elasticsearch]You AutoComplete Me FST数构建的树如下 演示网站地址:http://exam ...
- 证明与计算(7): 有限状态机(Finite State Machine)
什么是有限状态机(Finite State Machine)? 什么是确定性有限状态机(deterministic finite automaton, DFA )? 什么是非确定性有限状态机(nond ...
- 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...
补充资料:ω-有限自动机 ω-有限自动机 ω-finite state automata 1094·.一youx一anz}dongJ-..有限自动机(.一rinite state automata)一 ...
- 有限状态机FSM(finite state machine) 二
有限状态机FSM(finite state machine) 二 延续上一篇继续有限状态机 上一篇中的状态切换判断是在每一个状态类的 OnExecute 方法中各种 if else 硬编码逻辑 当状态 ...
- FSM(Finite State Machine,有限状态机)设计
有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机.Moore型状态机输出仅仅与现态有关和Mealy型状态机 ...
- Verilog学习笔记HDLBits——Finite State Machines(1)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Finite State Machines 1.Simple FSM 1(asychronous reset) 2 ...
- HDLBits 系列(8)——Sequential Logic(Finite State Machines(一))
目录 3.2 Sequential Logic 3.2.5 Finite State Machines 1. Simple FSM 1 (asynchronous reset) 2. Simple F ...
最新文章
- linux redhat 下载_使用Vmware创建Linux(Ubuntu)系统
- 保存一波集合框架的介绍
- asp.net 跨页面传值(一)
- TCP多进程并发服务端 Linux socket编程入门(2)
- oracle高水位线
- java中怎么判断依赖关系,在Maven 2中,我如何知道依赖性来自哪个依赖?
- Redis基础(六)——事务
- OpenResty Redis 安装部署测试SET GET功能
- (六十五)for循环
- 安卓手机管理_安卓手机用户大福利,谷歌将改善手机内存管理,运行更流畅
- STK与VC++ 6.0联合编程
- PCB硬件设计规范(详细版)
- 零基础数据挖掘入门-二手车价格预测part(一):EDA-数据探索性分析
- ansi、unico、utf8
- 那些只有程序员才能看懂的冷笑话
- python sqrt(4)*sqrt(9)_Python表达式sqrt(4)*sqrt(9)的值为__________。
- javastudy - 52:素数回文数的个数
- 睿慕课点云第二章报错及解决(二)
- Linux上wget: 无法解析主机地址
- Python可视化:中国环保股上市公司市值Top20强