文章目录
形式语言
语言的定义*
- 表达思想、交流思想的工具;
- 抽象的数学系统;
- 按照一定规律构成的句子和符号串的有限或无限的集合。
语言描述*
语言描述(该语言是什么样的,句子是否属于该语言)的三种途径:
- 穷举法(把语言中的所有句子都枚举出来)——只适合句子数目有限的语言;
- 文法描述(语言中的每个句子用严格定义的规则来构造)——生成语言中合格的句子;
- 自动机(对输入的句子进行合法性检验) ——区别哪些是语言中的句子,哪些不是语言中的句子。
文法描述:给予语言中的句子以结构,各成分之间的结构关系清楚、明了。运用文法描述判断句子是否属于该语言较为困难。
自动机:机械刻画对输入字符串的识别过程,结构关系不清楚。判断句子是否属于该语言较为简单。
形式语言是用来精确地描述语言极其结构的手段。
形式语法(文法)的定义*
形式语法的定义:
形式语法是一个4元组
G
=
(
N
,
Σ
,
P
,
S
)
G=(N,\Sigma,P,S)
G=(N,Σ,P,S),
其中,N是非终结符的有限集合(变量集/句法种类集);
Σ
\Sigma
Σ是终结符的有限集合(
N
∩
Σ
=
⊘
N\cap\Sigma=\oslash
N∩Σ=⊘,
V
=
N
∪
Σ
V=N\cup\Sigma
V=N∪Σ);
P是一组重写规则的有限集合(
P
=
{
α
→
β
}
P=\{\alpha\to\beta\}
P={α→β},其中
α
,
β
\alpha,\beta
α,β都是V中元素构成的串,但
α
\alpha
α中至少应该含有一个非终结符号);
S
∈
N
S\in N
S∈N,成为句子符或初始符。
推导的定义:
设G是一个文法,在V上定义
⇒
G
\Rightarrow_G
⇒G(直接派生/推导)如下:如果(1)
α
β
γ
\alpha\beta\gamma
αβγ是V中的符号串,且(2)
β
→
δ
\beta\to\delta
β→δ是P的产生式,那么
α
β
γ
⇒
G
α
δ
γ
\alpha\beta\gamma\Rightarrow_G\alpha\delta\gamma
αβγ⇒Gαδγ。
推导是一个变化的操作。
需要补充的是:
⇒
G
+
\Rightarrow_G^+
⇒G+(非平凡方式派生):直接派生的传递闭包,V上的符号串
ϵ
i
\epsilon_i
ϵi到
ϵ
i
+
1
\epsilon_{i+1}
ϵi+1的
n
(
n
≥
1
)
n(n\ge1)
n(n≥1)步派生。(推出来的结果还在V内,不包含本身)
⇒ G ∗ \Rightarrow_G^* ⇒G∗(派生):直接派生的自反或传递闭包,V上的符号串 ϵ i \epsilon_i ϵi到 ϵ i + 1 \epsilon_{i+1} ϵi+1的 n ( n ≥ 0 ) n(n\ge0) n(n≥0)步派生。(推出来的结果还在V内,包含本身)
如果明确某个推导是给定文法G产生的,那么可以省略G。
派生或非平凡方式派生中的每一个直接派生中只改写最左侧的非终结符号,称为“最左推导”,反之称为“最右推导”/“规范推导”。
举例:
句子的定义:
文法G的句子形式通过以下递归方式定义:
(1)S是一个句子形式;
(2)如果
γ
β
α
\gamma\beta\alpha
γβα是一个句子形式,且
β
→
δ
\beta\to\delta
β→δ是P中的产生式,那么
γ
δ
α
\gamma\delta\alpha
γδα也是一个句子形式。
G生成的句子:不含非终结符的句子形式;
G识别的语言:G生成的句子集合,记为 L ( G ) = { x ∣ x ∈ Σ , S ⇒ G ∗ x } L(G)=\{x|x\in\Sigma,S\Rightarrow_G^*x\} L(G)={x∣x∈Σ,S⇒G∗x}。
每一个符号都没有产生式。
题型三:通过最左/右推导,表达出文法到句子的生成过程*
任何文法的推导都要遵循最左/最右中的一种,且不能跳步。
形式语法的类型
3型文法:正则文法;2型文法:上下文无关文法;1型文法:上下文相关文法;0型文法:无约束文法。
这些文法的区别在于规则集的定义。规则集的关注点又在于:推导左右两侧的变量形式和所属。
正则文法*
如果文法G的规则集P中所有则均满足如下形式: A → B x A\to Bx A→Bx或 A → x A\to x A→x,其中 A , B ∈ N , x ∈ Σ A,B\in N,x\in\Sigma A,B∈N,x∈Σ,则称该文法为正则文法。
如果非终结符号出现在最左边,称为左线性正则文法,反之,称为右线性正则文法。
题型四:归纳出识别的语言
能拆分也算。
上下文无关文法(Context-free grammar,CFG)*
如果文法G的规则集P中所有规则均满足如下形式: A → a A\to a A→a,其中, A ∈ N , α ∈ V ∗ A\in N,\alpha\in V^* A∈N,α∈V∗,则称文法G为上下文无关文法(CFG context- free gramma)。
2型文法比3型文法少了一层限制,可以看到其规则右端的格式没有约束,那么规则左端可以改写为任何形式。
上下文有关文法*
如果文法G的规则集P中所有规则满足如下形式: α A β → α γ β \alpha A\beta\to \alpha\gamma\beta αAβ→αγβ,其中 A ∈ N A\in N A∈N, α , β , γ ∈ V ∗ \alpha,\beta,\gamma\in V^* α,β,γ∈V∗,且 γ \gamma γ至少包含一个字符,则称G为上下文有关文法(CSG context- sensitive grammar)。
字符串 α A β \alpha A\beta αAβ中的A被改写为 γ \gamma γ时需要有上下文语境 α , β \alpha,\beta α,β。
如果上下文语境为空字符串,则1型文法转变为了2型文法。在上下文无关文法中,规则左侧可以被改写为任意形式,属于V的字符可以不只有一个。
无约束文法*
如果文法G的规则集P中所有规则满足如下形式: α → β \alpha\to\beta α→β,其中 α ∈ V + , β ∈ V ∗ \alpha\in V^+,\beta\in V^* α∈V+,β∈V∗,则称G为无约束文法。
从0型文法到3型文法,约束越来越多,所识别的语言集合 L ( G ) L(G) L(G)也越来越小。
题型五:识别文法类型
如果一种语言由几种文法产生,则把这种语言称为在几种问法中受限制最多的那种文法产生的,
CFG识别句子的派生树表示*
G所识别的句子的派生树的构造步骤(构成,描述每个节点的意义):
- 对于 ∀ x ∈ N ∪ Σ \forall x\in N\cup\Sigma ∀x∈N∪Σ,给定一个标记作为结点,令文法的初始符号S作为树的根节点。
- 如果一个结点标记为A,且至少有一个除它自身以外的后裔,那么 A ∈ N A\in N A∈N。
- 如果一个结点标记为A,它的 k ( k > 0 ) k(k\gt 0) k(k>0)个直接后裔结点按从左到右的顺序依次标记为 A 1 , A 2 , . . . , A k A_1,A_2,...,A_k A1,A2,...,Ak,则 A → A 1 , . . . , A k A\to A_1,...,A_k A→A1,...,Ak一定是P中的一个产生式。
二义性文法:
如果文法G对于同一个句子存在两棵或两棵以上不同的分析树,那么句子是二义性的,文法G称为二义性文法。
题型六: 用生成树表达句子的生成过程并判断二义性
注意点:
- 含运算符号的替代是直接的,不存在优先级的保留。
- 运算符号包含在终结符号中。
- 一条链路就是最左/右推导的结果。
自动机理论
有限自动机
确定的有限自动机(definite automata DFA)*
DFA M是一个五元组:
M
=
(
Σ
,
Q
,
δ
,
q
0
,
F
)
M=(\Sigma,Q,\delta,q_0,F)
M=(Σ,Q,δ,q0,F),
Σ
\Sigma
Σ是输入符号的有穷集合,
Q是状态的有限集合,
q
0
∈
Q
q_0\in Q
q0∈Q是初始状态,
F是终止状态集合,
F
⊆
Q
F\subseteq Q
F⊆Q,
δ
\delta
δ是
Q
Q
Q与
Σ
\Sigma
Σ的直积
Q
×
Σ
Q\times\Sigma
Q×Σ到Q(下一个状态)的映射,它支配着有限状态控制的行为,有时也称为转移函数。
(直积:
X
×
Y
=
{
(
x
,
y
)
∣
x
∈
A
∧
y
∈
B
}
X\times Y=\{(x,y)|x\in A\land y\in B\}
X×Y={(x,y)∣x∈A∧y∈B})
DFA是状态、映射、输入的结合体,文法描述是符号、规则的结合体。
DFA接受的语言:如果一个句子x对于有限自动机M有 δ ( q 0 , x ) = p , p ∈ F \delta(q_0,x)=p,p\in F δ(q0,x)=p,p∈F,那么称句子x被M接受。被M接受的句子的全集称为由M定义的语言,或称M所接受的语言,记为 T ( M ) = { x ∣ δ ( q 0 , x ) ∈ F } T(M)=\{x|\delta(q_0,x)\in F\} T(M)={x∣δ(q0,x)∈F}。
状态变换图:
q
0
q_0
q0用带“开始”的箭头标注;
F
F
F中的元素用双层圈标注;
Σ
\Sigma
Σ中的元素写在箭头上;箭头表示的是
δ
\delta
δ中的元素;
Q
Q
Q中的元素用圆圈表示。
即,存在一系列映射,使得输入句子x能与 q 0 q_0 q0 在最后映射到F中。
题型七:判断该语言是否被DFA所识别
需要注意的是,有限控制器是从左到右进行的,因此判断顺序也是1 1 0 1 0 1。
不确定的有限自动机(non- definite automata NFA)*
NFA M是一个五元组:
M
=
(
Σ
,
Q
,
δ
,
q
0
,
F
)
M=(\Sigma,Q,\delta,q_0,F)
M=(Σ,Q,δ,q0,F),
Σ
\Sigma
Σ是输入符号的有穷集合,
Q是状态的有限集合,
q
0
∈
Q
q_0\in Q
q0∈Q是初始状态,
F是终止状态集合,
F
⊆
Q
F\subseteq Q
F⊆Q,
δ
\delta
δ是
Q
Q
Q与
Σ
\Sigma
Σ的直积
Q
×
Σ
Q\times\Sigma
Q×Σ到Q的幂集
2
Q
2^Q
2Q映射。(幂集:原集合中所有的子集)
NFA与DFA的区别是:在NFA中 δ ( q , a ) \delta(q,a) δ(q,a)是一个状态集合,而在DFA中 δ ( q , a ) \delta(q,a) δ(q,a)是一个状态。
也就是说,NFA M在状态q时,接受输入符号a时,M可以选择状态集合的幂集中的任何一个状态作为下一个状态,并将输入头向右边移动一个字符的位置。
NFA接受的语言:
如果存在一个状态p,有
p
∈
δ
(
q
0
,
x
)
p\in\delta(q_0,x)
p∈δ(q0,x)且
p
∈
F
p\in F
p∈F,则称句子x被NFA M所接受。被NFA M接受的所有句子的集合称为NFA M定义的语言,记作
T
(
M
)
=
{
x
∣
p
∈
δ
(
q
0
,
x
)
且
p
∈
F
}
T(M)=\{x|p\in\delta(q_0,x)且p\in F\}
T(M)={x∣p∈δ(q0,x)且p∈F}。
定理:设L是被NFA所接受的语言,则存在一个DFA,它能够接受L。
因为该定理,所以无需区分NFA和DFA,统称为有限自动机(FA)
题型八:判断该语言是否被NFA所识别
正则文法与自动机的关系*
定理:若 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S)是一个正则文法,则存在一个 F A M = ( Σ , Q , δ , q 0 , F ) FA~M=(\Sigma,Q,\delta,q_0,F) FA M=(Σ,Q,δ,q0,F)使得 T ( M ) = L ( G ) T(M)=L(G) T(M)=L(G)。
定理:若 M = ( Σ , Q , δ , q 0 , F M=(\Sigma,Q,\delta,q_0,F M=(Σ,Q,δ,q0,F是一个有限自动机,则存在正则文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S),使得 L ( G ) = T ( M ) L(G)=T(M) L(G)=T(M)。
其他自动机*
图灵机:
- 与0型文法等价;
- 与FA的区别在于:图灵机可以通过其读/写头改变输入带的字符。
线性带限自动机:
- 与1型文法等价;
- 是一个确定的单带图灵机。
自动机在自然语言处理中的应用
单词拼写检查*
找到和输入最接近的词汇。
编辑距离
Edit distance:两个字符串之间的编辑距离等于使一个字符串变成另外一个字符串而进行的插入、删除、替换或相邻字符交换位置而进行操作的最少次数。
其计算方式如下:
题型九:计算Edit distance
FSM的应用方式
F
A
R
=
(
Q
,
A
,
δ
,
q
0
,
F
)
FA~~R=(Q,A,\delta,q_0,F)
FA R=(Q,A,δ,q0,F),如果
L
⊆
A
∗
L\subseteq A^*
L⊆A∗表示有限状态机R定义的语言,
t
>
0
t\gt0
t>0为编辑距离的阈值,那么一个字符串
X
[
m
]
∉
L
X[m]\notin L
X[m]∈/L能够被R识别的条件为存在非空集合:
C
=
{
Y
[
n
]
∣
Y
[
n
]
∈
L
,
e
d
(
X
[
m
]
,
Y
[
n
]
)
≤
t
}
C=\{Y[n]|Y[n]\in L,ed(X[m],Y[n])\le t\}
C={Y[n]∣Y[n]∈L,ed(X[m],Y[n])≤t}
FA/FSM(有限状态机)可以视为有向图(键树/数字查找树):
对一个输入串进行拼写检查的过程是在给定阈值内,寻找所有与输入串编辑距离小于t的路径。
FSM剪枝
为了尽早找到target,使用剪除距离更好一些。
剪除距离:
c
u
t
e
d
(
X
[
m
]
,
Y
[
n
]
)
=
min
l
≤
i
≤
u
{
e
d
(
X
[
i
]
,
Y
[
n
]
)
}
cuted(X[m],Y[n])=\min_{l\le i\le u}\{ed(X[i],Y[n])\}
cuted(X[m],Y[n])=l≤i≤umin{ed(X[i],Y[n])}
其中,
l
=
max
(
1
,
n
−
t
)
,
u
=
min
(
m
,
n
+
t
)
l=\max(1,n-t),u=\min(m,n+t)
l=max(1,n−t),u=min(m,n+t)
函数
c
u
t
e
d
(
⋅
)
cuted(\cdot)
cuted(⋅)从X字符串中截取长度范围在l~u之间的字符串,并计算这些字符串与Y的编辑距离,取最小距离。
局部候选字符串Y由自动机从初始状态出发的一些连续弧上所对应的标记符号构成。
深度优先搜索:
- 每当扩展Y时,需要检测X、Y之间的cuted是否在门限值t所限定的范围内;
- 如果剪除距离超过了t值,就要放弃最后一步转移弧,回溯到上一状态(同时缩短候选串),尝试其他的候选串;
- 如果找不到其他可能的转移弧,开始递归地执行回溯操作。
- 如果没有违背剪除距离的限制且达到Y的末端时,编辑距离也满足条件,那么Y就是X的一个有效的候选拼写方式。
X是我们拼写的单词,Y是扩展的单词。
题型十:计算Cute distance
- 明确截取下限l(l为1和Y的长度减去阈值的最大值)和截取上限u(u为X的长度和Y的长度加上阈值的最小值);
- 截取出该范围内的X子串,分别计算编辑距离;
- 取最小值作为Cute distance。
单词形态分析
FST(有限状态转换机,finite state transducer):与FSM相比,FST完成状态转移的同时产生一个输出,FSM只是状态的转移,不产生任何输出。
该应用举例如下:形容词heavy在英文句子中可能以三种不同的形式出现:原型、比较级和最高级。对于变形后的heavy,为了正确分析出其原型,可以通过构造FST的方法实现。