在自然语言处理中,经常会遇到一些针对某些内容法则做出修改的操作,比如说:如果c的后面紧接x的话,则把c变为b,FST则是基于这些规则上的mathematical操作,比如说把若干个规则整合成一个single pass或mega rule,这样做呢,就可以很有效的提高rule-based system的效率。

首先,先来大概的了解一下有限状态机(FSM)
有限状态机呢就是一个由一堆状态(当然啦,有限的嘛),还有一堆转移条件组成的‘鸡’。英文定义是这样的:a FSM is an abstract mathematical model of computation that is capable of storing a status or state and changing this state based on input. 我的理解大概这个FSM就是一个基于某些状态和某些规则而构造的一个模型。比如原文作者就丧心病狂的给他的小白鼠构造了下面这个“我的一天”的模型。

 

所以呢,我们大致可以看出来这个Mirovia的小白鼠每天的生活就是困了睡、饿了吃、无聊了就开始搞基……

在NLP中,FSM包含一个起始节点和一个终止结点,然后通过all possible combination of condition labels,就能去generate, recognize language了。
而FST呢,就是一种special type of FSM. 具体的来说,FST会有一个input string和一个output string, 对比起对于某种状态我要么接受条件做出转移,要么我就原地不动的FSM来说,FST是将这个input string转移成output string了,也就是说,it accepts a string on its input tape and generate another string on its output tape.

FST在一些NLP task里面特别有用,比如说我给出以下三个规则:
1) 当c后紧接x时,将c变为b cx→bx
2) 当a前面是rs时,将a变为b rsa→rsb
3) 当b前面是rs,后面是xy时,将b变为a rsbxy→rsaxy

所以当我们的input string是rsaxyrscxy时,根据以上三个规则,我们就可以做出以下的变换:
rsaxyrscxy→rsaxyrsbxy
rsaxyrsbxy→rsbxyrsbxy
rsbxyrsbxy→rsaxyrsaxy

然后大家就会发现,第二步做的变换的第三步又变回去了!搞毛啊!浪费我们程序猿宝贵的时间和精力啊!于是FST就出现了, FST provides a path to eliminate these inefficiencies.

首先呢,我们把每一个rule都用一个FST表示出来,每个状态间的link表示接收input character以及相应的output character. 表示方式是input/output. 所以针对上面的3个rules,我们可以得到以下三个FST:

FST based on rules

接下来,我们就要去extending 这些FST了,为什么要extending他们呢?原文是这么说的: FST would be of little use in matching against an input string as each is designed to process exactly the context window described in its corresponding rule.我的理解是这样的,比如说第一个rule,当rsaxyrscxy进来后,先判断第一个字符r,rule 1就识别不出来了,因为他只知道c和b的事嘛。所以为了让FST能适用于任何任意长度的string而且能够根据rules进行必要的操作,我们就要extend FST. 就拿刚刚的rule 1来说吧,他只是为了变换cx到bx,但是他也要能handle得了其前面的‘rsaxyrs’这些characters还有他后面的那个y啊,所以呢,我们可以简单的把这些貌似与规则暂时无关的characters列在一个its own individual edge上面, labeled with ?/?. 然后用ε表示无输出,我们来看一下刚刚那三个FST扩展后的结果先:

extended FST

好的,就以第一个图来讲解一下
首先输入rsaxyrscxy,然后c前面的这一串‘rsaxyrs’,由于他们和我规则没有半毛钱关系,所以他们是什么就还是什么,然后遇到c字符了,我们就用c/ε 来表示“暂时无输出,跳入下一个字符”,所以我们看到了1那个节点,这个节点分别有三个link指出去,,x/bx表示输入x的话,那就输出bx;?/c?表示输入为非x外的任意字符,则原样输出嘛;c/c表示输入c,输出c(相当于继续判断我后面那个是什么)。

然后呢,就要去把上面这一堆合成一个single FST了,这个时候作者说了一句“A full explanation of the FST composition algorithm is beyond the scope of this write-up”,咳咳,same reason吧,大家比划比划应该能搞出下面这个composed FST:

Final FST

这个final FST能达到那三个rule的效果,而且重点是the transformation required only a single pass though the FST and did not result in any efficient transformations. 原来这些rule的task耗费的时间与他们的rule number啊,窗长啊,input string字符数啊都有关系,而现在FST耗费的时间只与input string字符数有关了,perfect啊!

Finite State Transducer(FST)in NLP相关推荐

  1. 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 ...

  2. lucene随笔-FST(Finite State Transducer)有限状态传感器

    lucene版本:6.5.1 有限状态传感器,FST(Finite State Transducer)在lucene中扮演着非常重要的一个角色,在4.0后的版本lucene大量使用了这种数据结构,主要 ...

  3. FSM(Finite State Machine,有限状态机)设计

    有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机.Moore型状态机输出仅仅与现态有关和Mealy型状态机 ...

  4. 时间卷积网络(TCN)在 NLP 多领域发光,RNN 或将没落

    也就是从 2014.15 年起,我们基于深度神经网络的应用就已经在文本和语音识别领域达到 95% 的准确率,可以用来开发新一代的聊天机器人.个人助理和即时翻译系统等. 卷积神经网络(Convoluti ...

  5. 「自然语言处理(NLP)」入门系列(一)初识NLP

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-01-07 初识自然语言处理(NLP) 本次主要内容: 1.解释自然语言处理的目标和 ...

  6. Finate State Processes(FSP)语法规则

    Finate State Processes(FSP)语法规则 1. 基本语法 1.1 prefix( → \rightarrow → ) 表示动作的发生. 1.2 choice( ∣ | ∣ ) 当 ...

  7. 《计算机组成与CPU设计实验》5有限状态机的Verilog HDL描述(Finite State Machine,FSM)

    多数控制逻辑都可以用有限状态机描述 状态机 状态机是组合逻辑和时序逻辑的特殊组合 时序逻辑用于存储状态 组合逻辑用于产生次态和产生输出 状态的数量是有限的,故称为有限状态机(Finite State ...

  8. 【FPGA入门教程】(七)FSM(Finite State Machine,有限状态机)设计

    FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...

  9. 北京内推 | 微软亚洲互联网工程院(STCA)招聘NLP科研实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 微软亚洲互联网工程院 微软 STCA CPC Intelligence T ...

  10. (一)关于NLP的概念和处理过程

    关于NLP的概念和处理过程 一.自然语言处理(Natural Language Processing) (1)自然语言处理是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自 ...

最新文章

  1. git branch
  2. JDK9,像Unix脚本一样执行Java代码
  3. opengl开启垂直同步_你的下一部鼠标,何必是鼠标?来试试肯辛通垂直无线轨迹球?...
  4. 聊聊企业级 Java 应用最重要的4个性能指标
  5. 002_SpringBoot整合Servlet
  6. java servicefactory_Java DirectoryServiceFactory.getDirectoryService方法代碼示例
  7. Mysql对string类型转换int类型的小问题
  8. 原创 | 为什么年终奖是一个彻头彻尾的职场圈套?
  9. android studio crashlytics,Crashlytics发现了一个无效的API密钥 – AndroidStudio构建
  10. 设计模式之笔记--建造者模式(Builder)
  11. 关于jstl EL用法的注意点(java.lang.NumberFormatException: For input string: userName)
  12. JAVA毕业设计源码带论文和答辩、大作业、实例程序源码下载合集【56套】
  13. 【有奖投票】程序员IT好书评选
  14. python将图片转为矢量图
  15. Python爬虫——利用新浪微盘下载周杰伦的歌曲(共190首)
  16. ToLua 入门05_AccessingLuaVariables
  17. MTK芯片处理器对比资料图
  18. ol3 加载天地图服务
  19. oracle 索引快速全扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景
  20. Visio画图(直角坐标系和relu函数)

热门文章

  1. javascript 百度百科
  2. 大疆精灵 4 Pro V2.0功能特点
  3. 最大公约数(GCD)和最小公倍数(LCM)
  4. jpa 人大金仓数据库方言_KDC——人大金仓数据库比对工具
  5. 辨别身份真假之【天眼数聚】腾讯云身份证实名认证接口
  6. Keychain-Dumper的安装,签名与使用
  7. 两边同时取对数求复合函数_大学高等数学:第二章第四讲几类复合函数求导法,真该学习下...
  8. X书app数美-sid分析
  9. 转基因,请你走出这片净土。!!!食用转基因的人,你们伤不起~有木有,有木有啊~!!!!!!!!!!!!!!!
  10. 关于电赛应该了解的事