有限状态机在语音技能设计中的应用
zeali 发布于2019-02-11 18:14 浏览:393 回复:0
0
收藏

因为在平时工作中有使用到状态机,所以尝试将它与语音技能设计相结合起来。通过实践后发现从开发效率、稳定性、代码整洁性来说还是很值得推荐的。因此趁着春节有时间总结分享下给各位小伙伴。

 

什么是有限状态机

有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。FSM是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。现实世界中存在大量具有有限个状态的系统:钟表系统、电梯系统、交通信号灯系统、通信协议系统、正则表达式、硬件电路系统设计、软件工程,编译器等,有限状态机的概念就是来自于现实世界中的这些有限系统。

状态机的基本组成

State(状态):

一个标准的状态机最少包含两个状态:现态和次态。现态是状态机初始化后或当前所处的状态,次态就是状态机完成一次迁移后时所处的状态。

 

Event(事件):

事件是触发状态机迁移的某个操作或口令,可以是函数,在语音交互中可以是意图。

 

Action(行为):

行为是状态机迁移所要执行的具体事情。

 

Transition(变更):

一个状态接收一个事件执行了某些行为到达了另外一个状态的过程就是一个Transition。另外,状态变更前,可以设置验证机来验证是否为合法变更,如果合法则执行Action完成Transition,否则抛出异常。

 

Check(检查)

可以对Transition的迁入状态进行规定,检查过程就是对迁入状态以及其他自定义验证过程进行合法性检查。

状态机的特点

有限性:

有限状态机最重要的就是它的有限性,一个有限状态机的状态只会在它所设计的状态内迁移,无法也不允许迁移到其他状态。

 

确定性:

状态机的迁移是由设计者事先设计好的,由当前某个状态(现态),通过事件迁移到另一个状态(次态),设计者可以定义迁入状态限制范围,迁出状态。因此状态机的所有迁移都是确定性。

 

可控性:

这里所说的可控性主要是指行为可控,因为状态机是由事件驱动,然后执行对应的程序性事务(Action),从而进行状态迁移(Transition),因此,程序的执行或状态的流转都在设计者的掌控范围内。

为什么使用状态机

首先意图即可视为一种触发事件,语音技能需求和状态机的组成是不谋而合的例如:

 

语音技能的状态需求

游戏技能:游戏前、游戏中、游戏暂停、游戏结束

订票技能:订票中,支付中,订票完成

内容技能:内容选择中、播放中、暂停中、播放结束

问答技能:问答前、问答中、问答结束

 

语音技能状态迁移控制需求

  • 某些意图需要某个状态的情况下才能执行。例如棋盘游戏技能中,只有在游戏中才能执行落子意图。
  • 某些意图需要在任何状态下都可以执行。例如问答技能中,用户需要“重新开始”。
  • 某些意图执行完成后,技能状态不进行迁移。例如“设置昵称”时,用户设置昵称后技能状态应该停留在当前状态

 

异常捕获需求

对缺省意图、非法意图进行合理的处理反馈或者数据收集

 

怎么使用状态机

以《扫雷》有屏游戏技能为例:

 

定义状态(States)集:初始状态、启动状态、游戏中、暂停中、已结束

定义变更(Transitions)集

Intent:意图标识名

Name:意图中文名或者自定义提示语

Source:迁入状态定义,可以是数组、*号(可任意状态迁入)

Dest:迁出状态定义,唯一、不能是数组、=号(迁出状态等于来源状态)

状态机工作流程:

具体实现看代码实例,就不过多描述,主要包含了这几个过程:Transition提取、迁移检查、抛出异常、意图方法执行、状态迁移、返回数据。

 

代码实例

稍后放出,整理中。。

 

 

以上个人小结,欢迎交流提出不同见解

 

参考文献:

https://www.jianshu.com/p/d48e0d565618 - 《有限状态机实现-状态机介绍》

https://www.cnblogs.com/21207-iHome/p/6085334.html - 《有限状态机》

收藏
点赞
0
个赞
TOP