Commit 5b14950c by 曹润柘

delete chapter2

parent 88774722
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}[sibling distance=0pt,level distance=17pt]
{\footnotesize
\Tree[.\node[inner sep=2pt](t1n1){IP};
[.\node[inner sep=2pt](t1n2){NP};
[.\node[inner sep=2pt](t1n3){NN}; 狗 ]
]
[.\node[inner sep=2pt](t1n4){VP};
[.\node[inner sep=2pt](t1n5){VV}; 喜欢 ]
[.\node[inner sep=2pt](t1n6){VP};
[.\node[inner sep=2pt](t1n7){VV}; 吃 ]
[.\node[inner sep=2pt](t1n8){NN}; 骨头 ]
]
]
]
}
\end{scope}
\begin{scope}[sibling distance=0pt,level distance=17pt,yshift=-7em]
{\footnotesize
\Tree[.\node[inner sep=2pt](t2n1){IP};
[.\node[inner sep=2pt](t2n2){VP};
[.\node[inner sep=2pt](t2n3){VV}; \node[](t2w1){}; ]
]
[.\node[inner sep=2pt](t2n4){IP};
[.\node[inner sep=2pt](t2n5){VP};
[.\node[inner sep=2pt](t2n6){VV}; 看 ]
]
[.\node[inner sep=2pt](t2n7){NP};
[.\node[inner sep=2pt](t2n8){QP};
[.\node[inner sep=2pt](t2n9){CD}; 一 ]
[.\node[inner sep=2pt](t2n10){M}; 个 ]
]
[.\node[inner sep=2pt](t2n11){ADJP};
[.\node[inner sep=2pt](t2n12){JJ}; 新 ]
]
[.\node[inner sep=2pt](t2n13){NP};
[.\node[inner sep=2pt](t2n14){NN}; \node[](t2wn){句子}; ]
]
]
]
]
}
\end{scope}
\node [anchor=south] (treebanklabel) at (t1n1.north) {{\color{ublue} 数据:树库}};
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue, inner sep=0.2em] [fit = (treebanklabel) (t1n1) (t2w1) (t2wn)] (treebank) {};
\end{pgfonlayer}
\node [anchor=north west] (math1) at ([xshift=2em]treebank.north east) {P('VP $\to$ VV NN')};
\node [anchor=north west] (math1part2) at ([xshift=-1em,yshift=0.2em]math1.south west) {$=\frac{\textrm{'VP'和'VV NN'同时出现的次数=1}}{\textrm{'VP'出现的次数}=4}$};
\node [anchor=north west] (math1part3) at ([yshift=0.2em]math1part2.south west){$=\frac{1}{4}$};
\node [anchor=north west] (math2) at ([yshift=-6em]math1.north west) {P('NP $\to$ NN')};
\node [anchor=north west] (math2part2) at ([xshift=-1em,yshift=0.2em]math2.south west) {$=\frac{\textrm{'NP'和'NN'同时出现的次数=2}}{\textrm{'NP'出现的次数}=3}$};
\node [anchor=north west] (math2part3) at ([yshift=0.2em]math2part2.south west){$=\frac{2}{3}$};
\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}$};
\begin{pgfonlayer}{background}
\path [] (t1n4.north east) -- (t1n4.north west) -- (t1n4.south west) -- (t1n4.south east);
\path [] (t1n6.north east) -- (t1n6.north west) -- (t1n6.south west) -- (t1n6.south east);
\path [] (t2n2.north east) -- (t2n2.north west) -- (t2n2.south west) -- (t2n2.south east);
\path [] (t2n5.north east) -- (t2n5.north west) -- (t2n5.south west) -- (t2n5.south east);
\path [] (t1n6.north west) -- (t1n7.north west) -- (t1n7.south west) -- (t1n8.south east) -- (t1n8.north east) -- (t1n6.north east);
\path [] (t1n2.north east) -- (t1n2.north west) -- (t1n2.south west) -- (t1n2.south east);
\path [] (t2n7.north east) -- (t2n7.north west) -- (t2n7.south west) -- (t2n7.south east);
\path [] (t2n13.north east) -- (t2n13.north west) -- (t2n13.south west) -- (t2n13.south east);
\path [] (t1n2.north west) -- (t1n3.south west) -- (t1n3.south east) -- (t1n2.north east) -- (t1n2.north west);
\path [] (t2n13.north west) -- (t2n14.south west) -- (t2n14.south east) -- (t2n13.north east) -- (t2n13.north west);
\path [] (t1n1.north east) -- (t1n1.north west) -- (t1n1.south west) -- (t1n1.south east);
\path [] (t2n4.north east) -- (t2n4.north west) -- (t2n4.south west) -- (t2n4.south east);
\path [] (t2n1.north east) -- (t2n1.north west) -- (t2n1.south west) -- (t2n1.south east);
\end{pgfonlayer}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{minipage}[t]{0.38\linewidth}
{\small
\begin{eqnarray}
& &\textrm{IP} \nonumber \\
& \overset{r_8}{\Rightarrow} & \textrm{NP VP} \nonumber \\
& \overset{r_5}{\Rightarrow} & \textrm{NN VP} \nonumber \\
& \overset{r_1}{\Rightarrow} & \textrm{猫 VP} \nonumber \\
& \overset{r_7}{\Rightarrow} & \textrm{猫 VV VP} \nonumber \\
& \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
\end{eqnarray}
}
\end{minipage}
\hfill
\begin{minipage}[t]{0.55\linewidth}
\vspace{1.0em}
\begin{center}
\begin{tikzpicture}
\begin{scope}
{\scriptsize
\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};
\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){}; ]
]
[.VP
[.VV \node(sw2){喜欢}; ]
[.VP
[.VV \node(sw1){}; ]
[.NN \node(sw1){}; ]
]
]
]
\end{scope}
\end{tikzpicture}
\end{center}
\end{minipage}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}[grow'=up,level distance=23pt]
\Tree[.\node(t1){IP};
[.\node(t2){NP}; \edge[roof]; \node(t3){$\textrm{中国}_{1}\textrm{明星}_{2}\textrm{艺术团}_{3}$}; ]
[.\node(t4){VP};
[.\node(t5){BA};\node(t9){$\textrm{}_{4}$};]
[.\node(t6){NP};\edge[roof]; \node(t10){$\textrm{}_{5}\textrm{}_{6}\textrm{精彩}_{7}\textrm{}_{8}\textrm{京剧}_{9}\textrm{歌舞}_{10}$};]
[.\node(t7){VP};
[.\node(t11){VV}; \node(t12){$\textrm{呈现}_{11}$};]
]
[.\node(t8){PP};
[.\node(t13){P}; \node(t15){$\textrm{}_{12}$};]
[.\node(t14){NP};\edge[roof]; \node(t16){$\textrm{香港}_{13}\textrm{观众}_{14}$};]
]
]
[..
]
]
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\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=south west] (dictionarylabel) at (entry1.north west) {{\color{ublue} 分词词典}};
}
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue, inner sep=0.2em] [fit = (entry1) (entry2) (entry3) (entry4) (entry5) (entry6) (dictionarylabel)] {};
}
\end{pgfonlayer}
\end{scope}
{
\begin{scope}[xshift=1.2in,yshift=1em]
\node [anchor=west] (c1) at (0,0) {};
\node [anchor=west] (c2) at ([xshift=0em]c1.east) {};
\node [anchor=west] (c3) at ([xshift=0em]c2.east) {};
\node [anchor=west] (c4) at ([xshift=0em]c3.east) {};
\node [anchor=west] (c5) at ([xshift=0em]c4.east) {};
\node [anchor=west] (c6) at ([xshift=0em]c5.east) {};
\node [anchor=west] (c7) at ([xshift=0em]c6.east) {};
\node [anchor=west] (c8) at ([xshift=0em]c7.east) {};
\end{scope}
}
\begin{scope}[xshift=1.2in,yshift=-4em]
{
\node [anchor=west] (bc1) at (0,0) {};
\node [anchor=west] (bc2) at ([xshift=0em]bc1.east) {};
}
{
\node [anchor=west] (bc3) at ([xshift=0em]bc2.east) {};
\node [anchor=west] (bc4) at ([xshift=0em]bc3.east) {};
}
{
\node [anchor=west] (bc5) at ([xshift=0em]bc4.east) {};
\node [anchor=west] (bc6) at ([xshift=0em]bc5.east) {};
}
{
\node [anchor=west] (bc7) at ([xshift=0em]bc6.east) {};
}
{
\node [anchor=west] (bc8) at ([xshift=0em]bc7.east) {};
}
{
\draw [-,very thick] ([xshift=-0.3em,yshift=0.1em]bc2.south east) -- ([xshift=0.3em,yshift=-0.1em]bc3.north west);
}
{
\draw [-,very thick] ([xshift=-0.3em,yshift=0.1em]bc4.south east) -- ([xshift=0.3em,yshift=-0.1em]bc5.north west);
}
{
\draw [-,very thick] ([xshift=-0.3em,yshift=0.1em]bc6.south east) -- ([xshift=0.3em,yshift=-0.1em]bc7.north west);
}
{
\draw [-,very thick] ([xshift=-0.3em,yshift=0.1em]bc7.south east) -- ([xshift=0.3em,yshift=-0.1em]bc8.north west);
}
\end{scope}
{
\draw [<-,thick] ([yshift=-0.2em]c1.north west) -- ([yshift=0.2em]c1.north west);
\node [anchor=south] (b1) at ([yshift=0.0em]c1.north west) {\scriptsize{起始}};
}
{
\draw [<-,thick] ([yshift=-0.2em]c3.north west) -- ([yshift=0.2em]c3.north west);
\node [anchor=south] (b2) at ([yshift=0.0em]c3.north west) {\scriptsize{起始}};
}
{
\draw [<-,thick] ([yshift=-0.2em]c5.north west) -- ([yshift=0.2em]c5.north west);
\node [anchor=south] (b3) at ([yshift=0.0em]c5.north west) {\scriptsize{起始}};
}
{
\draw [<-,thick] ([yshift=-0.2em]c7.north west) -- ([yshift=0.2em]c7.north west);
\node [anchor=south] (b4) at ([yshift=0.0em]c7.north west) {\scriptsize{起始}};
}
{
\draw [<-,thick] ([yshift=-0.2em]c8.north west) -- ([yshift=0.2em]c8.north west);
\node [anchor=south] (b5) at ([yshift=0.0em]c8.north west) {\scriptsize{起始}};
}
{
\node [anchor=west,thick,draw,red,minimum width=1.6em,minimum height=1.3em] (w18) at ([xshift=0.1em]c8.west){};
\node [anchor=north] (l18) at ([yshift=0.2em]w18.south) {{\color{red} \footnotesize{命中:2}}};
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{0.3em}
\begin{tikzpicture}
\begin{scope}
\node [] (input) at (0,0) {{\scriptsize 猫喜欢吃鱼}};
{
\begin{scope}[scale=0.8,xshift=0.9in,yshift=-0.87in,level distance=20pt,sibling distance=-1pt,grow'=up]
{\scriptsize
\Tree[.\node(sn0){IP};
[.\node(sn1){NP};
[.\node(sn2){NN}; \node(sw1){}; ]
]
[.\node(sn3){VP};
[.\node(sn4){VV}; \node(sw2){喜欢}; ]
[.\node(sn5){VP}; \edge[roof]; \node(sw3){\ }; ]
]
]
}
\end{scope}
\node [anchor=west,draw,thick,inner sep=3pt,ublue] (mtengine) at ([xshift=1.05in]input.east) {{\scriptsize MT系统}};
\begin{scope}[scale=0.8,xshift=3.0in,yshift=-0.87in,level distance=20pt,sibling distance=-3pt,grow'=up]
{\scriptsize
\Tree[.\node(tn0){S};
[.\node(tn1){NP};
[.\node(tn2){NNS}; \node(tw1){cats}; ]
]
[.\node(tn3){VP};
[.\node(tn4){VB}; \node(tw2){like}; ]
[.\node(tn5){VP}; \edge[roof]; \node(tw3){eating fish}; ]
]
]
}
\end{scope}
}
\node [] (output) at ([xshift=3.35in]input.east) {{\scriptsize Cats like eating fish}};
\draw[->,thick] ([xshift=-1pt]input.east) -- ([xshift=8pt]input.east);
\draw[->,thick] ([xshift=-10pt]output.west) -- ([xshift=-0pt]output.west);
{
\draw[->,thick] ([xshift=-12pt]mtengine.west) -- ([xshift=-2pt]mtengine.west);
\draw[->,thick] ([xshift=2pt]mtengine.east) -- ([xshift=12pt]mtengine.east);
}
{
\node[minimum height=4em,minimum width=4.5em,fill=white] (inputmarking) at (0.85in,-0.39in) {};
\node[minimum height=4em,minimum width=5.2em,fill=white] (outputmarking) at (2.55in,-0.39in) {};
}
\node [anchor=south] (inputlabel) at ([yshift=-0.5em]input.north) {{\scriptsize \color{red}{\textbf{输入}}}};
\node [anchor=south] (outputlabel) at ([yshift=-0.5em]output.north) {{\scriptsize \color{red}{\textbf{输出}}}};
{
\node [anchor=west] (mtinputlabel) at ([xshift=0.29in]inputlabel.east) {{\scriptsize \color{red}{\textbf{实际的输入}}}};
\node [anchor=west] (mtoutputlabel) at ([xshift=0.86in]mtinputlabel.east) {{\scriptsize \color{red}{\textbf{实际的输出}}}};
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (mtinputlabel) (mtoutputlabel) (inputmarking) (outputmarking)] {};
}
{
\node[rectangle,fill=ublue,inner sep=0mm] [fit = (mtinputlabel) (mtoutputlabel) (inputmarking) (outputmarking)] {{\color{white} \textbf{\Large{MT 系统}}}};
}
\begin{scope}[scale=0.9,xshift=1.2in,yshift=-1.2in,level distance=20pt,sibling distance=0pt]
\end{scope}
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{0.3em}
\begin{tikzpicture}
\begin{scope}
\node [] (input) at (0,0) {{\scriptsize 猫喜欢吃鱼}};
{
\begin{scope}[scale=0.8,xshift=0.9in,yshift=-0.87in,level distance=20pt,sibling distance=-1pt,grow'=up]
{\scriptsize
\Tree[.\node(sn0){IP};
[.\node(sn1){NP};
[.\node(sn2){NN}; \node(sw1){}; ]
]
[.\node(sn3){VP};
[.\node(sn4){VV}; \node(sw2){喜欢}; ]
[.\node(sn5){VP}; \edge[roof]; \node(sw3){\ }; ]
]
]
}
\end{scope}
\node [anchor=west,draw,thick,inner sep=3pt,ublue] (mtengine) at ([xshift=1.05in]input.east) {{\scriptsize MT系统}};
\begin{scope}[scale=0.8,xshift=3.0in,yshift=-0.87in,level distance=20pt,sibling distance=-3pt,grow'=up]
{\scriptsize
\Tree[.\node(tn0){S};
[.\node(tn1){NP};
[.\node(tn2){NNS}; \node(tw1){cats}; ]
]
[.\node(tn3){VP};
[.\node(tn4){VB}; \node(tw2){like}; ]
[.\node(tn5){VP}; \edge[roof]; \node(tw3){eating fish}; ]
]
]
}
\end{scope}
}
\node [] (output) at ([xshift=3.35in]input.east) {{\scriptsize Cats like eating fish}};
\draw[->,thick] ([xshift=-1pt]input.east) -- ([xshift=8pt]input.east);
\draw[->,thick] ([xshift=-10pt]output.west) -- ([xshift=-0pt]output.west);
{
\draw[->,thick] ([xshift=-12pt]mtengine.west) -- ([xshift=-2pt]mtengine.west);
\draw[->,thick] ([xshift=2pt]mtengine.east) -- ([xshift=12pt]mtengine.east);
}
{
\node[minimum height=4em,minimum width=4.5em] (inputmarking) at (0.85in,-0.39in) {};
\node[minimum height=4em,minimum width=5.2em] (outputmarking) at (2.55in,-0.39in) {};
}
\node [anchor=south] (inputlabel) at ([yshift=-0.5em]input.north) {{\scriptsize \color{red}{\textbf{输入}}}};
\node [anchor=south] (outputlabel) at ([yshift=-0.5em]output.north) {{\scriptsize \color{red}{\textbf{输出}}}};
{
\node [anchor=west] (mtinputlabel) at ([xshift=0.29in]inputlabel.east) {{\scriptsize \color{red}{\textbf{实际的输入}}}};
\node [anchor=west] (mtoutputlabel) at ([xshift=0.86in]mtinputlabel.east) {{\scriptsize \color{red}{\textbf{实际的输出}}}};
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (mtinputlabel) (mtoutputlabel) (inputmarking) (outputmarking)] {};
}
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{0.5em}
\begin{tikzpicture}
{\footnotesize
\node [ugreen] (input) at (0,0) {猫喜欢吃鱼};
\node [draw,thick,anchor=west,ublue] (preprocessing) at ([xshift=1em]input.east) {分词系统};
\node [ugreen,anchor=west] (mtinput) at ([xshift=1em]preprocessing.east) {猫/喜欢/吃/鱼};
\node [draw,thick,anchor=west,ublue] (smt) at ([xshift=1em]mtinput.east) {MT系统};
\node [anchor=west] (mtoutput) at ([xshift=1em]smt.east) {...};
\draw [->,thick,ublue] ([xshift=0.1em]input.east) -- ([xshift=-0.2em]preprocessing.west);
\draw [->,thick,ublue] ([xshift=0.2em]preprocessing.east) -- ([xshift=-0.1em]mtinput.west);
\draw [->,thick,ublue] ([xshift=0.1em]mtinput.east) -- ([xshift=-0.2em]smt.west);
\draw [->,thick,ublue] ([xshift=0.2em]smt.east) -- ([xshift=-0.1em]mtoutput.west);
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{0.3em}
\begin{tikzpicture}
\begin{scope}[scale=0.8,xshift=0.9in,yshift=-0.87in,level distance=20pt,sibling distance=-1pt,grow'=up]
{\scriptsize
\Tree[.\node(sn0){IP};
[.\node(sn1){NP};
[.\node(sn2){NN}; \node(sw1){}; ]
]
[.\node(sn3){VP};
[.\node(sn4){VV}; \node(sw2){喜欢}; ]
[.\node(sn5){VP}; \edge[roof]; \node(sw3){\ }; ]
]
]
}
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\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=south west] (dictionarylabel) at (entry1.north west) {{\color{ublue} 分词词典}};
}
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue, inner sep=0.2em] [fit = (entry1) (entry2) (entry3) (entry4) (entry5) (entry6) (dictionarylabel)] {};
}
\end{pgfonlayer}
\end{scope}
{
\begin{scope}[xshift=1.2in,yshift=1em]
\node [anchor=west] (c1) at (0,0) {};
\node [anchor=west] (c2) at ([xshift=0em]c1.east) {};
\node [anchor=west] (c3) at ([xshift=0em]c2.east) {};
\node [anchor=west] (c4) at ([xshift=0em]c3.east) {};
\node [anchor=west] (c5) at ([xshift=0em]c4.east) {};
\node [anchor=west] (c6) at ([xshift=0em]c5.east) {};
\node [anchor=west] (c7) at ([xshift=0em]c6.east) {};
\node [anchor=west] (c8) at ([xshift=0em]c7.east) {};
\end{scope}
}
{
\node [anchor=west,thick,draw,minimum width=3.4em,minimum height=1.5em] (w1) at (c3.west){};
\draw [->,thick] (entry3.30) ..controls +(70:1) and +(south:1.5).. ([xshift=0.3em]w1.south) node [pos=0.5, above] {\color{red}{\footnotesize{命中}}};
}
{
\node [anchor=west,very thick,draw,dotted,minimum width=3.4em,minimum height=1.9em,red] (w3) at (c2.west){};
\draw [->,very thick,dotted,red] ([yshift=-0.2em]entry6.30) ..controls +(60:2) and +(south:3).. ([xshift=-0.6em]w3.south) node [pos=0.5, below] {\color{red}{\footnotesize{命中}}};
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\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] (entry4) at ([yshift=0.1em]entry3.south west) {...};
\node [anchor=south west] (corpuslabel) at (entry1.north west) {{\color{ublue} \textbf{学习用数据}}};
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (entry1) (entry2) (entry3) (entry4) (corpuslabel)] (corpus) {};
\end{pgfonlayer}
}
\node [anchor=west,ugreen] (P) at ([xshift=4em,yshift=-0.8em]corpus.east){\large{P($\cdot$)}};
\node [anchor=south] (modellabel) at (P.north) {{\color{ublue} {\scriptsize \textbf{统计模型}}}};
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (P) (modellabel)] (model) {};
\end{pgfonlayer}
\draw [->,very thick,ublue] ([xshift=0.2em]corpus.east) -- ([xshift=3.2em]corpus.east) node [pos=0.5, above] {\color{red}{\scriptsize{统计学习}}};
\draw [->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=3.2em]model.east) node [pos=0.5, above] {\color{red}{\scriptsize{穷举\&计算}}};
{\scriptsize
\node [anchor=north west] (sentlabel) at ([xshift=5.5em,yshift=-1em]model.north east) {\color{red}{自动分词系统}};
\node [anchor=north west] (sent) at (sentlabel.south west) {\textbf{对任意句子进行分词}};
}
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (sentlabel) (sent)] (segsystem) {};
\end{pgfonlayer}
{\footnotesize
{
\node [anchor=west] (label1) at (0,6em) {实际上,通过学习我们得到了一个分词模型P($\cdot$),给定任意的};
\node [anchor=north west] (label1part2) at ([yshift=0.5em]label1.south west) {分词结果$W=w_1 w_2...w_n$,都能通过P($W$)=$\textrm{P}(w_1) \cdot \textrm{P}(w_2) \cdot ... \cdot \textrm{P}(w_n)$};
\node [anchor=north west] (label1part3) at ([yshift=0.5em]label1part2.south west) {计算这种分词的概率值};
}
\begin{pgfonlayer}{background}
{
\node[rectangle,fill=blue!10,thick,dotted,inner sep=0.2em] [fit = (label1) (label1part2) (label1part3)] (label1content) {};
}
\end{pgfonlayer}
{
\draw [-,thick,red,dotted] ([yshift=0.3em]modellabel.north) ..controls +(north:0.5) and +(south:0.5).. ([xshift=-3em]label1content.south);
}
}
{\footnotesize
{
\node [anchor=west] (label1) at (0,-6.8em) {\textbf{自动分词系统}:对任意的数据句子$S$,找到最佳的分词结果$W^{*}$输出};
}
{
\node [anchor=north west] (label2) at (label1.south west) {假设输入$S$='确实现在数据很多'};
}
{
\node [anchor=north west,draw,thick,inner sep=2pt] (data11) at (label2.south west) {枚举所有可能的切分};
}
{
\node [anchor=west,draw,thick,inner sep=2pt] (data12) at ([xshift=2em]data11.east) {计算每种切分的概率};
}
{
\node [anchor=west,draw,thick,inner sep=2pt] (data13) at ([xshift=3.5em]data12.east) {选择最佳结果};
}
{
\draw [->,thick] ([xshift=0.1em]data11.east) -- ([xshift=-0.1em]data12.west);
}
{
\draw [->,thick] ([xshift=0.1em]data12.east) -- ([xshift=-0.1em]data13.west);
}
{\scriptsize
{
\node [anchor=north west] (data21) at (data11.south west) {确/实现/在/数/据很/多};
}
{
\node [anchor=north west] (data22) at (data12.south west) {$\textrm{P}(\textrm{'确'}) \cdot \textrm{P}(\textrm{'实现'}) \cdot \textrm{P}(\textrm{'在'}) \cdot \textrm{P}(\textrm{'数'}) \cdot $};
}
\node [anchor=north west,minimum height=1.6em] (data23) at (data13.south west) {};
\node [anchor=north west,minimum height=1.6em] (data31) at ([yshift=0.3em]data21.south west) {};
{
\node [anchor=north west] (data32) at ([yshift=0.3em]data22.south west) {$\textrm{P}(\textrm{'据很'}) \cdot \textrm{P}(\textrm{'多'}) = 2.13 \times 10^{-45}$};
}
\node [anchor=north west,minimum height=1.6em] (data33) at ([yshift=0.3em]data23.south west) {};
{
\node [anchor=north west] (data41) at (data31.south west) {确实/现在/数据/很多};
}
{
\node [anchor=north west] (data42) at (data32.south west) {$\textrm{P}(\textrm{'确实'}) \cdot \textrm{P}(\textrm{'现在'}) \cdot \textrm{P}(\textrm{'数据'}) \cdot $};
}
{
\node [anchor=north west] (data43) at ([yshift=-0.2em]data33.south west) {\color{red}{\textbf{输出}}};
\draw [->,red,thick] (data43.west)--([xshift=-1em]data43.west);
}
{
\node [anchor=north west] (data51) at (data41.south west) {...};
}
{
\node [anchor=north west] (data52) at ([yshift=0.3em]data42.south west) {$\textrm{P}(\textrm{'很'}) \cdot \textrm{P}(\textrm{'多'}) = 1.54 \times 10^{-25}$};
}
\node [anchor=north west] (data53) at ([yshift=0.3em]data43.south west) {};
}
}
\begin{pgfonlayer}{background}
{
\node[rectangle,fill=blue!10,thick,dotted,inner sep=0.1em] [fit = (label1) (data11) (data13) (data51) (data52) (data53)] (segcontent) {};
}
\end{pgfonlayer}
{
\draw [-,thick,red,dotted] (segcontent.north) ..controls +(north:0.7) and +(south:0.7).. (segsystem.south);
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
{
\begin{scope}
\node[anchor=west,draw,very thick,minimum size=25pt] (s1) at (0,0) {{88}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s2) at ([xshift=0.2cm]s1.east) {{87}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s3) at ([xshift=0.2cm]s2.east) {{45}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s4) at ([xshift=0.2cm]s3.east) {{47}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {{100}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {{15}};
\end{scope}
\begin{scope}[yshift=-1cm]
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s1) at (0,0) {{5}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s2) at ([xshift=0.2cm]s1.east) {{230}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s3) at ([xshift=0.2cm]s2.east) {{7}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s4) at ([xshift=0.2cm]s3.east) {{234}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {{500}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {{39}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s7) at ([xshift=0.2cm]s6.east) {{100}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s8) at ([xshift=0.2cm]s7.east) {{15}};
\end{scope}
\begin{scope}[yshift=-2cm]
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s1) at (0,0) {{975}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s2) at ([xshift=0.2cm]s1.east) {{7}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s3) at ([xshift=0.2cm]s2.east) {{234}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s4) at ([xshift=0.2cm]s3.east) {{294}};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {{15}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {{15}};
\end{scope}
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}
\node[anchor=west,draw,very thick,minimum size=25pt] (s1) at (0,0) {};
\node[anchor=west,draw,very thick,minimum size=25pt] (s2) at ([xshift=0.2cm]s1.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt] (s3) at ([xshift=0.2cm]s2.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt] (s4) at ([xshift=0.2cm]s3.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {\small{数据}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {};
\node[anchor=west] (s7) at ([xshift=0.2cm]s6.east) {...};
\end{scope}
\begin{scope}[yshift=-1cm]
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s1) at (0,0) {现在};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s2) at ([xshift=0.2cm]s1.east) {已经};
\node[anchor=west,draw,very thick,minimum size=25pt] (s3) at ([xshift=0.2cm]s2.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s4) at ([xshift=0.2cm]s3.east) {不少};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {\small{}};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s7) at ([xshift=0.2cm]s6.east) {数据};
\node[anchor=west,draw,very thick,minimum size=25pt] (s8) at ([xshift=0.2cm]s7.east) {};
\node[anchor=west] (s9) at ([xshift=0.2cm]s8.east) {...};
\end{scope}
\begin{scope}[yshift=-2cm]
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s1) at (0,0) {确实};
\node[anchor=west,draw,very thick,minimum size=25pt] (s2) at ([xshift=0.2cm]s1.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s3) at ([xshift=0.2cm]s2.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s4) at ([xshift=0.2cm]s3.east) {};
\node[anchor=west,draw,very thick,minimum size=25pt, inner sep=0] (s5) at ([xshift=0.2cm]s4.east) {疑问};
\node[anchor=west,draw,very thick,minimum size=25pt] (s6) at ([xshift=0.2cm]s5.east) {};
\node[anchor=west] (s7) at ([xshift=0.2cm]s6.east) {...};
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}[yshift=-2.8cm,xshift=-0.5em]
\node [anchor=west] (label1) at (0,0) {总词数:$6 + 8 + 5 = 20$};
\node [anchor=north west] (p1) at (label1.south west) {$\textrm{P}('\textrm{}')=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$\textrm{P}('\textrm{}')=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$\textrm{P}('\textrm{确实}')=1/20=0.05$};
\end{scope}
\begin{scope}[yshift=-2.8cm,xshift=6cm]
\node [anchor=west] (label1) at (0,0) {更多数据-总词数:100K $\sim$ 1M};
\node [anchor=north west] (p1) at (label1.south west) {$\textrm{P}('\textrm{}')=0.000010$};
\node [anchor=north west] (p2) at (p1.south west) {$\textrm{P}('\textrm{}')=0.001812$};
\node [anchor=north west] (p3) at (p2.south west) {$\textrm{P}('\textrm{确实}')=0.000001$};
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}[scale=0.6]
\begin{scope}
{\footnotesize
\foreach \i in {1,...,5}{
\node [draw,thick,minimum size=10pt] at (\i,0) {1};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("1") = 5/30$};
\end{scope}
\begin{scope}[yshift=-2.5em]
{\footnotesize
\foreach \i in {1,...,4}{
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{red} 2}};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("2") = 4/30$};
\end{scope}
\begin{scope}[yshift=-5.0em]
{\footnotesize
\foreach \i in {1,...,6}{
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ublue} 3}};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("3") = 6/30$};
\end{scope}
\begin{scope}[yshift=-7.5em]
{\footnotesize
\foreach \i in {1,...,12}{
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ugreen} 4}};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("4") = 12/30$};
\end{scope}
\begin{scope}[yshift=-10.0em]
{\footnotesize
\foreach \i in {1,...,2}{
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{purple} 5}};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("5") = 2/30$};
\end{scope}
\begin{scope}[yshift=-12.5em]
{\footnotesize
\foreach \i in {1,...,1}{
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{orange} 6}};
}
}
\node [anchor=west] at (31em,0) {$\textrm{P}("6") = 1/30$};
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
{
\begin{scope}
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{2}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{3}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{\textbf{5}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{\textbf{4}}};
\end{scope}
\begin{scope}[yshift=-1cm]
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{5}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{6}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{3}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{\textbf{2}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{5}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{{\color{red}{1}}}};
\end{scope}
\begin{scope}[yshift=-2cm]
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{2}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{\textbf{2}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{3}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{4}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{\textbf{5}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{{\color{red}{1}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{3}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{\textbf{4}}};
\end{scope}
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{0.3em}
\begin{tikzpicture}
\begin{scope}
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{{\color{ublue} 3}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{\textbf{{\color{red} 2}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{{\color{ublue} 3}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{\textbf{{\color{purple} 5}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{\textbf{1}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{\textbf{{\color{ublue} 3}}}};
\end{scope}
\begin{scope}[yshift=-1cm]
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{{\color{red} 2}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{1}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{{\color{purple} 5}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{\textbf{{\color{ublue} 3}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{1}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\end{scope}
\begin{scope}[yshift=-2cm]
\node[anchor=west,draw,very thick,minimum size=20pt] (s1) at (0,0) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s2) at ([xshift=0.2cm]s1.east) {\Large{\textbf{{\color{ublue} 3}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s3) at ([xshift=0.2cm]s2.east) {\Large{\textbf{{\color{red} 2}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s4) at ([xshift=0.2cm]s3.east) {\Large{\textbf{{\color{orange} 6}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s5) at ([xshift=0.2cm]s4.east) {\Large{\textbf{1}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s6) at ([xshift=0.2cm]s5.east) {\Large{\textbf{{\color{red} 2}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s7) at ([xshift=0.2cm]s6.east) {\Large{\textbf{{\color{ublue} 3}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s8) at ([xshift=0.2cm]s7.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s9) at ([xshift=0.2cm]s8.east) {\Large{\textbf{{\color{ugreen} 4}}}};
\node[anchor=west,draw,very thick,minimum size=20pt] (s10) at ([xshift=0.2cm]s9.east) {\Large{\textbf{1}}};
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\vspace{-0.5em}
\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] (entry4) at ([yshift=0.1em]entry3.south west) {...};
\node [anchor=south west] (corpuslabel) at (entry1.north west) {{\color{ublue} \textbf{学习用数据}}};
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (entry1) (entry2) (entry3) (entry4) (corpuslabel)] (corpus) {};
}
\end{pgfonlayer}
}
{
\node [anchor=west,ugreen] (P) at ([xshift=4em,yshift=-0.8em]corpus.east){\large{P($\cdot$)}};
\node [anchor=south] (modellabel) at (P.north) {{\color{ublue} {\scriptsize \textbf{统计模型}}}};
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (P) (modellabel)] (model) {};
}
\end{pgfonlayer}
{
\draw [->,very thick,ublue] ([xshift=0.2em]corpus.east) -- ([xshift=3.2em]corpus.east) node [pos=0.5, above] {\color{red}{\scriptsize{统计学习}}};
}
{
\draw [->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=3.2em]model.east) node [pos=0.5, above] {\color{red}{\scriptsize{穷举\&计算}}};
}
{\scriptsize
{
\node [anchor=north west] (sentlabel) at ([xshift=5.5em,yshift=2em]model.north east) {\color{red}{新的句子}};
\node [anchor=north west] (sent) at (sentlabel.south west) {\textbf{确实现在数据很多}};
}
{
\node [anchor=north west] (seg1) at ([xshift=0em]sent.south west) {确/实现/在/数/据很/多};
\node [anchor=north west] (seg2) at (seg1.south west) {确实/现在/数据/很/多};
\node [anchor=north west] (seg3) at (seg2.south west) {确实/现在/数/据/很/多};
}
{
\node [anchor=north west] (seg4) at ([yshift=0.5em]seg3.south west) {...};
\node [anchor=east,ugreen] (p1seg1) at ([xshift=0.5em]seg1.west) {P(};
\node [anchor=west,ugreen] (p2seg1) at ([xshift=-0.5em]seg1.east) {)=.1};
\node [anchor=east,ugreen] (p1seg2) at ([xshift=0.5em]seg2.west) {P(};
\node [anchor=west,ugreen] (p2seg2) at ([xshift=-0.5em]seg2.east) {)=.6};
\node [anchor=east,ugreen] (p1seg3) at ([xshift=0.5em]seg3.west) {P(};
\node [anchor=west,ugreen] (p2seg3) at ([xshift=-0.5em]seg3.east) {)=.2};
}
{
\node [anchor=east,draw,dashed,red,thick,minimum width=13em,minimum height=1.5em] (final) at (p2seg2.east) {};
\node [anchor=west,red] (finallabel) at ([xshift=2em]sentlabel.east) {输出概率最大};
\node [anchor=north east,red] (finallabel2) at ([yshift=0.5em]finallabel.south east) {的结果};
\draw [->,thick,red] ([xshift=-1.5em]final.north east) ..controls +(north:0.5) and +(south:0.5).. (finallabel2.south);
}
}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tabular}{l c c c}
&
\begin{tikzpicture}
\begin{scope}[sibling distance=-5pt, level distance=20pt]
{\footnotesize
\Tree[.IP
[.VP
[.VP
[.NN 猫 ]
[.VV 喜欢 ]
]
[.VV 吃 ]
]
[.NP
[.NN 鱼 ]
]
]
}
\end{scope}
\end{tikzpicture}
&
\begin{tikzpicture}
\begin{scope}[sibling distance=-5pt, level distance=20pt]
{\footnotesize
\Tree[.IP
[.NP
[.NN 猫 ]
]
[.VP
[.VV 喜欢 ]
[.VP
[.VV 吃 ]
[.NN 鱼 ]
]
]
]
}
\end{scope}
\end{tikzpicture}
&
\begin{tikzpicture}
\begin{scope}[sibling distance=-5pt, level distance=20pt]
{\footnotesize
\Tree[.IP
[.NP
[.NN 猫 ]
]
[.VP
[.VP
[.VV 喜欢 ]
[.VV 吃 ]
]
[.NP
[.NN 鱼 ]
]
]
]
}
\end{scope}
\end{tikzpicture}
\\
语言学家: & 不对 && 不对 \\
我们: & 似乎对了 & 比较肯定 & 不太可能 \\
分析器: & P=0.2 & P=0.6 & P=0.1
\end{tabular}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\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){}; ]
]
[.\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){}; ]
]
]
]
\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}
\begin{scope}[xshift=1.7in,yshift=-0.4in]
\node [,inner sep=2pt] (w1) at (0,0) {};
\node [anchor=west,inner sep=2pt] (w2) at ([xshift=0.8em,yshift=3em]w1.east) {喜欢};
\node [anchor=west,inner sep=2pt] (w3) at ([xshift=4.5em]w1.east) {};
\node [anchor=west,inner sep=2pt] (w4) at ([xshift=2em,yshift=-3em]w3.east) {};
\draw [<-,ultra thick,ublue] (w1.north east) -- (w2.south) node [pos=0.3, above, xshift=-0.5em] {\color{red}{\tiny{主谓}}};
\draw [<-,ultra thick,red] (w3.north west) -- (w2.south) node [pos=0.3, above, xshift=0.5em] {\color{red}{\tiny{连动}}};
\draw [->,ultra thick,ugreen] (w3.south east) -- (w4.north west) node [pos=0.5, above, xshift=0.5em] {\color{red}{\tiny{谓宾}}};
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}
\node [] (sent) at (0,0) {\textbf{猫 喜欢 吃 鱼}};
\end{scope}
\begin{scope}[xshift=-8em,yshift=-9em,sibling distance=-5pt,level distance=17pt,grow'=up]
{\footnotesize
\Tree[.IP
[.VP
[.VP
[.NN 猫 ]
[.VV 喜欢 ]
]
[.VV 吃 ]
]
[.NP
[.NN 鱼 ]
]
]
}
\end{scope}
\begin{scope}[xshift=-1em,yshift=-9em,sibling distance=-5pt,level distance=17pt,grow'=up]
{\footnotesize
\Tree[.IP
[.NP
[.NN 猫 ]
]
[.VP
[.VV 喜欢 ]
[.VP
[.VV 吃 ]
[.NN 鱼 ]
]
]
]
}
\end{scope}
\begin{scope}[xshift=8em,yshift=-9em,sibling distance=-5pt, level distance=17pt,grow'=up]
{\footnotesize
\Tree[.IP
[.NP
[.NN 猫 ]
]
[.VP
[.VP
[.VV 喜欢 ]
[.VV 吃 ]
]
[.NP
[.NN 鱼 ]
]
]
]
}
\end{scope}
\draw [->,thick,ublue] ([xshift=-2em]sent.south) ..controls + (south:2em) and +(north:2em).. ([xshift=-8em,yshift=-2em]sent.south);
\draw [->,thick,ublue] ([xshift=-1em]sent.south) ..controls + (south:2em) and +(north:2em).. ([xshift=-2em,yshift=-3em]sent.south);
\draw [->,thick,ublue] ([xshift=0em]sent.south) ..controls + (south:2em) and +(north:2em).. ([xshift=6.5em,yshift=-2em]sent.south);
\draw [->,thick,ublue,dotted] ([xshift=1em]sent.south) ..controls + (south:1.5em) and +(north:2.5em).. ([xshift=12.5em,yshift=-2em]sent.south);
\node [anchor=north west] (others) at (11.8em,-3em) {...};
\node [] (d1) at (-9em,-10em) {$d_1$};
\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};
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
{\scriptsize
\begin{scope}[level distance=10pt,xshift=1.5em,yshift=-0.5em]
{\tiny
\Tree[.\node[inner sep=1pt](t1n1){IP};
[.\node[inner sep=1pt](t1n2){VP};
[.\node[inner sep=1pt](t1n3){VV}; \node[](t1w1){}; ]
]
[.\node[inner sep=1pt](t1n4){NP};
[.\node[inner sep=1pt](t1n5){M}; 个 ]
[.\node[inner sep=1pt](t1n6){NN}; 例子 ]
]
]
}
\end{scope}
\begin{scope}[level distance=10pt,xshift=6.5em,yshift=-0.5em]
{\tiny
\Tree[.\node[inner sep=1pt](t2n1){IP};
[.\node[inner sep=1pt](t2n2){NP};
[.\node[inner sep=1pt](t2n3){PN}; 你 ]
]
[.\node[inner sep=1pt](t2n4){VP};
[.\node[inner sep=1pt](t2n5){VV}; 看到 ]
[.\node[inner sep=1pt](t2n6){AS}; \node[](t2wn){}; ]
]
]
}
\end{scope}
\node [anchor=west] (othertrees) at ([xshift=1em]t2n1.east) {...};
\node [anchor=south west] (corpuslabel) at ([xshift=-1em]t1n1.north west) {{\color{ublue} \textbf{学习用数据}}};
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (t1n1) (t1w1) (t2wn) (othertrees) (corpuslabel)] (corpus) {};
\end{pgfonlayer}
}
\node [anchor=west,ugreen] (P) at ([xshift=4.5em,yshift=-0.8em]corpus.east){\large{P($\cdot$)}};
\node [anchor=south] (modellabel) at (P.north) {{\color{ublue} {\scriptsize \textbf{统计分析模型}}}};
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (P) (modellabel)] (model) {};
\end{pgfonlayer}
\draw [->,very thick,ublue] ([xshift=0.2em]corpus.east) -- ([xshift=3.0em]corpus.east) node [pos=0.5, above] {\color{red}{\scriptsize{统计学习}}};
\draw [->,very thick,ublue] ([xshift=0.2em]model.east) -- ([xshift=3.2em]model.east) node [pos=0.5, above] {\color{red}{\scriptsize{穷举\&计算}}};
{\scriptsize
\node [anchor=north west] (sentlabel) at ([xshift=5.0em,yshift=-1em]model.north east) {{\color{ublue} {\scriptsize \textbf{统计分析模型}}}};
\node [anchor=north west] (sent) at (sentlabel.south west) {\textbf{对任意句子进行分析}};
}
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow] [fit = (sentlabel) (sent)] (parser) {};
\end{pgfonlayer}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\small
\node [anchor=west,inner sep=2pt] (r1) at (0,0) {$r_1$: NN $\to$};
\node [anchor=west,inner sep=2pt] (r2) at ([xshift=6em]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};
\node [anchor=west,inner sep=2pt,fill=blue!20] (r1) at (0,0) {$r_1$: NN $\to$};
\node [anchor=west,inner sep=2pt,fill=blue!20] (r2) at ([xshift=6em]r1.east) {$r_2$: VV $\to$ 喜欢};
\node [anchor=north west,inner sep=2pt,fill=blue!20] (r3) at ([yshift=-0.2em]r1.south west) {$r_3$: VV $\to$};
\node [anchor=north west,inner sep=2pt,fill=blue!20] (r4) at ([yshift=-0.2em]r2.south west) {$r_4$: NN $\to$};
\node [anchor=north west,inner sep=2pt,fill=red!20] (r5) at ([yshift=-0.2em]r3.south west) {$r_5$: NP $\to$ NN};
\node [anchor=north west,inner sep=2pt,fill=green!20] (r6) at ([yshift=-0.2em]r4.south west) {$r_6$: VP $\to$ VV NN};
\node [anchor=north west,inner sep=2pt,fill=green!20] (r7) at ([yshift=-0.2em]r5.south west) {$r_7$: VP $\to$ VV VP};
\node [anchor=north west,inner sep=2pt,fill=green!20] (r8) at ([yshift=-0.2em]r6.south west) {$r_8$: IP $\to$ NP VP};
\node [anchor=north west,fill=blue!20] (sent1) at ([yshift=-0.4em]r7.south west) {$r_1,r_2,r_3,r_4$};
\node [anchor=west] (sent1part2) at (sent1.east) {为生成单词词性的规则};
\node [anchor=north west,fill=red!20] (sent2) at ([yshift=-0.2em]sent1.south west) {$r_5$};
\node [anchor=west] (sent2part2) at (sent2.east) {为单变量规则,它将词性NN进一步抽象为名词短语NP};
\node [anchor=north west,fill=green!20] (sent3) at ([yshift=-0.2em]sent2.south west){$r_6,r_7,r_8$};
\node [anchor=west] (sent3part2) at (sent3.east) {为句法结构规则,比如$r_8$表示了主(NP)+谓(VP)结构};
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{minipage}[t]{0.32\linewidth}
\vspace{1.5em}
\begin{tikzpicture}
\begin{scope}[sibling distance=3pt, level distance=25pt]
{\small
\Tree[.IP
[.NP
[.NN \node(sw1){}; ]
]
[.VP
[.VV \node(sw2){喜欢}; ]
[.VP
[.VV \node(sw1){}; ]
[.NN \node(sw1){}; ]
]
]
]
}
\end{scope}
\end{tikzpicture}
\end{minipage}
\hfill
\begin{minipage}[t]{0.32\linewidth}
{\small
\begin{eqnarray}
& & \textrm{\textbf{推导1}} \nonumber \\
& & \textrm{IP} \nonumber \\
& \overset{r_8}{\Rightarrow} & \textrm{NP VP} \nonumber \\
& \overset{r_5}{\Rightarrow} & \textrm{NN VP} \nonumber \\
& \overset{r_1}{\Rightarrow} & \textrm{猫 VP} \nonumber \\
& \overset{r_7}{\Rightarrow} & \textrm{猫 VV VP} \nonumber \\
& \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
\end{eqnarray}
}
\end{minipage}
\hfill
\begin{minipage}[t]{0.32\linewidth}
{\small
\begin{eqnarray}
& & \textrm{\textbf{推导2}} \nonumber \\
& & \textrm{IP} \nonumber \\
& \overset{r_8}{\Rightarrow} & \textrm{NP VP} \nonumber \\
& \overset{r_7}{\Rightarrow} & \textrm{NP VV VP} \nonumber \\
& \overset{r_2}{\Rightarrow} & \textrm{NP 喜欢 VP} \nonumber \\
& \overset{r_6}{\Rightarrow} & \textrm{NP 喜欢 VV NN} \nonumber \\
& \overset{r_4}{\Rightarrow} & \textrm{NP 喜欢 VV 鱼} \nonumber \\
& \overset{r_5}{\Rightarrow} & \textrm{NN 喜欢 VV 鱼} \nonumber \\
& \overset{r_3}{\Rightarrow} & \textrm{NN 喜欢 吃 鱼} \nonumber \\
& \overset{r_1}{\Rightarrow} & \textrm{猫 喜欢 吃 鱼} \nonumber
\end{eqnarray}
}
\end{minipage}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
\def\CTeXPreproc{Created by ctex v0.2.13, don't edit!}
\documentclass[cjk,t,compress,12pt]{standalone}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{pstricks}
\usepackage{etex}
\usepackage{eso-pic,graphicx}
\usepackage{fancybox}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{xcolor}
\usepackage{CJK}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{hyperref}
\usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
\usepgflibrary{arrows} % LATEX and plain TEX and pure pgf
\usetikzlibrary{arrows} % LATEX and plain TEX when using Tik Z
\usetikzlibrary{decorations}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{positioning,fit,calc}
\usetikzlibrary{mindmap,backgrounds} % mind map
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\begin{document}
\begin{CJK}{UTF8}{you}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}
\node [anchor=west] (arule) at (0,0) {\large{$u \overset{r}{\Rightarrow} v$}};
\node [anchor=west,inner sep=2pt] (u) at ([xshift=-4em,yshift=-4em]arule.west) {VV};
\node [anchor=west,inner sep=2pt,fill=orange!40] (u) at ([xshift=-4em,yshift=-4em]arule.west) {VV};
\node [anchor=west] (upart2) at (u.east) {NN};
\node [anchor=east] (unumber) at (u.west) {$u:$};
\node [anchor=west,inner sep=2pt] (r) at ([xshift=-3em,yshift=2.5em]u.west) {VV};
\node [anchor=west,inner sep=2pt,fill=orange!40] (r) at ([xshift=-3em,yshift=2.5em]u.west) {VV};
\node [anchor=west] (rpart2) at (r.east) {$\to$};
\node [anchor=west,inner sep=2pt] (rpart3) at (rpart2.east) {};
\node [anchor=east] (rnumber) at (r.west) {$r:$};
\node [anchor=west,inner sep=2pt,fill=red!20] (rpart3) at (rpart2.east) {};
\node [anchor=west] (v) at ([xshift=5.5em]u.east) {$v$:};
\node [anchor=west,inner sep=2pt,fill=red!20] (vpart2) at (v.east) {};
\node [anchor=west] (vpart3) at (vpart2.east) {NN};
\node [anchor=west] (arrow) at ([xshift=3em]u.east) {$\Rightarrow$};
\draw [<-,dotted,thick] ([xshift=0.6em]arule.south west) ..controls +(south:0.7) and +(north:0.7).. ([xshift=-1.0em]upart2.north east);
\draw [<-,dotted,thick] ([xshift=-0.6em]arule.south east) ..controls +(south:0.7) and +(north:0.7).. ([xshift=1.0em]v.north west);
\draw [<-,dotted,thick] ([xshift=-0.4em,yshift=-0.5em]arule.north) ..controls +(180:0.7) and +(50:0.7) .. ([xshift=1em]rpart2.north west);
\draw [->,dotted,thick,ublue] (r.south) ..controls +(south:0.5) and +(north:0.5).. ([yshift=0]u.north);
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\end{CJK}
\end{document}
%----------------------------------------------------------------------------------------
% CHAPTER 2
%----------------------------------------------------------------------------------------
\renewcommand\figurename{}%将figure改为图
\renewcommand\tablename{}%将figure改为图
%\renewcommand\arraystretch{1.5}%将表格高度调整为1.5倍
\chapterimage{chapter_head_1.pdf} % Chapter heading image
\chapter{词法、语法及统计思想基础}
\parinterval 机器翻译并非是一个孤立的系统,它依赖于很多模块,并且需要很多学科知识的融合。现在的机器翻译系统大多使用统计模型对翻译问题进行建模,同时也会用到一些的自然语言处理工具对不同语言的文字进行分析。因此,在正式开始机器翻译内容的介绍之前,本章将会对相关的基础知识进行概述,包括:概率论与统计建模基础、语言分析、语言建模等。
\parinterval 概率论与统计建模是当代机器翻译模型的基础,这里并不会深入介绍相关数学知识,但是会对基本的数学概念进行简要描述,确保后续使用到数学工具是完备的。我们会把重点放在如何利用统计建模的方式对自然语言处理问题进行描述的方法上,这种手段在统计机器翻译和神经机器翻译中会被使用。
\parinterval 语言分析部分将以汉语为例介绍词法和句法分析。它们都是自然语言处理中的基本问题,而且在机器翻译中也会经常被使用。同样,我们会介绍这两个任务的定义和解决问题的思路。
\parinterval 语言建模是机器翻译中最常用的一种技术,它主要用于句子的生成和流畅度评价。我们会以传统的$n$-gram语言模型为例,对语言建模的相关概念进行介绍。但是,这里并不深入探讨语言模型技术,在后面的章节中还有会单独的内容对神经网络语言模型等前沿技术进行讨论。
%--问题概述-----------------------------------------
\section{问题概述 }\index{Chapter2.1}
\parinterval 很多时候机器翻译系统被看作是孤立的“黑盒”系统(图 \ref {figureC2.1} (a))。我们将一段文本作为输入送入机器翻译系统得到翻译好的译文输出。但是真实的机器翻译系统要复杂的多。因为系统看到的输入和输出的实际上只是一些符号串,这些符号并没有任何其它意义,因此需要进一步对这些符号串进行处理才能使机器翻译系统更好的使用它们,比如,需要定义翻译中最基本的单元是什么?符号串是否还有结构信息?如何用数学工具刻画这些基本单元和结构?
%----------------------------------------------
% 图2.1
\begin{figure}[htp]
\centering
\subfigure[机器翻译系统被看作一个黑盒] {\includegraphics[scale=1]{./Chapter2/Figures/figure-MT-system-as-a-black-box.pdf} }
\subfigure[机器翻系统 = 语言分析 + 翻译引擎] {\includegraphics[scale=1]{./Chapter2/Figures/figure-MT=language-analysis+translation-engine.pdf}}
\caption{机器翻译系统的结构对比}
\label{figureC2.1}
\end{figure}
%-------------------------------------------
\parinterval\ref{figureC2.1} (b)展示了一个机器翻译系统处理输入输出的例子。可以看到,输入的中文字串“猫喜欢吃鱼”被加工成一个新的结构
%----------------------------------------------
% 图2.2
\begin{figure}[htp]
\centering
\includegraphics[scale=1,width=3cm]{./Chapter2/Figures/figure-analysis-of-sentence-participle&syntactic.pdf}
\caption{中文句子“猫喜欢吃鱼”的分析结果(分词和句法分析)}
\label{figureC2.2}
\end{figure}
%-------------------------------------------
\parinterval 直觉上,这个结构有些奇怪,因为上面多了很多新的符号,而且还有一些线将不同符号进行连接。实际上这就是语言分析中对句子常用的结构表示 – 短语结构树。从原始的词串转化为图\ref {figureC2.2} 的样子,有两个步骤:
\vspace{0.5em}
\begin{itemize}
\item 分词。这个过程会把词串进行切分,切割成最小的单元。因为只有知道了什么是待处理字符串的最小单元,机器翻译系统才能对其进行表示、分析和生成。
\vspace{0.5em}
\item 句法分析。这个过程会对经过切分的句子进行进一步分析,得到句子的句法结构,这种结构是对句子的进一步抽象。比如,NP VP就可以表示名词短语(NP)和动词短语(VP)这种主谓结构。利用这些信息,机器翻译可以更加准确的对语言的结构进行分析和生成。
\end{itemize}
\vspace{0.5em}
\parinterval 类似的,机器翻译输出的结果也可以包含同样的信息。甚至系统输出英文译文之后,还有一个额外的步骤来把部分英文单词的大小写恢复出来,比如,上例中句首单词Cats的首字母要大写。
\parinterval 一般来说,在送入机器翻译系统前需要对文字序列进行处理和加工的过程被称为预处理。同理,在机器翻译模型输出译文后的处理作被称作后处理。这两个过程对机器翻译性能影响很大,比如,在神经机器翻译里,预处理使用不同策略的切分可能会造成翻译性能的天差地别。
\parinterval 值得注意的是,不论是分词还是句法分析,对于机器翻译来说并不是必须要求符合人的认知和语言学约束。换句话说,机器翻译所使用的“单词”和“结构”本身并不是为了符合人类的解释,它直接目的是更好的进行翻译。从系统的角度,有时候即使一些处理和我们的语言习惯有差别的“单词”和“结构”,仍然会带来性能的提升,比如在神经机器翻译中,在传统分词的基础上进一步使用双字节编码(Byte Pair Encoding,BPE)子词切分会使得机器翻译性能大幅提高。当然,自然语言处理中语言学信息的使用一直是学界关注的焦点。甚至关于语言学结构对机器翻译是否有作用这个问题也有争论。但是不能否认的是,无论是语言学的知识,还是计算机自己学习到的知识,对机器翻译都是有价值的。在后续章节会看到,这两种类型的知识对机器翻译帮助很大 \footnote[1]{笔者并不认同语言学结构对机器翻译的帮助有限,相反机器翻译需要更多的人类先验知识的指导。当然,这个问题不是这里讨论的重点。}
\parinterval 剩下的问题是如何进行句子的切分和结构的分析。思路有很多,一种常用的方法是对问题进行概率化,用统计模型来描述问题并求解。比如,一个句子切分的好坏,并不是非零即一的判断,而是要估计出这种切分的可能性大小,最终选择可能性最大的结果进行输出。这也是一种典型的用统计建模的方式来描述自然语言处理问题。
\parinterval 本章将会对上述问题及方法进行介绍。首先,会用一个例子给出统计建模的基本思路,之后会应用这种方法进行中文分词、语言建模和句法分析。这种统计建模的思想也会在后续章节中使用。
%--数学符号-----------------------------------------
\section{数学符号}\index{Chapter2.2}
\parinterval 为了便于后续内容的介绍,首先对本书中使用的概率和统计学概念和符号与定理进行说明。
%--随机变量和概率---------------------
\subsection{随机变量和概率}\index{Chapter2.2.1}
\parinterval 在自然界中,有这样一类具有偶然性的事件,它在一定条件下是否会发生是不确定的。例如,明天会下雨、掷一枚硬币是正面朝上、扔一个骰子的点数是5……这类可能会发生也可能不会发生,通过大量的重复试验,能发现其发生具有某种规律性的事件叫做\textbf{随机事件}
\parinterval \textbf{随机变量}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega= \{ \omega \}$为一个随机试验的样本空间,X=X$(\omega)$就是定义在样本空间$\omega$上的、取值为实数的单值函数,即X=X$(\omega)$为随机变量,记为X。随机变量是一种能随机选取数值的变量,常用大写的英文字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值,可以将其划分为离散变量和连续变量。
\parinterval 离散变量是指在其取值区间内可以被一一列举,总数有限并且可计算的数值变量。例如,用随机变量$X$代表某次投骰子出现的点数,点数只可能取1$\sim$6这6个整数,$X$是一个离散变量。
\parinterval 连续变量是在其取值区间内连续取值,无法被一一列举,具有无限个取值的变量。例如,图书馆的开馆时间是8:30-22:00,用$X$代表某人进入图书馆的时间,时间的取值范围是[8:30,22:00]这个时间区间,$X$是一个连续变量。
\parinterval 概率是度量随机事件呈现其每个可能状态的可能性的数值,本质上它是一个测度函数\cite{茆诗松2011概率论与数理统计教程}\cite{kolmogorov2018foundations}。概率的大小表征了随机事件在一次试验中发生的可能性大小。用$\textrm{P}(\cdot )$表示一个随机事件的可能性,即事件发生的概率。比如$\textrm{P}(\textrm{太阳从东方升起})$表示“太阳从东方升起的可能性”,同理,$\textrm{P}(A=B)$表示的就是“$A=B$”这件事的可能性。
\parinterval 在实际问题中,我们往往需要得到某些概率值。但是,真实的概率值往往是无法准确知道的,这时就需要对概率进行\textbf{估计},得到的结果是概率的\textbf{估计值(estimate)}。在概率论中,一个很简单的获取概率的方式是利用相对频度作为概率的估计值。如果$\{x_1,x_2,\dots,x_n \}$是一个试验的样本空间,在相同情况下重复试验N次,观察到样本$x_i (1\leq{i}\leq{n})$的次数为$n_N (x_i )$,那么$x_i$在这N次试验中的相对频率是$\frac{n_N (x_i )}{N}$。当N越来越大时,相对概率也就越来越接近真实概率$\textrm{P}(x_i)$,即$\lim_{N \to \infty}\frac{n_N (x_i )}{N}=\textrm{P}(x_i)$。实际上,很多概率模型都等同于相对频度估计,比如,对于一个多项式分布变量的概率的极大似然估计就可以用相对频度估计实现。
\parinterval 概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果我们把$A$看做一个离散变量,$a$看做变量$A$的一个取值,那么$\textrm{P}(A)$被称作变量$A$的概率函数,$\textrm{P}(A=a)$被称作$A = a$的概率值,简记为$\textrm{P}(a)$。例如,在相同条件下掷一个骰子50次,用$A$表示投骰子出现的点数这个离散变量,$a_i$表示点数的取值,$\textrm{P}_i$表示$A=a_i$的概率值。下表为$A$的概率分布,给出了$A$的所有取值及其概率。
%表1--------------------------------------------------------------------
\begin{table}[htp]
\centering
\caption{离散变量A的概率分布}
\begin{tabular}{c|c c c c c c}
\hline
\rule{0pt}{15pt} A & $a_1=1$ & $a_2=2$ & $a_3=3$ & $a_4=4$ & $a_5=5$ & $a_6=6$\\
\hline
\rule{0pt}{15pt} $\textrm{P}_i$ & $\textrm{P}_1=\frac{4}{25}$ & $\textrm{P}_2=\frac{3}{25}$ & $\textrm{P}_3=\frac{4}{25}$ & $\textrm{P}_4=\frac{6}{25}$ & $\textrm{P}_5=\frac{3}{25}$ & $\textrm{P}_6=\frac{1}{25}$ \\
\hline
\end{tabular}
\label{tab1}
\end{table}
%表1--------------------------------------------------------------------
\parinterval 除此之外,概率函数$\textrm{P(·)}$还具有非负性、归一性等特点,非负性是指,所有的概率函数$\textrm{P(·)}$都必须是大于等于0的数值,概率函数中不可能出现负数:$\forall{x},\textrm{P}{(x)}\geq{0}$。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为一,$\sum_{x}\textrm{P}{(x)}={1}$
\parinterval 对于离散变量$A$$\textrm{P}(A=a)$是个确定的值,可以表示事件$A=a$的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用概率分布函数$\textrm{F}(x)$和概率密度函数$\textrm{f}(x)$来统一描述随机变量的取值分布情况。概率分布函数$\textrm{F}(x)$取值小于某个值的概率,是概率的累加形式。假设$A$是一个随机变量,$a$是任意实数,将函数$\textrm{F}(a)=\textrm{P}\{A\leq a\}$$-\infty<a<\infty $定义为$A$的分布函数。通过分布函数,我们可以清晰地表示任何随机变量的概率。
\parinterval 对于连续变量,我们不能像离散变量一样列出所有的概率取值,而是用概率密度函数来描述分布情况。概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设$\textrm{f}(x) \geq 0$是连续变量$X$的概率密度函数,$X$的分布函数就可以用$\textrm{F}(X)=\int_{-\infty}^x \textrm{f}(x)dx \ (x\in R)$来表示。
%----------------------------------------------
% 图2.3
\begin{figure}[htp]
\centering
\subfigure { \includegraphics[scale=1,height=4.5cm]{ ./Chapter2/Figures/figure-Probability-density-function.jpg} }
\subfigure {\includegraphics[scale=1,height=4.5cm]{./Chapter2/Figures/figure-Distribution-function.jpg}}
\caption{一个概率密度函数(左)与其对应的分布函数(右)}
\label{figureC2.3}
\end{figure}
%-------------------------------------------
\subsection{联合概率、条件概率和边缘概率}\index{Chapter2.2.2}
\parinterval 联合概率是指多个事件同时发生,每个随机变量满足各自条件的概率,表示为$\textrm{P}(AB)$
\parinterval 条件概率是指$A$$B$为任意的两个事件,在事件$A$已出现的前提下,事件$B$出现的概率,使用$\textrm{P}(B \mid A)$表示。通常来说,$\textrm{P}(B \mid A) \neq \textrm{P}(B)$
\parinterval 贝叶斯法则是条件概率计算时的重要依据,条件概率可以表示为
%----------------------------------------------
\begin{equation}
\textrm{P}{(B|A)} = \frac{\textrm{P}(A\cap{B})}{\textrm{P}(A)} = \frac{\textrm{P}(A)\textrm{P}(B|A)}{\textrm{P}(A)} = \frac{\textrm{P}(B)\textrm{P}(A|B)}{\textrm{P}(A)}
\label{eqC2.1}
\end{equation}
%----------------------------------------------
\parinterval 边缘概率是和联合概率对应的,它指的是$\textrm{P}(X=a)$$\textrm{P}(Y=b)$,即仅与单个随机变量有关的概率称为边缘概率。
\parinterval 对于离散随机变量$X$$Y$,我们知道$\textrm{P}(X,Y)$,则边缘概率$\textrm{P}(X)$可以通过求和的方式得到,如下式所示
%----------------------------------------------
\begin{equation}
\forall x \in X ,\textrm{P}(X=x)=\sum_{y} \textrm{P}(X=x,Y=y)
\label{eqC2.2}
\end{equation}
%----------------------------------------------
\parinterval 对于连续变量,边缘概率$\textrm{P}(X)$需要通过积分得到,如下式所示
%----------------------------------------------
\begin{equation}
\textrm{P}(X)=\int \textrm{P}(x,y)dy
\label{eqC2.3}
\end{equation}
%----------------------------------------------
\parinterval 为了更好的区分条件概率、边缘概率和联合概率,我们将通过图\ref{figureC2.4}所示的面积来举例说明。
%----------------------------------------------
% 图2.4
\begin{figure}[htp]
\centering
\includegraphics[scale=1,height=2cm]{ ./Chapter2/Figures/figure-schematic-edge-probability&joint-probability.png}
\caption{一个概率密度函数与其对应的分布函数}
\label{figureC2.4}
\end{figure}
%-------------------------------------------
\parinterval 如图\ref{figureC2.4}所示,矩形A代表事件X发生所对应的所有可能状态,矩形B代表事件Y发生所对应的所有可能状态,矩形C代表A和B的交集,则
\parinterval 边缘概率:矩形A或者矩形B的面积;
\parinterval 联合概率:矩形C的面积;
\parinterval 条件概率:联合概率/对应的边缘概率,如:$\textrm{P}(A \mid B)$=矩形C的面积/矩形B的面积。
\subsection{链式法则}\index{Chapter2.2.3}
\parinterval 由条件概率公式$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$,我们知道条件概率的定义$\textrm{P}(a \mid b)$,其描述的是两个事件$a$$b$,在$b$事件发生的条件下,$a$发生的概率。如果我们将其推广到三个事件$a$$b$$c$,为了计算$\textrm{P}(a,b,c)$我们可以运用两次$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$,计算过程如下:
%----------------------------------------------
\begin{equation}
\textrm{P}(a,b,c)=\textrm{P}(a \mid b ,c)\textrm{P}(b,c)
\label{eqC2.4}
\end{equation}
\begin{equation}
\textrm{P}(b,c)=\textrm{P}(b \mid c)\textrm{P}(c)
\label{eqC2.5}
\end{equation}
\begin{equation}
\textrm{P}(a,b,c)=\textrm{P}(a \mid b,c)\textrm{P}(b \mid c)\textrm{P}(c)
\label{eqC2.6}
\end{equation}
%----------------------------------------------
\parinterval 推广到$n$个事件,我们得到了链式法则的公式
%----------------------------------------------
\begin{equation}
\textrm{P}(x_1,x_2,...,x_n)=\textrm{P}(x_1) \prod_{i=2}^n \textrm{P}(x_i \mid x_1,x_2,...,x_{(i-1)})
\label{eqC2.7}
\end{equation}
%----------------------------------------------
\parinterval 我们可以通过下面这个例子更好的理解链式法则,如图所示,$A$$B$$C$$D$$E$分别代表五个事件,其中,$A$只和$B$有关,$C$只和$B$$D$有关,$E$只和$C$有关,$B$$D$不依赖其他任何事件。则$\textrm{P}(A,B,C,D,E)$的表达式如下式:
%----------------------------------------------
% 图2.5
\begin{figure}[htp]
\centering
\includegraphics[scale=1,height=2.5cm]{ ./Chapter2/Figures/figure-schematic-chain-rule.png}
\setlength{\belowcaptionskip}{-1cm}
\caption{A,B,C,D,E关系图}
\label{figureC2.5}
\end{figure}
%-------------------------------------------
\begin{equation}
\begin{split}
\textrm{P}(A,B,C,D,E)&=\textrm{P}(E \mid A,B,C,D) \cdot \textrm{P}(A,B,C,D) \\
&=\textrm{P}(E \mid A,B,C,D) \cdot \textrm{P}(D \mid A,B,C) \cdot \textrm{P}(A,B,C) \\
&=\textrm{P}(E \mid A,B,C,D) \cdot \textrm{P}(D \mid A,B,C) \cdot \textrm{P}(C \mid A,B) \cdot \textrm{P}(A,B) \\
&=\textrm{P}(E \mid A,B,C,D) \cdot \textrm{P}(D \mid A,B,C) \cdot \textrm{P}(C \mid A,B) \cdot \textrm{P}(B \mid A) \cdot \textrm{P}(A)
\label{eqC2.8}
\end{split}
\end{equation}
\parinterval 根据图\ref {figureC2.5} 易知$E$只和$C$有关,所以$\textrm{P}(E \mid A,B,C,D)=\textrm{P}(E \mid C)$$D$不依赖于其他事件,所以$\textrm{P}(D \mid A,B,C)=\textrm{P}(D)$$C$只和$BD$有关,所以$\textrm{P}(C \mid A,B)=\textrm{P}(C \mid B)$$B$不依赖于其他事件,所以$\textrm{P}(B \mid A)=\textrm{P}(B)$。最终化简可得:
\begin{equation}
\textrm{P}(A,B,C,D,E)=\textrm{P}(E \mid C) \cdot \textrm{P}(D) \cdot \textrm{P}(C \mid B) \cdot \textrm{P}(B)
\label{eqC2.9}
\end{equation}
\parinterval 由此可以看出使用链式法则可以大大减小求解概率表达式时的计算量。
\subsection{贝叶斯法则(Bayes’Rule)}\index{Chapter2.2.4}
\parinterval 首先介绍一下全概率公式:全概率公式(Law of total probability)是概率论中重要的公式,它可以将一个复杂事件发生的概率分解成不同情况的小事件发生概率的和。这里我们先介绍一个概念——划分。
\parinterval 若集合S的一个划分事件为$B_1,…,B_n$是指它们满足
\begin{equation}
\bigcup_{i=1}^n B_i=S \textrm{}B_iB_j=\varnothing , i,j=1,...,n,i\neq j
\label{eqC2.9}
\end{equation}
\parinterval$B_1,…,B_n$是S的一个划分,A为事件,则
\begin{equation}
\textrm{P}(A)=\sum_{k=1}^n \textrm{P}(A \mid B_k)\textrm{P}(B_k)
\label{eqC2.9}
\end{equation}
\parinterval 这就是全概率公式。
\parinterval 举个例子,小张从家到公司有三条路分别为a,b,c,选择每条路的概率分别为0.5,0.3,0.2,那么:
\parinterval $S_a$: 选择a路去上班,$S_b$: 选择b路去上班,$S_c$: 选择c路去上班 $S$:小张去上班,这四件事的关系即为:$S_a$$S_b$$S_c$$S$的划分。
\parinterval 如果三条路不拥堵的概率分别为$\textrm{P}({S_{a}^{'}})$=0.2,$\textrm{P}({S_{b}^{'}})$=0.4,$\textrm{P}({S_{c}^{'}})$=0.7,那么事件L:小张上班没有遇到拥堵情况的概率就是:
\begin{equation}
\begin{split}
{\textrm{P}(L)} &= {\textrm{P}( L| S_a )\textrm{P}(S_a )+\textrm{P}( L| S_b )\textrm{P}(S_b )+\textrm{P}( L| S_c )\textrm{P}(S_c )}\\
& ={\textrm{P}({S_{a}^{'}})\textrm{P}(S_a)+\textrm{P}({S_{b}^{'}})\textrm{P}(S_b)+\textrm{P}({S_{c}^{'}})\textrm{P}(S_c) }\\
& ={0.36}\nonumber \\
\end{split}
\end{equation}
%$\textrm{P}(L)=\textrm{P}( L| S_a )\textrm{P}(S_a )+\textrm{P}( L| S_b )\textrm{P}(S_b )+\textrm{P}( L| S_c )\textrm{P}(S_c )=\textrm{P}({S_{a}^{'}})\textrm{P}(S_a)+\textrm{P}({S_{b}^{'}})\textrm{P}(S_b)+\textrm{P}({S_{c}^{'}})\textrm{P}(S_c)=0.36$
\parinterval \textbf{贝叶斯法则(Bayes’ rule)}是概率论中的一个定理,通常用于知$\textrm{P}(A \mid B)$$\textrm{P}(B \mid A)$。其内容如下:
\parinterval$B_1,…,B_n$是S的一个划分,A为事件,则对于$i=1,…,n$,有如下公式
\begin{equation}
\textrm{P}(B_i \mid A)=\frac {\textrm{P}(A \mid B_i)\textrm{P}(B_i) } { \sum_{k=1}^n\textrm{P}(A \mid B_k)\textrm{P}(B_k) }
\label{eqC2.9}
\end{equation}
\parinterval 下面我们来看看贝叶斯公式的推导。由前面的知识,我们知道条件概率的公式为
\begin{equation}
\textrm{P}(B \mid A)= \frac {\textrm{P}(AB)} {\textrm{P}(A)}
\label{eqC2.9}
\end{equation}
\parinterval 由乘法定理我们可以得到
\begin{equation}
\textrm{P}(AB)=\textrm{P}(B)\textrm{P}(A \mid B)
\label{eqC2.9}
\end{equation}
\parinterval$B_1,…,B_n$是S的一个划分,A为事件,由全概率公式我们可以得到
\begin{equation}
\textrm{P}(A)=\textrm{P}(A \mid B_1)\textrm{P}(B_1)+\textrm{P}(A \mid B_2)\textrm{P}(B_2)+\ldots +\textrm{P}(A \mid B_n)\textrm{P}(B_n)
\label{eqC2.9}
\end{equation}
\parinterval 将乘法定理带入条件概率的分子,将全概率公式带入条件概率的分母,我们就可以得到贝叶斯定理
\begin{equation}
\textrm{P}(B_i \mid A)=\frac {\textrm{P}(A \mid B_i)\textrm{P}(B_i) } {\sum_{k=1}^n \textrm{P}(A\mid B_k)\textrm{P}(B_k)}
\label{eqC2.9}
\end{equation}
\parinterval 由上式,我们也可以得到贝叶斯公式的另外两种写法
\begin{equation}
\textrm{P}(A \mid B)=\frac { \textrm{P}(A \mid B)\textrm{P}(B) } {\textrm{P}(A)}
\label{eqC2.9}
\end{equation}
\begin{equation}
\textrm{P}(A \mid B)=\frac { \textrm{P}(A \mid B)\textrm{P}(B) } {\textrm{P}(A \mid B)\textrm{P}(B)+\textrm{P}(A \mid \bar{B}) \textrm{P}(\bar{B})}
\label{eqC2.9}
\end{equation}
\parinterval 贝叶斯公式常用于根据已知的结果来推断使之发生的各因素的可能性。
\subsection{KL距离和熵}\index{Chapter2.2.5}
\subsubsection{(一)信息熵}\index{Chapter2.2.5.1}
\parinterval 熵是热力学中的一个概念,同时也是对系统无序性的一种度量标准,在机器翻译领域,最常用到的是信息熵这一概念。一条信息的信息量大小与它的不确定性有着直接的关系,如果我们需要确认一件非常不确定甚至于一无所知的事情,那么需要理解大量的相关信息才能确认清楚;同样的,如果我们对某件事已经非常确定,那么就不需要太多的信息就可以把它搞清楚。
\begin{example}
确定性和不确定性的事件
\qquad\qquad\quad“太阳从东方升起”
\qquad\qquad\quad“明天天气多云”
\label{example3-1}
\end{example}
\parinterval 在这两句话中,“太阳从东方升起”是一件确定性事件,几乎不需要查阅更多信息就可以确认,因此这件事的信息熵相对较低;而“明天天气多云”这件事,我们需要询问气象局的相关研究人员,或者关注天气预报,才能大概率确定的一件事,它的不确定性很高,因而它的信息熵也就相对较高。因此,信息熵也是对事件不确定性的度量。
\parinterval 一个事件X的自信息(self-information)的表达式为:
\begin{equation}
\textrm{I}(x)=-log\textrm{P}(x)
\label{eqC2.9}
\end{equation}
\parinterval 其中,$\textrm{P}(x)$表示概率,自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为$nats$,其中1$nats$是通过观察概率为$\frac{1}{e}$的事件而获得的信息量;当底数为2时,单位为$bits$$shannons$,我们通常使用前者。$\textrm{I}(x)$$\textrm{P}(x)$的函数关系如图\ref{figureC2.6} 所示:
%----------------------------------------------
% 图2.5
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{ ./Chapter2/Figures/figure-Self-information-function.jpg}
\caption{自信息函数图像({\red图片需要换一个高清的}}
\label{figureC2.6}
\end{figure}
%-------------------------------------------
\parinterval 自信息只处理单一的结果。若量化整个概率分布中的不确定性或者说信息量,我们可以用信息熵,其公式如下:
\begin{equation}
\textrm{H}(x)=\sum_{x \in \textrm{X}}[ \textrm{P}(x) \textrm{I}(x)] =- \sum_{x \in \textrm{X} } [\textrm{P}(x)log(\textrm{P}(x)) ]
\label{eqC2.9}
\end{equation}
\parinterval 一个分布的信息熵也就是从该分布中得到的一个事件的期望信息量。比如,$a$$b$$c$$d$三支球队,三支队伍夺冠的概率分别是$P1$$P2$$P3$$P4$,某个人对比赛不感兴趣但是又想知道哪只球队夺冠,通过使用二分法2次就确定哪支球队夺冠了。但其实,我们知道这四只球队中c的实力比较强劲,那么猜1次就可以确定。所以对于前者,哪只球队夺冠的信息量较高,信息熵也相对较高,对于后者信息量和信息熵也就相对较低。因此我们可以得知:较为尖锐的分布具有较低的熵;分布越接近均匀熵越大。
\subsubsection{(二)KL距离}\index{Chapter2.2.5.2}
\parinterval 如果在相同的随机变量$X$上有两个独立的概率分布P$(x)$和Q$(x)$,那么我们可以使用KL距离("Kullback-Leibler" 散度)来衡量这两个分布的不同,也就是大家所说的相对熵,其公式如下:
\begin{equation}
\textrm{D}_{KL}(P\parallel Q)=\sum_{x \in \textrm{X}} [ \textrm{P}(x)log \frac{\textrm{P}(x) }{ \textrm{Q}(x) } ] =\sum_{x \in \textrm{X} }[ \textrm{P}(x)(log\textrm{P}(x)-log \textrm{Q}(x))]
\label{eqC2.9}
\end{equation}
\parinterval 这一概念的意义在于:在相同事件空间里,概率分布$\textrm{P}(x)$对应的每个事件,若用概率分布Q$(x)$编码时,平均每个基本事件的信息量增加了多少。它衡量的是相同事件空间里的两个概率分布的差异情况。KL距离有两条重要的性质:
\vspace{0.5em}
\begin{itemize}
\item 非负性,即$\textrm{D}_{KL} (P \parallel Q) \geqslant 0$,等号成立条件是$P$$Q$在离散情况下具有相同的概率分布,在连续条件下处处相等。可简单理解为$P$$Q$等价。
\vspace{0.5em}
\item 不对称性,即$\textrm{D}_{KL} (P \parallel Q) \neq \textrm{D}_{KL} (Q \parallel P)$,所以$KL$距离并不代表我们日常生活中的那个距离。这种不对称性意味着在选择使用$\textrm{D}_{KL} (P \parallel Q)$或者$\textrm{D}_{KL} (Q \parallel P)$,将会产生重要的影响。
\end{itemize}
\vspace{0.5em}
\subsubsection{(三)交叉熵}\index{Chapter2.2.5.3}
\parinterval 交叉熵是一个与KL距离密切相关的概念,它的公式是:
\begin{equation}
\textrm{H}(P,Q)=-\sum_{x \in \textrm{X}} [\textrm{P}(x) log \textrm{Q}(x) ]
\label{eqC2.9}
\end{equation}
\parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,求关于Q的交叉熵的最小值等价于求KL距离的最小值。交叉熵与KL距离的意义相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。
\section{中文分词}\index{Chapter2.3}
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串。比如,对于一个中文句子,单词之间是没有间隔的,因此我们需要把一个个的单词切分出来,这样机器翻译系统可以区分不同单元。甚至,我们可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人=>中国 人)。我们可以把上述过程看作是一种分词过程,即:将一个输入的自然语言字符串切割成单元序列(token序列),每个单元都对应可以处理的最小单位。
%----------------------------------------------
% 图2.6
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-a-simple-pre-processing-process.pdf}
\caption{一个简单的预处理流程}
\label{figureC2.7}
\end{figure}
%-------------------------------------------
\parinterval 分词得到的单元序列可以是语言学上的词序列,也可以是根据其它定义的单元。在本章中,我们把分词得到的一个个单元称为单词,尽管这些单元可以不是语言学上的完整单词。而这个过程也被称作词法分析。除了汉语,词法分析在日语、泰语等单词之间无明确分割符的语言中有着广泛的应用,芬兰语、维吾尔语等一些形态学十分丰富的语言,也需要使用词法分析来解决复杂的词尾、词缀变化等形态学变化。
\parinterval 在机器翻译中,分词系统的好坏往往会决定机器翻译的质量。分词的目的是定义系统处理的基本单元,那么什么叫做“词”呢?关于词的定义有很多,比如:\\
%-------------------------------------------
\begin{definition}
《新华字典》
语言里最小的可以独立运用的单位:词汇。
\end{definition}
%-------------------------------------------
%-------------------------------------------
\begin{definition}
《维基百科》
单词(word),含有语义内容或语用内容,且能被单独念出来的的最小单位。
\end{definition}
%-------------------------------------------
%-------------------------------------------
\begin{definition}
《国语辞典》
語句中具有完整概念,能獨立自由運用的基本單位。
\end{definition}
%-------------------------------------------
%-------------------------------------------
\begin{definition}
《现代汉语词典》
说话或诗歌、文章、戏剧中的语句
\end{definition}
%-------------------------------------------
\parinterval 从语言学的角度,普遍认为词是可以单独运用的、包含意义的基本单位。我们使用有限的词可以组合出无限的句子,这也正体现出自然语言的奇妙之处。
\parinterval 不过,机器翻译并不仅仅局限在语言学定义的单词,因此机器翻译系统所使用的分词也不仅仅把句子按照词切开,比如,神经机器翻译中广泛使用的BPE子词切分方法,可以被理解为将词的一部分也进行切开,也就是得到词片段送给机器翻译系统使用。比如,对如下英文字符串,可以得到如下切分结果\\
\parinterval Interesting -> Interest/ing selection -> se/lect/ion procession -> pro/cess/ion
\parinterval Interested -> Interest/ed selecting -> se/lect/ing processing -> pro/cess/ing
\parinterval Interests -> Interest/s selected -> se/lect/ed processed -> pro/cess/ed \\
\parinterval 词法分析的重要性在自然语言处理领域已经有共识。句子基本单元切分的颗粒度直接关系到后续系统的性能。如果切分的颗粒度很大,获得的单词的歧义也很小,比如“中华人民共和国”整体作为一个单词不存在歧义,而如果单独的一个单词“国”,可能会代表“中国”、“美国”等不同的国家,存在歧义。但是随着切分颗粒度的增大,特定单词出现的频度也随之降低,低频词容易和噪音混淆,系统很难进行学习。因此,处理这些问题并开发适合翻译任务的分词系统是机器翻译的第一步。
\subsection{基于词典的分词方法}\index{Chapter2.3.1}
\parinterval 然而,计算机并不能像人类一样在概念上理解“词”,因此需要使用其他的方式让计算机可以进行分词。一个最简单的方法就是给定一个词典,在这个词典中出现的汉字组合就是我们定义的“词”。也就是,我们通过一个词典定义一个标准,符合这个标准定义的字符串都是合法的“词”。
\parinterval 在使用基于词典的分词方法时,只需预先加载词典到计算机中,扫描输入句子,查询每个词串是否出现在词典中。如图\ref{figureC2.8} 所示,比如,我们有一个包含六个词的词典,给定输入句子“确实现在物价很高”后,我们自左至右遍历输入句子的每个字,发现词串“确实”在词典中出现,说明“确实”是一个“词”,进行分词操作并在切分该“词”之后重复这个过程。
%----------------------------------------------
% 图2.7
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-Example-of-word-segmentation-based-on-dictionary.pdf}
\setlength{\belowcaptionskip}{-0.2cm}
\caption{基于词典进行分词实例}
\label{figureC2.8}
\end{figure}
%-------------------------------------------
\parinterval 但是,基于词典的分词方法很“硬”。这是因为自然语言非常灵活,经常出现歧义,用词典定义的合法单词之间有重叠的交叉型歧义就很难解决。图\ref{figureC2.9} 就给出了上面例子中的交叉型歧义,从词典中查看,“实现”和“现在”都是合法的单词,但是在句子中二者有重叠,因此词典无法告诉我们哪个结果是正确的。
%----------------------------------------------
% 图2.8
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-cross-type-word-segmentation-ambiguity.pdf}
\setlength{\belowcaptionskip}{-0.2cm}
\caption{交叉型分词歧义}
\label{figureC2.9}
\end{figure}
%-------------------------------------------
\parinterval 类似的例子在生活中也很常见。再比如“答辩结束的和尚未答辩的同学都请留在教室”一句中,正常的分词结果是“答辩 结束 的 和 尚未 答辩 的 同学 都 请 留在 教室”,但是由于“尚未”、“和尚”都是常见词汇,使用基于词典的分词方法在这时很容易出现切分错误。
\parinterval 基于词典的分词方法是典型的基于规则的方法,完全依赖于人工给定的词典。在遇到歧义时,需要人工定义消除歧义的规则,比如,可以自左向右扫描每次匹配最长的单词,这是一种简单的启发式的消歧策略。图2.4中的例子实际上就是这种使用这种策略得到的分词结果。但是,启发式的消岐方法对人工的依赖程度很高,而且启发式规则也不能处理所有的情况。所以说简单的基于词典的方法还不能很好的解决分词问题。
\subsection{基于统计的分词方法}\index{Chapter2.3.2}
\parinterval 既然基于词典的方法有很多问题,我们就需要一种更为有效的方法。在上文中提到,想要搭建一个分词系统,需要让计算机知道什么是“词”,那么我们可不可以给定已经切分好的分词数据,让计算机在这些数据中学习到规律呢?答案是肯定的 - 利用“数据”来让计算机明白“词”的定义,让计算机直接在数据中学到知识,这就是我们常说的数据驱动的方法。这个过程也是一个典型的基于统计建模的学习。
\subsubsection{统计模型的学习与推断}\index{Chapter2.3.2.1}
\parinterval 在分词任务中,数据驱动主要指用已经分词切分好的数据“喂”给系统,这个数据也被称作标注数据。在获得标注训练数据后,自动学习一个统计模型来描述分词的过程,而这个模型会把分词的“知识”作为参数保存在模型中。当送入一个新的需要分词的句子时,可以利用学习到的模型对所有可能的分词结果进行预测,并进行概率化的描述,最终选择概率最大的结果作为输出。这个方法就是基于统计的分词方法。具体来说,可以分为两个步骤:
\vspace{0.5em}
\begin{itemize}
\item 学习。利用标注数据,对统计模型的参数进行学习。
\vspace{0.5em}
\item 推断。利用学习到的模型和参数,对新的句子进行切分。
\end{itemize}
\vspace{0.5em}
%----------------------------------------------
% 图2.9
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-word-segmentation-based-on-statistics.pdf}
\caption{基于统计的分词流程}
\label{figureC2.10}
\end{figure}
%-------------------------------------------
\parinterval\ref{figureC2.10} 给出了一个基于统计建模的汉语分词实例。左侧是标注数据,其中的每个句子已经经过人工标注分词结果(单词用斜杠分开)。之后,建立一个统计模型,记为P(·)。模型通过在标注数据上的学习达到能够很好描述问题的状态。最后,对于新的未分词的句子,使用模型P(·)对每个可能的分切进行概率估计,之后选择概率最高的切分结果输出。
\subsubsection{掷骰子游戏}\index{Chapter2.3.2.2}
\parinterval 上述过程的核心在于从数据中学习一种对分词现象的统计描述,即学习函数P(·)。如何让计算机利用分词好的数据学习到分词结果呢?可以先看一个有趣的实例,用我们生活中比较常见的掷骰子来说,掷一个骰子,玩家猜一个数字,猜中就算赢,按照一般的常识,随便选一个数字,获胜的概率是一样的,即我们所有选择的获胜概率仅是1/6。因此这个游戏玩家很难获胜,除非运气很好。假如,我们进行一次游戏,玩家随便选了一个数字,比如是1,投掷30骰子,得到命中7/30 > 1/6,还不错。
%----------------------------------------------
% 图2.11
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-the-dice-game.pdf}
\setlength{\belowcaptionskip}{-0.2cm}
\caption{骰子结果}
\label{figureC2.11}
\end{figure}
%-------------------------------------------
\parinterval 似乎玩家的胜利只能来源于运气。不过,请注意,这里的假设“随便选一个数字”这本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。
\begin{equation}
\textrm{P}("1")=\textrm{P}("2")=...=\textrm{P}("5")=\textrm{P}("6")=1/6
\label{eqC2.9}
\end{equation}
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。但是如果骰子的六个面不均匀呢?我们可以用一种更加“聪明”的方式定义一个新模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。这里,为了保证概率的归一性,我们只需定义$\theta_1 \sim \theta_5$,最后一个面的概率用1减去前几个面的概率之和进行表示,即
\begin{equation}
\begin{split}
\textrm{P}("1") &=\theta_1 \\
\textrm{P}("2") &=\theta_2 \\
\textrm{P}("3") &=\theta_3 \\
\textrm{P}("4") &=\theta_4 \\
\textrm{P}("5") &=\theta_5 \\
\textrm{P}("6") &=1-\sum_{1 \leq i \leq 5}\theta_i \qquad \lhd \textrm {归一性}
\label{eqC2.9}
\end{split}
\end{equation}
\parinterval 这里$\theta_1 \sim \theta_5$可以被看作是模型的参数。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的参数估计。我们可以将这个不均匀的骰子先实验性的掷很多次,这可以被看作是独立同分布的若干次采样,比如X次,发现“1”出现X1次,“2”出现X2次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\begin{equation}
\textrm{P}("i")=\frac {X_i}{X}
\label{eqC2.9}
\end{equation}
\parinterval 当X足够大的话,$\frac{X_i}{X}$可以无限逼近P(“i”)的真实值,因此可以通过大量的实验推算出掷骰子各个面的概率的准确估计值。回归到我们的问题中,如果我们在正式开始游戏前,预先掷骰子30次,得到如图\ref{figureC2.12}的结果。
%----------------------------------------------
% 图2.12
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-the-dice-game2.pdf}
\caption{预投骰子结果}
\label{figureC2.12}
\end{figure}
%-------------------------------------------
\parinterval 于是,我们看到了一个有倾向性的模型(图 \ref{figureC2.13}):
%----------------------------------------------
% 图2.13
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-the-dice-game-model.pdf}
\caption{预设的骰子模型}
\label{figureC2.13}
\end{figure}
%-------------------------------------------
在这样的预先实验基础上,我们知道如果再次玩掷骰子游戏的话,选则数字“4”获胜的可能性是最大的。
\parinterval 通过上面这个掷骰子的游戏,可以得到一个道理:上帝是不公平的。因为在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种偏置(bias),也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。我们设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\subsubsection{全概率分词方法}\index{Chapter2.3.2.3}
\parinterval 回到分词的问题上。与掷骰子游戏类似,分词系统的统计学原理也可以这么理解:假设有已经人工分词好的句子,其中每个单词的出现就好比掷一个巨大的骰子,与前面的例子中有所不同的是:
\vspace{0.5em}
\begin{itemize}
\item 骰子有很多个面,每个面代表一个单词。
\vspace{0.5em}
\item 骰子是不均匀的,有些面会出现比较多次。
\end{itemize}
\vspace{0.5em}
\parinterval 如果把投掷这个新的骰子,可能会得到这样的结果,
%----------------------------------------------
% 图2.14
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-full-probability-word-segmentation-1.pdf}
\caption{新投骰子结果}
\label{figureC2.14}
\end{figure}
%-------------------------------------------
\parinterval 如果,我们把这些数字换成汉语中的词,比如
\parinterval 88 – 这
\parinterval 87 – 是
\parinterval 45 – 一
\parinterval
\parinterval 之后可以得到
%----------------------------------------------
% 图2.15
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-full-probability-word-segmentation-2.pdf}
\setlength{\belowcaptionskip}{-0.2cm}
\caption{换成汉字后结果}
\label{figureC2.15}
\end{figure}
%-------------------------------------------
\parinterval 这样,在中文分词问题中,可以假设我们拥有一个不均匀的多面骰子,每个面都是一个词,我们获取人工分词标注数据后,可以统计每个单词出现的次数,进而利用极大似然估计推算出每个单词出现的概率的估计值。
%----------------------------------------------
% 图2.16
\begin{figure}[htp]
\centering
\includegraphics[scale=1,height=2.5cm]{./Chapter2/Figures/figure-full-probability-word-segmentation-3.pdf}
\caption{每个单词概率估计值}
\label{figureC2.16}
\end{figure}
%-------------------------------------------
\parinterval 通过这个学习过程,我们得到了每个词出现的概率,即模型的参数。而我们原始的问题是如何计算这个整句分词结果的概率,比如
\begin{equation}
\textrm{P}\textrm{(‘确实/现在/数据/很/多’)}=?
\label{eqC2.9}
\end{equation}
\parinterval 这里可以使用“大题小做”的技巧:原始的问题很复杂,我们将其切分为小问题。这样,将复杂的分词问题简单化,基于独立性假设解决分词问题:假定所有词出现都是相互独立的。设$w_1 w_2 w_3…w_m$表示一个由单词$w_1,w_2,w_3,…,w_m$组成的切分结果,于是有:
%-------------------------------------------
\begin{equation}
\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{eqC2.9}
\end{equation}
\begin{equation}
\begin{split}
\textrm{P}\textrm{(‘确实/现在/数据/很/多’)} \\
& = \textrm{P}\textrm{'确实'} \cdot \textrm{P}\textrm{'现在'} \cdot \textrm{P}\textrm{'数据'} \cdot \textrm{P}\textrm{'很'} \cdot \textrm{P}\textrm{'多'} \\
& = 0.000001 \times 0.000022 \times 0.000009 \times 0.000010 \times 0.000078 \\
& = 1.5444 \times 10^{-25}
\label{eqC2.9}
\end{split}
\end{equation}
\parinterval 以“确实现在数据很多”这个实例来说,如果把这句话按照“确实/现在/数据/很/多”这样的方式进行切分,这句切分的概率P(“确实/现在/数据/很/多”)可以通过每个词出现概率相乘的方式进行计算。这个假设也是自然语言处理中1-gram语言模型假设,即当前词的生成与任何历史都无关。当然,独立性假设并不能完美描述客观世界的问题,但是它大大化简了问题的复杂度。
%----------------------------------------------
% 图2.17
\begin{figure}[htp]
\centering
\includegraphics[scale=1]{./Chapter2/Figures/figure-examples-of-Chinese-word-segmentation-based-on-1-gram-model.pdf}
\caption{基于1-gram语言模型的中文分词实例}
\label{figureC2.17}
\end{figure}
%-------------------------------------------
\parinterval 最后让我们再整体看一下分词系统的学习和使用过程。如图\ref {figureC2.17}所示,我们利用大量人工标注好的分词数据,通过统计学习方法获得一个统计模型P(·),给定任意分词结果$W=w_1 w_2…w_m$,都能通过$\textrm{P}(W)=\textrm{P}(w_1) \times \textrm{P}(w_2 ) \times\textrm{P}(w_m)$计算这种切分的概率值。
\parinterval 经过充分训练的统计模型P(·)就是我们得到分词模型。对于任意输入的新句子S,通过这个模型找到最佳的分词结果$W^*$输出。假设输入句子S是“确实现在数据很多”,可以通过列举获得不同切分方式的概率,其中概率最高的切分方式,就是我们的目标输出。
\parinterval 这种分词方法也被称作基于1-gram语言模型的分词,或全概率分词,使用标注好的分词数据进行学习,获得分词模型。这种方法最大的优点是整个学习过程(模型训练过程)和推导过程(处理新句子进行切分的过程)都是全自动进行的。虽然这种方法十分简单,但是其效率很高,因此被广泛使用在工业界系统里。
\parinterval 当然,真正的分词系统还需要解决很多其它问题,比如使用动态规划等方法高效搜索最优解以及如何处理未见过的词等等,由于本节的重点是介绍中文分词的基础方法和统计建模思想,因此无法覆盖所有中文分词的技术内容,有兴趣的读者可以参考2.6节的相关文献做进一步深入研究。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{语言模型 }\index{Chapter2.4}
\parinterval 在基于统计的汉语分词模型中,我们通过“大题小做”的技巧,利用独立性假设把整个句子的单词切分概率转化为每个单个词出现概率的乘积。这里,每个单词也被称作1-gram(或uni-gram),而1-gram概率的乘积实际上也是在度量词序列出现的可能性(记为$\textrm{P}(w_1 w_2...w_m)$)。这种计算整个单词序列概率$\textrm{P}(w_1 w_2...w_m)$的方法被称为统计语言模型。1-gram语言模型是最简单的一种语言模型,它没有考虑任何的上下文。很自然的一个问题是:能否考虑上下文信息构建更强大的语言模型,进而得到跟准确的分词结果。下面我们将进一步介绍更加通用的$n$-gram语言模型,它在机器翻译及其它自然语言处理任务中有更加广泛的应用。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{n-gram语言模型}\index{Chapter2.4.1}
\parinterval 语言模型的目的是描述文字序列出现的规律。如果使用统计建模的方式,语言模型可以被定义为计算$\textrm{P}(w_1 w_2...w_m)$,也就是计算整个词序列$w_1 w_2...w_m$出现的可能性大小。具体定义如下,
%----------------------------------------------
% 定义3.1
\begin{definition}[]
词汇表V上的语言模型是一个函数$\textrm{P}(w_1 w_2...w_m)$,它表示$V^+$上的一个概率分布。其中,对于任何词串$w_1 w_2...w_m\in{V^+}$,有$\textrm{P}(w_1 w_2...w_m)\geq{0}$。而且对于所有的词串,函数满足归一化条件$\sum{_{w_1 w_2...w_m\in{V^+}}\textrm{P}(w_1 w_2...w_m)}=1$
\end{definition}
%-------------------------------------------
\parinterval 直接求$\textrm{P}(w_1 w_2...w_m)$并不简单,因为如果把$w_1 w_2...w_m$整个作为一个变量,模型的参数量会非常大。$w_1 w_2...w_m$$|V|^m$种可能性,这里$|V|$表示词汇表大小。显然,当$m$增大的时候会使模型复杂度会急剧增加,甚至都无法进行存储和计算。既然把$w_1 w_2...w_m$整个作为一个变量不好处理,就可以考虑对这个序列的生成进行分解。使用链式法则,很容易得到
\begin{equation}
\textrm{P}(w_1 w_2...w_m)=\textrm{P}(w_1)\textrm{P}(w_2|w_1)\textrm{P}(w_3|w_1 w_2)...\textrm{P}(w_m|w_1 w_2...w_{m-1})
\label{eq:2.4.1.1}
\end{equation}
这样,$w_1 w_2...w_m$的生成可以被看作是逐个生成每个单词的过程,即首先生成$w_1$,然后根据$w_1$再生成$w_2$,然后根据$w_1 w_2$再生成$w_3$,以此类推,直到根据所有前$m$-1个词生成序列的最后一个单词$w_m$。这个模型把联合概率$\textrm{P}(w_1 w_2...w_m)$分解为多个条件概率的乘积,虽然可以对生成序列的过程进行分解,但是模型的复杂度和以前是一样的,比如,$\textrm{P}(w_m|w_1 w_2...w_{m-1})$仍然不好计算。
\parinterval 换一个角度看,$\textrm{P}(w_m|w_1 w_2...w_{m-1})$体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种自然的想法是使用定长历史,比如,每次只考虑前面$n$-1个历史单词来生成当前单词,这就是$n$-gram语言模型。这个模型的数学描述如下:
\begin{equation}
\textrm{P}(w_m|w_{m-n+1}...w_{m-1})=\textrm{P}(w_m|w_1 w_2...w_{m-1})
\label{eq:2.4.1.2}
\end{equation}
\parinterval 这样,整个序列$w_1 w_2...w_m$的生成概率可以被重新定义为:
%------------------------------------------------------
% 表1.2
\begin{table}[htp]{
\begin{center}
\caption{$n$-gram语言模型取不同$n$值的模型描述}
\label{tab:n-gram-model-of-different-n}
{\scriptsize
\begin{tabular}{l|l|l l l}
\toprule
\textbf{链式法则} & \textbf{1-gram} & \textbf{2-gram} & $...$ & \textbf{$n$-gram}\\
\midrule
$\textrm{P}(w_1 w_2...w_m)$ = & $\textrm{P}(w_1 w_2...w_m)$ = & $\textrm{P}(w_1 w_2...w_m)$ = & $...$ & $\textrm{P}(w_1 w_2...w_m)$ = \\
$\textrm{P}(w_1)\times$ & $\textrm{P}(w_1)\times$ & $\textrm{P}(w_1)\times$ & $...$ & $\textrm{P}(w_1)\times$ \\
$\textrm{P}(w_2|w_1)\times$ & $\textrm{P}(w_2)\times$ & $\textrm{P}(w_2|w_1)\times$ & $...$ & $\textrm{P}(w_2|w_1)\times$\\
$\textrm{P}(w_3|w_1 w_2)\times$ & $\textrm{P}(w_3)\times$ & $\textrm{P}(w_3|w_2)\times$ & $...$ & $\textrm{P}(w_3|w_1 w_2)\times$ \\
$\textrm{P}(w_4|w_1 w_2 w_3)\times$ & $\textrm{P}(w_4)\times$ & $\textrm{P}(w_4|w_3)\times$ & $...$ & $\textrm{P}(w_4|w_1 w_2 w_3)\times$ \\
$...$ & $...$ & $...$ & $...$ & $...$ \\
$\textrm{P}(w_m|w_1 ... w_{m-1})$ & $\textrm{P}(w_m)$ & $\textrm{P}(w_m|w_{m-1})$ & $...$ & $\textrm{P}(w_m|w_{m-n+1} ... w_{m-1})$ \\
\end{tabular}
}
\end{center}
}\end{table}
%------------------------------------------------------
\parinterval 可以看到,1-gram语言模型只是$n$-gram语言模型的一种特殊形式。$n$-gram的优点在于,它所使用的历史信息是有限的,即$n$-1个单词。这种性质也反映了经典的马尔可夫链的思想\cite{刘克2004实用马尔可夫决策过程}\cite{resnick1992adventures}有时也被称作马尔可夫假设或者马尔可夫属性。因此$n$-gram也可以被看作是变长序列上的一种马尔可夫模型,比如,2-gram语言模型对应着1阶马尔可夫模型,3-gram语言模型对应着2阶马尔可夫模型,以此类推。
\parinterval 那么,如何计算$\textrm{P}(w_m|w_{m-n+1} ... w_{m-1})$?有很多种选择,比如:
\begin{adjustwidth}{1em}{}
\begin{itemize}
\item 极大似然估计。直接利用不同词序列在训练数据中出现的频度计算出$\textrm{P}(w_m|w_{m-n+1} ... w_{m-1})$
\begin{equation}
\textrm{P}(w_m|w_{m-n+1}...w_{m-1})=\frac{count(w_{m-n+1}...w_m)}{count(w_{m-n+1}...w_{m-1})}
\label{eq:2.4.1.3}
\end{equation}
\item 人工神经网络方法。构建一个人工神经网络估计$\textrm{P}(w_m|w_{m-n+1} ... w_{m-1})$的值,比如,可以构建一个前馈神经网络来对$n$-gram进行建模。
\end{itemize}
\end{adjustwidth}
\parinterval 极大似然估计方法和前面介绍的统计分词中的方法是一致的,它的核心是使用$n$-gram出现的频度进行参数估计,因此是也自然语言处理中一类经典的$n$-gram方法。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入$(w_{m-n+1}...w_{m-1})$和输出$(\textrm{P}(w_m|w_{m-n+1} ... w_{m-1}))$进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于$n$-gram的方法,或者说它并显性记录$n$-gram的生成概率,也不不依赖$n$-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统$n$-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在第五章和第六章进行详细介绍。
\parinterval 使用$n$-gram语言模型非常简单。我们可以像2.3.2节中一样,直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个分词序列的概率
\begin{equation}
\begin{aligned}
& \textrm{P}_{2-gram}{('\textrm{确实}/\textrm{现在}/\textrm{数据}/\textrm{}/\textrm{}')} \\ = \quad & \textrm{P}('\textrm{确实}')\times\textrm{P}('\textrm{现在}'|'\textrm{确实}')\times\textrm{P}('\textrm{数据}'|'\textrm{现在}')\times \\
& \textrm{P}('\textrm{}'|'\textrm{数据}')\times\textrm{P}('\textrm{}'|'\textrm{}')
\label{eq:2.4.1.4}
\end{aligned}
\end{equation}
\parinterval$n$-gram语言模型为代表的统计语言模型的应用非常广泛。除了分词,在文本生成、信息检索、摘要等等自然语言处理任务中,语言模型都有举足轻重的地位。包括近些年非常受关注的预训练模型,本质上也是统计语言模型。这些技术都会在后续章节进行介绍。值得注意的是,统计语言模型给我们解决自然语言处理问题提供了一个非常好的建模思路,即:把整个序列生成的问题转化为逐个生成单词的问题。很快我们就会看到,这种建模方式会被广泛的用于机器翻译建模中,在统计机器翻译和神经机器翻译中都会有明显的体现。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{未登录词和平滑算法}\index{Chapter2.4.2}
\parinterval 在式\ref{eq:2.4.1.4}的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算 “确实/现在/数据/很/多”的切分方式的概率时,会出现如下情况
\begin{equation}
\textrm{P}('\textrm{现在}'|'\textrm{确实}') = \frac{count('\textrm{确实}\,\textrm{现在}')}{count('\textrm{确实}')} = \frac{0}{count('\textrm{确实}')} = 0
\label{eq:2.4.1.5}
\end{equation}
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,但是这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。更常见的问题是那些根本没有出现在词表中的词,称为未登录词(Out-of-Vocabulary, OOV),比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图\ref{fig:2.4.1.1}展示了词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
% 图2.4.1.1
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/figure-word-frequency-distribution.jpg}
\caption{词语频度分布({\red 需要一个高清图片}}
\label{fig:2.4.1.1}
\end{figure}
%---------------------------
\parinterval 为了解决未登录词引起的零概率问题,常用的做法是对模型进行平滑处理,也就是给可能出现的情况一个非零的概率,使得模型不会对整个序列给出零概率。平滑可以用“劫富济贫”这一思想理解,在保证所有情况的概率和为1的前提下,使极低概率的部分可以从高概率的部分分配一部分概率,从而达到平滑的目的。
\parinterval 语言模型使用的平滑算法有很多,比如、加法平滑方法、古德-图灵估计法、Katz平滑法等。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{加法平滑方法}\index{Chapter2.4.2.1}
\parinterval 加法平滑方法可以说是简单的平滑技术,我们首先介绍这一方法,希望通过它了解平滑算法的思想。
\parinterval 通常情况下,我们会利用采集到的语料库来模拟现实生活中真实全部的语料库。但是采集总是不充分的,比如无法涵盖所有的词汇,直接依据这样语料所获得的统计信息计算现实中的语言概率就会产生偏差。假设依据某语料C(从未出现“确实 现在”二元语法),评估一个已经分好词的句子S =“确实 现在 物价 很 高”的概率,当计算“确实 现在”的概率时使得评估$\textrm{P}(S) = 0$。显然这个结果是不够准确的,根据我们的常识,句子$S$是有出现的可能性的,这样句子的概率值不应该是0。
\begin{equation}
\textrm{P}(\textrm{现在}|\textrm{确实}) = \frac{count(\textrm{确实}\,\textrm{现在})}{count(\textrm{确实})} = \frac{0}{count(\textrm{确实})} = 0
\label{eq:2.4.1.6}
\end{equation}
\parinterval 为了避免这种由于数据所产生的评估预测概率为0的问题,采用“数据平滑”的方式对最大似然估计方法进行调整。通常的平滑方法都是为了提高低概率(如零概率),或者降低高概率,这种做法的思想比较类似于“劫富济贫”。
\parinterval 加法平滑方法(additive smoothing)假设每个n元语法出现的次数比实际统计次数多$\theta$次,$0 \leqslant\theta\leqslant 1$,使得分子部分不为0,那么计算前文例子“确实 现在”的概率时,可以使用如下方法计算。
\begin{equation}
\textrm{P}(\textrm{现在}|\textrm{确实}) = \frac{\theta + count(\textrm{确实}\,\textrm{现在})}{\sum_{w}^{|V|}(\theta + count(\textrm{确实}w))} = \frac{\theta + count(\textrm{确实}\,\textrm{现在})}{\theta{|V|} + count(\textrm{确实})}
\label{eq:2.4.1.7}
\end{equation}
\parinterval 这里面$V$表示所有词汇的词表,$|V|$为词表中单词的个数,$w$为词典中的词。常见的加法平滑方法会将$\theta$取1,这时我们又称为加一平滑或是拉普拉斯平滑。这种方法比较容易理解,也比较简单,但是一些人认为这种方法的表现较差,因此,其实际的使用效果还要视具体情况而定。
\parinterval 举一个例子来形象的描述加法平滑方法。假设在一个英文文档中随机抽取词汇,已经抽到的词包括12个,词典大小$|V|$=20,已抽到的词汇统计结果为:4 look,3 people,2 am,1 what,1 want,1 do。为了更形象的描述在平滑之前和平滑之后的概率分布的区别,如图所示:
%----------------------------------------------
% 图2.4.1.2
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/figure-no-smoothing&smoothed-probability-distributions.jpg}
\caption{无平滑和有平滑后的概率分布({\red需要高清图片}}
\label{fig:2.4.1.2}
\end{figure}
%---------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{古德-图灵估计法}\index{Chapter2.4.2.2}
\parinterval 古德-图灵估计法是图灵(Alan Turing)和他的助手古德(I.J.Good)开发的,作为他们在二战期间破解德国密码机Enigma所使用的方法的一部分,在1953年古德将其发表,这一方法也是很多平滑算法的核心,其基本思路是:是把非零的$n$元语法的概率降低匀给一些低概率$n$元语法,以修改最大似然估计与真实概率之间的偏离\cite{good1953population}\cite{gale1995good}
\parinterval 假定在语料库中出现r次的$n$元语法有$n_r$个,特别的,出现0次的$n$元语法(即未登录词)出现的次数为$n_0$个。语料库中全部词语的个数为$N$,显然
\begin{equation}
N = \sum_{r=1}^{\infty}{r\,n_r}
\label{eq:2.4.1.8}
\end{equation}
\parinterval 这时,出现$r$次的$n$元语法在词典中的相对频率为$r/N$,这也是不做平滑处理时这些词的概率估计。为了解决零概率问题,Good-Turing方法对于任何一个出现$r$次的$n$元语法,利用出现$r$+1次的$n$元语法统计量重新假设它出现$r^*$次,这里
\begin{equation}
r^* = (r + 1)\frac{n_{r + 1}}{n_r}
\label{eq:2.4.1.9}
\end{equation}
\parinterval 基于这个公式,就可以估计所有0次$n$元语法的频次$n_0 r_0^*=(r_0+1)n_1=n_1$。要把这个重新估计的统计数转化为概率,只需要进行归一化处理:对于每个统计数为$r$的事件,其概率为$\textrm{p}_r=r^*/N$,其中
\begin{equation}
N = \sum_{r=0}^{\infty}{r^{*}n_r} = \sum_{r=0}^{\infty}{(r + 1)n_{r + 1}} = \sum_{r=1}^{\infty}{r\,n_r}
\label{eq:2.4.1.10}
\end{equation}
也就是说,N仍然为这个整个样本分布最初的计数。这样样本中所有事件的概率之和为:
\begin{equation}
N = \sum_{r>0}{p_r n_r} = 1 - \frac{n_1}{N} < 1
\label{eq:2.4.1.11}
\end{equation}
其中$n_1/N$的概率余量就是分配给所有统计为0的事件。
\parinterval Good-Turing方法最终通过出现1次的$n$元语法估计了统计为0的事件概率,达到了平滑的效果。
\parinterval 我们使用一个例子来说明这个方法是如何通过已知事物的数量来预测未来事物的数量。仍然考虑在加法平滑法的英文词汇抽取的例子,根据Good-Turing方法进行修正如下表
%------------------------------------------------------
% 表1.3
\begin{table}[htp]{
\begin{center}
\caption{英文词汇抽取统计结果}
\label{tab:results-of-en-vocabulary-extraction}
{
\begin{tabular}{l|l|l|l}
\toprule
\textbf{$r$} & \textbf{$n_r$} & \textbf{$n^*$} & \textbf{$p_r$}\\
\midrule
0 & 14 & 0.21 & 0.018 \\ \hline 1 & 3 & 0.67 & 0.056 \\ \hline 2 & 1 & 3 & 0.25 \\ \hline 3 & 1 & 4 & 0.333 \\ \hline 4 & 1 & - & - \\ \hline
\end{tabular}
}
\end{center}
}\end{table}
%------------------------------------------------------
\parinterval 很多时候会出现$n_{r+1}=0$的情况,这是对于当$r$很大的时候很常见的情况,而且通常情况下当$r$很大时,$n_r$也会有噪音的存在。这种简单的Good-Turing方法无法应对这些复杂的情况,随着更多的研究和发展,成为了一些其他平滑方法的基础。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Kneser-Ney平滑方法}\index{Chapter2.4.2.3}
\parinterval Kneser-Ney平滑方法由R.Kneser和H.Ney于1995年提出的用于计算$n$元语法概率分布的方法\cite{kneser1995improved}\cite{chen1999empirical}。基于absolute discounting,并被广泛认为是最有效的平滑方法。这种平滑方法改进了absolute discounting中与高阶分布相结合的低阶分布的计算方法,使不同阶分布得到充分的利用。这种算法综合利用了其他多种平滑算法的思想,是一种先进而且标准的平滑算法。
\parinterval 首先介绍一下absolute discounting平滑算法,公式如下所示
\begin{equation}
\textrm{P}_{AbsDiscount}(w_i | w_{i-1}) = \frac{c(w_{i-1},w_i )-d}{c(w_{i-1})} + \lambda(w_{i-1})\textrm{P}(w)
\label{eq:2.4.1.12}
\end{equation}
其中$d$是固定的被裁剪的值,$\lambda$是一个正则化常数。可以看到第一项是经过减值调整过的2-gram的概率值,第二项则相当于一个带权重$\lambda$的1-gram的插值项。然而这种插值模型极易受到原始1-gram模型的干扰。
\parinterval 假设我们使用2-gram和1-gram的插值模型预测下面句子中“[BLANK]”处的词:“I can’t see without my reading [BLANK]”,直觉上我们会猜测这个地方的词应该是glasses,但是在训练语料库中Francisco出现的频率非常高。如果在预测时仍然使用的是标准的1-gram模型,那么计算机会由于高概率选择Francisco填入句子的空白处,这结果明显是不合理的。当使用的是混合的插值模型时,如果reading Francisco这种二元语法并没有出现在语料中,就会导致1-gram对结果的影响变大,使得仍然会做出与标准1-gram模型相同的结果,犯下相同的错误。
\parinterval 观察语料的二元语法发现,Francisco的前一个词仅是San,不会出现reading。这个分析提醒了我们,考虑前一个词的影响是有帮助的,比如仅在前一个词时San时,我们才给Francisco赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\textrm{P}_{continuation}$,使这个模型可以通过考虑前一个词的影响评估了当前词作为第二个词出现的可能性。
\parinterval 为了评估$\textrm{P}_{continuation}$,统计使用当前词作为第二个词所出现二元语法的种类,二元语法种类越多,这个词作为第二个词出现的可能性越高,呈正比:
\begin{equation}
\textrm{P}_{continuation}(w_i) \varpropto |w_{i-1}: c(w_{i-1} w_i )>0|
\label{eq:2.4.1.13}
\end{equation}
通过全部的二元语法的种类做归一化可得到评估的公式
\begin{equation}
\textrm{P}_{continuation}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{|\{ (w_{j-1}, w_j):c(w_{j-1},w_j )>0 \}|}
\label{eq:2.4.1.14}
\end{equation}
\parinterval 基于分母的变化还有另一种形式
\begin{equation}
\textrm{P}_{continuation}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{\sum_{w^{\prime}}|\{ w_{i-1}^{\prime}:c(w_{i-1}^{\prime},w_i^{\prime} )>0 \}|}
\label{eq:2.4.1.15}
\end{equation}
结合基础的absolute discounting计算公式,从而得到了Kneser-Ney平滑方法的公式
\begin{equation}
\begin{aligned}
\textrm{P}_{KN}(w_i|w_{i-1}) & =\frac{\max(c(w_{i-1},w_i )-d,0)}{c(w_{i-1})}+ \lambda(w_{i-1})\textrm{P}_continuation(w_i) \\ & \lambda(w_{i-1}) = \frac{d}{c(w_{i-1})}|\{w:c(w_{i-1},w)>0\}|
\label{eq:2.4.1.16}
\end{aligned}
\end{equation}
其中max部分保证了分子部分为不小0的数,原始1-gram更新成$\textrm{P}_{continuation}$概率分布,$\lambda$是正则化项。
\parinterval 为了更具普适性,不仅局限为2-gram和1-gram的插值模型,利用递归的方式得到更通用的公式
\begin{equation}
\begin{aligned}
\textrm{P}_{KN}(w_i|w_{i-n+1} & ...w_{i-1}) \\ & =\frac{\max(c_{KN}(w_{i-n+1}...w_{i-1})-d,0)}{c_{KN}(w_{i-n+1}...w_{i-1})} \\ & + \lambda(w_{i-n+1}...w_{i-1})\textrm{P}_{KN}(w_i|w_{i-n+2}...w_{i-1}) \\ \lambda(w_{i-1}) = & \frac{d}{c_{KN}(w_{i-n+1}^{i-1})}|\{w:c_{KN}(w_{i-n+1}...w_{i-1}w)>0\}| \\
c_{KN}(\cdot) & \begin{cases} count(\cdot)\quad for\ the\ highest\ order \\ continuationcount(\cdot)\quad for\ lower\ order \end{cases}
\label{eq:2.4.1.17}
\end{aligned}
\end{equation}
\parinterval 其中continuationcount表示的是基于某个单个词作为第$n$个词的$n$元语法的种类数目。
\parinterval 我们前面提到Kneser-Ney Smoothing 是当前一个标准的、广泛采用的、先进的平滑算法。还有很多基于此为基础衍生出来的算法,有兴趣的读者可以查找更多资料了解。\cite{parsing2009speech}\cite{ney1994structuring}\cite{chen1999empirical}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{句法分析(短语结构)}\index{Chapter2.5}
\parinterval 通过前面两节的内容,我们已经了解什么叫做“词”、如何对分词问题进行统计建模。同时也了解了如何对词序列的概率用统计语言模型进行描述。无论是分词还是语言模型都是句子浅层词串信息的一种表示。对于一个自然语言句子来说,它更深层次的结构信息可以通过句法信息来描述,而句法信息也是机器翻译和自然语言处理其它任务中常用的知识源之一。本节将会对相关概念进行介绍。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{句子的句法树表示}\index{Chapter2.5.1}
\parinterval \textbf{句法(syntax)}是研究句子的每个组成部分和它们之间的组合方式。一般来说,句法和语言是相关的,比如,英文是主谓宾结构,而日语是主宾谓结构。因此不同的语言也会有不同的句法描述方式。这里我们将介绍自然语言处理领域最常用的两种句法分析形式 – \textbf{短语结构分析(phrase structure parsing)}\textbf{依存分析(dependency parsing)}。它们在汉语、英语等多种语言的处理中都有广泛应用。
\parinterval\ref{fig:phrase-structure-tree-and-dependency-tree}展示了这两种的句法表示形式的实例。其中,左侧是短语结构树。它描述的是短语的结构功能,比如“吃”是动词(记为VV),“鱼”是名词(记为NN),“吃鱼”组成动词短语,这个短语再与“喜欢”这一动词组成新的动词短语。每个子树都是一个句法功能单元,比如,VP(VV(吃) NN(鱼))这个子树就表示了“吃鱼”这个动词短语的结构,其中子树根节点VP是句法功能标记。短语结构树利用嵌套和递归的方式描述了语言学的功能。短语结构树中,每个词都有词性(或词类),不同的词或者短语可以组成名动结构、动宾结构等语言学短语结构。短语结构分析一般也被称为成分分析(constituency parsing),也被称作完全分析(full parsing)。
%----------------------------------------------
% 图2.5.1.1
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/phrase-structure-tree-and-dependency-tree.pdf}
\caption{短语结构树(左)和依存树(右)}
\label{fig:phrase-structure-tree-and-dependency-tree}
\end{figure}
%---------------------------
\parinterval\ref{fig:phrase-structure-tree-and-dependency-tree}右侧展示的是另一种句法结构,被称作依存句法树。依存句法树表示了句子中单词和单词之间的依存关系。比如,从这个例子可以了解,“猫”依赖“喜欢”,“吃”依赖“喜欢”,“鱼”依赖“吃”。
\parinterval 短语结构树和依存句法树的结构和功能都有所不同。短语结构树的叶子节点是单词,中间节点是词性或者短语句法标记。在短语结构分析中,通常把单词称作终结符(terminal),把词性称为预终结符(pre-terminal),而把其它句法标记称为非终结符(non-terminal)。依存句法树没有预终结符和非终结符,所有的节点都是句子里的单词,通过不同节点间的连线表示句子中各个单词之间的依存关系。每个依存关系实际上都是有方向的,头和尾分别指向“接受”和“发出”依存关系的词。每个依存关系也可以进行分类,如图\ref{fig:phrase-structure-tree-and-dependency-tree}所示,每个依存关系都的类型都进行了标记,这也被称作有标记的依存分析。如果不生成这些标记,这样的句法分析被称作无标记的依存分析。
\parinterval 虽然短语结构树和依存树是两种不同的句法表现形式,但是它们在某种条件下能相互转化。比如,可以使用启发性规则将短语结构树自动转化为依存树。从应用的角度,依存分析由于形式更加简单,而且直接建模词语之间的依赖,因此在最近自然语言处理领域中关注较多。在机器翻译中,不过无论是哪种句法树结构,都已经被证明会对机器翻译系统产生正面效果。特别是短语结构树,在机器翻译中的应用历史更长,研究更加深入,因此本节将会里短语结构分析为例介绍相关概念。
\parinterval 而句法分析到底是什么呢?简单的理解,句法分析就是我们在小学语文课程中学习的句子中的主谓宾等句子成分的分析,以及对句子中各个成分内部、外部关系的判断。更规范一些的定义,可以参照维基百科和百度百科的句法分析的解释。
%-------------------------------------------
\begin{definition}
《百度百科》
句法分析(Parsing)就是指对句子中的词语语法功能进行分析。
\end{definition}
%-------------------------------------------
%-------------------------------------------
\begin{definition}
《维基百科(译文)》
在自然语言或者计算机语言中,句法分析是利用形式化的文法规则对一个符号串进行分析的过程。
\end{definition}
%-------------------------------------------
\parinterval 上面的定义中,句法分析包含三个重要的概念:
\vspace{0.5em}
\begin{itemize}
\item 形式化的文法:描述语言结构的定义,由文法规则组成
\item 符号串:在本节中,符号串就是指词串,由前面提到的分词系统生成
\item 分析:使用形式文法对符号串进行分析的具体方法,在这里指实现分析的计算机算法
\end{itemize}
\vspace{0.5em}
\parinterval 以上要素在实现一个句法分析器中都需要考虑。因此,本节的后半部分会对相关的概念和技术方法进行介绍
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{上下文无关文法}\index{Chapter2.5.2}
\parinterval 句法树是对句子的一种抽象。这种树形结构对应着句子的归纳和生成过程,比如,从树的叶子开始,把每一个树节点看作一次抽象,最终形成整个句子的根节点。那么生成这种句法树结构的过程是如何用计算机实现出来呢?这就需要使用形式文法。
\parinterval 形式文法是句法分析中的核心内容,它不仅可以帮助我们分析计算机编程语言,也可以帮我们分析自然语言。根据乔姆斯基的定义\cite{chomsky2002syntactic},形式文法分为四种类型:无限制文法、上下文相关文法、上下文无关文法和正规文法。不同类型的文法有不同的应用,比如,正规文法可以用来描述自动机,因此也会被使用在语言模型等系统中\footnote[2]{\red $n$-gram语言模型也可以被看作是一种有限状态自动机,不同于传统的自动机,语言模型使用的是概率化自动机,也就是自动机中的每条边都会有一个概率与之对应。具体内容可以参考(参考文献??)学姐说和后面的重复了,看要哪个。} 。对于句法分析问题,这里使用上下文无关文法(context-free grammar),因为它是很多句法分析模型的基础。上下文无关文法的具体形式如下:
%-------------------------------------------
\begin{definition}
一个上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
\begin{itemize}
\item
\item $N$为一个非终结符集合
\item $\Sigma$为一个终结符集合
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_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>$,其中把非终结符集合定义为不同的句法标记
\begin{equation}
\textrm{N}=\{\textrm{NN},\textrm{VV},\textrm{NP},\textrm{VP},\textrm{IP}\}
\end{equation}
这里,\textrm{NN}代表名词,\textrm{VV}代表动词,\textrm{NP}代表名词短语,\textrm{VP}代表动词短语,\textrm{IP}代表单句。进一步,把终结符集合定义为
\begin{equation}
\Sigma = \{\text{猫,喜欢,吃,鱼}\}
\end{equation}
再定义起始符集合为
\begin{equation}
\textrm{S}=\{\textrm{IP}\}
\end{equation}
最后,文法的规则集定义如下(其中$r_i$为规则的编号)
%----------------------------------------------
% 图2.5.2.1
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/rules-of-grammar.pdf}
\caption{还没有写}
\label{fig:2.5.2.1}
\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 下文无关文法的规则是一种\textbf{产生式规则(production rule)},形如$\alpha \to \beta $,它表示把规则左端的非终结符$\alpha$替换为规则右端的符号序列$\beta$。通常,$\alpha$被称作规则的左部(left-hand side),$\beta$被称作规则的右部(right-hand side)。使用右边$\beta$替换左部$\alpha$的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
%-------------------------------------------
\begin{definition}
一个符号序列$u$可以通过使用规则$r$替换其中的某个非终结符,并得到符号序列$v$,我们说$v$是在$u$上使用$r$的结果,如图\ref{fig:2.5.2.2}所示:
\end{definition}
%-------------------------------------------
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/usage-of-regulation.pdf}
\caption{规则的使用示意图}
\label{fig:2.5.2.2}
\end{figure}
\parinterval 给定义起始非终结符,我们可以不断地使用规则,最终生成一个终结符串,这个过程也被称为推导(derivation)。
%-------------------------------------------
\begin{definition}
给定一个文法$G=<N,\Sigma,R,S>$,对于一个字符串序 \\
$s_0,s_1,...,s_n$和规则序列$r_1,r_2,...,r_n$,满足
\vspace{-0.5em}
\begin{displaymath}
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{displaymath}
\begin{itemize}
\item
\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 $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)
\end{definition}
%-------------------------------------------
\parinterval 比如,使用前面的示例文法,可以对“猫 喜欢 吃 鱼”进行分析,并形成句法分析树(图\ref{fig:2.5.2.3})。我们从起始非终结符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
\includegraphics{./Chapter2/Figures/example-of-derivation.pdf}
\caption{上下文无关文法推导实例}
\label{fig:2.5.2.3}
\end{figure}
%-------------------------------------------
\parinterval 通常,可以把推导简记为$\textrm{d}=r_1,r_2,…,r_n$,其中$$表示规则的组合。显然,$\textrm{d}$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用和生成的字符串对应起来。一个推导所生成的字符串,也被称作文法的一个句子。而一个文法所能生成的所有句子是这个文法所对应的语言。
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导与之对应,我们称为歧义。甚至同一棵句法树,也可以对应不同的推导。图\ref{fig:2.5.2.4}给出一个同一棵句法树所对应的两种不同的规则推导。
%-------------------------------------------
%图2.5.2.4
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/two-different-derivation-of-regulation.pdf}
\caption{同一棵句法树对应的不同规则推导}
\label{fig:2.5.2.4}
\end{figure}
%-------------------------------------------
\parinterval 显然,这样使用不同的规则顺序进行树的生成会导致句法树的推导这一确定的过程变得不确定。因此,需要进行消歧。这里,我们可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为最左优先推导。图中推导1就是符合最左优先原则的推导。
\parinterval 这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。这样,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推导所对应的句法树就是这个句子的句法分析结果。
\parinterval 不过问题又回来了,怎样才能知道什么样的推导或者句法树是“最佳”的呢?对于句法分析的语言学专来说,可以很确定的分辨出哪些树是正确的哪些树是错误的结果。甚至对于普通人,也通过经验可以得到一些模糊的结果。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情。%-------------------------------------------
%图2.5.2.5
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/perspectives-of-expert-ordinary-and-syntactic-parser.pdf}
\caption{如何选择最佳的句法分析结果 - 专家、普通人和句法分析器的视角}
\label{fig:2.5.2.5}
\end{figure}
%-------------------------------------------
\parinterval 在统计句法分析中,我们需要对每个推导进行统计建模,于是我们得到一个模型$\textrm{P}( \cdot )$,对于任意的推导$d$,都可以用$\textrm{P}(d)$计算推导$d$的概率。这样,给定一个输入句子,我们可以对所有可能的推导用$\textrm{P}(d)$计算其概率值,并选择概率最大的结果作为句法分析的结果输出(图\ref{fig:2.5.2.6})。
%-------------------------------------------
%图2.5.2.6
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/probability-values-corresponding-to-different-derivations.pdf}
\caption{不同推导(句法树)对应的概率值}
\label{fig:2.5.2.6}
\end{figure}
%-------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{规则和推导的概率}\index{Chapter2.5.3}
\parinterval 对句法树进行概率化,首先要对使用的规则和推导进行概率化。为了达到这个目的,可以使用概率上下文无关文法(probabilistic context-free grammar),它是上下文无关文法的扩展。
%-------------------------------------------
\begin{definition} 概率上下文无关文法
一个上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
\begin{itemize}
\item
\item $N$为一个非终结符集合
\item $\Sigma$为一个终结符集合
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \Sigma$
\item $S$为一个起始符号集合且$S \subseteq N$
\end{itemize}
\end{definition}
%-------------------------------------------
\parinterval 概率上下文无关文法与传统上下文无关文法的区别在于,每条规则都会有一个概率,描述规则生成的可能性。具体来说,规则$\textrm{P}(\alpha \to \beta)$的概率可以被定义为:
\begin{equation}
\textrm{P}(\alpha \to \beta)=\textrm{P}(\beta | \alpha)
\label{eq:2.5.3.1}
\end{equation}
即,在给定规则左部的情况下生成规则右部的可能性。进一步,在上下文无关文法中,因为上下文无关的属性,每条规则之间的使用都是相互独立的 \footnote[3]{如果是上下文有关文法,规则会形如 $\textrm{a}\alpha \textrm{b}\to \textrm{a}\beta \textrm{b}$,这时$\alpha \to \beta $的过程会依赖前后上下文\textrm{a}\textrm{b}}。因此可以把\textrm{P(d)}分解为规则概率的乘积进行计算:
\begin{equation}
\begin{aligned}
\textrm{P}(d) & = \textrm{P}(r_1∘r_2∘…∘r_n) \\
& = \textrm{P}(r_1) \cdot \textrm{P}(r_2) \cdots \textrm{P}(r_n)
\label{eq:2.5.3.1}
\end{aligned}
\end{equation}
\parinterval 这样我们就可以得到每个推导d的概率值。这个模型,可以很好的解释词串的生成过程。比如,对于规则集
\begin{equation} \nonumber
\begin{aligned}
r_3: & VV \to \text{} \\
r_4: & NN \to \text{} \\
r_6: & VP \to VV NN
\end{aligned}
\end{equation}
\parinterval 可以得到 $d_1=r_3 \cdot r_4 \cdot r_6$的概率为
\begin{equation}
\begin{aligned}
\textrm{P}(d_1) & = \textrm{P}(r_3) \cdot \textrm{P}(r_4) \cdot \textrm{P}(r_6) \\
& = \textrm{P}(VV \to \text{}) \cdot \textrm{P}(NN \to \text{}) \cdots \textrm{P}(VP \to VV NN)
\label{eq:2.5.3.2}
\end{aligned}
\end{equation}
\parinterval 这也对应了词串“吃 鱼”的生成过程。首先,从起始VP使用规则$r_6$生成两个非终结符VV和NN;进一步,分别使用规则$r_3$$r_4$从VV和NN进一步生成单词“吃”和“鱼”。整个过程的概率等于三条规则概率的乘积。
\parinterval 新的问题又来了,如何得到规则的概率呢?这里仍然可以使用数据驱动的想法,从数据中学习文法规则的概率。假设我们有人工标注的数据,其中包括很多句子的人工标注的句法树,称之为树库。然后,对于规则$\textrm{r}:\alpha \to \beta$可以使用极大似然估计:
\begin{equation}
\textrm{P}(r) = \frac{\text{规则$r$在树库中出现的次数}}{\alpha \text{在树库中出现的次数}}
\label{eq:2.5.3.3}
\end{equation}
\parinterval 这里通过一个例子来解释规则概率的计算过程(图\ref{fig:2.5.3.1})。
%-------------------------------------------
% 图2.5.3.1
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/evaluation-of-probability-for-grammar.pdf}
\caption{上下文无关文法规则概率估计}
\label{fig:2.5.3.1}
\end{figure}
%-------------------------------------------
\parinterval 与词法分析类似,我们统计树库中规则左部和右部同时出现的次数,除以规则左部出现的全部次数,所得的结果就是所求规则的概率。这种方法也是典型的相对频度估计。但是如果规则左部和右部同时出现的次数为0时是否代表这个规则概率是0呢?遇到这种情况,可以使用平滑方法对概率进行平滑处理,具体思路和2.4.2节基本上是一样的。
\parinterval\ref{fig:2.5.3.2}展示了基于统计句法分析的流程。首先,通过对人工标注数据的统计,获得各个规则的概率,这样我们得到了一个上下文无关句法分析模型$\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)$计算其概率值。
%-------------------------------------------
% 图2.5.3.2
\begin{figure}[htp]
\centering
\includegraphics{./Chapter2/Figures/process-of-statistical-syntax-analysis.pdf}
\caption{统计句法分析的流程}
\label{fig:2.5.3.2}
\end{figure}
%-------------------------------------------
\parinterval 在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法分析树的概率,并输出概率最高的树作为句法分析的结果。图\ref{fig:2.5.3.3}给出了几个真实句法分析器的输入输出实例。
%-------------------------------------------
% 图2.5.3.3
%\begin{figure}[htp]
% \centering
%\includegraphics{./Chapter2/Figures/.pdf}
% \caption{中文句法分析实例}
% \label{fig:2.5.3.3}
%\end{figure}
%-------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{小结及深入阅读}\index{Chapter2.6}
\parinterval 在本章中,我们重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新输入的问题进行处理。之后,我们将这种思想应用到三个自然语言处理任务,包括:中文分词、语言建模、句法分析,这三个任务也和机器翻译有着紧密的联系。从中可以看出,经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法都会在后续章节的机器翻译内容中被频繁使用。
\parinterval 由于本章重点关注介绍如何用统计的思想对自然语言处理任务进行建模,因此并没有对具体的问题展开深入讨论。有几方面内容,读者可以继续关注:
\begin{adjustwidth}{1em}{}
\begin{itemize}
\item 在建模方面,本章介绍的三个任务均采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被“一步一步”生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,分词是隐含变量),之后通过对观测变量生成观测结果的过程建模,以达到对问题进行数学描述的目的。这类模型一般需要进行一些独立性假设,假设的好坏对最终的性能有较大影响。相对\textbf{生成模型}(generative models),另一类方法\textbf{判别模型}(discriminative models),它直接对问题进行求解,可以更加灵活的定义不同的特征,而且不依赖过多的独立性假设。判别式模型在自然语言处理中也有广泛应用\cite{shannon1948mathematical}\cite{ng2002discriminative}。在本书的第四章也会使用到判别式模型。
\item 从现在自然语言处理的前沿看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。但是,深度学习及相关方法并没有在本章被涉及,这是由于笔者认为对问题的建模是处理自然语言处理问题的基础,对问题的描述并不会因为方法的改变而改变。因此,本章的内容没有太多的陷入到更加复杂的模型和算法设计中,相反,我们希望关注对基本问题的理解和描述。不过,对于本章中涉及的自然语言问题,一些前沿方法可以参考,包括:基于条件随机场和双向长短时记忆模型的序列标注模型(\cite{lafferty2001conditional}\cite{huang2015bidirectional}\cite{ma2016end}、神经语言模型\cite{bengio2003neural}\cite{mikolov2010recurrent}、神经句法分析模型\cite{chen2014fast}\cite{zhu2015long}
\item 此外,本章并没有对模型的推断方法进行深入介绍。比如,对于一个句子如何有效的找到概率最大的分词结果?显然简单枚举是不可行的。对于这类问题比较简单的解决方法是使用动态规划\cite{huang2008advanced}。如果使用动态规划的条件不满足,可以考虑使用更加复杂的搜索策略,并配合一定剪枝方法。实际上,无论是n-gram语言模型还是简单的上下文无关文法都有高效的推断方法。比如,n-gram语言模型可以被视为概率有限状态自动机,因此可以直接使用成熟的自动机工具。即使更复杂的句法分析模型也有移进-规约方法可以有效的解决推断问题\cite{aho1972theory}
\end{itemize}
\end{adjustwidth}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论