Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
Toy-MT-Introduction
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
Toy-MT-Introduction
Commits
d8921642
Commit
d8921642
authored
Apr 12, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updates of section 2
parent
bd5c4049
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
68 行增加
和
76 行删除
+68
-76
Book/Chapter2/Figures/figure-evaluation-of-probability-for-grammar.tex
+1
-0
Book/Chapter2/Figures/figure-examples-of-Chinese-word-segmentation-based-on-1-gram-model.tex
+1
-1
Book/Chapter2/Figures/figure-perspectives-of-expert-ordinary-and-syntactic-parser.tex
+1
-1
Book/Chapter2/Figures/figure-probability-values-corresponding-to-different-derivations.tex
+6
-6
Book/Chapter2/Figures/figure-process-of-statistical-syntax-analysis.tex
+1
-1
Book/Chapter2/Figures/figure-word-segmentation-based-on-statistics.tex
+1
-1
Book/Chapter2/chapter2.tex
+56
-65
Book/mt-book-xelatex.tex
+1
-1
没有找到文件。
Book/Chapter2/Figures/figure-evaluation-of-probability-for-grammar.tex
查看文件 @
d8921642
...
...
@@ -68,6 +68,7 @@
\node
[anchor=north west] (math3) at ([yshift=-6em]math2.north west)
{
P(``IP
$
\to
$
NP NP'')
}
;
\node
[anchor=north west] (math3part2) at ([xshift=-1em,yshift=0.2em]math3.south west)
{$
=
\frac
{
\textrm
{
``IP''和``NP NP''同时出现的次数
=
0
}}{
\textrm
{
``IP''出现的次数
}
=
3
}$}
;
\node
[anchor=north west] (math3part3) at ([yshift=0.2em]math3part2.south west)
{$
=
\frac
{
0
}{
3
}$}
;
\begin{pgfonlayer}
{
background
}
...
...
Book/Chapter2/Figures/figure-examples-of-Chinese-word-segmentation-based-on-1-gram-model.tex
查看文件 @
d8921642
...
...
@@ -29,7 +29,7 @@
\draw
[->,very thick,ublue] ([xshift=0.2em]corpus.east) -- ([xshift=4.2em]corpus.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
统计学习
}}}
;
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
穷举
\&
计算
}}}
;
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
搜索
\&
计算
}}}
;
{
\scriptsize
\node
[anchor=north west] (sentlabel) at ([xshift=6.2em,yshift=-1em]model.north east)
{
\color
{
red
}{
自动分词系统
}}
;
...
...
Book/Chapter2/Figures/figure-perspectives-of-expert-ordinary-and-syntactic-parser.tex
查看文件 @
d8921642
...
...
@@ -74,7 +74,7 @@
语言学家:
&
不对
&
对
&
不对
\\
我们:
&
似乎对了
&
比较肯定
&
不太可能
\\
分析器:
&
P=0.2
&
P=0.6
&
P=0.1
分析器:
&
$
\textrm
{
P
}
=
0
.
2
$
&
$
\textrm
{
P
}
=
0
.
6
$
&
$
\textrm
{
P
}
=
0
.
1
$
\end{tabular}
%---------------------------------------------------------------------
...
...
Book/Chapter2/Figures/figure-probability-values-corresponding-to-different-derivations.tex
查看文件 @
d8921642
...
...
@@ -77,12 +77,12 @@
\node
[] (d2) at (0em,-10em)
{$
d
_
2
$}
;
\node
[] (d3) at (8.5em,-10em)
{$
d
_
2
$}
;
\node
[anchor=east] (d1p) at ([xshift=0.4em]d1.west)
{
P(
}
;
\node
[anchor=west] (d1p2) at ([xshift=-0.4em]d1.east)
{
)=0.0123
}
;
\node
[anchor=east] (d2p) at ([xshift=0.4em]d2.west)
{
P(
}
;
\node
[anchor=west] (d2p2) at ([xshift=-0.4em]d2.east)
{
)=0.4031
}
;
\node
[anchor=east] (d3p) at ([xshift=0.4em]d3.west)
{
P(
}
;
\node
[anchor=west] (d3p2) at ([xshift=-0.4em]d3.east)
{
)=0.0056
}
;
\node
[anchor=east] (d1p) at ([xshift=0.4em]d1.west)
{
$
\textrm
{
P
}
(
$
}
;
\node
[anchor=west] (d1p2) at ([xshift=-0.4em]d1.east)
{
$
)=
0
.
0123
$
}
;
\node
[anchor=east] (d2p) at ([xshift=0.4em]d2.west)
{
$
\textrm
{
P
}
(
$
}
;
\node
[anchor=west] (d2p2) at ([xshift=-0.4em]d2.east)
{
$
)=
0
.
4031
$
}
;
\node
[anchor=east] (d3p) at ([xshift=0.4em]d3.west)
{
$
\textrm
{
P
}
(
$
}
;
\node
[anchor=west] (d3p2) at ([xshift=-0.4em]d3.east)
{
$
)=
0
.
0056
$
}
;
\end{tikzpicture}
%---------------------------------------------------------------------
...
...
Book/Chapter2/Figures/figure-process-of-statistical-syntax-analysis.tex
查看文件 @
d8921642
...
...
@@ -55,7 +55,7 @@
\draw
[->,very thick,ublue] ([xshift=0.2em]corpus.east) -- ([xshift=4.2em]corpus.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
统计学习
}}}
;
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
穷举
\&
计算
}}}
;
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
搜索
\&
计算
}}}
;
{
\scriptsize
\node
[anchor=north west] (sentlabel) at ([xshift=6.2em,yshift=-1em]model.north east)
{{
\color
{
ublue
}
{
\scriptsize
\textbf
{
统计分析模型
}}}}
;
...
...
Book/Chapter2/Figures/figure-word-segmentation-based-on-statistics.tex
查看文件 @
d8921642
...
...
@@ -44,7 +44,7 @@
}
{
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
穷举
\&
计算
}}}
;
\draw
[->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=4.2em]model.east) node [pos=0.5, above]
{
\color
{
red
}{
\scriptsize
{
搜索
\&
计算
}}}
;
}
{
\scriptsize
...
...
Book/Chapter2/chapter2.tex
查看文件 @
d8921642
...
...
@@ -575,10 +575,10 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\parinterval
通过这个学习过程,我们得到了每个词出现的概率,即模型的参数。而我们原始的问题是如何计算这个整句分词结果的概率,比如,
$
\textrm
{
P
}
\textrm
{
(
``确实
/
现在
/
数据
/
很
/
多''
)
}
=
?
$
。这里可以使用``大题小做''的技巧:原始的问题很复杂,我们将其切分为小问题。这样,将复杂的分词问题简单化,基于独立性假设解决分词问题:假定所有词出现都是相互独立的。设
$
w
_
1
w
_
2
w
_
3
…w
_
m
$
表示一个由单词
$
w
_
1
,w
_
2
,w
_
3
,…
,w
_
m
$
组成的切分结果,于是有:
\parinterval
通过这个学习过程,我们得到了每个词出现的概率,即模型的参数。而我们原始的问题是如何计算这个整句分词结果的概率,比如,
$
\textrm
{
P
}
\textrm
{
(
``确实
/
现在
/
数据
/
很
/
多''
)
}
=
?
$
。这里可以使用``大题小做''的技巧:原始的问题很复杂,我们将其切分为小问题。这样,将复杂的分词问题简单化,基于独立性假设解决分词问题:假定所有词出现都是相互独立的。设
$
w
_
1
w
_
2
w
_
3
...w
_
m
$
表示一个由单词
$
w
_
1
,w
_
2
,w
_
3
,...
,w
_
m
$
组成的切分结果,于是有:
{
\setlength
{
\belowdisplayskip
}{
-9pt
}
\begin{eqnarray}
\textrm
{
P
}
(w
_
1 w
_
2 w
_
3
…
w
_
m)=
\textrm
{
P
}
(w
_
1)
\cdot
\textrm
{
P
}
(w
_
2)
\cdot
...
\cdot
\textrm
{
P
}
(w
_
m)
\textrm
{
P
}
(w
_
1 w
_
2 w
_
3
...
w
_
m)=
\textrm
{
P
}
(w
_
1)
\cdot
\textrm
{
P
}
(w
_
2)
\cdot
...
\cdot
\textrm
{
P
}
(w
_
m)
\label
{
eq:2.3-5
}
\end{eqnarray}
}
...
...
@@ -699,7 +699,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\parinterval
以
$
n
$
-gram语言模型为代表的统计语言模型的应用非常广泛。除了分词,在文本生成、信息检索、摘要等自然语言处理任务中,语言模型都有举足轻重的地位。包括近些年非常受关注的预训练模型,本质上也是统计语言模型。这些技术都会在后续章节进行介绍。值得注意的是,统计语言模型给我们解决自然语言处理问题提供了一个非常好的建模思路,即:把整个序列生成的问题转化为逐个生成单词的问题。很快我们就会看到,这种建模方式会被广泛的用于机器翻译建模,在统计机器翻译和神经机器翻译中都会有明显的体现。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection
{
未登录词和平滑算法
}
\index
{
Chapter2.4.2
}
\subsection
{
未登录词和平滑算法
}
\
label
{
sec2:smoothing
}
\
index
{
Chapter2.4.2
}
\parinterval
在式
\ref
{
eq:2.4-4
}
所示的例子中,如果语料中从没有``确实''和``现在''两个词连续出现的情况,那么使用2-gram计算切分``确实/现在/数据/很/多''的概率时,会出现如下情况
\begin{eqnarray}
...
...
@@ -945,73 +945,71 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad\quad \text
\parinterval
句法树是对句子的一种抽象。这种树形结构表达了一种对句子结构的归纳过程,比如,从树的叶子开始,把每一个树节点看作一次抽象,最终形成一个根节点。那这个过程是如何用计算机实现出来呢?这就需要使用到形式文法。
\parinterval
形式文法是分析自然语言的一种重要工具。根据乔姆斯基的定义
\cite
{
chomsky2002syntactic
}
,形式文法分为四种类型:无限制文法(0型文法)、上下文相关文法(1型文法)、上下文无关文法(2型文法)和正规文法(3型文法)。不同类型的文法有不同的应用,比如,正规文法可以用来描述自动机,因此也会被使用在语言模型等系统中。对于短语结构分析问题,常用的是
{
\small\bfnew
{
上下文无关文法
}}
(Context-Free Grammar)。上下文无关文法的具体形式如下:
\parinterval
形式文法是分析自然语言的一种重要工具。根据乔姆斯基的定义
\cite
{
chomsky2002syntactic
}
,形式文法分为四种类型:无限制文法(0型文法)、上下文相关文法(1型文法)、上下文无关文法(2型文法)和正规文法(3型文法)。不同类型的文法有不同的应用,比如,正规文法可以用来描述
有限状态
自动机,因此也会被使用在语言模型等系统中。对于短语结构分析问题,常用的是
{
\small\bfnew
{
上下文无关文法
}}
(Context-Free Grammar)。上下文无关文法的具体形式如下:
%-------------------------------------------
\begin{definition}
\begin{definition}
上下文无关文法
一个上下文无关文法可以被视为一个系统
$
G
=
<N,
\Sigma
,R,S>
$
,其中
\begin{itemize}
\item
$
N
$
为一个非终结符集合
\item
$
\Sigma
$
为一个终结符集合
\item
$
R
$
为一个规则
(产生式)
集合,每条规则
$
r
\in
R
$
的形式为
$
X
\to
Y
_
1
Y
_
2
...Y
_
n
$
,其中
$
X
\in
N
$
,
$
Y
_
i
\in
N
\cup
\Sigma
$
\item
$
R
$
为一个规则
(产生式)
集合,每条规则
$
r
\in
R
$
的形式为
$
X
\to
Y
_
1
Y
_
2
...Y
_
n
$
,其中
$
X
\in
N
$
,
$
Y
_
i
\in
N
\cup
\Sigma
$
\item
$
S
$
为一个起始符号集合且
$
S
\subseteq
N
$
\end{itemize}
\end{definition}
%-------------------------------------------
\parinterval
举例说明,假设有上下文无关文法
$
G
=
<N,
\Sigma
,R,S>
$
,
其中把非终结符集合定义为不同的
句法标记
\parinterval
举例说明,假设有上下文无关文法
$
G
=
<N,
\Sigma
,R,S>
$
,
我们用它描述一个简单中文句法结构。其中非终结符集合为不同的中文
句法标记
\begin{eqnarray}
N=
\{\textrm
{
NN
}
,
\textrm
{
VV
}
,
\textrm
{
NP
}
,
\textrm
{
VP
}
,
\textrm
{
IP
}
\}
N=
\{\textrm
{
NN
}
,
\textrm
{
VV
}
,
\textrm
{
NP
}
,
\textrm
{
VP
}
,
\textrm
{
IP
}
\}
\nonumber
\label
{
eq:2.5-1
}
\end{eqnarray}
这里,
\textrm
{
NN
}
代表名词,
\textrm
{
VV
}
代表动词,
\textrm
{
NP
}
代表名词短语,
\textrm
{
VP
}
代表动词短语,
\textrm
{
IP
}
代表单句。进一步,把终结符集合定义为
\begin{eqnarray}
\Sigma
=
\{\text
{
猫,喜欢,吃,鱼
}
\}
\Sigma
=
\{\text
{
猫,喜欢,吃,鱼
}
\}
\nonumber
\label
{
eq:2.5-2
}
\end{eqnarray}
再定义起始符集合为
\begin{eqnarray}
S=
\{\textrm
{
IP
}
\}
S=
\{\textrm
{
IP
}
\}
\nonumber
\label
{
eq:2.5-3
}
\end{eqnarray}
最后,文法的规则集定义
如下
(其中
$
r
_
i
$
为规则的编号)
最后,文法的规则集定义
图
\ref
{
fig:2.5-2
}
所示
(其中
$
r
_
i
$
为规则的编号)
%----------------------------------------------
% 图2.5.2.1
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-rules-of-grammar
}
\caption
{
文法的规则集定义
}
\caption
{
一个示例文法的规则集
}
\label
{
fig:2.5-2
}
\end{figure}
%---------------------------
\parinterval
上面这个文法蕴含了不同``层次''的句法信息。比如,规则
$
r
_
1
$
、
$
r
_
2
$
、
$
r
_
3
$
和
$
r
_
4
$
表达了词性对单词的抽象;规则
$
r
_
6
$
、
$
r
_
7
$
和
$
r
_
8
$
是表达了短语结构的抽象,其中,规则
$
r
_
8
$
表达了
$
\textrm
{
NP
}
+
\textrm
{
VP
}$
描述了汉语中名词短语(主语)+动词短语(谓语)的结构。在实际应用中,像
$
r
_
8
$
这样的规则可以覆盖很大的片段(试想一下一个包含50个词的主谓结构的句子,都
可以使用进行
$
r
_
8
$
描述)。
\parinterval
上面这个文法蕴含了不同``层次''的句法信息。比如,规则
$
r
_
1
$
、
$
r
_
2
$
、
$
r
_
3
$
和
$
r
_
4
$
表达了词性对单词的抽象;规则
$
r
_
6
$
、
$
r
_
7
$
和
$
r
_
8
$
是表达了短语结构的抽象,其中,规则
$
r
_
8
$
描述了汉语中名词短语(主语)+动词短语(谓语)的结构。在实际应用中,像
$
r
_
8
$
这样的规则可以覆盖很大的片段(试想一下一个包含50个词的主谓结构的句子,
可以使用进行
$
r
_
8
$
描述)。
\parinterval
下文无关文法的规则是一种
{
\small\sffamily\bfseries
{
产生式规则
}}
(
production rule),形如
$
\alpha
\to
\beta
$
,它表示把规则左端的非终结符
$
\alpha
$
替换为规则右端的符号序列
$
\beta
$
。通常,
$
\alpha
$
被称作规则的左部(left-hand side),
$
\beta
$
被称作规则的右部(right-hand side)。使用右边
$
\beta
$
替换左部
$
\alpha
$
的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
\parinterval
下文无关文法的规则是一种
{
\small\sffamily\bfseries
{
产生式规则
}}
(
Production Rule),形如
$
\alpha
\to
\beta
$
,它表示把规则左端的非终结符
$
\alpha
$
替换为规则右端的符号序列
$
\beta
$
。 通常,
$
\alpha
$
被称作规则的左部(Left-hand Side),
$
\beta
$
被称作规则的右部(Right-hand Side)。使用右部
$
\beta
$
替换左部
$
\alpha
$
的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
\vspace
{
0.5em
}
%-------------------------------------------
\begin{definition}
一个符号序列
$
u
$
可以通过使用规则
$
r
$
替换其中的某个非终结符,并得到符号序列
$
v
$
,我们说
$
v
$
是在
$
u
$
上使用
$
r
$
的结果,如图
\ref
{
fig:2.5-3
}
所示:
\end{definition}
%-------------------------------------------
\vspace
{
-0.5em
}
\begin{figure}
[htp]
\centering
\begin{definition}
上下文无关文法规则的使用
一个符号序列
$
u
$
可以通过使用规则
$
r
$
替换其中的某个非终结符,并得到符号序列
$
v
$
,我们说
$
v
$
是在
$
u
$
上使用
$
r
$
的结果,记为
$
u
\overset
{
r
}{
\Rightarrow
}
v
$
:
\begin{center}
\input
{
./Chapter2/Figures/figure-usage-of-regulation
}
\caption
{
规则的使用示意图
}
\label
{
fig:2.5-3
}
\end{figure}
\end{center}
\end{definition}
\parinterval
给定义起始非终结符,
我们可以不断地使用规则,最终生成一个终结符串,这个过程也被称为推导(derivation)。
\parinterval
给定义起始非终结符,
可以不断地使用规则,最终生成一个终结符串,这个过程也被称为
{
\small\bfnew
{
推导
}}
(Derivation)。形式化的定义为:
\vspace
{
0.5em
}
%-------------------------------------------
\begin{definition}
\begin{definition}
推导
给定一个文法
$
G
=
<N,
\Sigma
,R,S>
$
,对于一个字符串序
\\
列
$
s
_
0
,s
_
1
,...,s
_
n
$
和规则序列
$
r
_
1
,r
_
2
,...,r
_
n
$
,满足
...
...
@@ -1023,49 +1021,48 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
且
\begin{itemize}
\item
$
\forall
i
\in
[
0
,n
]
, s
_
i
\in
(
N
\cup\Sigma
)
^
*
$
\hspace
{
3.5em
}
$
\lhd
$
$
s
_
i
$
为合法的字符串
\item
$
\forall
j
\in
[
1
,n
]
, r
_
j
\in
R
$
\hspace
{
6.3em
}
$
\lhd
$
$
r
_
j
$
为
G
的规则
\item
$
\forall
j
\in
[
1
,n
]
, r
_
j
\in
R
$
\hspace
{
6.3em
}
$
\lhd
$
$
r
_
j
$
为
$
G
$
的规则
\item
$
s
_
0
\in
S
$
\hspace
{
10.9em
}
$
\lhd
$
$
s
_
0
$
为起始非终结符
\item
$
s
_
n
\in
\Sigma
^{
*
}$
\hspace
{
10.4em
}
$
\lhd
$
$
s
_
n
$
为终结符序列
\end{itemize}
则
$
s
_
0
\overset
{
r
_
1
}{
\Rightarrow
}
s
_
1
\overset
{
r
_
2
}{
\Rightarrow
}
s
_
2
\overset
{
r
_
3
}{
\Rightarrow
}
...
\overset
{
r
_{
n
}}{
\Rightarrow
}
s
_
n
$
为一个推导(derivation)
\vspace
{
0.8em
}
则
$
s
_
0
\overset
{
r
_
1
}{
\Rightarrow
}
s
_
1
\overset
{
r
_
2
}{
\Rightarrow
}
s
_
2
\overset
{
r
_
3
}{
\Rightarrow
}
...
\overset
{
r
_{
n
}}{
\Rightarrow
}
s
_
n
$
为一个推导
\end{definition}
%-------------------------------------------
\parinterval
比如,使用前面的示例文法,可以对``猫 喜欢 吃 鱼''进行分析,并形成句法分析树(图
\ref
{
fig:2.5-4
}
)。我们从起始非终结符IP开始,
利用唯一拥有IP在
左部的规则
$
r
_
8
$
推导出NP和VP,之后依次使用规则
$
r
_
5
$
、
$
r
_
1
$
、
$
r
_
7
$
、
$
r
_
2
$
、
$
r
_
6
$
、
$
r
_
3
$
、
$
r
_
4
$
,得到了完整的句法树。
\parinterval
比如,使用前面的示例文法,可以对``猫 喜欢 吃 鱼''进行分析,并形成句法分析树(图
\ref
{
fig:2.5-4
}
)。我们从起始非终结符IP开始,
使用唯一拥有IP作为
左部的规则
$
r
_
8
$
推导出NP和VP,之后依次使用规则
$
r
_
5
$
、
$
r
_
1
$
、
$
r
_
7
$
、
$
r
_
2
$
、
$
r
_
6
$
、
$
r
_
3
$
、
$
r
_
4
$
,得到了完整的句法树。
%-------------------------------------------
% 图2.5.2.3
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-derivation
}
\setlength
{
\abovecaptionskip
}{
-
1
.0em
}
\setlength
{
\abovecaptionskip
}{
-
0
.0em
}
\caption
{
上下文无关文法推导实例
}
\label
{
fig:2.5-4
}
\end{figure}
%-------------------------------------------
\parinterval
通常,可以把推导简记为
$
\textrm
{
d
}
=
r
_
1
\circ
r
_
2
\circ
…
\circ
r
_
n
$
,其中
$
\circ
$
表示规则的组合。显然,
$
\textrm
{
d
}$
也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用和生成的字符串对应起来。一个推导所生成的字符串,也被称作文法的一个句子。而一个文法所能生成的所有句子是这个文法所对应的语言。
\parinterval
但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导与之对应,我们称为歧义。甚至同一棵句法树,也可以对应不同的推导。
\parinterval
通常,可以把推导简记为
$
d
=
r
_
1
\circ
r
_
2
\circ
...
\circ
r
_
n
$
,其中
$
\circ
$
表示规则的组合。显然,
$
d
$
也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用过程与生成的字符串对应起来。一个推导所生成的字符串,也被称作文法所产生的一个
{
\small\bfnew
{
句子
}}
(Sentence)。而一个文法所能生成的所有句子是这个文法所对应的
{
\small\bfnew
{
语言
}}
(Language)。
\parinterval
图
\ref
{
fig:2.5-5
}
给出一个
同一棵句法树所对应的两种不同的规则推导。
\parinterval
但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导的方式,我们称为
{
\small\bfnew
{
歧义
}}
(Ambiguity)。甚至同一棵句法树,也可以对应不同的推导。图
\ref
{
fig:2.5-5
}
给出
同一棵句法树所对应的两种不同的规则推导。
%-------------------------------------------
%图2.5.2.4
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-two-different-derivation-of-regulation
}
\setlength
{
\abovecaptionskip
}{
-
1.0
em
}
\setlength
{
\abovecaptionskip
}{
-
0.5
em
}
\caption
{
同一棵句法树对应的不同规则推导
}
\label
{
fig:2.5-5
}
\end{figure}
%-------------------------------------------
\parinterval
显然,
这样使用不同的规则顺序进行树的生成会导致句法树的推导这一确定的过程变得不确定。因此,需要进行消歧。这里,我们可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为最左优先推导。图中推导1
就是符合最左优先原则的推导。
\parinterval
显然,
规则顺序的不同会导致句法树的推导这一确定的过程变得不确定。因此,需要进行
{
\small\bfnew
{
消歧
}}
(Disambiguation)。这里,可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为
{
\small\bfnew
{
最左优先推导
}}
(Left-most Derivation)。图
\ref
{
fig:2.5-5
}
中的推导1
就是符合最左优先原则的推导。
\parinterval
这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。
这样
,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推导所对应的句法树就是这个句子的句法分析结果。
\parinterval
这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。
于是
,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推导所对应的句法树就是这个句子的句法分析结果。
\parinterval
不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于
句法分析的语言学专来说,可以很确定的分辨出哪些树是正确的哪些树是错误的结果。甚至对于普通人,也通过经验可以得到一些模糊的结果
。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情
\parinterval
不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于
语言学专来说,可以很确定的分辨出哪些句法树是正确的,哪些句法树是错误。甚至对于普通人,也通过一些课本中学到知识产生一些模糊的判断
。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情
%-------------------------------------------
%图2.5.2.5
...
...
@@ -1077,7 +1074,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\parinterval
在统计句法分析中,我们需要对每个推导进行统计建模,于是我们得到一个模型
$
\textrm
{
P
}
(
\cdot
)
$
,对于任意的推导
$
d
$
,都可以用
$
\textrm
{
P
}
(
d
)
$
计算推导
$
d
$
的概率。这样,给定一个输入句子,我们可以对所有可能的推导用
$
\textrm
{
P
}
(
d
)
$
计算其概率值,并选择概率最大的结果作为句法分析的结果输出(图
\ref
{
fig:2.5-7
}
)。
\parinterval
在统计句法分析中,我们需要对每个推导进行统计建模,于是我们得到一个模型
$
\textrm
{
P
}
(
\cdot
)
$
,对于任意的推导
$
d
$
,都可以用
$
\textrm
{
P
}
(
d
)
$
计算
出
推导
$
d
$
的概率。这样,给定一个输入句子,我们可以对所有可能的推导用
$
\textrm
{
P
}
(
d
)
$
计算其概率值,并选择概率最大的结果作为句法分析的结果输出(图
\ref
{
fig:2.5-7
}
)。
%-------------------------------------------
%图2.5.2.6
\begin{figure}
[htp]
...
...
@@ -1091,14 +1088,13 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection
{
规则和推导的概率
}
\index
{
Chapter2.5.3
}
\parinterval
对句法树进行概率化,首先要对使用的规则
和推导进行概率化。为了达到这个目的,可以使用概率上下文无关文法(probabilistic context-free grammar),它是上下文无关文法的
扩展。
\parinterval
对句法树进行概率化,首先要对使用的规则
进行概率化。为了达到这个目的,可以使用
{
\small\bfnew
{
概率上下文无关文法
}}
(Probabilistic Context-Free Grammar),它是上下文无关文法的一种
扩展。
\vspace
{
0.5em
}
%-------------------------------------------
\begin{definition}
概率上下文无关文法
一个概率上下文无关文法可以被视为一个系统
$
G
=
<N,
\Sigma
,R,S>
$
,其中
\begin{itemize}
\item
\item
$
N
$
为一个非终结符集合
\item
$
\Sigma
$
为一个终结符集合
\item
$
R
$
为一个规则(产生式)集合,每条规则
$
r
\in
R
$
的形式为
$
p:X
\to
Y
_
1
Y
_
2
...Y
_
n
$
,其中
$
X
\in
N
$
,
$
Y
_
i
\in
N
\cup
\Sigma
$
,每个
$
r
$
都对应一个概率
$
p
$
,表示其生成的可能性。
...
...
@@ -1113,36 +1109,38 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\label
{
eq:2.5-4
}
\end{eqnarray}
即,在给定规则左部的情况下生成规则右部的可能性。进一步,在上下文无关文法中,因为上下文无关的属性,每条规则之间的使用都是相互独立的
\footnote
[3]
{
如果是上下文有关文法,规则会形如
$
\textrm
{
a
}
\alpha
\textrm
{
b
}
\to
\textrm
{
a
}
\beta
\textrm
{
b
}$
,这时
$
\alpha
\to
\beta
$
的过程会依赖前后上下文
\textrm
{
a
}
和
\textrm
{
b
}}
。因此可以把
\textrm
{
P(d)
}
分解为规则概率的乘积进行计算:
\noindent
即,在给定规则左部的情况下生成规则右部的可能性。进一步,在上下文无关文法中,每条规则之间的使用都是相互独立的
\footnote
[3]
{
如果是上下文有关文法,规则会形如
$
a
\alpha
b
\to
a
\beta
b
$
,这时
$
\alpha
\to
\beta
$
的过程会依赖前后上下文
$
a
$
和
$
b
$}
。因此可以把
$
\textrm
{
P
}
(
d
)
$
分解为规则概率的乘积:
\begin{eqnarray}
\textrm
{
P
}
(d)
&
=
&
\textrm
{
P
}
(r
_
1
\cdot
r
_
2
\cdot
…
\cdot
r
_
n)
\nonumber
\\
\textrm
{
P
}
(d)
&
=
&
\textrm
{
P
}
(r
_
1
\cdot
r
_
2
\cdot
...
\cdot
r
_
n)
\nonumber
\\
&
=
&
\textrm
{
P
}
(r
_
1)
\cdot
\textrm
{
P
}
(r
_
2)
\cdots
\textrm
{
P
}
(r
_
n)
\label
{
eq:2.5-5
}
\end{eqnarray}
\parinterval
这
样我们就可以得到每个推导
$
d
$
的概率值。这个模型,
可以很好的解释词串的生成过程。比如,对于规则集
\parinterval
这
个模型
可以很好的解释词串的生成过程。比如,对于规则集
\begin{eqnarray}
r
_
3:
&
&
\textrm
{
VV
}
\to
\text
{
吃
}
\nonumber
\\
r
_
4:
&
&
\textrm
{
NN
}
\to
\text
{
鱼
}
\nonumber
\\
r
_
6:
&
&
\textrm
{
VP
}
\to
\textrm
{
VV
}
\textrm
{
NN
}
\nonumber
r
_
6:
&
&
\textrm
{
VP
}
\to
\textrm
{
VV
}
\
\textrm
{
NN
}
\nonumber
\end{eqnarray}
\parinterval
可以得到
$
d
_
1
=
r
_
3
\cdot
r
_
4
\cdot
r
_
6
$
的概率为
\begin{eqnarray}
\textrm
{
P
}
(d
_
1)
&
=
&
\textrm
{
P
}
(r
_
3)
\cdot
\textrm
{
P
}
(r
_
4)
\cdot
\textrm
{
P
}
(r
_
6)
\nonumber
\\
&
=
&
\textrm
{
P
}
(
\textrm
{
``VV
}
\to
\text
{
吃''
}
)
\cdot
\textrm
{
P
}
(
\textrm
{
``NN
}
\to
\text
{
鱼''
}
)
\cdot
s
\textrm
{
P
}
(
\textrm
{
``VP
}
\to
\textrm
{
VV NN''
}
)
&
=
&
\textrm
{
P
}
(
\textrm
{
``VV
}
\to
\text
{
吃''
}
)
\cdot
\textrm
{
P
}
(
\textrm
{
``NN
}
\to
\text
{
鱼''
}
)
\cdot
\textrm
{
P
}
(
\textrm
{
``VP
}
\to
\textrm
{
VV NN''
}
)
\label
{
eq:2.5-6
}
\end{eqnarray}
\parinterval
这也对应了词串``吃 鱼''的生成过程。首先,从起始VP使用规则
$
r
_
6
$
生成两个非终结符VV和NN;进一步,分别使用规则
$
r
_
3
$
和
$
r
_
4
$
从VV和NN进一步生成单词``吃''和``鱼''。整个过程的概率等于三条规则概率的乘积。
\parinterval
这也对应了词串``吃
\
鱼''的生成过程。首先,从起始非终结符VP开始,使用规则
$
r
_
6
$
生成两个非终结符VV和NN;进一步,分别使用规则
$
r
_
3
$
和
$
r
_
4
$
从VV和NN进一步生成单词``吃''和``鱼''。整个过程的概率等于三条规则概率的乘积。
\parinterval
新的问题又来了,如何得到规则的概率呢?这里仍然可以从数据中学习文法规则的概率。假设有人工标注的数据,它包括很多人工标注句法树的句法,称之为
{
\small\bfnew
{
树库
}}
(Treebank)。然后,对于规则
$
\textrm
{
r
}
:
\alpha
\to
\beta
$
可以使用极大似然估计:
\parinterval
新的问题又来了,如何得到规则的概率呢?这里仍然可以使用数据驱动的想法,从数据中学习文法规则的概率。假设我们有人工标注的数据,其中包括很多句子的人工标注的句法树,称之为树库。然后,对于规则
$
\textrm
{
r
}
:
\alpha
\to
\beta
$
可以使用极大似然估计:
\begin{eqnarray}
\textrm
{
P
}
(r) =
\frac
{
\text
{
规则
$
r
$
在树库中出现的次数
}}{
\alpha
\text
{
在树库中出现的次数
}}
\label
{
eq:2.5-7
}
\end{eqnarray}
\parinterval
这里通过一个例子来解释规则概率的计算过程(图
\ref
{
fig:2.5-8
}
)
。
\parinterval
图
\ref
{
fig:2.5-8
}
展示了通过这种方法计算规则概率的过程。与词法分析类似,我们统计树库中规则左部和右部同时出现的次数,除以规则左部出现的全部次数,所得的结果就是所求规则的概率。这种方法也是典型的相对频度估计。但是如果规则左部和右部同时出现的次数为0时是否代表这个规则概率是0呢?遇到这种情况,可以使用平滑方法对概率进行平滑处理,具体思路可参考
\ref
{
sec2:smoothing
}
节内容
。
%-------------------------------------------
% 图2.5.3.1
...
...
@@ -1154,9 +1152,11 @@ r_6: & & \textrm{VP} \to \textrm{VV} \textrm{NN} \nonumber
\end{figure}
%-------------------------------------------
\parinterval
与词法分析类似,我们统计树库中规则左部和右部同时出现的次数,除以规则左部出现的全部次数,所得的结果就是所求规则的概率。这种方法也是典型的相对频度估计。但是如果规则左部和右部同时出现的次数为0时是否代表这个规则概率是0呢?遇到这种情况,可以使用平滑方法对概率进行平滑处理,具体思路和2.4.2节基本上是一样的。
\parinterval
图
\ref
{
fig:2.5-9
}
展示了基于统计的句法分析的流程。首先,通过树库上的统计,获得各个规则的概率,这样就得到了一个上下文无关句法分析模型
$
\textrm
{
P
}
(
\cdot
)
$
。对于任意句法分析结果
$
d
=
r
_
1
\cdot
r
_
2
\cdot
...
\cdot
r
_
n
$
,都能通过如下公式计算其概率值:
\parinterval
图
\ref
{
fig:2.5-9
}
展示了基于统计句法分析的流程。首先,通过对人工标注数据的统计,获得各个规则的概率,这样我们得到了一个上下文无关句法分析模型
$
\textrm
{
P
}
(
\cdot
)
$
,对于任意句法分析结果
$
\textrm
{
d
}
=
r
_
1
\cdot
r
_
2
\cdot
…
\cdot
r
_
n
$
,都能通过
$
\textrm
{
P
}
(
\textrm
{
d
}
)=
\prod
_{
i
=
1
}^{
n
}
\textrm
{
p
}
(
r
_
i
)
$
计算其概率值。
\begin{equation}
\textrm
{
P
}
(d)=
\prod
_{
i=1
}^{
n
}
\textrm
{
P
}
(r
_
i)
\end{equation}
%-------------------------------------------
% 图2.5.3.2
...
...
@@ -1168,31 +1168,22 @@ r_6: & & \textrm{VP} \to \textrm{VV} \textrm{NN} \nonumber
\end{figure}
%-------------------------------------------
\parinterval
在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法分析树的概率,并输出概率最高的树作为句法分析的结果。
图
\ref
{
fig:2.5-10
}
给出了几个真实句法分析器的输入输出实例。
\parinterval
在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法分析树的概率,并输出概率最高的树作为句法分析的结果。
%-------------------------------------------
% 图2.5.3.3
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-zh-syntactic-analysis
}
%\setlength{\belowcaptionskip}{-1.0em}
\caption
{
中文句法分析实例
}
\label
{
fig:2.5-10
}
\end{figure}
%-------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section
{
小结及深入阅读
}
\label
{
sec2:summary
}
\index
{
Chapter2.6
}
\parinterval
在本章中,我们重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新
输入的问题进行处理。之后,我们将这种思想应用到三个自然语言处理任务,包括:中文分词、语言建模、句法分析,这三个任务也和机器翻译有着紧密的联系。从中可以看出,经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法都会在后续章节的机器翻译内容中被频繁
使用。
\parinterval
在本章中,我们重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新
的问题进行处理。之后,我们将这种思想应用到三个自然语言处理任务中,包括:中文分词、语言建模、句法分析,它们也和机器翻译有着紧密的联系。通过系统化的建模,可以发现:经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法也会在后续章节的内容中被广泛
使用。
\parinterval
由于本章重点关注介绍如何用统计的思想对自然语言处理任务进行建模,因此并没有对具体的问题展开深入讨论。有几方面内容,读者可以继续关注:
\begin{adjustwidth}
{
1em
}{}
\begin{itemize}
\item
在建模方面,本章介绍的三个任务均采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被``一步一步''生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,分词
是隐含变量),之后通过对观测变量生成观测结果的过程建模,以达到对问题进行数学描述的目的。这类模型一般需要进行一些独立性假设,假设的好坏对最终的性能有较大影响。相对
{
\small\sffamily\bfseries
{
生成模型
}}
(generative models),另一类方法
{
\small\sffamily\bfseries
{
判别模型
}}
(discriminative models),它直接对问题进行求解,可以更加灵活的定义不同的特征,而且不依赖过多的独立性假设。判别式模型在自然语言处理中也有广泛应用
\cite
{
shannon1948mathematical
}
\cite
{
ng2002discriminative
}
。
在本书的第四章也会使用到判别式模型。
\item
在建模方面,本章介绍的三个任务均采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被``一步一步''生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,分词
结果是隐含在背后的变量),之后通过对隐含变量生成观测结果的过程进行建模,以达到对问题进行数学描述的目的。这类模型一般需要依赖一些独立性假设,假设的合理性对最终的性能有较大影响。相对
{
\small\sffamily\bfseries
{
生成模型
}}
(Generative Model),另一类方法
{
\small\sffamily\bfseries
{
判别模型
}}
(Discriminative Model),它直接描述了从隐含变量生成观测结果的过程,这样对问题的建模更加直接,同时这类模型可以更加灵活的引入不同的特征。判别式模型在自然语言处理中也有广泛应用
\cite
{
shannon1948mathematical
}
\cite
{
ng2002discriminative
}
。
在本书的第四章也会使用到判别式模型。
\item
从现在自然语言处理的前沿看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。但是,
深度学习及相关方法并没有在本章被涉及,这是由于笔者认为对问题的建模是处理自然语言处理问题的基础,对问题的描述并不会因为方法的改变而改变。因此,本章的内容没有太多的陷入到更加复杂的模型和算法设计中,相反,我们希望关注对基本问题的理解和描述。不过,对于本章中涉及的自然语言问题,一些前沿方法可以
参考,包括:基于条件随机场和双向长短时记忆模型的序列标注模型(
\cite
{
lafferty2001conditional
}
\cite
{
huang2015bidirectional
}
\cite
{
ma2016end
}
、神经语言模型
\cite
{
bengio2003neural
}
\cite
{
mikolov2010recurrent
}
、神经句法分析模型
\cite
{
chen2014fast
}
\cite
{
zhu2015long
}
。
\item
从现在自然语言处理的前沿看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。但是,
本章并没有涉及深度学习及相关方法,这是由于笔者认为:
{
\color
{
red
}
对问题的建模是自然语言处理的基础,对问题的本质刻画并不会因为方法的改变而改变
}
。因此,本章的内容没有太多的陷入到更加复杂的模型和算法设计中,相反,我们希望关注对基本问题的理解和描述。不过,一些前沿方法仍可以作为
参考,包括:基于条件随机场和双向长短时记忆模型的序列标注模型(
\cite
{
lafferty2001conditional
}
\cite
{
huang2015bidirectional
}
\cite
{
ma2016end
}
、神经语言模型
\cite
{
bengio2003neural
}
\cite
{
mikolov2010recurrent
}
、神经句法分析模型
\cite
{
chen2014fast
}
\cite
{
zhu2015long
}
。
\item
此外,本章并没有对模型的推断方法进行深入介绍。比如,对于一个句子如何有效的找到概率最大的分词结果?显然
简单枚举是不可行的。对于这类问题比较简单的解决方法是使用动态规划
\cite
{
huang2008advanced
}
。如果使用动态规划的条件不满足,可以考虑使用更加复杂的搜索策略,并配合一定剪枝方法。实际上,无论是n-gram语言模型还是简单的上下文无关文法都有高效的推断方法。比如,n-gram语言模型可以被视为概率有限状态自动机,因此可以直接使用成熟的自动机工具。即使更复杂的句法分析模型也有移进-规约方法可以有效的
解决推断问题
\cite
{
aho1972theory
}
。
\item
此外,本章并没有对模型的推断方法进行深入介绍。比如,对于一个句子如何有效的找到概率最大的分词结果?显然
,简单枚举是不可行的。对于这类问题比较简单的解决方法是使用动态规划
\cite
{
huang2008advanced
}
。如果使用动态规划的条件不满足,可以考虑使用更加复杂的搜索策略,并配合一定剪枝方法。实际上,无论是
$
n
$
-gram语言模型还是简单的上下文无关文法都有高效的推断方法。比如,
$
n
$
-gram语言模型可以被视为概率有限状态自动机,因此可以直接使用成熟的自动机工具。对于更复杂的句法分析问题,可以考虑使用移进-规约方法来
解决推断问题
\cite
{
aho1972theory
}
。
\end{itemize}
\end{adjustwidth}
Book/mt-book-xelatex.tex
查看文件 @
d8921642
...
...
@@ -92,7 +92,7 @@
{
\large
\noindent
{
\color
{
red
}
在此感谢所有为本书做出贡献的人
}
\\
\noindent
曹润柘、曾信、孟霞、单韦乔、姜雨帆、王子扬、刘辉、许诺、李北、刘继强、张哲旸、周书涵、周涛、张裕浩、刘晓倩、牛蕊
\\
\noindent
曹润柘、曾信、孟霞、单韦乔、姜雨帆、王子扬、刘辉、许诺、李北、刘继强、张哲旸、周书涵、周涛、张裕浩、
李炎洋,
刘晓倩、牛蕊
\\
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论