1. DFA 和 NFA
教材中的baaa!为例,以前在本科学编译原理的时候学过这个,但是现在忘了权且当复习了。其实道理一样:编译器第一步是对源代码进行分词,对自然语言处理第一步也是对一句话进行分词。
之所以说是确定的是因为每一步操作中,都能得到一个确定的下一步。f(3) = a 或 !,当文本串是“!”转移到状态4,如果是“a”时继续停留在状态3。每一步做的决策都是正确的,不会有回溯现在的发生,不需要试探下一步。
上图是NFA
之所以是不确定的,是因为出现多条路径的下一步时某些路径具有相同的状态。f(3)= a,当读取文本内容是‘a’时,下一步在选择时即可以跳转到状态4又可以停留在状态3,结果出现了不确定性。
在NLP中关于不确定性就会用到两种我们常用的算法:DFS和BFS,这两个算法神马神马特点就不再说了,数据结构上讲的很明确。当然缺点的改进就是算法设计中学到的经典的动态规划。