Commit 1c621906 by 姜雨帆

Update herarchical phrase-based translation

parent 83476203
......@@ -3586,12 +3586,77 @@ d = r_1 \circ r_2 \circ r_3 \circ r_4
%%% 关于文法的约束
\begin{frame}{文法的约束}
% 把文法限制在合理的范围内,使得系统可以处理
\begin{itemize}
\item 按照上面的方法可以抽取到大量的规则,规则太多会降低训练和解码的效率,甚至影响翻译性能,因此需要加入一些\alert{约束}来限制文法规则的数目
\vspace{0.3em}
\begin{center}
\begin{tikzpicture}
\begin{scope}[minimum height = 18pt]
%\node[anchor=east] (s0) at (0, 0) {$\textrm{X} \ \to \ <\textrm{X}_1\ \textrm{希望}\ \textrm{X}_2,\ \textrm{X}_1\ \textrm{wish to}\ \textrm{X}_2>$};
\node[anchor=north west] (s1) at (0, 0) {$\textrm{X} \ \to \ <\textrm{X}_1\ \textrm{X}_2 \ \textrm{之一},\ \textrm{one of}\ \textrm{X}_1\ \textrm{X}_2>$};
\node[anchor=north west] (s2) at ([yshift=0.1em]s1.south west) {$\textrm{X} \ \to \ <\textrm{X}_1\ \textrm{X}_2\ \textrm{}\ \textrm{X}_3,\ \textrm{X}_1\ \textrm{X}_2\ \textrm{is}\ \textrm{X}_3>$};
\node[anchor=north west] (s3) at ([yshift=0.1em]s2.south west) {$\textrm{X} \ \to \ <\textrm{X}_1\ \textrm{希望...}\ \textrm{X}_2,\ \textrm{X}_1\ \textrm{wish to...}\ \textrm{X}_2>$};
\draw[decorate,decoration={brace,amplitude=0.4em,mirror},red,thick] ([xshift=1.3em,yshift=0.3em]s3.south) -- ([xshift=8.0em,yshift=0.3em]s3.south);
\node[anchor=north] (wi) at ([xshift=4.7em,yshift=-0.0em]s3.south) {\scriptsize{\alert{超过10个词}}};
\visible<2->{
\draw[-,red] (s1.west)--(s1.east);
\draw[-,red] (s2.west)--(s2.east);
\draw[-,red] (s3.west)--(s3.east);
}
\end{scope}
\end{tikzpicture}
\end{center}
\vspace{-0.5em}
\visible<2->{
具体包含如下约束
}
\begin{enumerate}
\item<2-> 规则中的非终结符不可以连续的出现
\item<2-> 每条规则最多包含两个非终结符
\item<2-> 抽取规则最多可以跨越10个单词
\end{enumerate}
\item<3-> 除此之外,不同的语言会有不同的文法约束,可参考
\visible<3->{
\textbf{Hierarchical Phrase-Based Translation}\\
\textbf{Chiang, Computational Linguistics, 2007}
}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 特征
\begin{frame}{特征}
% 还是David Chiang的论文
\begin{itemize}
\item 与短语模型一样,层次短语模型也使用判别式模型进行建模 - $\textrm{P}(d,\textbf{t}|\textbf{s}) = \frac{\exp(\sum_{i=1}^{M} \lambda_i \cdot h_i(d,\textbf{s},\textbf{t}))}{\sum_{d',t'}\exp(\sum_{i=1}^{M} \lambda_i \cdot h_i(d',\textbf{s},\textbf{t}'))}$。其中特征权重$\{\lambda_i\}$可以使用最小错误率训练进行调优,特征函数$\{h_i\}$需要用户定义。
\item<2-> 这里,所有层次短语规则满足$\langle\ \alpha, \beta, \sim\ \rangle$的形式
\begin{itemize}
\item $\alpha$$\beta$表示源语和目标语的规则串,$\sim$表示他们的对应关系
\item 此外,定义$\tau(\alpha)$$\tau(\beta)$为源语端和目标语端的规则序列。例如
\vspace{-0.8em}
\begin{eqnarray}
\tau(\alpha) & = & \textrm{}\ \textrm{X}_1\ \textrm{感到}\ \textrm{X}_2 \nonumber \\
\tau(\beta) & = & \textrm{be}\ \textrm{X}_2\ \textrm{with}\ \textrm{X}_1 \nonumber
\end{eqnarray}
\end{itemize}
\item<3-> \textbf{特征1-2: 短语翻译概率},即正向翻译概率$\Pr(\tau(\alpha)|\tau(\beta))$和反向翻译概率$\Pr(\tau(\alpha)|\tau(\beta))$。这里,$\tau(\alpha)$$\tau(\beta)$ 都被看做短语,因此可以直接复用短语系统的方法,使用极大似然估计进行计算。
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 特征
\begin{frame}{特征(续)}
% 给出特征列表
\begin{itemize}
\item \textbf{特征3-4: 词汇翻译概率},即正向词汇翻译概率$\Pr_{lex}(\bar{t}|\bar{s})$和反向词汇翻译概率$\Pr_{lex}(\bar{s}|\bar{t})$。用来描述短语对中源语端单词和目标语端单词的对应关系
\item \textbf{特征5: $n$-gram语言模型},即$\textrm{P}_{\textrm{lm}}(\textbf{t})$。度量译文的流畅度,可以使用大规模目标语单语数据得到。
\item<2-> \textbf{特征6:译文长度},即$|\textbf{t}|$。避免模型倾向于短译文,同时让系统自动学习对译文长度的偏好。
\item<2-> \textbf{特征7:翻译规则数量}。这个特征是为了避免模型仅仅使用少量特征构成翻译推导(因为翻译概率相乘,因子少结果一般会大一些),同时让系统自动学习对使用规则数量的偏好。
\item<2-> \textbf{特征8:源语言被翻译为空的单词数量}。注意,空翻译规则(或特征)有时也被称作evil feature,这类特征在一些数据集上对BLEU有很好的提升作用,但是会造成人工评价的下降,因此需要谨慎使用。
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
......@@ -3601,6 +3666,129 @@ d = r_1 \circ r_2 \circ r_3 \circ r_4
%%% CYK解码
\begin{frame}{CYK解码}
% 看NiuTrans Manual
\begin{itemize}
\item 基于层次短语的翻译解码与基于短语的模型类似,都是要找到使$\textrm{score}(d)$达到最大的翻译推导$d$
\vspace{-0.5em}
\begin{displaymath}
\hat{d} = \argmax_{d \in D} \textrm{score}(d)
\end{displaymath}
\vspace{-0.8em}
\begin{itemize}
\item 由于翻译推导由SCFG构成,使用CYK算法进行解码
\item CYK算法解码是一个用来判定任意给定的字符串 是否属于一个上下文无关文法的算法,具体流程如下
\end{itemize}
\vspace{0.5em}
\begin{center}
\begin{tikzpicture}
\node [anchor=south west,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow] (sourceG) at (0,0) {{\color{ublue} \footnotesize{\textbf{S端文法}}}};
\node [anchor=west,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow] (chom) at ([xshift=3.5em]sourceG.east) {{\color{ublue} \footnotesize{\textbf{乔姆斯基范式}}}};
\node [anchor=west,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow] (targetG) at ([xshift=3.5em]chom.east) {{\color{ublue} \footnotesize{\textbf{T端文法}}}};
\draw[->,very thick] ([xshift=0.1em]sourceG.east) -- ([xshift=-0.1em]chom.west);
\draw[->,very thick] ([xshift=-0.1em]targetG.west) -- ([xshift=0.1em]chom.east);
\node [anchor=north west,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow,minimum height=1.2cm] (sourceS) at ([yshift=-1em]sourceG.south west) {{\color{ublue} \footnotesize{\textbf{S端句子}}}};
\node [anchor=north west,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow,minimum height=1.2cm] (targetS) at ([yshift=-1em]targetG.south west) {{\color{ublue} \footnotesize{\textbf{T端句子}}}};
\node [anchor=north,rectangle,draw=ublue,thick,inner sep=0.4em,fill=white,drop shadow,minimum height=1.2cm] (parse) at ([yshift=-1em]chom.south) {{\color{ublue} \footnotesize{\textbf{解析得到最好的翻译}}}};
\draw[->,very thick] ([xshift=0.1em]sourceS.east) -- ([xshift=-0.1em]parse.west);
\draw[->,very thick] ([xshift=0.1em]parse.east) -- ([xshift=-0.1em]targetS.west);
\draw[->,very thick] ([yshift=-0.1em]chom.south) -- ([yshift=0.1em]parse.north);
\end{tikzpicture}
\end{center}
\vspace{0.3em}
\item 由于对文法中的非终结符进行了限制,可以直接使用CYK算法进行解码,无需转换成乔姆斯基范式
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% CYK解码
\begin{frame}{CYK解码(续)}
% 看NiuTrans Manual
\begin{itemize}
\item CYK解码提出了一种cell的数据结构,用来记录所有可能出现的翻译假设。
\begin{itemize}
\item<2-> 对于每个源语句子,使用短语规则表初始化它的cell
\item<3-> 自底向上对cell中的每个子cell进行重新组合(正向、反向)
\item<4-> 计算每个推导的得分并记录下来,最终选择最优推导所对应的译文作为输出
\end{itemize}
\end{itemize}
\vspace{-0.8em}
\begin{center}
\begin{tikzpicture}
\visible<2->{
\node [anchor=west] (s1) at (0,0) {\small{\textbf{进口}}};
\node [anchor=west] (s2) at ([xshift=4em]s1.east) {\small{\textbf{大幅度}}};
\node [anchor=west] (s3) at ([xshift=2.8em]s2.east) {\small{\textbf{下降}}};
\node [anchor=west] (s4) at ([xshift=2.8em]s3.east) {\small{\textbf{}}};
\node [anchor=north] (t11) at ([yshift=-0.4em]s1.south) {\scriptsize{Imports}};
\node [anchor=west] (t12) at ([yshift=-1em]t11.west) {\scriptsize{The imports}};
\node [anchor=west] (t13) at ([yshift=-0.7em]t12.west) {\scriptsize{...}};
\node [anchor=north] (t21) at ([yshift=-0.4em]s2.south) {\scriptsize{drastically}};
\node [anchor=west] (t22) at ([yshift=-1em]t21.west) {\scriptsize{substantially}};
\node [anchor=west] (t23) at ([yshift=-0.7em]t22.west) {\scriptsize{...}};
\node [anchor=north] (t31) at ([yshift=-0.4em]s3.south) {\scriptsize{fall}};
\node [anchor=west] (t32) at ([yshift=-1em]t31.west) {\scriptsize{fallen}};
\node [anchor=west] (t33) at ([yshift=-0.7em]t32.west) {\scriptsize{...}};
\node [anchor=north] (t41) at ([yshift=-0.4em]s4.south) {\scriptsize{have}};
\node [anchor=west] (t42) at ([yshift=-1em]t41.west) {\scriptsize{had}};
\node [anchor=west] (t43) at ([yshift=-0.7em]t42.west) {\scriptsize{...}};
}
\visible<3->{
\node [anchor=west] (t51) at ([xshift=2em,yshift=-1.8em]t23.west) {\scriptsize{drastically \ fallen}};
\node [anchor=west] (t53) at ([yshift=-0.7em]t51.west) {\scriptsize{...}};
}
\visible<4->{
\node [anchor=west] (t61) at ([xshift=3em,yshift=-1.8em]t53.west) {\scriptsize{have \ drastically \ fallen}};
\node [anchor=west] (t62) at ([yshift=-0.7em]t61.west) {\scriptsize{...}};
\node [anchor=west] (t71) at ([xshift=-6em,yshift=-1.8em]t62.west) {\scriptsize{The \ imports}};
\node [anchor=west] (t72) at ([xshift=0.2em]t71.east) {\scriptsize{have \ drastically \ fallen}};
\node [anchor=west] (t73) at ([yshift=-0.7em]t71.west) {\scriptsize{...}};
}
\begin{pgfonlayer}{background}
\visible<2->{
\node [rectangle,inner sep=0.05em,fill=red!20] [fit = (t11) (t12) (t13)] (box1) {};
\node [rectangle,inner sep=0.05em,fill=green!20] [fit = (t21) (t22) (t23)] (box2) {};
\node [rectangle,inner sep=0.05em,fill=blue!20,minimum width=3em] [fit = (t31) (t32) (t33)] (box3) {};
\node [rectangle,inner sep=0.05em,fill=orange!20,minimum width=3em] [fit = (t41) (t42) (t43)] (box4) {};
}
\visible<3->{
\node [rectangle,inner sep=0.05em,fill=purple!20] [fit = (t51) (t53)] (box5) {};
}
\visible<4->{
\node [rectangle,inner sep=0.05em,fill=yellow!20] [fit = (t61) (t62)] (box6) {};
\node [rectangle,inner sep=0.05em,fill=black!10] [fit = (t71) (t72) (t73)] (box7) {};
}
\end{pgfonlayer}
\visible<2->{
\node [anchor=south east,inner sep=1pt,fill=black] (tl1) at (box1.south east) {\tiny{{\color{white} \textbf{1}}}};
\node [anchor=south east,inner sep=1pt,fill=black] (tl2) at (box2.south east) {\tiny{{\color{white} \textbf{2}}}};
\node [anchor=south east,inner sep=1pt,fill=black] (tl3) at (box3.south east) {\tiny{{\color{white} \textbf{3}}}};
\node [anchor=south east,inner sep=1pt,fill=black] (tl4) at (box4.south east) {\tiny{{\color{white} \textbf{4}}}};
}
\visible<3->{
\draw [->,thick] (t22.south) .. controls +(south:0.5) and +(north:0.5) .. (t51.north);
\draw [->,thick] (t32.south) .. controls +(south:0.5) and +(north:0.5) .. (t51.north);
\node [anchor=south east,inner sep=1pt,fill=black] (tl5) at (box5.south east) {\tiny{{\color{white} \textbf{2-3}}}};
}
\visible<4->{
\draw [->,thick] (t51.south) .. controls +(south:0.5) and +(north:0.5) .. (t61.north);
\draw [->,thick] (t42.south) .. controls +(south:2) and +(north:0.5) .. (t61.north);
\draw [->,thick] (t61.south) .. controls +(south:0.5) and +(north:0.5) .. (t72.north);
\draw [->,thick] (t12.south) .. controls +(south:2.5) and +(north:0.8) .. (t71.north);
\node [anchor=south east,inner sep=1pt,fill=black] (tl6) at (box6.south east) {\tiny{{\color{white} \textbf{2-4}}}};
\node [anchor=south east,inner sep=1pt,fill=black] (tl7) at (box7.south east) {\tiny{{\color{white} \textbf{1-4}}}};
}
\end{tikzpicture}
\end{center}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
......@@ -3611,14 +3799,138 @@ d = r_1 \circ r_2 \circ r_3 \circ r_4
\begin{frame}{立方剪枝(Cube Pruning)}
% 问题
% 解决方法
\begin{itemize}
\item 前面介绍的解码方法由于搜索空间非常大,速度很慢,通常使用剪枝的方法来加速这个过程
\begin{itemize}
\item 解码时对来自不同的cell进行合并时,第一个cell包含$n$个条目,第二个cell包含$m$个条目,就会产生$n \times m$个新条目
\vspace{0.8em}
\begin{center}
\begin{tikzpicture}
\node [anchor=west] (s1) at (0,0) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{from}\ \textrm{X}_1>$}};
\node [anchor=east] (s2) at ([yshift=-2em]s1.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{since}\ \textrm{X}_1>$}};
\node [anchor=east] (s3) at ([yshift=-2em]s2.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{from the}\ \textrm{X}_1>$}};
\node [anchor=east] (s4) at ([yshift=-2em]s3.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{through}\ \textrm{X}_1>$}};
\node [anchor=west] (t1) at ([xshift=2.5em]s1.east) {\footnotesize{$\textrm{X} \to <\textrm{计划},\ \textrm{plan}>$}};
\node [anchor=west] (t2) at ([xshift=2.5em]s2.east) {\footnotesize{$\textrm{X} \to <\textrm{方案},\ \textrm{scheme}>$}};
\node [anchor=west] (t3) at ([xshift=2.5em]s3.east) {\footnotesize{$\textrm{X} \to <\textrm{项目},\ \textrm{project}>$}};
\node [anchor=west] (t4) at ([xshift=2.5em]s4.east) {\footnotesize{$\textrm{X} \to <\textrm{时期},\ \textrm{times}>$}};
\foreach \x in {1,2,...,4}
\foreach \y in {1,2,...,4}
\draw[->] ([xshift=0.1em]s\x.east) -- ([xshift=-0.1em]t\y.west);
\begin{pgfonlayer}{background}
\node [rectangle,inner sep=0.3em,fill=red!20] [fit = (s1) (s3) (s4)] (box1) {};
\node [rectangle,inner sep=0.3em,fill=green!20] [fit = (t1) (t2) (t3) (t4)] (box2) {};
\end{pgfonlayer}
\end{tikzpicture}
\end{center}
\vspace{0.3em}
\item$n$$m$都很大时,会产生很多新的条目,可以通过限制栈的大小来舍弃大部分条目
\item 另一个思路就是如何只生成有机会被选中的条目,这就是\alert{立方剪枝(cube pruning)}的思想
\end{itemize}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 立方剪枝
\begin{frame}{立方剪枝(Cube Pruning)(续)}
% 问题
% 解决方法
\begin{itemize}
\item 不是考虑所有可能的组合,而是从\alert{最优}候选开始选择
\begin{itemize}
\item 根据代价估计对每个cell中的条目进行排序,最好的候选在最顶层,次优候选排在后面
\item<2-> 计算所有邻居的代价,选择最优的条目,再计算其邻居的代价,不断进行迭代
\item<3-> 直到产生的条目达到一定的数量(如栈容量)或者新加入的条目被其他剪枝策略丢弃,则终止算法
\end{itemize}
\end{itemize}
\begin{center}
\begin{tikzpicture}
\tikzstyle{alignmentnode} = [rectangle,fill=blue!30,minimum size=0.4em,text=white,inner sep=0.1pt]
\tikzstyle{selectnode} = [rectangle,fill=green!20,minimum height=1.5em,minimum width=1.5em,inner sep=1.2pt]
\tikzstyle{srcnode} = [rotate=45,anchor=south west]
\begin{scope}[scale=0.85]
\node [anchor=west] (s1) at (0,0) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{from}\ \textrm{X}_1>$}};
\node [anchor=east] (s2) at ([yshift=-2em]s1.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{since}\ \textrm{X}_1>$}};
\node [anchor=east] (s3) at ([yshift=-2em]s2.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{from the}\ \textrm{X}_1>$}};
\node [anchor=east] (s4) at ([yshift=-2em]s3.east) {\footnotesize{$\textrm{X} \to <\textrm{}\ \textrm{X}_1,\ \textrm{through}\ \textrm{X}_1>$}};
\node [anchor=center,alignmentnode] (alig1) at ([xshift=2.5em]s1.east) {};
\node [anchor=center,alignmentnode] (alig11) at ([xshift=2.2em]alig1.center) {};
\node [anchor=center,alignmentnode] (alig12) at ([xshift=2.2em]alig11.center) {};
\node [anchor=center,alignmentnode] (alig13) at ([xshift=2.2em]alig12.center) {};
\node [anchor=center,alignmentnode] (alig2) at ([xshift=2.5em]s2.east) {};
\node [anchor=center,alignmentnode] (alig21) at ([xshift=2.2em]alig2.center) {};
\node [anchor=center,alignmentnode] (alig22) at ([xshift=2.2em]alig21.center) {};
\node [anchor=center,alignmentnode] (alig23) at ([xshift=2.2em]alig22.center) {};
\node [anchor=center,alignmentnode] (alig3) at ([xshift=2.5em]s3.east) {};
\node [anchor=center,alignmentnode] (alig31) at ([xshift=2.2em]alig3.center) {};
\node [anchor=center,alignmentnode] (alig32) at ([xshift=2.2em]alig31.center) {};
\node [anchor=center,alignmentnode] (alig33) at ([xshift=2.2em]alig32.center) {};
\node [anchor=center,alignmentnode] (alig4) at ([xshift=2.5em]s4.east) {};
\node [anchor=center,alignmentnode] (alig41) at ([xshift=2.2em]alig4.center) {};
\node [anchor=center,alignmentnode] (alig42) at ([xshift=2.2em]alig41.center) {};
\node [anchor=center,alignmentnode] (alig43) at ([xshift=2.2em]alig42.center) {};
\node[srcnode] (c1) at ([yshift=1em]alig1.north) {\footnotesize{plan}};
\node[srcnode] (c2) at ([yshift=1em]alig11.north) {\footnotesize{scheme}};
\node[srcnode] (c3) at ([yshift=1em]alig12.north) {\footnotesize{project}};
\node[srcnode] (c4) at ([yshift=1em]alig13.north) {\footnotesize{times}};
\visible<2->{
\node [anchor=center,selectnode] (c1) at (alig1.center) {\footnotesize{2.1}};
}
\visible<3->{
\node [anchor=center,selectnode,fill=red!20] (c2) at (alig11.center) {\footnotesize{5.1}};
\node [anchor=center,selectnode,fill=red!20] (c3) at (alig2.center) {\footnotesize{5.5}};
}
\visible<4->{
\node [anchor=center,selectnode] (c2) at (alig11.center) {\footnotesize{5.1}};
\node [anchor=center,selectnode] (c3) at (alig2.center) {\footnotesize{5.5}};
\node [anchor=center,selectnode,fill=red!20] (c4) at (alig12.center) {\footnotesize{8.2}};
\node [anchor=center,selectnode,fill=red!20] (c5) at (alig21.center) {\footnotesize{8.5}};
\node [anchor=center,selectnode,fill=red!20] (c6) at (alig3.center) {\footnotesize{7.7}};
}
\end{scope}
\end{tikzpicture}
\end{center}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% BLEU等评价
\begin{frame}{效果}
% 实验结果
\end{frame}
\begin{itemize}
\item 从实验结果中可以看出,基于层次短语的翻译模型性能要优于基于短语的翻译模型
\item 选择使用层次短语信息实际上增加了模型的复杂度,但是可以通过借鉴基于短语的翻译模型模型以及CYK解码和立方剪枝等技术来解决
\item 可以考虑加入更多句法信息来进一步提升模型性能
\end{itemize}
%\vspace{-1em}
\begin{center}
\begin{tabular}{l | l | l | l}
\multicolumn{2}{c|}{模型} & 开发集 & 测试集 \\
\multicolumn{2}{c|}{} & (BLEU[\%]) & (BLEU[\%]) \\ \hline
\multicolumn{2}{l|}{短语(Moses)} & 36.51 & 34.93 \\
\multicolumn{2}{l|}{短语(NiuTrans)} & 36.99 & 35.29 \\ \hline
\multicolumn{2}{l|}{层次短语(Moses)} & 36.65 & 34.79 \\
\multicolumn{2}{l|}{层次短语(NiuTrans)} & 37.41 & 35.35 \\ \hline
\end{tabular}
\end{center}
\vspace{-0.5em}
\scriptsize{* 以上结果来自 NiuTrans: An Open Source Toolkit for Phrase-based Machine Translation}\\
\scriptsize{* 开发集:NIST MT03,测试集:NIST MT05}\\
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
\section{基于语言学句法的模型}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论