Commit 1aede1d1 by 曹润柘

合并分支 'caorunzhe' 到 'master'

Caorunzhe

查看合并请求 !294
parents 4b7103e7 798d00c4
......@@ -12,12 +12,12 @@
\begin{scope}
{
{\small
\node [anchor=north west] (entry1) at (0,0) {\textbf{1:}};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {\textbf{2:}};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 现在};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {\textbf{4:} 物价};
\node [anchor=north west] (entry5) at ([yshift=0.1em]entry4.south west) {\textbf{5:} 确实};
\node [anchor=north west] (entry6) at ([yshift=0.1em]entry5.south west) {\textbf{6:} 实现};
\node [anchor=north west] (entry1) at (0,0) {{1:}};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {{2:}};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {{3:} 现在};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {{4:} 物价};
\node [anchor=north west] (entry5) at ([yshift=0.1em]entry4.south west) {{5:} 确实};
\node [anchor=north west] (entry6) at ([yshift=0.1em]entry5.south west) {{6:} 实现};
\node [anchor=south west] (dictionarylabel) at (entry1.north west) {{\color{ublue} 分词词典}};
}
}
......
......@@ -15,7 +15,7 @@
& \overset{r_2}{\Rightarrow} & \textrm{猫 喜欢 VP} \nonumber \\
& \overset{r_6}{\Rightarrow} & \textrm{猫 喜欢 VV NN} \nonumber \\
& \overset{r_3}{\Rightarrow} & \textrm{猫 喜欢 吃 NN} \nonumber \\
& \overset{r_4}{\Rightarrow} & \textrm{猫 喜欢 吃 鱼} \nonumber
& \overset{r_4}{\Rightarrow} & \textrm{猫 喜欢 吃 鱼} \nonumber
\end{eqnarray}
}
\end{minipage}
......@@ -36,119 +36,14 @@
\node [anchor=north west,inner sep=2pt] (r7) at ([yshift=-0.2em]r5.south west) {$r_7$: VP $\to$ VV VP};
\node [anchor=north west,inner sep=2pt] (r8) at ([yshift=-0.2em]r6.south west) {$r_8$: IP $\to$ NP VP};
\node [anchor=west,inner sep=2pt] (r1) at (0,0) {$r_1$: NN $\to$};
\node [anchor=west,inner sep=2pt] (r2) at ([xshift=3em]r1.east) {$r_2$: VV $\to$ 喜欢};
\node [anchor=north west,inner sep=2pt] (r3) at ([yshift=-0.2em]r1.south west) {$r_3$: VV $\to$};
\node [anchor=north west,inner sep=2pt] (r4) at ([yshift=-0.2em]r2.south west) {$r_4$: NN $\to$};
\node [anchor=north west,inner sep=2pt] (r5) at ([yshift=-0.2em]r3.south west) {$r_5$: NP $\to$ NN};
\node [anchor=north west,inner sep=2pt] (r6) at ([yshift=-0.2em]r4.south west) {$r_6$: VP $\to$ VV NN};
\node [anchor=north west,inner sep=2pt] (r7) at ([yshift=-0.2em]r5.south west) {$r_7$: VP $\to$ VV VP};
\node [anchor=north west,inner sep=2pt] (r8) at ([yshift=-0.2em]r6.south west) {$r_8$: IP $\to$ NP VP};
}
\end{scope}
\begin{scope}[xshift=4.5em,yshift=-5.5em,level distance=20pt,sibling distance=13pt]
\Tree[.IP \edge[white];
[.{\color{white} NP} \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
] \edge[white];
[.{\color{white} VP} \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw2){喜欢}; ] \edge[white];
[.{\color{white} VP} \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
[.VP \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw2){喜欢}; ] \edge[white];
[.{\color{white} VP} \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \edge[white]; \node[white](sw1){}; ]
]
[.VP \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw2){喜欢}; ] \edge[white];
[.{\color{white} VP} \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
[.VP \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw2){喜欢}; ] \edge[white];
[.{\color{white} VP} \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
[.VP
[.VV \edge[white]; \node[white](sw2){喜欢}; ]
[.VP \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
[.VP
[.VV \node(sw2){喜欢}; ]
[.VP \edge[white];
[.{\color{white} VV} \edge[white]; \node[white](sw1){}; ] \edge[white];
[.{\color{white} NN} \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
[.VP
[.VV \node(sw2){喜欢}; ]
[.VP
[.VV \edge[white]; \node[white](sw1){}; ]
[.NN \edge[white]; \node[white](sw1){}; ]
]
]
]
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
......
......@@ -38,8 +38,8 @@
\node[anchor=north,see] (one_s) at ([yshift=-1.4em]one_h.south){};
\node[anchor=west,font=\scriptsize] at ([xshift=0.2em]one_s.east){一个可见状态};
\draw[->,line width=1.4pt] ([xshift=8em]one_h.east) -- ([xshift=9em]one_h.east);
\node[anchor=west,align=left,font=\scriptsize] at ([xshift=9.2em]one_h.east){从一个隐含状态到下一个隐含状态\\转换,该过程隐含着转移概率};
\node[anchor=west,align=left,font=\scriptsize] at ([xshift=9.2em]one_h.east){从一个隐含状态到下一个隐含状态\\转换,该过程隐含着转移概率};
\draw[->,line width=1.4pt,blue!60] ([yshift=-2em,xshift=8.5em]one_h.east) --([yshift=-3em,xshift=8.5em]one_h.east) ;
\node[anchor=west,align=left,font=\scriptsize] at ([yshift=-2.5em,xshift=9.2em]one_h.east){从一个隐含状态到可见状态的输出\\该过程隐含着发射概率};
\node[anchor=west,align=left,font=\scriptsize] at ([yshift=-2.5em,xshift=9.2em]one_h.east){从一个隐含状态到可见状态的输出\\该过程隐含着发射概率};
\end{tikzpicture}
\ No newline at end of file
......@@ -12,12 +12,12 @@
\begin{scope}
{
{\small
\node [anchor=north west] (entry1) at (0,0) {\textbf{1:}};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {\textbf{2:}};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 现在};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {\textbf{4:} 物价};
\node [anchor=north west] (entry5) at ([yshift=0.1em]entry4.south west) {\textbf{5:} 确实};
\node [anchor=north west] (entry6) at ([yshift=0.1em]entry5.south west) {\textbf{6:} 实现};
\node [anchor=north west] (entry1) at (0,0) {{1:}};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {{2:}};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {{3:} 现在};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {{4:} 物价};
\node [anchor=north west] (entry5) at ([yshift=0.1em]entry4.south west) {{5:} 确实};
\node [anchor=north west] (entry6) at ([yshift=0.1em]entry5.south west) {{6:} 实现};
\node [anchor=south west] (dictionarylabel) at (entry1.north west) {{\color{ublue} 分词词典}};
}
}
......
......@@ -8,9 +8,9 @@
\begin{tikzpicture}
{\scriptsize
\node [anchor=north west] (entry1) at (0,0) {\textbf{1:} 这 / 是 / 数据};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {\textbf{2:} 现在 / 已经 / 实现};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 确实 / 有 / 很 / 多};
\node [anchor=north west] (entry1) at (0,0) {1: 这 / 是 / 数据};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {2: 现在 / 已经 / 实现};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {3: 确实 / 有 / 很 / 多};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {...};
\node [anchor=south west] (corpuslabel) at (entry1.north west) {{\color{ublue} \textbf{学习用数据}}};
......
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
......@@ -9,57 +8,22 @@
\begin{tikzpicture}
\begin{scope}[sibling distance=7pt,level distance=22pt]
\Tree[.\node[inner sep=1pt](sn0){IP\scriptsize{:句子}};
[.\node[inner sep=1pt](sn1){NP\scriptsize{:名}};
[.\node[inner sep=1pt](sn2){NN\tiny{:名词}}; \node(sw1){}; ]
]
[.\node[inner sep=1pt](sn3){VP\scriptsize{:动}};
[.\node[inner sep=1pt](sn4){VV\tiny{:动词}}; \node(sw2){喜欢}; ]
[.\node[inner sep=1pt](sn5){VP\scriptsize{:动}};
[.\node[inner sep=1pt](sn6){VV\tiny{:动词}}; \node(sw1){}; ]
[.\node[inner sep=1pt](sn7){NN\tiny{:名词}}; \node(sw1){}; ]
]
]
]
\Tree[.\node[inner sep=1pt](sn0){IP\scriptsize{:句子}};
[.\node[inner sep=1pt](sn1){NP\scriptsize{:名}};
[.\node[inner sep=1pt,fill=blue!20](sn2){NN\tiny{:名词}}; \node(sw1){}; ]
]
[.\node[inner sep=1pt](sn3){VP\scriptsize{:动}};
[.\node[inner sep=1pt,fill=blue!20](sn4){VV\tiny{:动词}}; \node(sw2){喜欢}; ]
[.\node[inner sep=1pt](sn5){VP\scriptsize{:动}};
[.\node[inner sep=1pt,fill=blue!20](sn6){VV\tiny{:动词}}; \node(sw1){}; ]
[.\node[inner sep=1pt,fill=blue!20](sn7){NN\tiny{:名词}}; \node(sw1){}; ]
]
]
]
\Tree[.\node[inner sep=1pt,fill=red!20](sn0){IP\scriptsize{:句子}};
[.\node[inner sep=1pt,fill=red!20](sn1){NP\scriptsize{:}};
[.\node[inner sep=1pt,fill=blue!20](sn2){NN\tiny{:名词}}; \node(sw1){}; ]
\Tree[.\node[inner sep=1pt,fill=red!20](sn0){IP\scriptsize{ 句子}};
[.\node[inner sep=1pt,fill=red!20](sn1){NP\scriptsize{ }};
[.\node[inner sep=1pt,fill=blue!20](sn2){NN\tiny{ 名词}}; \node(sw1){}; ]
]
[.\node[inner sep=1pt,fill=red!20](sn3){VP\scriptsize{:}};
[.\node[inner sep=1pt,fill=blue!20](sn4){VV\tiny{:动词}}; \node(sw2){喜欢}; ]
[.\node[inner sep=1pt](sn5){VP\scriptsize{:}};
[.\node[inner sep=1pt,fill=blue!20](sn6){VV\tiny{:动词}}; \node(sw1){}; ]
[.\node[inner sep=1pt,fill=blue!20](sn7){NN\tiny{:名词}}; \node(sw1){}; ]
[.\node[inner sep=1pt,fill=red!20](sn3){VP\scriptsize{ }};
[.\node[inner sep=1pt,fill=blue!20](sn4){VV\tiny{ 动词}}; \node(sw2){喜欢}; ]
[.\node[inner sep=1pt,fill=green!20](sn5){VP\scriptsize{ }};
[.\node[inner sep=1pt,fill=green!20](sn6){VV\tiny{ 动词}}; \node(sw1){}; ]
[.\node[inner sep=1pt,fill=green!20](sn7){NN\tiny{ 名词}}; \node(sw1){}; ]
]
]
]
\Tree[.\node[inner sep=1pt,fill=red!20](sn0){IP\scriptsize{:句子}};
[.\node[inner sep=1pt,fill=red!20](sn1){NP\scriptsize{:名}};
[.\node[inner sep=1pt,fill=blue!20](sn2){NN\tiny{:名词}}; \node(sw1){}; ]
]
[.\node[inner sep=1pt,fill=red!20](sn3){VP\scriptsize{:动}};
[.\node[inner sep=1pt,fill=blue!20](sn4){VV\tiny{:动词}}; \node(sw2){喜欢}; ]
[.\node[inner sep=1pt,fill=green!20](sn5){VP\scriptsize{:动}};
[.\node[inner sep=1pt,fill=green!20](sn6){VV\tiny{:动词}}; \node(sw1){}; ]
[.\node[inner sep=1pt,fill=green!20](sn7){NN\tiny{:名词}}; \node(sw1){}; ]
]
]
]
\end{scope}
......@@ -79,4 +43,3 @@
\end{tikzpicture}
......@@ -2,13 +2,13 @@
\begin{scope}
\node[minimum width=3em,minimum height=1.5em] (o) at (0,0){};
\node[anchor=west,inner sep=0pt] (ca) at ([yshift=0.2em,xshift=1.4em]o.east){\scriptsize\bfnew{硬币$\boldsymbol A$}};
\node[anchor=west,inner sep=0pt] (cb) at ([xshift=1.4em]ca.east){\scriptsize\bfnew{硬币$\boldsymbol B$}};
\node[anchor=west,inner sep=0pt] (cc) at ([xshift=1.4em]cb.east){\scriptsize\bfnew{硬币$\boldsymbol C$}};
\node[anchor=west,inner sep=0pt] (ca) at ([yshift=0.2em,xshift=1.4em]o.east){\small\sffamily\bfseries{硬币$\boldsymbol A$}};
\node[anchor=west,inner sep=0pt] (cb) at ([xshift=1.4em]ca.east){\small\sffamily\bfseries{硬币$\boldsymbol B$}};
\node[anchor=west,inner sep=0pt] (cc) at ([xshift=1.4em]cb.east){\small\sffamily\bfseries{硬币$\boldsymbol C$}};
\node[anchor=north,inner sep=0pt] (ra) at ([yshift=-0.6em,xshift=-0.4em]o.south){\scriptsize\bfnew{硬币$\boldsymbol A$}};
\node[anchor=north,inner sep=0pt] (rb) at ([yshift=-1.4em]ra.south){\scriptsize\bfnew{硬币$\boldsymbol B$}};
\node[anchor=north,inner sep=0pt] (rc) at ([yshift=-1.4em]rb.south){\scriptsize\bfnew{硬币$\boldsymbol C$}};
\node[anchor=north,inner sep=0pt] (ra) at ([yshift=-0.6em,xshift=-0.4em]o.south){\small\sffamily\bfseries{硬币$\boldsymbol A$}};
\node[anchor=north,inner sep=0pt] (rb) at ([yshift=-1.4em]ra.south){\small\sffamily\bfseries{硬币$\boldsymbol B$}};
\node[anchor=north,inner sep=0pt] (rc) at ([yshift=-1.4em]rb.south){\small\sffamily\bfseries{硬币$\boldsymbol C$}};
\node[anchor=north,inner sep=0pt] (n11) at ([yshift=-0.9em]ca.south){\small{$\frac{1}{3}$}};
\node[anchor=north,inner sep=0pt] (n21) at ([yshift=-1em]n11.south){\small{$\frac{1}{3}$}};
......@@ -35,12 +35,12 @@
\begin{scope}[xshift=8cm]
\node[minimum width=3em,minimum height=1.5em] (o) at (0,0){};
\node[anchor=west,inner sep=0pt] (ca) at ([yshift=0.2em,xshift=1.4em]o.east){\scriptsize\bfnew{正面}};
\node[anchor=west,inner sep=0pt] (cb) at ([xshift=1.4em]ca.east){\scriptsize\bfnew{反面}};
\node[anchor=west,inner sep=0pt] (ca) at ([yshift=0.2em,xshift=1.4em]o.east){\small\sffamily\bfseries{正面}};
\node[anchor=west,inner sep=0pt] (cb) at ([xshift=1.4em]ca.east){\small\sffamily\bfseries{反面}};
\node[anchor=north,inner sep=0pt] (ra) at ([yshift=-0.6em,xshift=-0.4em]o.south){\scriptsize\bfnew{硬币$\boldsymbol A$}};
\node[anchor=north,inner sep=0pt] (rb) at ([yshift=-1.5em]ra.south){\scriptsize\bfnew{硬币$\boldsymbol B$}};
\node[anchor=north,inner sep=0pt] (rc) at ([yshift=-1.5em]rb.south){\scriptsize\bfnew{硬币$\boldsymbol C$}};
\node[anchor=north,inner sep=0pt] (ra) at ([yshift=-0.6em,xshift=-0.4em]o.south){\small\sffamily\bfseries{硬币$\boldsymbol A$}};
\node[anchor=north,inner sep=0pt] (rb) at ([yshift=-1.5em]ra.south){\small\sffamily\bfseries{硬币$\boldsymbol B$}};
\node[anchor=north,inner sep=0pt] (rc) at ([yshift=-1.5em]rb.south){\small\sffamily\bfseries{硬币$\boldsymbol C$}};
\node[anchor=north,inner sep=0pt] (n11) at ([yshift=-1.2em]ca.south){\footnotesize{$0.3$}};
\node[anchor=north,inner sep=0pt] (n21) at ([yshift=-1.7em]n11.south){\footnotesize{$0.5$}};
......
......@@ -13,9 +13,9 @@
{\scriptsize
{
\node [anchor=north west] (entry1) at (0,0) {\textbf{1:} 这 / 是 / 数据};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {\textbf{2:} 现在 / 已经 / 实现};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 确实 / 有 / 很 / 多};
\node [anchor=north west] (entry1) at (0,0) {1: 这 / 是 / 数据};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {2: 现在 / 已经 / 实现};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {3: 确实 / 有 / 很 / 多};
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {...};
\node [anchor=south west] (corpuslabel) at (entry1.north west) {{\color{ublue} \textbf{学习用数据}}};
}
......
......@@ -29,7 +29,7 @@
\section{问题概述}
\parinterval 很多时候机器翻译系统被看作是孤立的“黑盒”系统(图\ref{fig:3.1-1}(a))。将一段文本作为输入送入机器翻译系统之后,系统输出翻译好的译文。但是真实的机器翻译系统非常复杂,因为系统看到的输入和输出实际上只是一些符号串,这些符号并没有任何意义,因此需要进一步对这些符号串进行处理才能更好的使用它们。比如,需要定义翻译中最基本的单元是什么?符号串是否具有结构信息?如何用数学工具刻画这些基本单元和结构?
\parinterval 很多时候机器翻译系统被看作是孤立的“黑盒”系统(图\ref{fig:3.1-1}(a))。将一段文本作为输入送入机器翻译系统之后,系统输出翻译好的译文。但是真实的机器翻译系统非常复杂,因为系统看到的输入和输出实际上只是一些符号串,这些符号并没有任何意义,因此需要进一步对这些符号串进行处理才能更好的使用它们。比如,需要定义翻译中最基本的单元是什么?符号串是否具有结构信息?如何用数学工具刻画这些基本单元和结构?
%----------------------------------------------
\begin{figure}[htp]
......@@ -41,13 +41,13 @@
\end{figure}
%-------------------------------------------
\parinterval\ref{fig:3.1-1}(b)展示了一个机器翻译系统的输入和输出形式。可以看到,输入的中文词串“猫喜欢吃鱼”被加工成一个新的结构(图\ref{fig:3.1-2})。直觉上,这个结构有些奇怪,因为上面多了很多新的符号,而且还有一些线将不同符号进行连接。实际上这就是一种常见的句法表示\ \dash \ 短语结构树。生成这样的结构会涉及两方面问题:
\parinterval\ref{fig:3.1-1}(b)展示了一个机器翻译系统的输入和输出形式。可以看到,输入的中文词串“猫喜欢吃鱼”被加工成一个新的结构(图\ref{fig:3.1-2})。直觉上,这个结构有些奇怪,因为上面多了很多新的符号,而且还有一些线将不同符号进行连接。实际上这就是一种常见的句法表示\ \dash \ 短语结构树。生成这样的结构会涉及两方面问题:
\begin{itemize}
\vspace{0.5em}
\item {\small\bfnew{分词}}\index{分词}(Segmentation)\index{Segmentation}:这个过程会把词串进行切分,切割成最小的具有完整功能的单元\ \dash\ {\small\bfnew{单词}}\index{单词}(Word\index{单词})。因为只有知道了什么是单词,机器翻译系统才能完成对句子的表示、分析和生成。
\item {\small\sffamily\bfseries{分词}}\index{分词}(Segmentation)\index{Segmentation}:这个过程会把词串进行切分,切割成最小的具有完整功能的单元\ \dash\ {\small\sffamily\bfseries{单词}}\index{单词}(Word\index{单词})。因为只有知道了什么是单词,机器翻译系统才能完成对句子的表示、分析和生成。
\vspace{0.5em}
\item {\small\bfnew{句法分析}}\index{句法分析}(Parsing)\index{Parsing}:这个过程会对分词的结果进行进一步分析。比如,可以对句子进行浅层分析,得到句子中实体的信息(如人名、地名等)。也可以对句子进行更深层次的分析,得到完整的句法结构,类似于图\ref{fig:3.1-2}中的结果。这种结构可以被看作是对句子的进一步抽象,被称为短语结构树,比如,NP+VP就可以表示由名词短语(Noun Phrase,NP)和动词短语(Verb Phrase,VP)构成的主谓结构。利用这些信息,机器翻译可以更加准确地对句子的结构进行分析和生成。
\item {\small\sffamily\bfseries{句法分析}}\index{句法分析}(Parsing)\index{Parsing}:这个过程会对分词的结果进行进一步分析。比如,可以对句子进行浅层分析,得到句子中实体的信息(如人名、地名等)。也可以对句子进行更深层次的分析,得到完整的句法结构,类似于图\ref{fig:3.1-2}中的结果。这种结构可以被看作是对句子的进一步抽象,被称为短语结构树,比如,NP+VP就可以表示由名词短语(Noun Phrase,NP)和动词短语(Verb Phrase,VP)构成的主谓结构。利用这些信息,机器翻译可以更加准确地对句子的结构进行分析和生成。
\vspace{0.5em}
\end{itemize}
......@@ -62,9 +62,9 @@
\parinterval 类似地,机器翻译输出的结果也可以包含同样的信息。甚至系统输出英语译文之后,还有一个额外的步骤来把部分英语单词的大小写恢复出来,比如,句首单词的首字母要大写。
\parinterval 一般来说,在送入机器翻译系统前需要对文字序列进行处理和加工,这个过程被称为{\small\bfnew{预处理}}\index{预处理}(Preprocessing)\index{Preprocessing}。类似地,在机器翻译模型输出译文后进行的处理被称作{\small\bfnew{后处理}}\index{后处理}(Postprocessing)\index{Postprocessing}。这两个过程对机器翻译性能影响很大,比如,对于神经机器翻译系统来说,不同的分词策略可能会造成翻译性能的天差地别。
\parinterval 一般来说,在送入机器翻译系统前需要对文字序列进行处理和加工,这个过程被称为{\small\sffamily\bfseries{预处理}}\index{预处理}(Preprocessing)\index{Preprocessing}。类似地,在机器翻译模型输出译文后进行的处理被称作{\small\sffamily\bfseries{后处理}}\index{后处理}(Postprocessing)\index{Postprocessing}。这两个过程对机器翻译性能影响很大,比如,对于神经机器翻译系统来说,不同的分词策略可能会造成翻译性能的天差地别。
\parinterval 值得注意的是,有些观点认为,对于机器翻译来说,不论是分词还是句法分析,并不要求符合人的认知和语言学约束。换句话说,机器翻译所使用的“单词”和“结构”本身并不是为了符合人类的解释,它们更直接目的是为了进行翻译。从系统开发的角度,有时候即使使用一些与人类的语言习惯有差别的处理,仍然会带来性能的提升,比如在神经机器翻译中,在传统分词的基础上进一步使用{\small\bfnew{双字节编码}}\index{双字节编码}(Byte Pair Encoding,BPE)\index{Byte Pair Encoding,BPE}子词切分\upcite{DBLP:conf/acl/SennrichHB16a}会使得机器翻译性能大幅提高。当然,自然语言处理中语言学信息的使用一直是学界关注的焦点。甚至关于语言学结构对机器翻译是否有作用这个问题也有一些不同的观点。但是不能否认的是,无论是语言学的知识,还是计算机自己学习到的知识,对机器翻译都是有价值的。在后续章节会看到,这两种类型的知识对机器翻译帮助很大。
\parinterval 值得注意的是,有些观点认为,对于机器翻译来说,不论是分词还是句法分析,并不要求符合人的认知和语言学约束。换句话说,机器翻译所使用的“单词”和“结构”本身并不是为了符合人类的解释,它们更直接目的是为了进行翻译。从系统开发的角度,有时候即使使用一些与人类的语言习惯有差别的处理,仍然会带来性能的提升,比如在神经机器翻译中,在传统分词的基础上进一步使用{\small\sffamily\bfseries{双字节编码}}\index{双字节编码}(Byte Pair Encoding,BPE)\index{Byte Pair Encoding,BPE}子词切分\upcite{DBLP:conf/acl/SennrichHB16a}会使得机器翻译性能大幅提高。当然,自然语言处理中语言学信息的使用一直是学界关注的焦点。甚至关于语言学结构对机器翻译是否有作用这个问题也有一些不同的观点。但是不能否认的是,无论是语言学的知识,还是计算机自己学习到的知识,对机器翻译都是有价值的。在后续章节会看到,这两种类型的知识对机器翻译帮助很大。
\parinterval 剩下的问题是如何进行句子的切分和结构的分析。思路有很多,一种常用的方法是对问题进行概率化,用统计模型来描述问题并求解之。比如,一个句子切分的好坏,并不是非零即一的判断,而是要估计出这种切分的可能性大小,最终选择可能性最大的结果进行输出。这也是一种典型的用统计建模的方式来描述自然语言处理问题的方法。
......@@ -76,7 +76,7 @@
\section{中文分词}
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串(图\ref{fig:3.2-1})。比如,对于一个中文句子,单词之间是没有间隔的,因此需要把一个个的单词切分出来,这样机器翻译系统可以区分不同的翻译单元。甚至,可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人$\to$中国/人)。广义上,可以把上述过程看作是一种分词过程,即:将一个输入的自然语言字符串切割成单元序列,每个{\small\bfnew{单元}}\index{单元}(Token)\index{Token}都对应可以处理的最小单位。
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串(图\ref{fig:3.2-1})。比如,对于一个中文句子,单词之间是没有间隔的,因此需要把一个个的单词切分出来,这样机器翻译系统可以区分不同的翻译单元。甚至,可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人$\to$中国/人)。广义上,可以把上述过程看作是一种分词过程,即:将一个输入的自然语言字符串切割成单元序列,每个{\small\sffamily\bfseries{单元}}\index{单元}(Token)\index{Token}都对应可以处理的最小单位。
%----------------------------------------------
\begin{figure}[htp]
......@@ -87,7 +87,7 @@
\end{figure}
%-------------------------------------------
\parinterval 分词得到的单元序列既可以是语言学上的词序列,也可以是根据其他方式定义的基本处理单元。在本章中,把分词得到的一个个单元称为{\small\bfnew{单词}}\index{单词}(Word)\index{Word}或词,尽管这些单元可以不是语言学上的完整单词,而这个过程也被称作{\small\bfnew{词法分析}}\index{词法分析}(Lexical Analysis)\index{Lexical Analysis}。除了汉语,词法分析在日语、泰语等单词之间无明确分割符的语言中有着广泛的应用,芬兰语、维吾尔语等一些形态学十分丰富的语言也需要使用词法分析来解决复杂的词尾、词缀变化等形态学变化。
\parinterval 分词得到的单元序列既可以是语言学上的词序列,也可以是根据其他方式定义的基本处理单元。在本章中,把分词得到的一个个单元称为单词或词,尽管这些单元可以不是语言学上的完整单词,而这个过程也被称作{\small\sffamily\bfseries{词法分析}}\index{词法分析}(Lexical Analysis)\index{Lexical Analysis}。除了汉语,词法分析在日语、泰语等单词之间无明确分割符的语言中有着广泛的应用,芬兰语、维吾尔语等一些形态学十分丰富的语言也需要使用词法分析来解决复杂的词尾、词缀变化等形态学变化。
\parinterval 在机器翻译中,分词系统的好坏往往会决定译文的质量。分词的目的是定义系统处理的基本单元,那么什么叫做“词” 呢?关于词的定义有很多,比如:
......@@ -98,8 +98,8 @@
语言里最小的可以独立运用的单位。
\begin{flushright}——《新华字典》\end{flushright}
单词(word),含有语义内容或语用内容,且能被单独念出来的的最小单位。
\begin{flushright}——《维基百科》\end{flushright}
单词,含有语义内容或语用内容,且能被单独念出来的的最小单位。
\begin{flushright}——维基百科\end{flushright}
语句中具有完整概念,能独立自由运用的基本单位。
\begin{flushright}——《国语辞典》\end{flushright}
......@@ -169,13 +169,13 @@ Interests $\to$ \; Interest/s & selected $\to$ \; se/lect/ed & processed $\to$ \
\subsubsection{1. 统计模型的学习与推断}
\parinterval 统计分词也是一种典型的数据驱动方法。这种方法将已经经过分词的数据“喂”给系统,这个数据也被称作{\small\bfnew{标注数据}}\index{标注数据}(Annotated Data)\index{Annotated Data}。在获得标注数据后,系统自动学习一个统计模型来描述分词的过程,而这个模型会把分词的“知识”作为参数保存在模型中。当送入一个新的需要分词的句子时,可以利用学习到的模型对可能的分词结果进行概率化的描述,最终选择概率最大的结果作为输出。这个方法就是基于统计的分词方法,其与{\chaptertwo}介绍的统计语言建模方法本质上是一样的。具体来说,可以分为两个步骤:
\parinterval 统计分词也是一种典型的数据驱动方法。这种方法将已经经过分词的数据“喂”给系统,这个数据也被称作{\small\sffamily\bfseries{标注数据}}\index{标注数据}(Annotated Data)\index{Annotated Data}。在获得标注数据后,系统自动学习一个统计模型来描述分词的过程,而这个模型会把分词的“知识”作为参数保存在模型中。当送入一个新的需要分词的句子时,可以利用学习到的模型对可能的分词结果进行概率化的描述,最终选择概率最大的结果作为输出。这个方法就是基于统计的分词方法,其与{\chaptertwo}介绍的统计语言建模方法本质上是一样的。具体来说,可以分为两个步骤:
\begin{itemize}
\vspace{0.5em}
\item {\small\bfnew{训练}}\index{训练}(Training)\index{Training}。利用标注数据,对统计模型的参数进行学习。
\item 训练。利用标注数据,对统计模型的参数进行学习。
\vspace{0.5em}
\item {\small\bfnew{预测}}\index{预测}(Prediction)\index{Prediction}。利用学习到的模型和参数,对新的句子进行切分。这个过程也可以被看作是利用学习到的模型在新的数据上进行{\small\bfnew{推断}}\index{推断}(Inference)\index{Inference}
\item 预测。利用学习到的模型和参数,对新的句子进行切分。这个过程也可以被看作是利用学习到的模型在新的数据上进行推断
\vspace{0.5em}
\end{itemize}
......@@ -228,7 +228,7 @@ $计算这种切分的概率值。
\section{命名实体识别}
\parinterval 在人类使用语言的过程中,单词往往不是独立出现的。很多时候,多个单词会组合成一个更大的单元来表达特定的意思。其中,最典型的代表是{\small\bfnew{命名实体}}\index{命名实体}(Named Entity)\index{Named Entity}。通常,命名实体是指名词性的专用短语,例如公司名称、品牌名称、产品名称等专有名词和行业术语。准确地识别出这些命名实体,是提高机器翻译质量的关键。比如,在翻译技术文献时,往往需要对术语进行识别并进行准确翻译,因此引入{\small\bfnew{命名实体识别}}\index{命名实体识别}(Named Entity Recognition)\index{Named Entity Recognition}可以帮助系统对特定术语进行更加细致的处理。
\parinterval 在人类使用语言的过程中,单词往往不是独立出现的。很多时候,多个单词会组合成一个更大的单元来表达特定的意思。其中,最典型的代表是{\small\sffamily\bfseries{命名实体}}\index{命名实体}(Named Entity)\index{Named Entity}。通常,命名实体是指名词性的专用短语,例如公司名称、品牌名称、产品名称等专有名词和行业术语。准确地识别出这些命名实体,是提高机器翻译质量的关键。比如,在翻译技术文献时,往往需要对术语进行识别并进行准确翻译,因此引入{\small\sffamily\bfseries{命名实体识别}}\index{命名实体识别}(Named Entity Recognition)\index{Named Entity Recognition}可以帮助系统对特定术语进行更加细致的处理。
\parinterval 从句法分析的角度来说,命名实体识别是一种浅层句法分析任务。它在分词的基础上,进一步对句子浅层结构进行识别,包括词性标注、组块识别在内的很多任务都可以被看作是浅层句法分析的内容。本节会以命名实体识别为例,对基于序列标注的浅层句法分析方法进行介绍。
......@@ -238,7 +238,7 @@ $计算这种切分的概率值。
\subsection{序列标注任务}
\parinterval 命名实体识别是一种典型的{\small\bfnew{序列标注}}\index{序列标注}(Sequence Labeling\index{Sequence Labeling})任务,对于一个输入序列,它会生成一个相同长度的输出序列。输入序列的每一个位置,都有一个与之对应的输出,输出的内容是这个位置所对应的标签(或者类别)。比如,对于命名实体识别,每个位置的标签可以被看作是一种命名实体“开始”和“结束”的标志,而命名实体识别的目标就是得到这种“开始”和“结束”标注的序列。不仅如此,分词、词性标注、组块识别等也都可以被看作是序列标注任务。
\parinterval 命名实体识别是一种典型的{\small\sffamily\bfseries{序列标注}}\index{序列标注}(Sequence Labeling\index{Sequence Labeling})任务,对于一个输入序列,它会生成一个相同长度的输出序列。输入序列的每一个位置,都有一个与之对应的输出,输出的内容是这个位置所对应的标签(或者类别)。比如,对于命名实体识别,每个位置的标签可以被看作是一种命名实体“开始”和“结束”的标志,而命名实体识别的目标就是得到这种“开始”和“结束”标注的序列。不仅如此,分词、词性标注、组块识别等也都可以被看作是序列标注任务。
\parinterval 通常来说,序列标注任务中首先需要定义标注策略,即使用什么样的格式来对序列进行标注。为了便于描述,这里假设输入序列为一个个单词\footnote{广义上,序列标注任务并不限制输入序列的形式,比如,字符、单词、多个单词构成的词组都可以作为序列标注的输入单元。}。常用的标注策略有:
......@@ -266,7 +266,7 @@ $计算这种切分的概率值。
\parinterval 对于像命名实体识别这样的任务,早期的方法主要是基于词典和规则的方法。这些方法依赖于人工构造的识别规则,通过字符串匹配的方式识别出文本中的命名实体\upcite{1995University,krupka1998isoquest,DBLP:conf/muc/BlackRM98}。严格意义上来说,那时命名实体识别还并没有被看作是一种序列标注问题。
\parinterval 序列标注这个概念更多的是出现在基于统计建模的方法中。许多统计机器学习方法都被成功应用用于命名实体识别任务,例如{\small\bfnew{隐马尔可夫模型}}\index{隐马尔可夫模型}(Hidden Markov Model,HMM)\index{Hidden Markov Model,HMM}\upcite{1996Hidden}{\small\bfnew{条件随机场}}\index{条件随机场}(Conditional Random Fields,CRFs)\index{Conditional Random Fields,CRFs}\upcite{lafferty2001conditional}{\small\bfnew{最大熵}}\index{最大熵}(Maximum Entropy,ME)\index{Maximum Entropy,ME}模型\upcite{kapur1989maximum}{\small\bfnew{支持向量机}}\index{支持向量机}(Support Vector Machine,SVM)\index{Support Vector Machine,SVM}\upcite{1998Support}等。此外,近些年深度学习的兴起也给命名实体识别带来了新的思路\upcite{2011Natural}。而命名实体识别也成为了验证机器学习方法有效性的重要任务之一。本节将对序列标注中几类基础的方法进行介绍。其中会涉及概率图模型、统计分类模型等方法。特别是统计分类的概念,在后续章节中也会被使用到。
\parinterval 序列标注这个概念更多的是出现在基于统计建模的方法中。许多统计机器学习方法都被成功应用用于命名实体识别任务,例如{\small\sffamily\bfseries{隐马尔可夫模型}}\index{隐马尔可夫模型}(Hidden Markov Model,HMM)\index{Hidden Markov Model,HMM}\upcite{1996Hidden}{\small\sffamily\bfseries{条件随机场}}\index{条件随机场}(Conditional Random Fields,CRFs)\index{Conditional Random Fields,CRFs}\upcite{lafferty2001conditional}{\small\sffamily\bfseries{最大熵}}\index{最大熵}(Maximum Entropy,ME)\index{Maximum Entropy,ME}模型\upcite{kapur1989maximum}{\small\sffamily\bfseries{支持向量机}}\index{支持向量机}(Support Vector Machine,SVM)\index{Support Vector Machine,SVM}\upcite{1998Support}等。此外,近些年深度学习的兴起也给命名实体识别带来了新的思路\upcite{2011Natural}。而命名实体识别也成为了验证机器学习方法有效性的重要任务之一。本节将对序列标注中几类基础的方法进行介绍。其中会涉及概率图模型、统计分类模型等方法。特别是统计分类的概念,在后续章节中也会被使用到。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -276,9 +276,9 @@ $计算这种切分的概率值。
\parinterval 基于特征的统计学习是解决序列标注的有效方法之一。这种方法中,系统研发人员通过定义不同的特征来完成对问题的描述,之后利用统计模型完成对这些特征的某种融合,并得到最终的预测结果。
\parinterval 在开始介绍序列标注模型之前,先来看一下统计学习所涉及的重要概念\ \dash \ {\small\bfnew{特征}}\index{特征}(Feature)\index{Feature}。简单来说,特征是指能够反映事物在某方面表现或行为的一种属性,如现实生活中小鸟的羽毛颜色、喙的形状、翼展长度等就是小鸟的特征;命名实体识别任务中的每个词的词根、词性和上下文组合也可以被看做是识别出命名实体可以采用的特征。
\parinterval 在开始介绍序列标注模型之前,先来看一下统计学习所涉及的重要概念\ \dash \ {\small\sffamily\bfseries{特征}}\index{特征}(Feature)\index{Feature}。简单来说,特征是指能够反映事物在某方面表现或行为的一种属性,如现实生活中小鸟的羽毛颜色、喙的形状、翼展长度等就是小鸟的特征;命名实体识别任务中的每个词的词根、词性和上下文组合也可以被看做是识别出命名实体可以采用的特征。
\parinterval 从统计建模的角度看,特征的形式可以非常灵活。比如,可以分为连续型特征和离散型特征,前者通常用于表示取值蕴含数值大小关系的信息,如人的身高和体重,后者通常用于表示取值不蕴含数值大小关系的信息,如人的性别。正是由于这种灵活性,系统开发者可以通过定义多样的特征来从多个不同的角度对目标问题进行建模。而这种设计特征的过程也被称作{\small\bfnew{特征工程}}\index{特征工程}(Feature Engineering)\index{Feature Engineering}
\parinterval 从统计建模的角度看,特征的形式可以非常灵活。比如,可以分为连续型特征和离散型特征,前者通常用于表示取值蕴含数值大小关系的信息,如人的身高和体重,后者通常用于表示取值不蕴含数值大小关系的信息,如人的性别。正是由于这种灵活性,系统开发者可以通过定义多样的特征来从多个不同的角度对目标问题进行建模。而这种设计特征的过程也被称作{\small\sffamily\bfseries{特征工程}}\index{特征工程}(Feature Engineering)\index{Feature Engineering}
\parinterval 设计更好的特征也成为了很多机器学习方法的关键。通常有两个因素需要进行考虑:
......@@ -290,7 +290,7 @@ $计算这种切分的概率值。
\vspace{0.5em}
\end{itemize}
\parinterval 回到命名实体识别任务上来。对于输入的每个单词,可以将其表示为一个单词和对应的{\small\bfnew{词特征}}\index{词特征}(word feature)\index{word feature}的组合,记作$<w, f>$。通过这样的表示,就可以将原始的单词序列转换为词特征序列。命名实体识别中的特征可以分为两大类,一种是单词对应各个标签的特征,另一种是标签之间组合的特征。常用的特征包括词根、词缀、词性或者标签的固定搭配等。表\ref{tab:3.3-1}展示了命名实体识别任务中一些典型的特征。
\parinterval 回到命名实体识别任务上来。对于输入的每个单词,可以将其表示为一个单词和对应的{\small\sffamily\bfseries{词特征}}\index{词特征}(Word Feature)\index{Word Feature}的组合,记作$<w, f>$。通过这样的表示,就可以将原始的单词序列转换为词特征序列。命名实体识别中的特征可以分为两大类,一种是单词对应各个标签的特征,另一种是标签之间组合的特征。常用的特征包括词根、词缀、词性或者标签的固定搭配等。表\ref{tab:3.3-1}展示了命名实体识别任务中一些典型的特征。
\begin{table}[htp]{
\begin{center}
......@@ -318,7 +318,7 @@ $计算这种切分的概率值。
\subsection{基于概率图模型的方法}
\parinterval {\small\bfnew{概率图模型}}\index{概率图模型}(Probabilistic Graphical Model)\index{Probabilistic Graphical Model}是使用图表示变量及变量间概率依赖关系的方法。在概率图模型中,可以根据可观测变量推测出未知变量的条件概率分布等信息。如果把序列标注任务中的输入序列看作观测变量,而把输出序列看作需要预测的未知变量,那么就可以把概率图模型应用于命名实体识别等序列标注任务。
\parinterval {\small\sffamily\bfseries{概率图模型}}\index{概率图模型}(Probabilistic Graphical Model)\index{Probabilistic Graphical Model}是使用图表示变量及变量间概率依赖关系的方法。在概率图模型中,可以根据可观测变量推测出未知变量的条件概率分布等信息。如果把序列标注任务中的输入序列看作观测变量,而把输出序列看作需要预测的未知变量,那么就可以把概率图模型应用于命名实体识别等序列标注任务。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
......@@ -332,7 +332,7 @@ $计算这种切分的概率值。
\parinterval 在上面的例子中,每次挑选并上抛硬币后得到的“正面”或“反面”即为“可见状态”,再次挑选并上抛硬币会获得新的“可见状态”,这个过程即为“状态的转移”,经过6次反复挑选上抛后得到的硬币正反序列叫做可见状态序列,由每个回合的可见状态构成。此外,在这个游戏中还暗含着一个会对最终“可见状态序列”产生影响的“隐含状态序列”\ \dash \ 每次挑选的硬币形成的序列,例如$CBABCA$
\parinterval 实际上,隐马尔科夫模型在处理序列问题时的关键依据是两个至关重要的概率关系,并且这两个概率关系也始终贯穿于“抛硬币”的游戏中。一方面,隐马尔可夫模型中用{\small\bfnew{发射概率}}\index{发射概率}(Emission Probability)\index{Emission Probability}来描述隐含状态和可见状态之间存在的输出概率(即$A$$B$$C$抛出正面的输出概率为0.3、0.5、0.7),同样的,隐马尔可夫模型还会描述系统隐含状态的{\small\bfnew{转移概率}}\index{转移概率}(Transition Probability)\index{Transition Probability},在这个例子中,$A$的下一个状态是$A$$B$$C$的概率都是1/3,$B$$C$的下一个状态是$A$$B$$C$的转移概率也同样是1/3。图\ref{fig:3.3-2}展示了在“抛硬币”游戏中的转移概率和发射概率,它们都可以被看做是条件概率矩阵。
\parinterval 实际上,隐马尔科夫模型在处理序列问题时的关键依据是两个至关重要的概率关系,并且这两个概率关系也始终贯穿于“抛硬币”的游戏中。一方面,隐马尔可夫模型中用{\small\sffamily\bfseries{发射概率}}\index{发射概率}(Emission Probability)\index{Emission Probability}来描述隐含状态和可见状态之间存在的输出概率(即$A$$B$$C$抛出正面的输出概率为0.3、0.5、0.7),同样的,隐马尔可夫模型还会描述系统隐含状态的{\small\sffamily\bfseries{转移概率}}\index{转移概率}(Transition Probability)\index{Transition Probability},在这个例子中,$A$的下一个状态是$A$$B$$C$的概率都是1/3,$B$$C$的下一个状态是$A$$B$$C$的转移概率也同样是1/3。图\ref{fig:3.3-2}展示了在“抛硬币”游戏中的转移概率和发射概率,它们都可以被看做是条件概率矩阵。
%----------------------------------------------
\begin{figure}[htp]
......@@ -364,7 +364,7 @@ $计算这种切分的概率值。
& = & \prod_{i=1}^{m} \funp{P}(x_i|y_i) \funp{P}(y_i | y_{i-1}) \label{eq:joint-prob-xy}
\end{eqnarray}
\noindent 这里,$y_{0}$表示一个虚拟的隐含状态。这样,可以定义$\funp{P}(y_1|y_{0}) \equiv \funp{P}(y_1)$,它表示起始隐含状态出现的概率。隐马尔可夫模型的假设也大大化简了问题,因此可以通过式(\eqref{eq:joint-prob-xy})很容易地计算隐含状态序列和可见状态序列出现的概率。值得注意的是,发射概率和转移概率都可以被看作是描述序列生成过程的“特征”。但是,这些“特征”并不是随意定义的,而是符合问题的概率解释。而这种基于事件发生的逻辑所定义的概率生成模型,通常可以被看作是一种{\small\bfnew{生成式模型}}\index{生成式模型}(Generative Model)\index{Generative Model}
\noindent 这里,$y_{0}$表示一个虚拟的隐含状态。这样,可以定义$\funp{P}(y_1|y_{0}) \equiv \funp{P}(y_1)$,它表示起始隐含状态出现的概率。隐马尔可夫模型的假设也大大化简了问题,因此可以通过式\eqref{eq:joint-prob-xy}很容易地计算隐含状态序列和可见状态序列出现的概率。值得注意的是,发射概率和转移概率都可以被看作是描述序列生成过程的“特征”。但是,这些“特征”并不是随意定义的,而是符合问题的概率解释。而这种基于事件发生的逻辑所定义的概率生成模型,通常可以被看作是一种{\small\sffamily\bfseries{生成式模型}}\index{生成式模型}(Generative Model)\index{Generative Model}
%----------------------------------------------
\begin{figure}[htp]
......@@ -382,7 +382,7 @@ $计算这种切分的概率值。
\vspace{0.5em}
\item 参数学习:即给定硬币种类(隐含状态数量),根据多个可见状态序列(抛硬币的结果)估计模型的参数(转移概率),这个问题的求解需要用到EM算法\upcite{1977Maximum}
\vspace{0.5em}
\item 解码:即给定模型(转移概率和发射概率)和可见状态序列(抛硬币的结果),计算在可见状态序列的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的方法,通常也被称作{\small\bfnew{维特比算法}}\index{维特比算法}(Viterbi Algorithm)\index{Viterbi Algorithm}\upcite{1967Error}
\item 解码:即给定模型(转移概率和发射概率)和可见状态序列(抛硬币的结果),计算在可见状态序列的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的方法,通常也被称作{\small\sffamily\bfseries{维特比算法}}\index{维特比算法}(Viterbi Algorithm)\index{Viterbi Algorithm}\upcite{1967Error}
\vspace{0.5em}
\end{itemize}
......@@ -421,7 +421,7 @@ $计算这种切分的概率值。
\label{eq:3.3-4}
\end{eqnarray}
\parinterval 将式(\eqref{eq:joint-prob-xy})带入式(\eqref{eq:markov-sequence-argmax})可以得到最终计算公式,如下:
\parinterval 将式\eqref{eq:joint-prob-xy}带入式\eqref{eq:markov-sequence-argmax}可以得到最终计算公式,如下:
\begin{eqnarray}
\hat{\seq{y}} = \arg\max_{\seq{y}}\prod_{i=1}^{m}\funp{P}(x_i|y_i)\funp{P}(y_i|y_{i-1})
......@@ -452,7 +452,7 @@ $计算这种切分的概率值。
\funp{P}(A|B)+\funp{P}(B|B)+\funp{P}(C|B)+\funp{P}(D|B) & = & 1 \label{eq:3.3-7}
\end{eqnarray}
\noindent 其中,$\funp{P}(b|a)$表示由状态$a$转移到状态$b$的概率,由于式(\eqref{eq:3.3-6})中的分式数量少于式(\eqref{eq:3.3-7}),这就导致在统计中获得的$\funp{P}(A|A)$$\funp{P}(A|B)$的值很可能会比$\funp{P}(A|B)$$\funp{P}(B|B)$$\funp{P}(C|B)$$\funp{P}(D|B)$要大。
\noindent 其中,$\funp{P}(b|a)$表示由状态$a$转移到状态$b$的概率,由于式\eqref{eq:3.3-6}中的分式数量少于式\eqref{eq:3.3-7},这就导致在统计中获得的$\funp{P}(A|A)$$\funp{P}(A|B)$的值很可能会比$\funp{P}(A|B)$$\funp{P}(B|B)$$\funp{P}(C|B)$$\funp{P}(D|B)$要大。
\parinterval\ref{fig:3.3-5}展示了一个具体的例子,有一个可见状态序列$T F F T$,假设初始隐含状态是$A$,图中线上的概率值是对应的转移概率与发射概率的乘积,比如图中隐含状态$A$开始,下一个隐含状态是$A$且可见状态是$F$的概率是0.45,下一个隐含状态是$B$且可见状态是$F$的概率是0.55。图中可以看出,由于有较大的值,当可见状态序列为$T F F T$时,隐马尔可夫计算出的最有可能的隐含状态序列为$A A A A$。但是如果对训练集进行统计可能会发现,当可见序列为$T F F T$ 时,对应的隐含状态是$A A A A$的概率可能是比较大的,但也可能是比较小的。这个例子中出现预测偏差的主要原因是:由于比其他状态转移概率要大得多,隐含状态的预测一直停留在状态$A$
......@@ -465,7 +465,7 @@ $计算这种切分的概率值。
\end{figure}
%-------------------------------------------
\parinterval 上述现象也被称作{\small\bfnew{标注偏置}}\index{标注偏置}(Label Bias)\index{Label Bias}。条件随机场模型在隐马尔可夫模型的基础上,解决了这个问题\upcite{lafferty2001conditional}。在条件随机场模型中,以全局范围的统计归一化代替了隐马尔可夫模型中的局部归一化。除此之外,条件随机场模型中并非使用概率计算而是特征函数的方式对可见状态序列$\seq{x}$对应的隐含状态序列$\seq{y}$的概率进行计算。
\parinterval 上述现象也被称作{\small\sffamily\bfseries{标注偏置}}\index{标注偏置}(Label Bias)\index{Label Bias}。条件随机场模型在隐马尔可夫模型的基础上,解决了这个问题\upcite{lafferty2001conditional}。在条件随机场模型中,以全局范围的统计归一化代替了隐马尔可夫模型中的局部归一化。除此之外,条件随机场模型中并非使用概率计算而是特征函数的方式对可见状态序列$\seq{x}$对应的隐含状态序列$\seq{y}$的概率进行计算。
\parinterval 条件随机场中一般有若干个特征函数,都是经过设计的、能够反映序列规律的一些二元函数\footnote{二元函数的函数值一般非1即0},并且每个特征函数都有其对应的权重$\lambda$。特征函数一般由两部分组成:能够反映隐含状态序列之间转移规则的转移特征$t(y_{i-1},y_i,\seq{x},i)$和状态特征$s(y_i,\seq{x},i)$。其中$y_i$$y_{i-1}$分别是位置$i$和前一个位置的隐含状态,$\seq{x}$则是可见状态序列。转移特征$t(y_{i-1},y_i,\seq{x},i)$反映了两个相邻的隐含状态之间的转换关系,而状态特征$s(y_i,\seq{x},i)$则反映了第$i$个可见状态应该对应什么样的隐含状态,这两部分共同组成了一个特征函数$F(y_{i-1},y_i,\seq{x},i)$,即
\begin{eqnarray}
......@@ -480,14 +480,14 @@ F(y_{i-1},y_i,\seq{x},i) & = & t(y_{i-1},y_i,\seq{x},i)+s(y_i,\seq{x},i)
\label{eq:3.3-9}
\end{eqnarray}
\parinterval 公式(\eqref{eq:3.3-9})中的$Z(x)$即为上面提到的实现全局统计归一化的归一化因子,其计算方式为:
\parinterval 公式\eqref{eq:3.3-9}中的$Z(x)$即为上面提到的实现全局统计归一化的归一化因子,其计算方式为:
\begin{eqnarray}
Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y_i,\seq{x},i))
\label{eq:3.3-10}
\end{eqnarray}
\parinterval 由公式(\eqref{eq:3.3-10})可以看出,归一化因子的求解依赖于整个可见状态序列和每个位置的隐含状态,因此条件随机场模型中的归一化是一种全局范围的归一化方式。图\ref{fig:3.3-6}为条件随机场模型处理序列问题的示意图。
\parinterval 由公式\eqref{eq:3.3-10}可以看出,归一化因子的求解依赖于整个可见状态序列和每个位置的隐含状态,因此条件随机场模型中的归一化是一种全局范围的归一化方式。图\ref{fig:3.3-6}为条件随机场模型处理序列问题的示意图。
%----------------------------------------------
\begin{figure}[htp]
......@@ -498,7 +498,7 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\end{figure}
%-------------------------------------------
\parinterval 虽然,式(\eqref{eq:3.3-9})和式(\eqref{eq:3.3-10})的表述相较于隐马尔可夫模型更加复杂,但是其实现有非常高效的方式。比如,可以使用动态规划方法完成整个条件随机场模型的计算\upcite{lafferty2001conditional}
\parinterval 虽然,式\eqref{eq:3.3-9}和式\eqref{eq:3.3-10}的表述相较于隐马尔可夫模型更加复杂,但是其实现有非常高效的方式。比如,可以使用动态规划方法完成整个条件随机场模型的计算\upcite{lafferty2001conditional}
\parinterval 条件随机场模型处理命名实体识别任务时,可见状态序列对应着文本内容,隐含状态序列对应着待预测的标签。对于命名实体识别任务,需要单独设计若干适合命名实体识别任务的特征函数。例如在使用BIOES标准标注命名实体识别任务时,标签“B-ORG”\footnote{ORG表示机构实体}后面的标签必然是“I-ORG”或是“E-ORG”,而不可能是“O”,针对此规则可以设计相应特征函数。
......@@ -531,7 +531,7 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\parinterval 无论在日常生活中还是在研究工作中,都会遇到各种各样的分类问题,例如挑选西瓜时需要区分“好瓜”和“坏瓜”、编辑看到一篇新闻稿件时要对稿件进行分门别类。事实上,在机器学习中,对“分类任务”的定义会更宽泛而并不拘泥于“类别”的概念,在对样本进行预测时,只要预测标签集合是有限的且预测标签是离散的,就可认定其为分类任务。
\parinterval 具体来说,分类任务目标是训练一个可以根据输入数据预测离散标签的{\small\bfnew{分类器}}\index{分类器}(Classifier\index{Classifier}),也可称为分类模型。在有监督的分类任务中\footnote{与之相对应的,还有无监督、半监督分类任务,不过这些内容不是本书讨论的重点。读者可以参看参考文献\upcite{周志华2016机器学习,李航2019统计学习方法}对相关概念进行了解。},训练数据集合通常由形似$(\boldsymbol{x}_i,y_i)$的带标注数据构成,$\boldsymbol{x}_i=(x_{i1},x_{i2},\ldots,x_{ik})$作为分类器的输入数据(通常被称作一个训练样本),其中$x_{ij}$表示样本$\boldsymbol{x}_i$的第$j$个特征;$y_i$作为输入数据对应的{\small\bfnew{标签}}\index{标签}(Label)\index{Label},反映了输入数据对应的“类别”。若标签集合大小为$n$,则分类任务的本质是通过对训练数据集合的学习,建立一个从$k$ 维样本空间到$n$维标签空间的映射关系。更确切地说,分类任务的最终目标是学习一个条件概率分布$\funp{P}(y|\boldsymbol{x})$,这样对于输入$\boldsymbol{x}$可以找到概率最大的$y$作为分类结果输出。
\parinterval 具体来说,分类任务目标是训练一个可以根据输入数据预测离散标签的{\small\sffamily\bfseries{分类器}}\index{分类器}(Classifier\index{Classifier}),也可称为分类模型。在有监督的分类任务中\footnote{与之相对应的,还有无监督、半监督分类任务,不过这些内容不是本书讨论的重点。读者可以参看参考文献\upcite{周志华2016机器学习,李航2019统计学习方法}对相关概念进行了解。},训练数据集合通常由形似$(\boldsymbol{x}_i,y_i)$的带标注数据构成,$\boldsymbol{x}_i=(x_{i1},x_{i2},\ldots,x_{ik})$作为分类器的输入数据(通常被称作一个训练样本),其中$x_{ij}$表示样本$\boldsymbol{x}_i$的第$j$个特征;$y_i$作为输入数据对应的{\small\sffamily\bfseries{标签}}\index{标签}(Label)\index{Label},反映了输入数据对应的“类别”。若标签集合大小为$n$,则分类任务的本质是通过对训练数据集合的学习,建立一个从$k$ 维样本空间到$n$维标签空间的映射关系。更确切地说,分类任务的最终目标是学习一个条件概率分布$\funp{P}(y|\boldsymbol{x})$,这样对于输入$\boldsymbol{x}$可以找到概率最大的$y$作为分类结果输出。
\parinterval 与概率图模型一样,分类模型中也依赖特征定义。其定义形式与\ref{sec3:feature}节的描述一致,这里不再赘述。分类任务一般根据类别数量分为二分类任务和多分类任务,二分类任务是最经典的分类任务,只需要对输出进行非零即一的预测。多分类任务则可以有多种处理手段,比如,可以将其“拆解”为多个二分类任务求解,或者直接让模型输出多个类别中的一个。在命名实体识别中,往往会使用多类别分类模型。比如,在BIO标注下,有三个类别(B、I和O)。一般来说,类别数量越大分类的难度也越大。比如,BIOES标注包含5个类别,因此使用同样的分类器,它要比BIO标注下的分类问题难度大。另一方面,更多的类别有助于准确的刻画目标问题。因此在实践中需要在类别数量和分类难度之间找到一种平衡。
......@@ -573,7 +573,7 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\subsection{句法树}
\parinterval {\small\bfnew{句法}}\index{句法}(Syntax)\index{Syntax}是研究句子的每个组成部分和它们之间的组合方式。一般来说,句法和语言是相关的,比如,英文是主谓宾结构,而日语是主宾谓结构,因此不同的语言也会有不同的句法描述方式。自然语言处理领域最常用的两种句法分析形式是{\small\bfnew{短语结构分析}}\index{短语结构分析}(Phrase Structure Parsing)\index{Phrase Structure Parsing}{\small\bfnew{依存分析}}\index{依存分析}(Dependency Parsing)\index{Dependency Parsing}。图\ref{fig:3.4-1}展示了这两种的句法表示形式的实例。其中,左侧是短语结构树,它描述的是短语的结构功能,比如“吃”是动词(记为VV),“鱼”是名词(记为NN),“吃/鱼”组成动词短语,这个短语再与“喜欢”这一动词组成新的动词短语。短语结构树的每个子树都是一个句法功能单元,比如,子树VP(VV(吃) NN(鱼))就表示了“吃/鱼”这个动词短语的结构,其中子树根节点VP是句法功能标记。短语结构树利用嵌套的方式描述了语言学的功能,短语结构树中,每个词都有词性(或词类),不同的词或者短语可以组成名动结构、动宾结构等语言学短语结构,短语结构分析一般也被称为{\small\bfnew{成分分析}}\index{成分分析}(Constituency Parsing)或{\small\bfnew{完全分析}}\index{完全分析}(Full Parsing)\index{Full Parsing}
\parinterval {\small\sffamily\bfseries{句法}}\index{句法}(Syntax)\index{Syntax}是研究句子的每个组成部分和它们之间的组合方式。一般来说,句法和语言是相关的,比如,英文是主谓宾结构,而日语是主宾谓结构,因此不同的语言也会有不同的句法描述方式。自然语言处理领域最常用的两种句法分析形式是{\small\sffamily\bfseries{短语结构分析}}\index{短语结构分析}(Phrase Structure Parsing)\index{Phrase Structure Parsing}{\small\sffamily\bfseries{依存分析}}\index{依存分析}(Dependency Parsing)\index{Dependency Parsing}。图\ref{fig:3.4-1}展示了这两种的句法表示形式的实例。其中,左侧是短语结构树,它描述的是短语的结构功能,比如“吃”是动词(记为VV),“鱼”是名词(记为NN),“吃/鱼”组成动词短语,这个短语再与“喜欢”这一动词组成新的动词短语。短语结构树的每个子树都是一个句法功能单元,比如,子树VP(VV(吃) NN(鱼))就表示了“吃/鱼”这个动词短语的结构,其中子树根节点VP是句法功能标记。短语结构树利用嵌套的方式描述了语言学的功能,短语结构树中,每个词都有词性(或词类),不同的词或者短语可以组成名动结构、动宾结构等语言学短语结构,短语结构分析一般也被称为{\small\sffamily\bfseries{成分分析}}\index{成分分析}(Constituency Parsing)或{\small\sffamily\bfseries{完全分析}}\index{完全分析}(Full Parsing)\index{Full Parsing}
%----------------------------------------------
\begin{figure}[htp]
......@@ -586,7 +586,7 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\parinterval\ref{fig:3.4-1}右侧展示的是另一种句法结构,被称作依存句法树。依存句法树表示了句子中单词和单词之间的依存关系。比如,从这个例子可以了解,“猫”依赖“喜欢”,“吃”依赖“喜欢”,“鱼”依赖“吃”。
\parinterval 短语结构树和依存句法树的结构和功能有很大不同。短语结构树的叶子节点是单词,中间节点是词性或者短语句法标记。在短语结构分析中,通常把单词称作{\small\bfnew{终结符}}\index{终结符}(Terminal)\index{Terminal},把词性称为{\small\bfnew{预终结符}}\index{预终结符}(Pre-terminal)\index{Pre-terminal},而把其他句法标记称为{\small\bfnew{非终结符}}\index{非终结符}(Non-terminal)\index{Non-terminal}。依存句法树没有预终结符和非终结符,所有的节点都是句子里的单词,通过不同节点间的连线表示句子中各个单词之间的依存关系。每个依存关系实际上都是有方向的,头和尾分别指向“接受”和“发出”依存关系的词。依存关系也可以进行分类,例如,图\ref{fig:3.4-1}中的对每个依存关系的类型都有一个标记,这也被称作是有标记的依存分析。如果不生成这些标记,这样的句法分析被称作无标记的依存分析。
\parinterval 短语结构树和依存句法树的结构和功能有很大不同。短语结构树的叶子节点是单词,中间节点是词性或者短语句法标记。在短语结构分析中,通常把单词称作{\small\sffamily\bfseries{终结符}}\index{终结符}(Terminal)\index{Terminal},把词性称为{\small\sffamily\bfseries{预终结符}}\index{预终结符}(Pre-terminal)\index{Pre-terminal},而把其他句法标记称为{\small\sffamily\bfseries{非终结符}}\index{非终结符}(Non-terminal)\index{Non-terminal}。依存句法树没有预终结符和非终结符,所有的节点都是句子里的单词,通过不同节点间的连线表示句子中各个单词之间的依存关系。每个依存关系实际上都是有方向的,头和尾分别指向“接受”和“发出”依存关系的词。依存关系也可以进行分类,例如,图\ref{fig:3.4-1}中的对每个依存关系的类型都有一个标记,这也被称作是有标记的依存分析。如果不生成这些标记,这样的句法分析被称作无标记的依存分析。
\parinterval 虽然短语结构树和依存树的句法表现形式有很大不同,但是它们在某些条件下能相互转化。比如,可以使用启发性规则将短语结构树自动转化为依存树。从应用的角度,依存分析由于形式更加简单,而且直接建模词语之间的依赖,因此在自然语言处理领域中受到很多关注。在机器翻译中,无论是哪种句法树结构,都已经被证明会对机器翻译系统产生帮助。特别是短语结构树,在机器翻译中的应用历史更长,研究更为深入,因此本节将会以短语结构分析为例介绍句法分析的相关概念。
......@@ -595,11 +595,11 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
%-------------------------------------------
\begin{definition} 句法分析
句法分析(Parsing)就是指对句子中的词语语法功能进行分析。
\begin{flushright}——《百度百科》\end{flushright}
句法分析就是指对句子中的词语语法功能进行分析。
\begin{flushright}——百度百科\end{flushright}
在自然语言或者计算机语言中,句法分析是利用形式化的文法规则对一个符号串进行分析的过程。
\begin{flushright}——《维基百科(译文)》\end{flushright}
\begin{flushright}——维基百科(译文)\end{flushright}
\end{definition}
%-------------------------------------------
......@@ -625,21 +625,21 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\parinterval 句法树是对句子的一种抽象,这种树形结构表达了一种对句子结构的归纳过程,比如,从树的叶子开始,把每一个树节点看作一次抽象,最终形成一个根节点。那这个过程如何用计算机来实现呢?这就需要使用到形式文法。
\parinterval 形式文法是分析自然语言的一种重要工具。根据乔姆斯基的定义\upcite{chomsky1957syntactic},形式文法分为四种类型:无限制文法(0型文法)、上下文有关文法(1型文法)、上下文无关文法(2型文法)和正规文法(3型文法)。不同类型的文法有不同的应用,比如,正规文法可以用来描述有限状态自动机,因此也会被使用在语言模型等系统中。对于短语结构分析问题,常用的是{\small\bfnew{上下文无关文法}}\index{上下文无关文法}(Context-Free Grammar)\index{Context-Free Grammar}。上下文无关文法的具体形式如下:
\parinterval 形式文法是分析自然语言的一种重要工具。根据乔姆斯基的定义\upcite{chomsky1957syntactic},形式文法分为四种类型:无限制文法(0型文法)、上下文有关文法(1型文法)、上下文无关文法(2型文法)和正规文法(3型文法)。不同类型的文法有不同的应用,比如,正规文法可以用来描述有限状态自动机,因此也会被使用在语言模型等系统中。对于短语结构分析问题,常用的是{\small\sffamily\bfseries{上下文无关文法}}\index{上下文无关文法}(Context-Free Grammar)\index{Context-Free Grammar}。上下文无关文法的具体形式如下:
%-------------------------------------------
\vspace{0.5em}
\begin{definition} 上下文无关文法
一个上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
一个上下文无关文法可以被视为一个系统$G=<N,\varSigma,R,S>$,其中
\begin{itemize}
\vspace{0.5em}
\item $N$为一个非终结符集合;
\vspace{0.5em}
\item $\Sigma$为一个终结符集合;
\item $\varSigma$ 为一个终结符集合;
\vspace{0.5em}
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \Sigma$
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \varSigma$
\vspace{0.5em}
\item $S$为一个起始符号集合且$S \subseteq N$
\vspace{0.5em}
......@@ -647,7 +647,7 @@ Z(\seq{x})=\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1},y
\end{definition}
%-------------------------------------------
\parinterval 举例说明,假设有上下文无关文法$G=<N,\Sigma,R,S>$,可以用它描述一个简单汉语句法结构。其中非终结符集合为不同的汉语句法标记
\parinterval 举例说明,假设有上下文无关文法$G=<N,\varSigma,R,S>$,可以用它描述一个简单汉语句法结构。其中非终结符集合为不同的汉语句法标记
\begin{eqnarray}
N=\{\textrm{NN},\textrm{VV},\textrm{NP},\textrm{VP},\textrm{IP}\} \nonumber
\label{eq:3.4-1}
......@@ -655,7 +655,7 @@ N=\{\textrm{NN},\textrm{VV},\textrm{NP},\textrm{VP},\textrm{IP}\} \nonumber
\noindent 这里,\textrm{NN}代表名词,\textrm{VV}代表动词,\textrm{NP}代表名词短语,\textrm{VP}代表动词短语,\textrm{IP}代表单句。进一步,把终结符集合定义为
\begin{eqnarray}
\Sigma = \{\text{猫,喜欢,吃,鱼}\} \nonumber
\varSigma = \{\text{猫,喜欢,吃,鱼}\} \nonumber
\label{eq:3.4-2}
\end{eqnarray}
......@@ -676,7 +676,7 @@ S=\{\textrm{IP}\} \nonumber
\end{figure}
%---------------------------
\parinterval 上下文无关文法的规则是一种{\small\bfnew{产生式规则}}\index{产生式规则}(Production Rule)\index{Production Rule},形如$\alpha \to \beta $,它表示把规则左端的非终结符$\alpha$替换为规则右端的符号序列$\beta$。 通常,$\alpha$被称作规则的{\small\bfnew{左部}}\index{左部}(Left-hand Side)\index{Left-hand Side}$\beta$被称作规则的{\small\bfnew{右部}}\index{右部}(Right-hand Side)\index{Right-hand Side}。使用右部$\beta$ 替换左部$\alpha$ 的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
\parinterval 上下文无关文法的规则是一种{\small\sffamily\bfseries{产生式规则}}\index{产生式规则}(Production Rule)\index{Production Rule},形如$\alpha \to \beta $,它表示把规则左端的非终结符$\alpha$替换为规则右端的符号序列$\beta$。 通常,$\alpha$被称作规则的{\small\sffamily\bfseries{左部}}\index{左部}(Left-hand Side)\index{Left-hand Side}$\beta$被称作规则的{\small\sffamily\bfseries{右部}}\index{右部}(Right-hand Side)\index{Right-hand Side}。使用右部$\beta$ 替换左部$\alpha$ 的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
%-------------------------------------------
\vspace{0.5em}
......@@ -689,14 +689,13 @@ S=\{\textrm{IP}\} \nonumber
\end{definition}
%-------------------------------------------
\parinterval 给定起始非终结符,可以不断地使用规则,最终生成一个终结符串,这个过程也被称为{\small\bfnew{推导}}\index{推导}(Derivation)\index{Derivation}。形式化的定义为:
\parinterval 给定起始非终结符,可以不断地使用规则,最终生成一个终结符串,这个过程也被称为{\small\sffamily\bfseries{推导}}\index{推导}(Derivation)\index{Derivation}。形式化的定义为:
%-------------------------------------------
\vspace{0.5em}
\begin{definition} 推导
给定一个文法$G=<N,\Sigma,R,S>$,对于一个字符串序 \\
$s_0,s_1,...,s_n$和规则序列$r_1,r_2,...,r_n$,满足
给定一个文法$G=<N,\varSigma,R,S>$,对于一个字符串序列$s_0,s_1,...,s_n$和规则序列$r_1,r_2,...,r_n$,满足
\vspace{-0.5em}
\begin{displaymath}
......@@ -706,13 +705,13 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\begin{itemize}
\vspace{0.5em}
\item $\forall i \in [0,n], s_i \in (N\cup\Sigma)^*$ \hspace{3.5em} $\lhd$ $s_i$为合法的字符串
\item $\forall i \in [0,n], s_i \in (N\cup\varSigma)^*$ \hspace{3.5em} $\lhd$ $s_i$为合法的字符串
\vspace{0.5em}
\item $\forall j \in [1,n], r_j \in R$ \hspace{6.3em} $\lhd$ $r_j$$G$的规则
\vspace{0.5em}
\item $s_0 \in S$ \hspace{10.9em} $\lhd$ $s_0$为起始非终结符
\vspace{0.5em}
\item $s_n \in \Sigma^{*}$ \hspace{10.4em} $\lhd$ $s_n$为终结符序列
\item $s_n \in \varSigma^{*}$ \hspace{10.4em} $\lhd$ $s_n$为终结符序列
\vspace{0.5em}
\end{itemize}
......@@ -732,9 +731,9 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\parinterval 通常,可以把推导简记为$d=r_1 \circ r_2 \circ ... \circ r_n$,其中$ \circ $表示规则的组合。显然,$d$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用过程与生成的字符串对应起来。一个推导所生成的字符串,也被称作文法所产生的一个{\small\bfnew{句子}}\index{句子}(Sentence)\index{Sentence}。而一个文法所能生成的所有句子的集合是这个文法所对应的{\small\bfnew{语言}}\index{语言}(Language)\index{Language}
\parinterval 通常,可以把推导简记为$d=r_1 \circ r_2 \circ ... \circ r_n$,其中$ \circ $表示规则的组合。显然,$d$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用过程与生成的字符串对应起来。一个推导所生成的字符串,也被称作文法所产生的一个{\small\sffamily\bfseries{句子}}\index{句子}(Sentence)\index{Sentence}。而一个文法所能生成的所有句子的集合是这个文法所对应的{\small\sffamily\bfseries{语言}}\index{语言}(Language)\index{Language}
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导的方式,这种现象被称为{\small\bfnew{歧义}}\index{歧义}(Ambiguity)\index{Ambiguity}。甚至同一棵句法树,也可以对应不同的推导,图\ref{fig:3.4-4} 给出同一棵句法树所对应的两种不同的规则推导。
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导的方式,这种现象被称为{\small\sffamily\bfseries{歧义}}\index{歧义}(Ambiguity)\index{Ambiguity}。甚至同一棵句法树,也可以对应不同的推导,图\ref{fig:3.4-4} 给出同一棵句法树所对应的两种不同的规则推导。
%-------------------------------------------
\begin{figure}[htp]
......@@ -746,7 +745,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\parinterval 显然,规则顺序的不同会导致句法树的推导这一确定的过程变得不确定,因此,需要进行{\small\bfnew{消歧}}\index{消歧}(Disambiguation)\index{Disambiguation}。这里,可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为{\small\bfnew{最左优先推导}}\index{最左优先推导}(Left-most Derivation)\index{Left-most Derivation}。图\ref{fig:3.4-4}中的推导1 就是符合最左优先原则的推导。
\parinterval 显然,规则顺序的不同会导致句法树的推导这一确定的过程变得不确定,因此,需要进行{\small\sffamily\bfseries{消歧}}\index{消歧}(Disambiguation)\index{Disambiguation}。这里,可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为{\small\sffamily\bfseries{最左优先推导}}\index{最左优先推导}(Left-most Derivation)\index{Left-most Derivation}。图\ref{fig:3.4-4}中的推导1 就是符合最左优先原则的推导。
%-------------------------------------------
\begin{figure}[htp]
......@@ -778,20 +777,20 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\subsection{规则和推导的概率}
\parinterval 对句法树进行概率化,首先要对使用的规则进行概率化。为了达到这个目的,可以使用{\small\bfnew{概率上下文无关文法}}\index{概率上下文无关文法}(Probabilistic Context-Free Grammar)\index{Probabilistic Context-Free Grammar},它是上下文无关文法的一种扩展。
\parinterval 对句法树进行概率化,首先要对使用的规则进行概率化。为了达到这个目的,可以使用{\small\sffamily\bfseries{概率上下文无关文法}}\index{概率上下文无关文法}(Probabilistic Context-Free Grammar)\index{Probabilistic Context-Free Grammar},它是上下文无关文法的一种扩展。
%-------------------------------------------
\vspace{0.5em}
\begin{definition} 概率上下文无关文法
一个概率上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
一个概率上下文无关文法可以被视为一个系统$G=<N,\varSigma,R,S>$,其中
\begin{itemize}
\vspace{0.5em}
\item $N$为一个非终结符集合;
\vspace{0.5em}
\item $\Sigma$为一个终结符集合;
\item $\varSigma$为一个终结符集合;
\vspace{0.5em}
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$p:X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \Sigma$,每个$r$都对应一个概率$p$,表示其生成的可能性;
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$p:X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \varSigma$,每个$r$都对应一个概率$p$,表示其生成的可能性;
\vspace{0.5em}
\item $S$为一个起始符号集合且$S \subseteq N$
\vspace{0.5em}
......@@ -829,7 +828,7 @@ r_6: & & \textrm{VP} \to \textrm{VV}\ \textrm{NN} \nonumber
\parinterval 这也对应了词串“吃/鱼”的生成过程。首先,从起始非终结符VP开始,使用规则$r_6$生成两个非终结符VV和NN;进一步,分别使用规则$r_3$$r_4$从VV和NN进一步生成单词“吃”和“鱼”。整个过程的概率等于三条规则概率的乘积。
\parinterval 新的问题又来了,如何得到规则的概率呢?这里仍然可以从数据中学习文法规则的概率。假设有人工标注的数据,它包括很多人工标注句法树的句法,称之为{\small\bfnew{树库}}\index{树库}(Treebank)\index{Treebank}。然后,对于规则$\textrm{r}:\alpha \to \beta$可以使用基于频次的方法:
\parinterval 新的问题又来了,如何得到规则的概率呢?这里仍然可以从数据中学习文法规则的概率。假设有人工标注的数据,它包括很多人工标注句法树的句法,称之为{\small\sffamily\bfseries{树库}}\index{树库}(Treebank)\index{Treebank}。然后,对于规则$\textrm{r}:\alpha \to \beta$可以使用基于频次的方法:
\begin{eqnarray}
\funp{P}(r) = \frac{\text{规则$r$在树库中出现的次数}}{\alpha \text{在树库中出现的次数}}
......
......@@ -33,7 +33,7 @@
% auto evaluation
\node [anchor=north west,minimum width=10em,minimum height=10em,draw=black!60,very thick,fill=red!20,drop shadow] (aebox) at ([xshift=8em]base.90) {};
\node [draw,anchor=south,minimum width=10em,align=center,draw=black!60,very thick,fill=red!20,drop shadow] (aelabel) at ([yshift=0.5em]aebox.north) {\small\footnotesize{基于指标性公式}\\\small\footnotesize{简单的建模}};
\node [draw,anchor=south,minimum width=10em,align=center,draw=black!60,very thick,fill=red!20,drop shadow] (aelabel) at ([yshift=0.5em]aebox.north) {\small\footnotesize{基于指标性公式}\\\small\footnotesize{简单的建模}};
\node [anchor=north,minimum width=10em] (aetitle) at ([yshift=-0.2em]aebox.north) {{\small\bfnew\large{有参考答案的评价}}};
\draw [-] ([yshift=-2em]aebox.north west) -- ([yshift=-2em]aebox.north east);
\node [anchor=north] (aemethod1) at ([yshift=-0.5em]aetitle.south) {BLEU、NIST、};
......@@ -53,14 +53,14 @@
\node [anchor=north,single arrow,minimum height=4.0em,fill=blue!30,rotate=-90] (arrow1) at ([yshift=-2.4em]qebox.south) {};
% comparing different systems
\node [anchor=west,align=left] (com) at ([xshift=8em,yshift=0.6em]hebox.east) {\small\bfnew{用于对比}\\\small\bfnew{不同系统}\\\small\bfnew{的好坏}};
\node [anchor=west,align=left] (com) at ([xshift=8em,yshift=0.6em]hebox.east) {\small\bfnew{用于对比}\\\small\bfnew{不同系统}\\\small\bfnew{性能差异}};
\node [anchor=west,single arrow,minimum height=7.5em,fill=blue!30] (arrow2) at ([yshift=-1.4em,xshift=0.5em]hebox.north east) {};
\node [anchor=north,fill=white] (arrow2label) at ([xshift=-0.5em]arrow2.south) {\footnotesize{{\color{blue} 成本高但精度高}}};
\node [anchor=north,single arrow,minimum height=4.0em,fill=blue!30,rotate=-90] (arrow3) at ([yshift=-2.4em,xshift=2.2em]aebox.south) {};
\node [anchor=west,fill=white,font=\footnotesize,align=left,text=blue,inner sep=0pt] (arrow3label) at ([yshift=2.6em,xshift=0.6em]arrow3.east) {成本低\\无人工\\有偏差};
% system optimization
\node [anchor=west,align=left] (optimization) at ([xshift=2em]aebox.east) {\small\bfnew{用于}\\\small\bfnew{机器}\\\small\bfnew{翻译}\\\small\bfnew{系统}\\\small\bfnew{的调}\\\small\bfnew{}};
\node [anchor=west,align=left] (optimization) at ([xshift=2em]aebox.east) {\small\bfnew{用于机器}\\\small\bfnew{翻译系统}\\\small\bfnew{}};
\node [anchor=west,single arrow,minimum height=1.8em,fill=blue!30] (arrow4) at ([xshift=0.4em]aebox.east) {};
\begin{pgfonlayer}{background}
......
......@@ -2,106 +2,85 @@
%\usetikzlibrary{fit}
\begin{tikzpicture}[scale=0.5]
\tikzstyle{unit} = [draw,inner sep=1.2pt,font=\tiny,minimum height=1em]
\tikzstyle{box} = [draw=blue!40,rectangle,inner xsep=1.4pt,inner ysep=3pt,line width=1.2pt]
\tikzstyle{bad_tag} = [fill=red!15,inner sep=1pt,align=center,font=\tiny,text=red,minimum height=0.8em]
\tikzstyle{ok_tag} = [fill=ugreen!15,inner sep=1pt,align=center,font=\tiny,text=ugreen,minimum height=0.8em]
\tikzstyle{box} = [draw,rectangle,inner xsep=1.4pt,inner ysep=3pt]
\tikzstyle{bad_tag} = [inner sep=1pt,align=center,font=\tiny,text=red,minimum height=0.8em]
\tikzstyle{ok_tag} = [inner sep=1pt,align=center,font=\tiny,text=ugreen,minimum height=0.8em]
\coordinate (o) at (0, 0);
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] (n1_1) at ([yshift=8em]o.east){\textbf{Source}};
\node[unit,anchor=west,fill=green!20](n1_2) at ([xshift=1.2em]n1_1.east){Bei};
\node[unit,anchor=west,fill=green!20](n1_3) at ([xshift=0.4em]n1_2.east){Patienten};
\node[unit,anchor=west,fill=green!20](n1_4) at ([xshift=0.4em]n1_3.east){mit};
\node[unit,anchor=west,fill=green!20](n1_5) at ([xshift=1em]n1_4.east){eingeschränkter};
\node[unit,anchor=west,fill=green!20](n1_6) at ([xshift=0.4em]n1_5.east){Nierenfunktion};
\node[unit,anchor=west,fill=green!20](n1_7) at ([xshift=0.4em]n1_6.east){kann};
\node[unit,anchor=west,fill=green!20](n1_8) at ([xshift=1em]n1_7.east){der};
\node[unit,anchor=west,fill=green!20](n1_9) at ([xshift=0.4em]n1_8.east){Insulinbedarf};
\node[unit,anchor=west,fill=green!20](n1_10) at ([xshift=1em]n1_9.east){infolge};
\node[unit,anchor=west,fill=green!20](n1_11) at ([xshift=0.4em]n1_10.east){des};
\node[unit,anchor=west,fill=green!20](n1_12) at ([xshift=1em]n1_11.east){verminderten};
\node[unit,anchor=west,fill=green!20](n1_13) at ([xshift=1em]n1_12.east){Insulinabbaus};
\node[unit,anchor=west,fill=green!20](n1_14) at ([xshift=1em]n1_13.east){verringert};
\node[unit,anchor=west,fill=green!20](n1_15) at ([xshift=0.4em]n1_14.east){sein};
\node[unit,anchor=west,fill=green!20](n1_2) at ([xshift=2.2em]n1_1.east){Nach};
\node[unit,anchor=west,fill=green!20](n1_3) at ([xshift=0.6em]n1_2.east){Zubereitung};
\node[unit,anchor=west,fill=green!20](n1_4) at ([xshift=1.2em]n1_3.east){im};
\node[unit,anchor=west,fill=green!20](n1_5) at ([xshift=0.6em]n1_4.east){Kühlschrank};
\node[unit,anchor=west,fill=green!20](n1_6) at ([xshift=0.6em]n1_5.east){aufbewahren};
\node[unit,anchor=west,fill=green!20](n1_7) at ([xshift=1.2em]n1_6.east){und};
\node[unit,anchor=west,fill=green!20](n1_8) at ([xshift=0.6em]n1_7.east){innerhalb};
\node[unit,anchor=west,fill=green!20](n1_9) at ([xshift=0.6em]n1_8.east){vonf};
\node[unit,anchor=west,fill=green!20](n1_10) at ([xshift=0.6em]n1_9.east){24};
\node[unit,anchor=west,fill=green!20](n1_11) at ([xshift=1.2em]n1_10.east){Stunden};
\node[unit,anchor=west,fill=green!20](n1_12) at ([xshift=0.6em]n1_11.east){aufbrauchen};
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] (n2_1) at ([yshift=-2em]o.east){\textbf{MT}};
\node[unit,anchor=west,fill=red!20](n2_2) at ([xshift=3.4em]n2_1.east){In};
\node[unit,anchor=west,fill=red!20](n2_3) at ([xshift=0.4em]n2_2.east){patients};
\node[unit,anchor=west,fill=red!20](n2_4) at ([xshift=0.4em]n2_3.east){with};
\node[unit,anchor=west,fill=red!20](n2_5) at ([xshift=1.6em]n2_4.east){renal};
\node[unit,anchor=west,fill=red!20](n2_6) at ([xshift=0.4em]n2_5.east){impairment};
\node[unit,anchor=west,fill=red!20](n2_7) at ([xshift=1em]n2_6.east){,};
\node[unit,anchor=west,fill=red!20](n2_8) at ([xshift=1em]n2_7.east){insulin};
\node[unit,anchor=west,fill=red!20](n2_9) at ([xshift=0.4em]n2_8.east){requirements};
\node[unit,anchor=west,fill=red!20](n2_10) at ([xshift=0.4em]n2_9.east){may};
\node[unit,anchor=west,fill=red!20](n2_11) at ([xshift=2.2em]n2_10.east){be};
\node[unit,anchor=west,fill=red!20](n2_12) at ([xshift=2.2em]n2_11.east){diminished};
\node[unit,anchor=west,fill=red!20](n2_13) at ([xshift=1.6em]n2_12.east){due};
\node[unit,anchor=west,fill=red!20](n2_14) at ([xshift=0.4em]n2_13.east){to};
\node[unit,anchor=west,fill=red!20](n2_15) at ([xshift=1.6em]n2_14.east){reduced};
\node[unit,anchor=west,fill=red!20](n2_2) at ([xshift=5em]n2_1.east){After};
\node[unit,anchor=west,fill=red!20](n2_3) at ([xshift=0.6em]n2_2.east){reconstitution};
\node[unit,anchor=west,fill=red!20](n2_4) at ([xshift=1.2em]n2_3.east){in};
\node[unit,anchor=west,fill=red!20](n2_5) at ([xshift=0.6em]n2_4.east){the};
\node[unit,anchor=west,fill=red!20](n2_6) at ([xshift=0.6em]n2_5.east){refrigerator};
\node[unit,anchor=west,fill=red!20](n2_7) at ([xshift=1.2em]n2_6.east){and};
\node[unit,anchor=west,fill=red!20](n2_8) at ([xshift=0.6em]n2_7.east){used};
\node[unit,anchor=west,fill=red!20](n2_9) at ([xshift=0.6em]n2_8.east){within};
\node[unit,anchor=west,fill=red!20](n2_10) at ([xshift=0.6em]n2_9.east){24};
\node[unit,anchor=west,fill=red!20](n2_11) at ([xshift=1.2em]n2_10.east){hours};
\begin{pgfonlayer}{background}
\node [box] [fit = (n1_2) (n1_3) (n1_4)] (box1_1) {};
\node [box] [fit = (n1_5) (n1_6) (n1_7)] (box1_2) {};
\node [box] [fit = (n1_8) (n1_9)] (box1_3) {};
\node [box] [fit = (n1_10) (n1_11) ] (box1_4) {};
\node [box] [fit = (n1_12)] (box1_5) {};
\node [box] [fit = (n1_13)] (box1_6) {};
\node [box] [fit = (n1_14) (n1_15)] (box1_7) {};
\node [box,fill=green!5] [fit = (n1_2) (n1_3)] (box1_1) {};
\node [box,fill=green!5] [fit = (n1_4) (n1_5) (n1_6)] (box1_2) {};
\node [box,fill=green!5] [fit = (n1_7) (n1_8) (n1_9) (n1_10)] (box1_3) {};
\node [box,fill=green!5] [fit = (n1_11) (n1_12) ] (box1_4) {};
\node [box] [fit = (n2_2) (n2_3) (n2_4)] (box2_1) {};
\node [box] [fit = (n2_5) (n2_6)] (box2_2) {};
\node [box] [fit = (n2_8) (n2_9) (n2_10)] (box2_3) {};
\node [box] [fit = (n2_11)] (box2_4) {};
\node [box] [fit = (n2_12)] (box2_5) {};
\node [box] [fit = (n2_13) (n2_14) ] (box2_6) {};
\node [box] [fit = (n2_15)] (box2_7) {};
\node [box,fill=red!5] [fit = (n2_2) (n2_3)] (box2_1) {};
\node [box,fill=red!5] [fit = (n2_4) (n2_5) (n2_6)] (box2_2) {};
\node [box,fill=red!5] [fit = (n2_7) (n2_8) (n2_9) (n2_10)] (box2_3) {};
\node [box,fill=red!5] [fit = (n2_11)] (box2_4) {};
\end{pgfonlayer}
\node[bad_tag,anchor=north] at ([yshift=-2pt]box2_1.south){BAD\_word\_order};
\node[bad_tag,anchor=north] at ([yshift=-2pt]box2_2.south){BAD};
\node[ok_tag,anchor=north] at ([yshift=-2pt]box2_3.south){OK};
\node[ok_tag,anchor=north] at ([yshift=-2pt]box2_4.south){OK};
\node[ok_tag,anchor=north] at ([yshift=-2pt]box2_5.south){OK};
\node[ok_tag,anchor=north] at ([yshift=-2pt]box2_6.south){OK};
\node[ok_tag,anchor=north] (tag_1) at ([yshift=-2pt]box2_7.south){OK};
\node[ok_tag,anchor=north] at ([yshift=-2pt]box2_2.south){OK};
\node[bad_tag,anchor=north] at ([yshift=-2pt]box2_3.south){BAD};
\node[ok_tag,anchor=north] (tag_1) at ([yshift=-2pt]box2_4.south){OK};
\node[ok_tag,anchor=north] (gap_1) at ([xshift=-5.6em,yshift=-3em]box2_1.south){OK};
\node[ok_tag,anchor=north] (gap_2) at ([xshift=5.1em,yshift=-3em]box2_1.south){OK};
\node[ok_tag,anchor=north] (gap_3) at ([xshift=5.7em,yshift=-3em]box2_2.south){OK};
\node[ok_tag,anchor=north] (gap_4) at ([xshift=7.5em,yshift=-3em]box2_3.south){OK};
\node[bad_tag,anchor=north] (gap_5) at ([xshift=2.8em,yshift=-3em]box2_4.south){BAD\_omission};
\node[ok_tag,anchor=north] (gap_6) at ([xshift=3.5em,yshift=-3em]box2_5.south){OK};
\node[ok_tag,anchor=north] (gap_7) at ([xshift=2.7em,yshift=-3em]box2_6.south){OK};
\node[ok_tag,anchor=north] (tag_2) at ([xshift=3.1em,yshift=-3em]box2_7.south){OK};
\node[ok_tag,anchor=north] (gap_1) at ([xshift=-5.8em,yshift=-3em]box2_1.south){OK};
\node[bad_tag,anchor=north] (gap_2) at ([xshift=5.6em,yshift=-3em]box2_1.south){BAD\_omission};
\node[ok_tag,anchor=north] (gap_3) at ([xshift=5.6em,yshift=-3em]box2_2.south){OK};
\node[ok_tag,anchor=north] (gap_4) at ([xshift=6.4em,yshift=-3em]box2_3.south){OK};
\node[ok_tag,anchor=north] (tag_2) at ([xshift=2.5em,yshift=-3em]box2_4.south){OK};
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] at ([xshift=3.6em]tag_1.east){\textbf{Phrase-target tags}};
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] at ([xshift=3.2em]tag_1.east){\textbf{Phrase-target tags}};
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] at ([xshift=4.8em]tag_2.east){\textbf{Gap tags}};
\node[anchor=west,inner sep=0pt,align=center,font=\tiny] at ([xshift=5.0em]tag_2.east){\textbf{Gap tags}};
\draw[magenta!50,line width=1pt] (n1_2.south) -- (n2_2.north);
\draw[magenta!50,line width=1pt] (n1_3.south) -- (n2_3.north);
\draw[magenta!50,line width=1pt] (n1_3.south) -- (n2_4.north);
\draw[magenta!50,line width=1pt] (n1_4.south) -- (n2_4.north);
\draw[magenta!50,line width=1pt] (n1_5.south) -- (n2_5.north);
\draw[magenta!50,line width=1pt] (n1_6.south) -- (n2_5.north);
\draw[magenta!50,line width=1pt] (n1_6.south) -- (n2_6.north);
\draw[magenta!50,line width=1pt] (n1_7.south) -- (n2_10.north);
\draw[magenta!50,line width=1pt] (n1_8.south) -- (n2_12.north);
\draw[magenta!50,line width=1pt] (n1_9.south) -- (n2_12.north);
\draw[magenta!50,line width=1pt] (n1_10.south) -- (n2_13.north);
\draw[magenta!50,line width=1pt] (n1_10.south) -- (n2_14.north);
\draw[magenta!50,line width=1pt] (n1_12.south) -- (n2_15.north);
\draw[magenta!50,line width=1pt] (n1_13.south) -- (n2_11.north);
\draw[blue!30,line width=1pt] (n1_2.south) -- (n2_2.north);
\draw[blue!30,line width=1pt] (n1_2.south) -- (n2_3.north);
\draw[blue!30,line width=1pt] (n1_3.south) -- (n2_3.north);
\draw[blue!30,line width=1pt] (n1_4.south) -- (n2_4.north);
\draw[blue!30,line width=1pt] (n1_4.south) -- (n2_5.north);
\draw[blue!30,line width=1pt] (n1_4.south) -- (n2_6.north);
\draw[blue!30,line width=1pt] (n1_5.south) -- (n2_6.north);
\draw[blue!30,line width=1pt] (n1_6.south) -- (n2_6.north);
\draw[blue!30,line width=1pt] (n1_7.south) -- (n2_7.north);
\draw[blue!30,line width=1pt] (n1_8.south) -- (n2_9.north);
\draw[blue!30,line width=1pt] (n1_9.south) -- (n2_9.north);
\draw[blue!30,line width=1pt] (n1_10.south) -- (n2_10.north);
\draw[blue!30,line width=1pt] (n1_11.south) -- (n2_11.north);
\draw[blue!30,line width=1pt] (n1_12.south) -- (n2_11.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_1.north) -- ([yshift=3em]gap_1.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_2.north) -- ([yshift=3em]gap_2.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_3.north) -- ([yshift=3em]gap_3.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_4.north) -- ([yshift=3em]gap_4.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt]([xshift=-0.8em]gap_5.north) -- ([xshift=-0.8em,yshift=3em]gap_5.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_6.north) -- ([yshift=3em]gap_6.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](gap_7.north) -- ([yshift=3em]gap_7.north);
\draw[dash pattern=on 2pt off 1pt,gray,line width=1pt](tag_2.north) -- ([yshift=3em]tag_2.north);
\draw[dotted,thick](gap_1.north) -- ([yshift=3em]gap_1.north);
\draw[dotted,thick](gap_2.north) -- ([yshift=3em]gap_2.north);
\draw[dotted,thick](gap_3.north) -- ([yshift=3em]gap_3.north);
\draw[dotted,thick](gap_4.north) -- ([yshift=3em]gap_4.north);
\draw[dotted,thick](tag_2.north) -- ([yshift=3em]tag_2.north);
\end{tikzpicture}
......@@ -139,28 +139,28 @@
\parinterval (1)在每次评价过程中,若干个等待评价的机器翻译系统被分为5个一组,评价者被提供3个连续的源文片段和1组机器翻译系统的相应译文;
\parinterval (2)评价者需要对本组的机器译文根据其质量进行排序,不过评价者并不需要一次性将5个译文排序,而是将其两两进行比较,判出胜负或是平局。在评价过程中,由于排序是两两一组进行的,为了评价的公平性,将采用排列组合的方式进行分组和比较,若共有$n$个机器翻译系统,则会为被分为 $\mathrm{C}_n^5$组,组内每个系统都将与其他4个系统进行比较,由于需要针对3个源文片段进行评价对比,则意味着每个系统都需要被比较$\mathrm{C}_n^5 \times 4 \times 3$次;
\parinterval (2)评价者需要对本组的机器译文根据其质量进行排序,不过评价者并不需要一次性将5个译文排序,而是将其两两进行比较,判出胜负或是平局。在评价过程中,由于排序是两两一组进行的,为了评价的公平性,将采用排列组合的方式进行分组和比较,若共有$n$个机器翻译系统,则会为被分为 $\textrm{C}_n^5$组,组内每个系统都将与其他4个系统进行比较,由于需要针对3个源文片段进行评价对比,则意味着每个系统都需要被比较$\textrm{C}_n^5 \times 4 \times 3$次;
\parinterval (3)最终根据多次比较的结果,对所有参与评价的系统进行总体排名。对于如何获取合理的总体排序,有三种常见的策略:
\begin{itemize}
\vspace{0.5em}
\item {\small\sffamily\bfseries{根据系统胜出的次数进行排序}}\upcite{DBLP:conf/wmt/Callison-BurchK12}。以系统${S}_j$和系统${S}_k$为例,两个系统都被比较了$\mathrm{C}_n^5 \times 4 \times 3$ 次,其中系统${S}_j$获胜20次,系统${S}_k$获胜30次,总体排名中系统${S}_k$优于系统${S}_j$
\item {\small\sffamily\bfseries{根据系统胜出的次数进行排序}}\upcite{DBLP:conf/wmt/Callison-BurchK12}。以系统${S}_j$和系统${S}_k$为例,两个系统都被比较了$\textrm{C}_n^5 \times 4 \times 3$ 次,其中系统${S}_j$获胜20次,系统${S}_k$获胜30次,总体排名中系统${S}_k$优于系统${S}_j$
\vspace{0.5em}
\item {\small\sffamily\bfseries{根据冲突次数进行排序}}\upcite{DBLP:conf/wmt/Lopez12}。第一种排序策略中存在冲突现象:例如在每次两两比较中,系统${S}_j$胜过系统${S}_k$ 的次数比系统${S}_j$不敌系统${S}_k$的次数多,若待评价系统仅有系统${S}_j$${S}_k$,显然系统${S}_j$的排名高于系统${S}_k$。但当待评价系统很多时,可能系统${S}_j$在所有比较中获胜的次数低于系统${S}_k$,此时就出现了总体排序与局部排序不一致的冲突。因此,有研究者提出,能够与局部排序冲突最少的总体排序才是最合理的。令$O$表示一个对若干个系统的排序,该排序所对应的冲突定义为:
\begin{eqnarray}
\mathrm{conflict}(O) = \sum\limits_{{{S}_j} \in O,{{S}_k} \in O,j \ne k} {{\rm{max}}(0,\mathrm{count}_{\rm{win}}({{S}_j},{{S}_k}) - \mathrm{count}_{\rm{loss}}({{S}_j},{{S}_k}))}
\textrm{conflict}(O) = \sum\limits_{{{S}_j} \in O,{{S}_k} \in O,j \ne k} {{\textrm{max}}(0,\textrm{count}_{\textrm{win}}({{S}_j},{{S}_k}) - \textrm{count}_{\textrm{loss}}({{S}_j},{{S}_k}))}
\label{eq:4-1}
\end{eqnarray}
其中,${S}_j$${S}_k$是成对比较的两个系统,$\mathrm{count}_{\rm{win}}({S}_j,{S}_k)$$\mathrm{count}_{\rm{loss}}({S}_j,{S}_k)$分别是${S}_j$${S}_k$进行成对比较时系统${S}_j$ 胜利和失败的次数。而使得$\textrm{conflict}(O)$最低的$O$就是最终的系统排序结果。
其中,${S}_j$${S}_k$是成对比较的两个系统,$\textrm{count}_{\textrm{win}}({S}_j,{S}_k)$$\textrm{count}_{\textrm{loss}}({S}_j,{S}_k)$分别是${S}_j$${S}_k$进行成对比较时系统${S}_j$ 胜利和失败的次数。而使得$\textrm{conflict}(O)$最低的$O$就是最终的系统排序结果。
\vspace{0.5em}
\item {\small\sffamily\bfseries{根据某系统最终获胜的期望进行排序}}\upcite{DBLP:conf/iwslt/Koehn12}。以系统$\mathrm{S}_j$为例,若共有$n$个待评价的系统,则进行总体排序时系统 $\mathrm{S}_j$ 的得分为其最终获胜的期望,即:
\item {\small\sffamily\bfseries{根据某系统最终获胜的期望进行排序}}\upcite{DBLP:conf/iwslt/Koehn12}。以系统${S}_j$为例,若共有$n$个待评价的系统,则进行总体排序时系统 ${S}_j$ 的得分为其最终获胜的期望,即:
\begin{eqnarray}
\mathrm{score}({{S}_j}) = \frac{1}{n}\sum\limits_{k,k \ne j} {\frac{\mathrm{count}_{\rm{win}}({{S}_j},{{S}_k})}{{\mathrm{count}_{\rm{win}}({{S}_j},{{S}_k}) + \mathrm{count}_{\rm{loss}}({{S}_j},{{S}_k})}}}
\textrm{score}({{S}_j}) = \frac{1}{n}\sum\limits_{k,k \ne j} {\frac{\textrm{count}_{\textrm{win}}({{S}_j},{{S}_k})}{{\textrm{count}_{\textrm{win}}({{S}_j},{{S}_k}) + \textrm{count}_{\textrm{loss}}({{S}_j},{{S}_k})}}}
\label{eq:4-2}
\end{eqnarray}
......@@ -201,11 +201,11 @@
\parinterval TER是一种典型的基于距离的评价方法,通过评定机器译文的译后编辑工作量来衡量机器译文质量。在这里“距离”被定义为将一个序列转换成另一个序列所需要的最少编辑操作次数,操作次数越多,距离越大,序列之间的相似性越低;相反距离越小,表示一个句子越容易改写成另一个句子,序列之间的相似性越高。TER 使用的编辑操作包括:增加、删除、替换和移位。其中增加、删除、替换操作计算得到的距离被称为编辑距离。TER根据错误率的形式给出评分:
\begin{eqnarray}
\mathrm{score}= \frac{\mathrm{edit}(o,g)}{l}
\textrm{score}= \frac{\textrm{edit}(o,g)}{l}
\label{eq:4-3}
\end{eqnarray}
\noindent 其中,$\mathrm{edit}(o,g)$表示系统生成的译文$o$和参考答案$g$之间的距离,$l$是归一化因子,通常为参考答案的长度。在距离计算中所有的操作的代价都为1。在计算距离时,优先考虑移位操作,再计算编辑距离(即增加、删除和替换操作的次数)。直到增加、移位操作无法减少编辑距离时,将编辑距离和移位操作的次数累加得到TER计算的距离。
\noindent 其中,$\textrm{edit}(o,g)$表示系统生成的译文$o$和参考答案$g$之间的距离,$l$是归一化因子,通常为参考答案的长度。在距离计算中所有的操作的代价都为1。在计算距离时,优先考虑移位操作,再计算编辑距离(即增加、删除和替换操作的次数)。直到增加、移位操作无法减少编辑距离时,将编辑距离和移位操作的次数累加得到TER计算的距离。
\begin{example}
机器译文:A cat is standing in the ground.
......@@ -214,7 +214,7 @@
\label{eg:4-1}
\end{example}
\parinterval 在这个实例中,将机器译文序列转换为参考答案序列,需要进行两次替换操作,将“A” 替换为“The”,将“in” 替换为“on”。所以$\mathrm{edit}(c,r)$ = 2,归一化因子$l$为参考答案的长度8(包括标点符号),所以该机器译文的TER 结果为2/8。
\parinterval 在这个实例中,将机器译文序列转换为参考答案序列,需要进行两次替换操作,将“A” 替换为“The”,将“in” 替换为“on”。所以$\textrm{edit}(c,r)$ = 2,归一化因子$l$为参考答案的长度8(包括标点符号),所以该机器译文的TER 结果为2/8。
\parinterval PER与TER的基本思想与WER相同,这三种方法的主要区别在于对“错误” 的定义和考虑的操作类型略有不同。WER使用的编辑操作包括:增加、删除、替换,由于没有移位操作,当机器译文出现词序问题时,会发生多次替代,因而一般会低估译文质量;而PER只考虑增加和删除两个动作,在不考虑词序的情况下,PER计算两个句子中出现相同单词的次数,根据翻译句子比参考答案长或短,其余操作无非是插入词或删除词,这样往往会高估译文质量。
......@@ -228,11 +228,11 @@
\parinterval BLEU 的计算首先考虑待评价机器译文中$n$-gram在参考答案中的匹配率,称为{\small\sffamily\bfseries{$\bm{n}$-gram准确率}}\index{$\bm{n}$-gram准确率}$n$-gram Precision)\index{$n$-gram Precision}。其计算方法如下:
\begin{eqnarray}
\funp{P}_{n} = \frac{{{\rm{coun}}{{\rm{t}}_{{\rm{hit}}}}}}{{{\rm{coun}}{{\rm{t}}_{{\rm{output}}}}}}
\funp{P}_{n} = \frac{{{\textrm{coun}}{{\textrm{t}}_{{\textrm{hit}}}}}}{{{\textrm{coun}}{{\textrm{t}}_{{\textrm{output}}}}}}
\label{eq:4-4}
\end{eqnarray}
\noindent 其中,$\mathrm{count_{hit}}$表示机器译文中$n$-gram在参考答案中命中的次数,$\mathrm{count_{output}}$表示机器译文中总共有多少$n$-gram。为了避免同一个词被重复计算,BLEU的定义中使用了截断的方式定义$\mathrm{count_{hit}}$$\mathrm{count_{output}}$
\noindent 其中,$\textrm{count}_{\textrm{hit}}$表示机器译文中$n$-gram在参考答案中命中的次数,$\textrm{count}_{\textrm{output}}$表示机器译文中总共有多少$n$-gram。为了避免同一个词被重复计算,BLEU的定义中使用了截断的方式定义$\textrm{count}_{\textrm{hit}}$$\textrm{count}_{\text{output}}$
\begin{example}
机器译文:the the the the
......@@ -241,30 +241,30 @@
\label{eg:4-bleu-example}
\end{example}
\parinterval 在引入截断方式之前,该机器译文的1-gram准确率为4/4 = 1,这显然是不合理的。在引入截断的方式之后,“the” 在译文中出现4 次,在参考答案中出现2 次,截断操作则是取二者的最小值,即$\mathrm{count_{hit}}$= 2,$\mathrm{count_{output}}$= 4,该译文的1-gram准确率为2/4。
\parinterval 在引入截断方式之前,该机器译文的1-gram准确率为4/4 = 1,这显然是不合理的。在引入截断的方式之后,“the” 在译文中出现4 次,在参考答案中出现2 次,截断操作则是取二者的最小值,即$\textrm{count}_{\textrm{hit}}$= 2,$\textrm{count}_{\textrm{output}}$= 4,该译文的1-gram准确率为2/4。
\parinterval$N$表示考虑的最大$n$-gram的大小,则译文整体的准确率等于各$n$-gram的加权平均:
\begin{eqnarray}
{\funp{P}_{{\rm{avg}}}} = \exp (\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\log\funp{P}}\nolimits} }_n}} )
{\funp{P}_{{\textrm{avg}}}} = \exp (\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\log\funp{P}}\nolimits} }_n}} )
\label{eq:4-5}
\end{eqnarray}
\parinterval 但是,该方法更倾向于对短句子打出更高的分数。一个极端的例子是译文只有很少的几个词,但是都命中答案,准确率很高可显然不是好的译文。因此,BLEU 引入{\small\sffamily\bfseries{短句惩罚因子}}\index{短句惩罚因子}(Brevity Penalty, BP)\index{Brevity Penalty}的概念,对短句进行惩罚:
\parinterval 但是,该方法更倾向于对短句子打出更高的分数。一个极端的例子是译文只有很少的几个词,但是都命中答案,准确率很高可显然不是好的译文。因此,BLEU 引入{\small\sffamily\bfseries{短句惩罚因子}}\index{短句惩罚因子}(Brevity PenaltyBP)\index{Brevity Penalty}的概念,对短句进行惩罚:
\begin{eqnarray}
\rm BP = \left\{ \begin{array}{l}
\textrm {BP} = \left\{ \begin{array}{l}
1\quad \quad \;\;c > r\\
{\rm{exp}}(1 - \frac{r}{c})\quad c \le r
{\textrm{exp}}(1 - \frac{r}{c})\quad c \le r
\end{array} \right.
\label{eq:4-6}
\end{eqnarray}
\noindent 其中,$c$表示机器译文的句子长度,$r$表示参考答案的句子长度。最终BLEU的计算公式为:
\begin{eqnarray}
\mathrm {BLEU} = \mathrm {BP} \cdot \exp(\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\mathrm {log}}\nolimits} }\funp{P}_n}} )
\textrm {BLEU} = \textrm {BP} \cdot \exp(\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\textrm {log}}\nolimits} }\funp{P}_n}} )
\label{eq:4-7}
\end{eqnarray}
\parinterval 实际上,BLEU的计算也是一种综合考虑{\small\sffamily\bfseries{准确率}}\index{准确率}(Precision)\index{Precision}{\small\sffamily\bfseries{召回率}}\index{召回率}(Recall)\index{Recall}的方法。公式中,$\exp(\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\mathrm {log}}\nolimits} }\funp{P}_n}} )$是一种准确率的表示。BP本是一种召回率的度量,它会惩罚过短的结果。这种设计同分类系统中评价指标F1值是有相通之处的\upcite{DBLP:conf/muc/Chinchor92}
\parinterval 实际上,BLEU的计算也是一种综合考虑{\small\sffamily\bfseries{准确率}}\index{准确率}(Precision)\index{Precision}{\small\sffamily\bfseries{召回率}}\index{召回率}(Recall)\index{Recall}的方法。公式中,$\exp(\sum\limits_{n = 1}^N {{w_n} \cdot {{{\mathop{\textrm {log}}\nolimits} }\funp{P}_n}} )$是一种准确率的表示。BP本是一种召回率的度量,它会惩罚过短的结果。这种设计同分类系统中评价指标F1值是有相通之处的\upcite{DBLP:conf/muc/Chinchor92}
\parinterval 从机器翻译的发展来看,BLEU 的意义在于它给系统研发人员提供了一种简单、高效、可重复的自动评价手段,在研发机器翻译系统时可以不需要依赖人工评价。同时,BLEU 也有很多创新之处,包括引入$n$-gram的匹配,截断计数和短句惩罚等等,NIST 等很多评价指标都是受到BLEU 的启发。此外,BLEU本身也有很多不同的实现方式,包括IBM-BLEU\upcite{DBLP:conf/acl/PapineniRWZ02}、NIST-BLEU\footnote{NIST-BLEU是指美国国家标准与技术研究院(NIST)开发的机器翻译评价工具mteval中实现的一种BLEU计算的方法。}、BLEU-SBP\upcite{DBLP:conf/emnlp/ChiangDCN08}、ScareBLEU\upcite{DBLP:conf/wmt/Post18}等,使用不同实现方式得到评价结果会有差异。因此在实际使用BLEU进行评价时需要确认其实现细节,以保证结果与相关工作评价要求相符。
......@@ -349,31 +349,31 @@
\parinterval 准确率:机器译文中命中单词数与机器译文单词总数的比值。即:
\begin{eqnarray}
\funp{P} = \frac {\rm{count}_{hit}}{\rm{count}_{candidate}}
\funp{P} = \frac {\textrm{count}_{\textrm{hit}}}{\textrm{count}_{\textrm{candidate}}}
\label{eq:4-8}
\end{eqnarray}
\parinterval 召回率:机器译文中命中单词数与参考答案单词总数的比值。即:
\begin{eqnarray}
\funp{R} = \frac {\rm{count}_{hit}}{\rm{count}_{reference}}
\funp{R} = \frac {\textrm{count}_{\textrm{hit}}}{\textrm{count}_{\textrm{reference}}}
\label{eq:4-9}
\end{eqnarray}
\parinterval 接下来,计算机器译文的得分。利用{\small\sffamily\bfseries{调和均值}}\index{调和均值}(Harmonic-mean)\index{Harmonic-mean}将准确率和召回率结合起来,并加大召回率的重要性将其权重调大,例如将召回率的权重设置为9:
\begin{eqnarray}
{F_{\rm mean}} = \frac {10\funp{PR}}{\funp{R+9P}}
{F_{\textrm mean}} = \frac {10\funp{PR}}{\funp{R+9P}}
\label{eq:4-10}
\end{eqnarray}
\parinterval 在上文提到的评价指标中,无论是准确率、召回率还是$\rm F_{mean}$,都是基于单个词汇信息衡量译文质量,而忽略了语序问题。为了将语序问题考虑进来,Meteor会考虑更长的匹配:将机器译文按照最长匹配长度分块,并对“块数”较多的机器译文给予惩罚。例如上例中,机器译文被分为了三个“块”——“Can I have it”、“like he”、“?”在这种情况下,看起来上例中的准确率、召回率都还不错,但最终会受到很严重的惩罚。这种罚分机制能够识别出机器译文中的词序问题,因为当待测译文词序与参考答案相差较大时,机器译文将会被分割得比较零散,这种惩罚机制的计算公式如式\eqref{eq:4-11},其中$\rm count_{chunks}$表示匹配的块数。
\parinterval 在上文提到的评价指标中,无论是准确率、召回率还是$\textrm F_{mean}$,都是基于单个词汇信息衡量译文质量,而忽略了语序问题。为了将语序问题考虑进来,Meteor会考虑更长的匹配:将机器译文按照最长匹配长度分块,并对“块数”较多的机器译文给予惩罚。例如上例中,机器译文被分为了三个“块”——“Can I have it”、“like he”、“?”在这种情况下,看起来上例中的准确率、召回率都还不错,但最终会受到很严重的惩罚。这种罚分机制能够识别出机器译文中的词序问题,因为当待测译文词序与参考答案相差较大时,机器译文将会被分割得比较零散,这种惩罚机制的计算公式如式\eqref{eq:4-11},其中$\textrm {count}_{\textrm{chunks}}$表示匹配的块数。
\begin{eqnarray}
{\rm Penalty} = 0.5 \cdot {\left({\frac{\rm count_{chunks}}{\rm count_{hit}}} \right)^3}
\textrm {Penalty} = 0.5 \cdot {\left({\frac{{\textrm {count}}_{\textrm {chunks}}}{\textrm {count}_{\textrm{hit}}}} \right)^3}
\label{eq:4-11}
\end{eqnarray}
\parinterval Meteor评价方法的最终评分为:
\begin{eqnarray}
{\rm score} = { F_{\rm mean}} \cdot {(1 - {\rm Penalty})}
\textrm {score} = { F_{\textrm mean}} \cdot {(1 - \textrm {Penalty})}
\label{eq:4-12}
\end{eqnarray}
......@@ -490,7 +490,7 @@ His house is on the south bank of the river.
\parinterval 从上面的例子中可以看出,HyTER方法通过构造同义单元的方式,可以列举出译文中每个片段的所有可能的表达方式,从而增大参考答案的数量,上例中的每一条路径都代表一个参考答案。但是这种对参考答案集的编码方式存在问题,同义单元之间的组合往往存在一定的限制关系\upcite{DBLP:conf/tsd/BojarMTZ13},使用HyTER方法会导致参考答案集中包含有错误的参考答案。
\begin{example}
将中文“市政府批准了一项新规定”分别翻译为英语和捷克语,使用HyTER构造的参考答案集如下图所示\upcite{DBLP:conf/tsd/BojarMTZ13}
将中文“市政府批准了一项新规定”分别翻译为英语和捷克语,使用HyTER构造的参考答案集分别如图\ref{fig:4-8}(a)和(b)所示\upcite{DBLP:conf/tsd/BojarMTZ13}
\label{eg:4-6}
\end{example}
......@@ -508,13 +508,13 @@ His house is on the south bank of the river.
\parinterval 将参考答案集扩大后,可以继续沿用BLEU或NIST等基于$n$元语法的方法进行自动评价,但是传统方法往往会忽略多重参考答案中的重复信息,于是对每个$n$元语法进行加权的自动评价方法被提出\upcite{DBLP:conf/eamt/QinS15}。该方法根据每个$n$元语法单元的长度、在参考答案集中出现的次数、被虚词(如“the”,“by”,“a”等)分开后的分散度等方面,确定其在计算最终分数时所占的权重。以BLEU方法为例(\ref{sec:ngram-eval}节),可以将式\eqref{eq:4-7}改写为:
\begin{eqnarray}
\mathrm{BLEU} &=& \mathrm {BP} \cdot {\rm{exp}}(\sum\limits_{n = 1}^N {{w_n} \cdot \log ({I}_n \cdot \funp{P}_n} ))
\textrm{BLEU} &=& \textrm {BP} \cdot {\textrm{exp}}(\sum\limits_{n = 1}^N {{w_n} \cdot \log ({I}_n \cdot \funp{P}_n} ))
\label{eq:4-14}\\
{I}_n &=& n\mathrm{-gram_{diver}} \cdot \log (n + \frac{M}{\rm{count_{ref}}})
{I}_n &=& n\textrm{-gram}_{\textrm {diver}} \cdot \log (n + \frac{M}{\textrm{count}_{\textrm{ref}}})
\label{eq:4-15}
\end{eqnarray}
\noindent 其中,${I}_n$即为为某个$n$元语法单元分配的权重,$M$为参考答案集中出现该$n$-gram中的参考答案数量,$\rm{count_{ref}}$ 为参考答案集大小。$n\mathrm{-gram_{diver}}$为该$n$-gram的分散度,用$n$-gram种类数量与语法单元总数的比值计算。
\noindent 其中,${I}_n$即为为某个$n$元语法单元分配的权重,$M$为参考答案集中出现该$n$-gram中的参考答案数量,$\textrm{count}_{\textrm{ref}}$ 为参考答案集大小。$n\textrm{-gram}_{\textrm{diver}}$为该$n$-gram的分散度,用$n$-gram种类数量与语法单元总数的比值计算。
\parinterval 需要注意的是,HyTER方法对参考译文的标注有特殊要求,因此需要单独培训译员并开发相应的标注系统。这在一定程度上也增加了该方法被使用的难度。
......@@ -526,7 +526,7 @@ His house is on the south bank of the river.
\parinterval {\small\bfnew{词嵌入}}\index{词嵌入}(Word Embedding\index{Word Embedding})技术是近些年自然语言处理中的重要成果,其思想是把每个单词映射为多维实数空间中的一个点(具体表现为一个实数向量),这种技术也被称作单词的{\small\bfnew{分布式表示}}\index{分布式表示}(Distributed Representation\index{Distributed Representation})。在这项技术中,单词之间的关系可以通过空间的几何性质进行刻画,意义相近的单词之间的欧式距离也十分相近(单词分布式表示的具体内容,将在书的{\chapternine} 详细介绍,在此不再赘述)。
\parinterval 受词嵌入技术的启发,研究人员尝试借助参考答案和机器译文的分布式表示来进行译文质量评价,为译文质量评价提供了新思路。在自然语言的上下文中,表示是与每个单词、句子或文档相关联的数学对象。这个对象通常是一个向量,其中每个元素的值在某种程度上描述了相关单词、句子或文档的语义或句法属性。基于这个想法,研究人员提出了{\small\sffamily\bfseries{分布式表示评价度量}}\index{分布式表示评价度量}(Distributed Representations Evaluation Metrics,DREEM)\index{Distributed Representations Evaluation Metrics}\upcite{DBLP:conf/acl/ChenG15}。这种方法将单词或句子的分布式表示映射到连续的低维空间,发现在该空间中,具有相似句法和语义属性的单词彼此接近,类似的结论也出现在相关工作中,如\cite{bengio2003a,DBLP:conf/emnlp/SocherPHNM11,DBLP:conf/emnlp/SocherPWCMNP13}。而这个特点可以被应用到译文质量评估中。
\parinterval 受词嵌入技术的启发,研究人员尝试借助参考答案和机器译文的分布式表示来进行译文质量评价,为译文质量评价提供了新思路。在自然语言的上下文中,表示是与每个单词、句子或文档相关联的数学对象。这个对象通常是一个向量,其中每个元素的值在某种程度上描述了相关单词、句子或文档的语义或句法属性。基于这个想法,研究人员提出了{\small\sffamily\bfseries{分布式表示评价度量}}\index{分布式表示评价度量}(Distributed Representations Evaluation Metrics,DREEM)\index{Distributed Representations Evaluation Metrics}\upcite{DBLP:conf/acl/ChenG15}。这种方法将单词或句子的分布式表示映射到连续的低维空间,发现在该空间中,具有相似句法和语义属性的单词彼此接近,类似的结论也出现在相关工作中,如参考文献\cite{bengio2003a,DBLP:conf/emnlp/SocherPHNM11,DBLP:conf/emnlp/SocherPWCMNP13}所示。而这个特点可以被应用到译文质量评估中。
\parinterval 在DREEM中,分布式表示的选取是一个十分关键的问题,理想的情况下,分布式表示应该涵盖句子在词汇、句法、语法、语义、依存关系等各个方面的信息。目前常见的分布式表示方式如表\ref{tab:4-2}所示。除此之外,还可以通过词袋模型、循环神经网络等将词向量表示转换为句子向量表示。
......@@ -541,7 +541,7 @@ His house is on the south bank of the river.
\rule{0pt}{10pt} Word2Vec词向量\upcite{DBLP:journals/corr/abs-1301-3781} & Doc2Vec向量\upcite{DBLP:conf/icml/LeM14} \\
\rule{0pt}{10pt} Prob-fasttext词向量\upcite{DBLP:conf/acl/AthiwaratkunW17} & ELMO预训练句子表示\upcite{DBLP:conf/naacl/PetersNIGCLZ18} \\
\rule{0pt}{10pt} GloVe词向量\upcite{DBLP:conf/emnlp/PenningtonSM14} & GPT句子表示\upcite{radford2018improving} \\
\rule{0pt}{10pt} ELMO预训练词向量\upcite{DBLP:conf/naacl/PetersNIGCLZ18} & BERT预训练句子表示\upcite{devlin2018bert} \\
\rule{0pt}{10pt} ELMO预训练词向量\upcite{DBLP:conf/naacl/PetersNIGCLZ18} & BERT预训练句子表示\upcite{DBLP:conf/wmt/KimLKN19} \\
\rule{0pt}{10pt} BERT预训练词向量\upcite{devlin2018bert} & Skip-thought向量\upcite{DBLP:conf/nips/KirosZSZUTF15} \\
\end{tabular}
\label{tab:4-2}
......@@ -549,15 +549,15 @@ His house is on the south bank of the river.
\end{center}
}\end{table}
\parinterval DREEM方法中选取了能够反映句子中使用的特定词汇的One-hot向量、能够反映词汇信息的词嵌入向量\upcite{bengio2003a}、能够反映句子的合成语义信息的{\small\sffamily\bfseries{递归自动编码}}\index{递归自动编码}(Recursive Autoencoder Embedding, RAE)\index{Recursive Autoencoder Embedding},这三种表示级联在一起,最终形成句子的向量表示。在得到机器译文和参考答案的上述分布式表示后,利用余弦相似度和长度惩罚对机器译文质量进行评价。机器译文$o$和参考答案$g$之间的相似度如公式\eqref{eq:4-16}所示,其中${v_i}(o)$${v_i}(g)$分别是机器译文和参考答案的向量表示中的第$i$个元素,$N$是向量表示的维度大小。
\parinterval DREEM方法中选取了能够反映句子中使用的特定词汇的One-hot向量、能够反映词汇信息的词嵌入向量\upcite{bengio2003a}、能够反映句子的合成语义信息的{\small\sffamily\bfseries{递归自动编码}}\index{递归自动编码}(Recursive Autoencoder EmbeddingRAE)\index{Recursive Autoencoder Embedding},这三种表示级联在一起,最终形成句子的向量表示。在得到机器译文和参考答案的上述分布式表示后,利用余弦相似度和长度惩罚对机器译文质量进行评价。机器译文$o$和参考答案$g$之间的相似度如公式\eqref{eq:4-16}所示,其中${v_i}(o)$${v_i}(g)$分别是机器译文和参考答案的向量表示中的第$i$个元素,$N$是向量表示的维度大小。
\begin{eqnarray}
\mathrm {cos}(t,r) = \frac{{\sum\limits_{i = 1}^N {{v_i}(o) \cdot {v_i}(g)} }}{{\sqrt {\sum\limits_{i = 1}^N {v_i^2(o)} } \sqrt {\sum\limits_{i = 1}^N {v_i^2(g)} } }}
\textrm {cos}(t,r) = \frac{{\sum\limits_{i = 1}^N {{v_i}(o) \cdot {v_i}(g)} }}{{\sqrt {\sum\limits_{i = 1}^N {v_i^2(o)} } \sqrt {\sum\limits_{i = 1}^N {v_i^2(g)} } }}
\label{eq:4-16}
\end{eqnarray}
\parinterval 在此基础上,DREEM方法还引入了长度惩罚项,对与参考答案长度相差太多的机器译文进行惩罚,长度惩罚项如公式\eqref{eq:4-17}所示,其中${l_o}$${l_g}$分别是机器译文和参考答案长度:
\begin{eqnarray}
\mathrm{BP} = \left\{ \begin{array}{l}
\textrm{BP} = \left\{ \begin{array}{l}
\exp (1 - {{{l_g}} \mathord{\left/
{\vphantom {{{l_g}} {{l_o}}}} \right.
\kern-\nulldelimiterspace} {{l_o}}})\quad {l_o} < {l_g}\\
......@@ -570,7 +570,7 @@ His house is on the south bank of the river.
\parinterval 机器译文的最终得分如下,其中$\alpha$是一个需要手动设置的参数:
\begin{eqnarray}
\mathrm{score}(o,g) = \mathrm{cos}{^\alpha }(o,g) \times \mathrm{BP}
\textrm{score}(o,g) = \textrm{cos}{^\alpha }(o,g) \times \textrm{BP}
\label{eq:4-18}
\end{eqnarray}
......@@ -579,7 +579,7 @@ His house is on the south bank of the river.
\parinterval 在DREEM方法取得成功后,基于词嵌入的词对齐自动评价方法被提出\upcite{DBLP:journals/corr/MatsuoKS17},该方法中先得到机器译文与参考答案的词对齐关系后,通过对齐关系中两者的词嵌入相似度来计算机器译文与参考答案的相似度,公式如下:
\begin{eqnarray}
\mathrm{ASS}(o,g) = \frac{1}{{m \cdot l}}\sum\limits_{i = 1}^{m} {\sum\limits_{j = 1}^{l} {\varphi (o,g,i,j)} }
\textrm{ASS}(o,g) = \frac{1}{{m \cdot l}}\sum\limits_{i = 1}^{m} {\sum\limits_{j = 1}^{l} {\varphi (o,g,i,j)} }
\label{eq:4-19}
\end{eqnarray}
......@@ -756,15 +756,13 @@ d=t \frac{s}{\sqrt{n}}
\begin{example}
短语级质量评估任务(短语间用 || 分隔)
源句(Source):Bei Patienten mit || eingeschränkter Nierenfunktion kann || Insuli-
源句(Source):Nach Zubereitung || im Kühlschrank aufbewahren || und innerha-
\hspace{7.3em}nabbaus || der Insulinbedarf || infolge des || verminderten || verrin-
\hspace{7.3em}lb von 24 || Stunden aufbrauchen.(德语)
\hspace{7.3em}gert sein . (德语)
机器译文(MT):After reconstitution || in the refrigerator || and used within 24 ||
机器译文(MT):In patients with || renal impairment , insulin requirements may ||
\hspace{8em}be || diminished || due to || reduced || . (英语)
\hspace{8em}hours.(英语)
\label{eg:4-8}
\end{example}
......@@ -803,11 +801,11 @@ d=t \frac{s}{\sqrt{n}}
\item 预测译文句子的后编辑工作量。在最近的研究中,句子级的质量评估一直在探索各种类型的离散或连续的后编辑标签。例如,通过测量以秒为单位的后编辑时间对译文句子进行评分;通过测量预测后编辑过程所需的击键数对译文句子进行评分;通过计算{\small\sffamily\bfseries{人工译后编辑距离}}\index{人工译后编辑距离}(Human Translation Error Rate,HTER)\index{Human Translation Error Rate,HTER},即在后编辑过程中编辑(插入/删除/替换)数量与参考翻译长度的占比率对译文句子进行评分。HTER的计算公式为:
\vspace{0.5em}
\begin{eqnarray}
\rm{HTER}= \frac{\mbox{编辑操作数目}}{\mbox{翻译后编辑结果长度}}
\textrm{HTER}= \frac{\mbox{编辑操作数目}}{\mbox{翻译后编辑结果长度}}
\label{eq:4-20}
\end{eqnarray}
\parinterval 这种质量评估方式往往以单词级质量评估为基础,在其结果的基础上进行计算。以实例\ref{eg:4-7}中词级质量评估结果为例,与编辑后结果相比较,机器翻译译文中有四处漏译(“Mit”、“können”、“Sie”、“einzelne”)、三处误译(“dem”、\\“Scharfzeichner”、“scharfzeichnen”分别被误译为“Der”、“Schärfen-Werkezug”、“Schärfer”)、一处多译(“erscheint”),因而需要进行4次插入操作、3次替换操作和1次删除操作,而最终译文长度为12,则有$\rm HTER=(4+3+1)/12=0.667$。需要注意的是,即便这种评估方式以单词级质量评估为基础,也不意味这句子级质量评估只是在单词级质量评估的结果上通过简单的计算来获得其得分,在实际研究中,常将其视为一个回归问题,利用大量数据学习其评分规则。
\parinterval 这种质量评估方式往往以单词级质量评估为基础,在其结果的基础上进行计算。以实例\ref{eg:4-7}中词级质量评估结果为例,与编辑后结果相比较,机器翻译译文中有四处漏译(“Mit”、“können”、“Sie”、“einzelne”)、三处误译(“dem”、\\“Scharfzeichner”、“scharfzeichnen”分别被误译为“Der”、“Schärfen-Werkezug”、“Schärfer”)、一处多译(“erscheint”),因而需要进行4次插入操作、3次替换操作和1次删除操作,而最终译文长度为12,则有$\textrm HTER=(4+3+1)/12=0.667$。需要注意的是,即便这种评估方式以单词级质量评估为基础,也不意味这句子级质量评估只是在单词级质量评估的结果上通过简单的计算来获得其得分,在实际研究中,常将其视为一个回归问题,利用大量数据学习其评分规则。
\vspace{0.5em}
\end{itemize}
......
......@@ -50,7 +50,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\upcite{DBLP:jo
\end{figure}
%----------------------------------------------
\parinterval 上面的例子反映了人在做翻译时所使用的一些知识:首先,两种语言单词的顺序可能不一致,而且译文需要符合目标语的习惯,这也就是常说的翻译的{\small\sffamily\bfseries{流畅度}}\index{流畅度}问题(Fluency)\index{Fluency};其次,源语言单词需要准确地被翻译出来,也就是常说的翻译的{\small\sffamily\bfseries{准确性}}\index{准确性}(Accuracy)\index{Accuracy}问题和{\small\sffamily\bfseries{充分性}}\index{充分性}(Adequacy)\index{Adequacy}问题。为了达到以上目的,传统观点认为翻译过程需要包含三个步骤\upcite{parsing2009speech}
\parinterval 上面的例子反映了人在做翻译时所使用的一些知识:首先,两种语言单词的顺序可能不一致,而且译文需要符合目标语的习惯,这也就是常说的翻译的流畅度;其次,源语言单词需要准确地被翻译出来,也就是常说的翻译的准确性问题和充分性问题。为了达到以上目的,传统观点认为翻译过程需要包含三个步骤\upcite{parsing2009speech}
\begin{itemize}
\vspace{0.5em}
......@@ -154,7 +154,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\upcite{DBLP:jo
%----------------------------------------------------------------------------------------
\subsubsection{3. 人工翻译 vs. 机器翻译}
\parinterval 人在翻译时的决策是非常确定并且快速的,但计算机处理这个问题时却充满了概率化的思想。当然它们也有类似的地方。首先,计算机使用统计模型的目的是把翻译知识变得可计算,并把这些“知识”储存在模型参数中,这个模型和人类大脑的作用是类似的\footnote{这里并不是要把统计模型等同于生物学或者认知科学上的人脑,这里是指它们处理翻译问题时发挥的作用类似。};其次,计算机对统计模型进行训练相当于人类对知识的学习,二者都可以被看作是理解、加工知识的过程;再有,计算机使用学习到的模型对新句子进行翻译的过程相当于人运用知识的过程。在统计机器翻译中,模型学习的过程被称为{\small\sffamily\bfseries{训练}}\index{训练}(Training)\index{Training},目的是从双语平行数据中自动学习翻译“知识”;而使用模型处理新句子的过程是一个典型的预测过程,也被称为{\small\sffamily\bfseries{解码}}\index{解码}(Decoding)\index{Decoding}{\small\sffamily\bfseries{推断}}\index{推断}(Inference)\index{Inference}。图\ref{fig:5-4}的右侧标注在翻译过程中训练和解码的作用。最终,统计机器翻译的核心由三部分构成\ \dash \ 建模、训练和解码。本章后续内容会围绕这三个问题展开讨论。
\parinterval 人在翻译时的决策是非常确定并且快速的,但计算机处理这个问题时却充满了概率化的思想。当然它们也有类似的地方。首先,计算机使用统计模型的目的是把翻译知识变得可计算,并把这些“知识”储存在模型参数中,这个模型和人类大脑的作用是类似的\footnote{这里并不是要把统计模型等同于生物学或者认知科学上的人脑,这里是指它们处理翻译问题时发挥的作用类似。};其次,计算机对统计模型进行训练相当于人类对知识的学习,二者都可以被看作是理解、加工知识的过程;再有,计算机使用学习到的模型对新句子进行翻译的过程相当于人运用知识的过程。在统计机器翻译中,模型学习的过程被称为训练,目的是从双语平行数据中自动学习翻译“知识”;而使用模型处理新句子的过程是一个典型的预测过程,也被称为解码或推断。图\ref{fig:5-4}的右侧标注在翻译过程中训练和解码的作用。最终,统计机器翻译的核心由三部分构成\ \dash \ 建模、训练和解码。本章后续内容会围绕这三个问题展开讨论。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -428,7 +428,7 @@ g(\seq{s},\seq{t}) \equiv \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \times
\subsection{解码}
\label{sec:simple-decoding}
\parinterval {\small\sffamily\bfseries{解码}}\index{解码}(Decoding)\index{Decoding}是指在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语言句子$\seq{s}$,解码系统要找到翻译概率最大的目标语译文$\hat{\seq{t}}$。这个过程可以被形式化描述为:
\parinterval 解码是指在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语言句子$\seq{s}$,解码系统要找到翻译概率最大的目标语译文$\hat{\seq{t}}$。这个过程可以被形式化描述为:
\begin{eqnarray}
\widehat{\seq{t}}=\argmax_{\seq{t}} \funp{P}(\seq{t}|\seq{s})
\label{eq:5-11}
......@@ -616,7 +616,7 @@ g(\seq{s},\seq{t}) \equiv \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \times
\subsection{词对齐}
\parinterval IBM模型的一个基本的假设是词对齐假设。{\small\sffamily\bfseries{词对齐}}\index{词对齐}(Word Alignment)\index{Word Alignment}描述了源语言句子和目标语句子之间单词级别的对应。具体来说,给定源语句子$\seq{s}=s_1...s_m$和目标语译文$\seq{t}=t_1...t_l$,IBM模型假设词对齐具有如下两个性质。
\parinterval IBM模型的一个基本的假设是词对齐假设。词对齐描述了源语言句子和目标语句子之间单词级别的对应。具体来说,给定源语句子$\seq{s}=s_1...s_m$和目标语译文$\seq{t}=t_1...t_l$,IBM模型假设词对齐具有如下两个性质。
\begin{itemize}
\vspace{0.5em}
......
......@@ -189,7 +189,7 @@ p_4 &=& \text{问题}\nonumber
&&... \nonumber
\end{eqnarray}
\parinterval 接下来的问题是,如何使用双语短语描述双语句子的生成,即句子翻译的建模问题。在基于词的翻译模型里,可以用词对齐来描述双语句子的对应关系。类似的,也可以使用双语短语描述句子的翻译。这里,借用形式文法中{\small\bfnew{推导}}\index{推导}(Derivation)\index{Derivation}的概念。把生成双语句对的过程定义为一个基于短语的翻译推导:
\parinterval 接下来的问题是,如何使用双语短语描述双语句子的生成,即句子翻译的建模问题。在基于词的翻译模型里,可以用词对齐来描述双语句子的对应关系。类似的,也可以使用双语短语描述句子的翻译。这里,借用形式文法中推导的概念。把生成双语句对的过程定义为一个基于短语的翻译推导:
%-------------------------------------------
\vspace{0.5em}
......@@ -312,7 +312,7 @@ d = {(\bar{s}_{\bar{a}_1},\bar{t}_1)} \circ {(\bar{s}_{\bar{a}_2},\bar{t}_2)} \c
\subsection{对数线性模型}
\parinterval 对于如何定义$\funp{P}(d,\seq{t}|\seq{s})$有很多种思路,比如,可以把$d$拆解为若干步骤,然后对这些步骤分别建模,最后形成描述$d${\small\bfnew{生成式模型}}\index{生成式模型}(Generative Model)\index{Generative Model}。这种方法在{\chapterfive}{\chaptersix}的IBM模型中也大量使用。但是,生成式模型的每一步推导需要有严格的概率解释,这也限制了研究人员从更多的角度对$d$进行描述。这里,可以使用另外一种方法\ \dash \ {\small\bfnew{判别式模型}}\index{判别式模型}(Discriminative Model)\index{Discriminative Model}来对$\funp{P}(d,\seq{t}|\seq{s})$进行描述\upcite{DBLP:conf/acl/OchN02}。其模型形式如下:
\parinterval 对于如何定义$\funp{P}(d,\seq{t}|\seq{s})$有很多种思路,比如,可以把$d$拆解为若干步骤,然后对这些步骤分别建模,最后形成描述$d$生成式模型。这种方法在{\chapterfive}{\chaptersix}的IBM模型中也大量使用。但是,生成式模型的每一步推导需要有严格的概率解释,这也限制了研究人员从更多的角度对$d$进行描述。这里,可以使用另外一种方法\ \dash \ 判别式模型来对$\funp{P}(d,\seq{t}|\seq{s})$进行描述\upcite{DBLP:conf/acl/OchN02}。其模型形式如下:
\begin{eqnarray}
\funp{P}(d,\seq{t}|\seq{s}) &=& \frac{\textrm{exp}(\textrm{score}(d,\seq{t},\seq{s}))}{\sum_{d',\seq{t}'} \textrm{exp}(\textrm{score}(d',\seq{t}',\seq{s}))} \label{eqa4.10}
......@@ -787,7 +787,7 @@ dr = {\rm{start}}_i-{\rm{end}}_{i-1}-1
\subsection{翻译候选匹配}
\parinterval 在解码时,首先要知道每个源语言短语可能的译文都是什么。对于一个源语言短语,每个可能的译文也被称作{\small\bfnew{翻译候选}}\index{翻译候选}(Translation Candidate)\index{Translation Candidate}。实现翻译候选的匹配很简单。只需要遍历输入的源语言句子中所有可能的短语,之后在短语表中找到相应的翻译即可。比如,图\ref{fig:7-27}展示了句子“桌子/上/有/一个/苹果”的翻译候选匹配结果。可以看到,不同的短语会对应若干翻译候选。这些翻译候选会保存在所对应的范围(被称为跨度)中。这里,跨度$[a,b]$表示从第$a+1$个词开始到第$b$个词为止所表示的词串。比如,“upon the table” 是短语“桌子/上/有”的翻译候选,即对应源语言跨度[0,3]。
\parinterval 在解码时,首先要知道每个源语言短语可能的译文都是什么。对于一个源语言短语,每个可能的译文也被称作翻译候选。实现翻译候选的匹配很简单。只需要遍历输入的源语言句子中所有可能的短语,之后在短语表中找到相应的翻译即可。比如,图\ref{fig:7-27}展示了句子“桌子/上/有/一个/苹果”的翻译候选匹配结果。可以看到,不同的短语会对应若干翻译候选。这些翻译候选会保存在所对应的范围(被称为跨度)中。这里,跨度$[a,b]$表示从第$a+1$个词开始到第$b$个词为止所表示的词串。比如,“upon the table” 是短语“桌子/上/有”的翻译候选,即对应源语言跨度[0,3]。
%----------------------------------------------
\begin{figure}[htp]
......@@ -823,7 +823,7 @@ dr = {\rm{start}}_i-{\rm{end}}_{i-1}-1
\subsection{剪枝}
\parinterval 假设扩展建立了解码算法的基本框架。但是,当句子变长时,这种方法还是面临着搜索空间爆炸的问题。对于这个问题,常用的解决办法是{\small\bfnew{剪枝}}\index{剪枝}(Pruning)\index{Pruning},也就是在搜索图中排除掉一些节点。比如,可以使用{\small\bfnew{束剪枝}}\index{束剪枝}(Beam Pruning)\index{Beam Pruning},确保每次翻译扩展时,最多生成$k$个新的翻译假设。这里$k$可以被看做是束的宽度。通过控制$k$的大小,可以在解码精度和速度之间进行平衡。这种基于束宽度进行剪枝的方法也被称作{\small\bfnew{直方图剪枝}}\index{直方图剪枝}(Histogram Pruning)\index{Histogram Pruning}。另一种思路是,每次扩展时只保留与最优翻译假设得分相差在$\delta$之内的翻译假设。$\delta$可以被看作是一种与最优翻译假设之间距离的阈值,超过这个阈值就被剪枝。这种方法也被称作{\small\bfnew{阈值剪枝}}\index{阈值剪枝}(Threshold Pruning)\index{Threshold Pruning}
\parinterval 假设扩展建立了解码算法的基本框架。但是,当句子变长时,这种方法还是面临着搜索空间爆炸的问题。对于这个问题,常用的解决办法是剪枝,也就是在搜索图中排除掉一些节点。比如,可以使用束剪枝,确保每次翻译扩展时,最多生成$k$个新的翻译假设。这里$k$可以被看做是束的宽度。通过控制$k$的大小,可以在解码精度和速度之间进行平衡。这种基于束宽度进行剪枝的方法也被称作直方图剪枝。另一种思路是,每次扩展时只保留与最优翻译假设得分相差在$\delta$之内的翻译假设。$\delta$可以被看作是一种与最优翻译假设之间距离的阈值,超过这个阈值就被剪枝。这种方法也被称作{\small\bfnew{阈值剪枝}}\index{阈值剪枝}(Threshold Pruning)\index{Threshold Pruning}
\parinterval 不过,即使引入束剪枝,解码过程中仍然会有很多冗余的翻译假设。有两种方法可以进一步加速解码:
......
......@@ -264,7 +264,7 @@ r_4:\quad \funp{X}\ &\to\ &\langle \ \text{了},\quad \textrm{have}\ \rangle \no
& & \ \textrm{The imports}\ {\red{\textrm{have}}}\ \textrm{drastically}\ \textrm{fallen}\ \rangle \nonumber
\end{eqnarray}
\noindent 其中,每使用一次规则就会同步替换源语言和目标语言符号串中的一个非终结符,替换结果用红色表示。通常,可以把上面这个过程称作翻译{\small\bfnew{推导}}\index{推导}(Derivation)\index{Derivation},记为:
\noindent 其中,每使用一次规则就会同步替换源语言和目标语言符号串中的一个非终结符,替换结果用红色表示。通常,可以把上面这个过程称作翻译推导,记为:
\begin{eqnarray}
d = {r_1} \circ {r_2} \circ {r_3} \circ {r_4}
\label{eq:8-1}
......@@ -532,7 +532,7 @@ span\textrm{[0,4]}&=&\textrm{“猫} \quad \textrm{喜欢} \quad \textrm{吃} \q
\begin{itemize}
\vspace{0.5em}
\item 剪枝:在CKY中,每个跨度都可以生成非常多的推导(局部翻译假设)。理论上,这些推导的数量会和跨度大小成指数关系。显然不可能保存如此大量的翻译推导。对于这个问题,常用的办法是只保留top-$k$个推导。也就是每个局部结果只保留最好的$k$个,即{\small\bfnew{束剪枝}}\index{束剪枝}(Beam Pruning)\index{Beam Pruning}。在极端情况下,当$k$=1时,这个方法就变成了贪婪的方法;
\item 剪枝:在CKY中,每个跨度都可以生成非常多的推导(局部翻译假设)。理论上,这些推导的数量会和跨度大小成指数关系。显然不可能保存如此大量的翻译推导。对于这个问题,常用的办法是只保留top-$k$个推导。也就是每个局部结果只保留最好的$k$个,即束剪枝。在极端情况下,当$k$=1时,这个方法就变成了贪婪的方法;
\vspace{0.5em}
\item $n$-best结果的生成:$n$-best推导(译文)的生成是统计机器翻译必要的功能。比如,最小错误率训练中就需要最好的$n$个结果用于特征权重调优。在基于CKY的方法中,整个句子的翻译结果会被保存在最大跨度所对应的结构中。因此一种简单的$n$-best生成方法是从这个结构中取出排名最靠前的$n$个结果。另外,也可以考虑自上而下遍历CKY生成的推导空间,得到更好的$n$-best结果\upcite{huang2005better}
\end{itemize}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论