Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
Toy-MT-Introduction
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
单韦乔
Toy-MT-Introduction
Commits
bbcd4def
Commit
bbcd4def
authored
Feb 26, 2020
by
曹润柘
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新 Chapter3.tex
parent
bebd90a4
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
37 行增加
和
37 行删除
+37
-37
Book/Chapter3/Chapter3.tex
+37
-37
没有找到文件。
Book/Chapter3/Chapter3.tex
查看文件 @
bbcd4def
...
...
@@ -174,7 +174,7 @@
\label
{
eqC3.1-new
}
\end{eqnarray}
\noindent
其中,
$
\equiv
$
表示定义式。分子
$
c
(
x,y;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
表示
$
x
$
和
$
y
$
在句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
中共现的总次数,分母
$
\sum
_{
x',y'
}
c
(
x',y';
$
$
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
表示任意的源语言单词
$
x'
$
和任意的目标语言单词
$
y'
$
在
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
共现的总次数。
\noindent
其中,
$
\equiv
$
表示定义式。分子
$
c
(
x,y;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
表示
$
x
$
和
$
y
$
在句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
中共现的总次数,分母
$
\sum
_{
x',y'
}
c
(
x',y';
$
$
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
表示任意的源语言单词
$
x'
$
和任意的目标语言单词
$
y'
$
在
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
共现的总次数。
\begin{example}
一个汉英互译的句对
...
...
@@ -202,14 +202,14 @@
\label
{
eqC3.2-new
}
\end{eqnarray}
\noindent
这里运算
$
|
\cdot
|
$
表示句子长度。类似的,可以得到``机器''和``translation''、“机器”和“look”
\\
的单词翻译概率:
\noindent
这里运算
$
|
\cdot
|
$
表示句子长度。类似的,可以得到``机器''和``translation''、“机器”和“look”
\\
的单词翻译概率:
\begin{eqnarray}
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``translation''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
&
=
&
\frac
{
2
}{
63
}
\\
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``look''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
&
=
&
\frac
{
0
}{
63
}
\label
{
eqC3.4-new
}
\end{eqnarray}
\noindent
注意,由于``look''没有出现在数据中,因此
$
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``look''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)=
0
$
。这时,我们可以使用第二章介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现零概率的情况。
\noindent
注意,由于``look''没有出现在数据中,因此
$
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``look''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)=
0
$
。这时,我们可以使用第二章介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现零概率的情况。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection
{
(三)如何从大量的双语平行数据中学习?
}
\index
{
Chapter3.2.3.3
}
...
...
@@ -219,7 +219,7 @@
\label
{
eqC3.5-new
}
\end{eqnarray}
\noindent
与公式
\ref
{
eqC3.1-new
}
相比,分子分母都多了一项累加符号
$
\sum
_{
i
-
1
}^{
n
}
\cdot
$
,它表示遍历语料库中所有的句对,其中
$
n
$
表示语料库中句对的数量。换句话说,当我们计算词的共现次数时,需要对每个句对上的计数结果进行累加。从统计学习的角度,使用更大规模的数据进行参数估计可以提高估计的准确性。在自然语言处理任务中,使用更大规模的数据往往是提高系统性能的捷径。计算单词的翻译概率也是一样,在小规模的数据上看,很多翻译现象的特征并不突出,但是当使用的数据量增加到一定程度,翻译的规律会很明显的体现出来。
\noindent
与公式
\ref
{
eqC3.1-new
}
相比,分子分母都多了一项累加符号
$
\sum
_{
i
-
1
}^{
n
}
\cdot
$
,它表示遍历语料库中所有的句对,其中
$
n
$
表示语料库中句对的数量。换句话说,当我们计算词的共现次数时,需要对每个句对上的计数结果进行累加。从统计学习的角度,使用更大规模的数据进行参数估计可以提高估计的准确性。在自然语言处理任务中,使用更大规模的数据往往是提高系统性能的捷径。计算单词的翻译概率也是一样,在小规模的数据上看,很多翻译现象的特征并不突出,但是当使用的数据量增加到一定程度,翻译的规律会很明显的体现出来。
\begin{example}
两个汉英互译的句对
...
...
@@ -301,7 +301,7 @@ g(s,t) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\label
{
eqC3.8-new
}
\end{eqnarray}
\noindent
其中
$
g
(
s,t
)
$
被定义为句子
$
s
$
中的单词和句子
$
t
$
中的单词的翻译概率的乘积,并且这两个单词之间必须有对齐连接。
$
\textrm
{
P
}
(
s
_
j,t
_
i
)
$
表示具有对齐链接的源语言单词
$
s
_
j
$
和目标语言单词
$
t
_
i
$
的单词翻译概率。以图
\ref
{
fig:3-7
}
中的句对为例,其中``我''与``I''、``对''与``with''、``你'' 与``you''等相互对应,可以把它们的翻译概率相乘得到
$
g
(
s,t
)
$
的计算结果,如下:
\noindent
其中
$
g
(
s,t
)
$
被定义为句子
$
s
$
中的单词和句子
$
t
$
中的单词的翻译概率的乘积,并且这两个单词之间必须有对齐连接。
$
\textrm
{
P
}
(
s
_
j,t
_
i
)
$
表示具有对齐链接的源语言单词
$
s
_
j
$
和目标语言单词
$
t
_
i
$
的单词翻译概率。以图
\ref
{
fig:3-7
}
中的句对为例,其中``我''与``I''、``对''与``with''、``你'' 与``you''等相互对应,可以把它们的翻译概率相乘得到
$
g
(
s,t
)
$
的计算结果,如下:
\begin{eqnarray}
{
g(s,t)
}&
=
&
\textrm
{
P
}
(
\textrm
{
``我'',``I''
}
)
\times
\textrm
{
P
}
(
\textrm
{
``对'',``with''
}
)
\times
\textrm
{
P
}
(
\textrm
{
``你'',``you''
}
)
\times
\nonumber
\\
&
&
\textrm
{
P
}
(
\textrm
{
``感到'', ``am''
}
)
\times
\textrm
{
P
}
(
\textrm
{
``满意'',``satisfied''
}
)
...
...
@@ -332,7 +332,7 @@ g(s,t) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\label
{
eqC3.10-new
}
\end{eqnarray}
\noindent
其中,
$
t
=
t
_
1
...t
_
l
$
表示由
$
l
$
个单词组成的句子,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
t
)
$
表示语言模型给句子
$
t
$
的打分。具体而言,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
t
)
$
被定义为
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
的连乘
\footnote
{
为了确保数学表达的准确性,我们定义
$
\textrm
{
P
}
(
t
_
1
|t
_
0
)
\equiv
\textrm
{
P
}
(
t
_
1
)
$}
,其中
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
表示前面一个单词为
$
t
_{
i
-
1
}$
时,当前单词为
$
t
_
i
$
的概率。语言模型的训练方法可以参看第二章相关内容,这里将不再对语言模型做过多的介绍。
\noindent
其中,
$
t
=
t
_
1
...t
_
l
$
表示由
$
l
$
个单词组成的句子,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
t
)
$
表示语言模型给句子
$
t
$
的打分。具体而言,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
t
)
$
被定义为
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
的连乘
\footnote
{
为了确保数学表达的准确性,我们定义
$
\textrm
{
P
}
(
t
_
1
|t
_
0
)
\equiv
\textrm
{
P
}
(
t
_
1
)
$}
,其中
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
表示前面一个单词为
$
t
_{
i
-
1
}$
时,当前单词为
$
t
_
i
$
的概率。语言模型的训练方法可以参看第二章相关内容,这里将不再对语言模型做过多的介绍。
\parinterval
回到翻译问题的建模问题上来。我们已经有了语言模型可以帮助系统度量每个译文的流畅度,因此可以使用语言模型对翻译进行打分。一种简单的方法是把语言模型
$
\textrm
{
P
}_{
\textrm
{
lm
}}{
(
t
)
}$
和公式
\ref
{
eqC3.8-new
}
中的
$
g
(
s,t
)
$
相乘,这样就得到了一个新的
$
g
(
s,t
)
$
,它同时考虑了翻译准确性(
$
\prod
_{
j,i
\in
\widehat
{
A
}}{
\textrm
{
P
}
(
s
_
j,t
_
i
)
}$
)和流畅度(
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
t
)
$
):
\begin{eqnarray}
...
...
@@ -362,7 +362,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label
{
eqC3.12-new
}
\end{eqnarray}
\noindent
其中
$
\argmax
_{
t
}
\textrm
{
P
}
(
t|s
)
$
表示找到使
$
\textrm
{
P
}
(
t|s
)
$
达到最大时的译文
$
t
$
。结合上一小节中关于
$
\textrm
{
P
}
(
t|s
)
$
\\
的定义,把公式
\ref
{
eqC3.7-new
}
带入公式
\ref
{
eqC3.12-new
}
得到:
\noindent
其中
$
\argmax
_{
t
}
\textrm
{
P
}
(
t|s
)
$
表示找到使
$
\textrm
{
P
}
(
t|s
)
$
达到最大时的译文
$
t
$
。结合上一小节中关于
$
\textrm
{
P
}
(
t|s
)
$
\\
的定义,把公式
\ref
{
eqC3.7-new
}
带入公式
\ref
{
eqC3.12-new
}
得到:
\begin{eqnarray}
\widehat
{
t
}
=
\argmax
_{
t
}
\frac
{
g(s,t)
}{
\sum
_{
t
^{
'
}
g(s,t
^{
'
}
)
}}
\label
{
eqC3.13-new
}
...
...
@@ -563,7 +563,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label
{
eqC3.19-new
}
\end{eqnarray}
\noindent
其中
$
s
_
j
$
和
$
a
_
j
$
分别表示第
$
j
$
个源语言单词及第
$
j
$
源语言单词对应到目标位置,
$
s
_
1
^{
j
-
1
}$
和
$
a
_
1
^{
j
}$
表示第
$
j
-
1
$
个源语言单词和第
$
j
$
个源语言单词的对齐,
$
m
$
表示源语句子的长度。公式
\ref
{
eqC3.19-new
}
可以进一步被分解为四个部分,具体含义如下:
\noindent
其中
$
s
_
j
$
和
$
a
_
j
$
分别表示第
$
j
$
个源语言单词及第
$
j
$
源语言单词对应到目标位置,
$
s
_
1
^{
j
-
1
}$
和
$
a
_
1
^{
j
}$
表示第
$
j
-
1
$
个源语言单词和第
$
j
$
个源语言单词的对齐,
$
m
$
表示源语句子的长度。公式
\ref
{
eqC3.19-new
}
可以进一步被分解为四个部分,具体含义如下:
\begin{itemize}
\item
根据译文
$
t
$
选择源文
$
s
$
的长度
$
m
$
,用
$
\textrm
{
P
}
(
m|t
)
$
表示;
...
...
@@ -707,13 +707,13 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label
{
eqC3.28-new
}
\end{eqnarray}
\noindent
可以看到,遍历所有的词对齐需要
$
(
l
+
1
)
^
m
$
次循环,遍历所有源语言位置累计
$
f
(
s
_
j|t
_{
a
_
j
}
)
$
需要
$
m
$
次循环,因此这个模型的计算复杂度为
$
O
((
l
+
1
)
^
m m
)
$
。当
$
m
$
较大时,计算这样的模型几乎是不可能的。不过,经过仔细观察,可以发现还有更加有效的方法进行计算,如下:
\noindent
可以看到,遍历所有的词对齐需要
$
(
l
+
1
)
^
m
$
次循环,遍历所有源语言位置累计
$
f
(
s
_
j|t
_{
a
_
j
}
)
$
需要
$
m
$
次循环,因此这个模型的计算复杂度为
$
O
((
l
+
1
)
^
m m
)
$
。当
$
m
$
较大时,计算这样的模型几乎是不可能的。不过,经过仔细观察,可以发现还有更加有效的方法进行计算,如下:
\begin{eqnarray}
\sum\limits
_{
a
_
1=0
}^{
l
}
...
\sum\limits
_{
a
_
m=0
}^{
l
}
\prod\limits
_{
j=1
}^{
m
}
f(s
_
j|t
_{
a
_
j
}
) =
\prod\limits
_{
j=1
}^{
m
}
\sum\limits
_{
i=0
}^{
l
}
f(s
_
j|t
_
i)
\label
{
eqC3.29-new
}
\end{eqnarray}
\noindent
公式
\ref
{
eqC3.29-new
}
的技巧在于把若干个乘积的加法(等式左手端)转化为若干加法结果的乘积(等式右手端),这样省去了多次循环,把
$
O
((
l
+
1
)
^
m m
)
$
的计算复杂度降为
$
(
l
+
1
)
m
$
。
\footnote
{
公式
\ref
{
eqC3.29-new
}
相比公式
\ref
{
eqC3.28-new
}
的另一个优点在于,公式
\ref
{
eqC3.29-new
}
中乘法的数量更少,因为现代计算机中乘法运算的强度要高于加法,因此公式
\ref
{
eqC3.29-new
}
的计算机实现效率更高。
}
图
\ref
{
fig:3-21
}
对这个过程进行了进一步解释。
\noindent
公式
\ref
{
eqC3.29-new
}
的技巧在于把若干个乘积的加法(等式左手端)转化为若干加法结果的乘积(等式右手端),这样省去了多次循环,把
$
O
((
l
+
1
)
^
m m
)
$
的计算复杂度降为
$
(
l
+
1
)
m
$
。
\footnote
{
公式
\ref
{
eqC3.29-new
}
相比公式
\ref
{
eqC3.28-new
}
的另一个优点在于,公式
\ref
{
eqC3.29-new
}
中乘法的数量更少,因为现代计算机中乘法运算的强度要高于加法,因此公式
\ref
{
eqC3.29-new
}
的计算机实现效率更高。
}
图
\ref
{
fig:3-21
}
对这个过程进行了进一步解释。
%----------------------------------------------
% 图3.32-new
...
...
@@ -759,7 +759,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label
{
eqC3.32-new
}
\end{eqnarray}
\noindent
其中,
$
\argmax
_{
\theta
}$
表示求最优参数的过程(或优化过程)。
\noindent
其中,
$
\argmax
_{
\theta
}$
表示求最优参数的过程(或优化过程)。
\parinterval
公式
\ref
{
eqC3.32-new
}
实际上也是一种基于极大似然的模型训练方法。这里,可以把
$
\textrm
{
P
}_{
\theta
}
(
s|t
)
$
看作是模型对数据描述的一个似然函数,记做
$
L
(
s,t;
\theta
)
$
。也就是,我们的优化目标实际上是对似然函数的优化:
$
\widehat
{
\theta
}
=
\argmax
_{
\theta
\in
\Theta
}
L
(
s,t;
\theta
)
$
,其中
\{
$
\widehat
{
\theta
}$
\}
表示可能有多个结果,
$
\Theta
$
表示参数空间。
...
...
@@ -769,7 +769,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
&
\textrm
{
s.t.
}
&
\textrm
{
任意单词
}
t
_{
y
}
:
\;\sum
_{
s
_
x
}{
f(s
_
x|t
_
y)
}
=1
\nonumber
\label
{
eqC3-IBM1
}
\end{eqnarray}
\noindent
其中,
$
\textrm
{
max
}
(
\cdot
)
$
表示最大化,
$
\frac
{
\varepsilon
}{
(
l
+
1
)
^
m
}
\prod
_{
j
=
1
}^{
m
}
\sum
_{
i
=
0
}^{
l
}{
f
(
{
s
_
j|t
_
i
}
)
}$
是目标函数,
$
f
(
{
s
_
j|t
_
i
}
)
$
是模型的参数,
$
\sum
_{
s
_
x
}{
f
(
s
_
x|t
_
y
)
}
=
1
$
是优化的约束条件,保证翻译概率满足归一化的要求。需要注意的是
$
\{
f
(
s
_
x |t
_
y
)
\}
$
对应了很多参数,每个源语言单词和每个目标语单词的组合都对应一个参数
$
f
(
s
_
x |t
_
y
)
$
。
\noindent
其中,
$
\textrm
{
max
}
(
\cdot
)
$
表示最大化,
$
\frac
{
\varepsilon
}{
(
l
+
1
)
^
m
}
\prod
_{
j
=
1
}^{
m
}
\sum
_{
i
=
0
}^{
l
}{
f
(
{
s
_
j|t
_
i
}
)
}$
是目标函数,
$
f
(
{
s
_
j|t
_
i
}
)
$
是模型的参数,
$
\sum
_{
s
_
x
}{
f
(
s
_
x|t
_
y
)
}
=
1
$
是优化的约束条件,保证翻译概率满足归一化的要求。需要注意的是
$
\{
f
(
s
_
x |t
_
y
)
\}
$
对应了很多参数,每个源语言单词和每个目标语单词的组合都对应一个参数
$
f
(
s
_
x |t
_
y
)
$
。
%%%%%%%%%%%%%%%%%%%%%%
\subsubsection
{
(二)优化
}
\index
{
Chapter3.4.4.2
}
...
...
@@ -793,7 +793,7 @@ L(f,\lambda)=\frac{\epsilon}{(l+1)^m}\prod_{j=1}^{m}\sum_{i=0}^{l}\prod_{j=1}^{m
\end{figure}
%---------------------------
\noindent
因为
$
L
(
f,
\lambda
)
$
是可微分函数,因此可以通过计算
$
L
(
f,
\lambda
)
$
导数为零的点得到极值点。因为这个模型里仅有
$
f
(
s
_
x|t
_
y
)
$
一种类型的参数,我们只需要如下导数进行计算。
\noindent
因为
$
L
(
f,
\lambda
)
$
是可微分函数,因此可以通过计算
$
L
(
f,
\lambda
)
$
导数为零的点得到极值点。因为这个模型里仅有
$
f
(
s
_
x|t
_
y
)
$
一种类型的参数,我们只需要如下导数进行计算。
\begin{eqnarray}
\frac
{
\partial
L(f,
\lambda
)
}{
\partial
f(s
_
u|t
_
v)
}&
=
&
\frac
{
\partial
\big
[ \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m} \sum\limits_{i=0}^{l} f(s_j|t_i) \big]
}{
\partial
f(s
_
u|t
_
v)
}
-
\nonumber
\\
&
&
\frac
{
\partial
\big
[ \sum_{t_y} \lambda_{t_y} (\sum_{s_x} f(s_x|t_y) -1) \big]
}{
\partial
f(s
_
u|t
_
v)
}
\nonumber
\\
...
...
@@ -808,7 +808,7 @@ $\frac{\partial g(z)}{\partial z} = \alpha \beta z^{\beta-1} = \frac{\beta}{z}\a
\label
{
eqC3.35-new
}
\end{eqnarray}
\noindent
其中,当
$
x
=
y
$
时为
$
\delta
(
x,y
)=
1
$
,否则为0。
\noindent
其中,当
$
x
=
y
$
时为
$
\delta
(
x,y
)=
1
$
,否则为0。
\parinterval
根据
$
\frac
{
\partial
g
(
z
)
}{
\partial
z
}
=
\frac
{
\beta
}{
z
}
g
(
z
)
$
,可以得到
\begin{eqnarray}
...
...
@@ -837,13 +837,13 @@ f(s_u|t_v) = \frac{\lambda_{t_v}^{-1} \epsilon}{(l+1)^{m}} \cdot \frac{\sum\limi
\label
{
eqC3.39-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
将上式稍作调整得到下式,可以看出,这不是一个计算
$
f
(
s
_
u|t
_
v
)
$
的解析式,因为等式右端仍含有
$
f
(
s
_
u|t
_
v
)
$
。
\noindent
\hspace
{
2em
}
将上式稍作调整得到下式,可以看出,这不是一个计算
$
f
(
s
_
u|t
_
v
)
$
的解析式,因为等式右端仍含有
$
f
(
s
_
u|t
_
v
)
$
。
\begin{eqnarray}
f(s
_
u|t
_
v) =
\lambda
_{
t
_
v
}^{
-1
}
\frac
{
\epsilon
}{
(l+1)
^{
m
}}
\prod\limits
_{
j=1
}^{
m
}
\sum\limits
_{
i=0
}^{
l
}
f(s
_
j|t
_
i)
\sum\limits
_{
j=1
}^{
m
}
\delta
(s
_
j,s
_
u)
\sum\limits
_{
i=0
}^{
l
}
\delta
(t
_
i,t
_
v)
\frac
{
f(s
_
u|t
_
v)
}{
\sum\limits
_{
i=0
}^{
l
}
f(s
_
u|t
_
i)
}
\label
{
eqC3.40-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
通过采用一个非常经典的期望最大化(Expectation Maximization)方法,简称EM方法(或算法),我们仍可以利用上式迭代地计算
$
f
(
s
_
u|t
_
v
)
$
,使其最终收敛到最优值。该方法的思想是:用当前的参数,求一个似然函数的期望,之后最大化这个期望同时得到新的一组参数的值。对于IBM模型来说,其迭代过程就是反复使用公式1.39,具体如下图。
\noindent
\hspace
{
2em
}
通过采用一个非常经典的期望最大化(Expectation Maximization)方法,简称EM方法(或算法),我们仍可以利用上式迭代地计算
$
f
(
s
_
u|t
_
v
)
$
,使其最终收敛到最优值。该方法的思想是:用当前的参数,求一个似然函数的期望,之后最大化这个期望同时得到新的一组参数的值。对于IBM模型来说,其迭代过程就是反复使用公式1.39,具体如下图。
%----------------------------------------------
% 图3.28
\begin{figure}
[htp]
...
...
@@ -854,7 +854,7 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m
\end{figure}
%---------------------------
\noindent\hspace
{
2em
}
为了化简
$
f
(
s
_
u|t
_
v
)
$
的计算,在此对公式
\ref
{
eqC3.40-new
}
进行了重新组织,见下图。红色部分表示翻译概率P
$
(
s|t
)
$
;蓝色部分表示
$
(
s
_
u,t
_
v
)
$
在句对
$
(
s,t
)
$
中配对的总次数,即`
$
t
_
v
$
翻译为
$
s
_
u
$
'在所有对齐中出现的次数;绿色部分表示
$
f
(
s
_
u|t
_
v
)
$
对于所有的
$
t
_
i
$
的相对值,即`
$
t
_
v
$
翻译为
$
s
_
u
$
'在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``
$
t
_
v
$
翻译为
$
s
_
u
$
''这个事件出现次数的期望的估计,称之为期望频次(expected count)。
\noindent
\hspace
{
2em
}
为了化简
$
f
(
s
_
u|t
_
v
)
$
的计算,在此对公式
\ref
{
eqC3.40-new
}
进行了重新组织,见下图。红色部分表示翻译概率P
$
(
s|t
)
$
;蓝色部分表示
$
(
s
_
u,t
_
v
)
$
在句对
$
(
s,t
)
$
中配对的总次数,即`
$
t
_
v
$
翻译为
$
s
_
u
$
'在所有对齐中出现的次数;绿色部分表示
$
f
(
s
_
u|t
_
v
)
$
对于所有的
$
t
_
i
$
的相对值,即`
$
t
_
v
$
翻译为
$
s
_
u
$
'在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``
$
t
_
v
$
翻译为
$
s
_
u
$
''这个事件出现次数的期望的估计,称之为期望频次(expected count)。
%----------------------------------------------
% 图3.29
\begin{figure}
[htp]
...
...
@@ -865,7 +865,7 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m
\end{figure}
%---------------------------
\noindent\hspace
{
2em
}
更具体的,期望频次是事件在其分布下出现的次数的期望。其计算公式为:
$
c
_{
\mathbb
{
E
}}
(
X
)=
\sum
_
i c
(
x
_
i
)
\cdot
\textrm
{
P
}
(
x
_
i
)
$
。其中
$
c
(
x
_
i
)
$
表示
$
x
_
i
$
出现的次数,P
$
(
x
_
i
)
$
表示
$
x
_
i
$
出现的概率。下表展示了事件X的期望频次的详细计算过程。其中
$
x
_
1
,x
_
2
,x
_
3
$
分别表示事件X出现2次,1次和5次的情况。
\noindent
\hspace
{
2em
}
更具体的,期望频次是事件在其分布下出现的次数的期望。其计算公式为:
$
c
_{
\mathbb
{
E
}}
(
X
)=
\sum
_
i c
(
x
_
i
)
\cdot
\textrm
{
P
}
(
x
_
i
)
$
。其中
$
c
(
x
_
i
)
$
表示
$
x
_
i
$
出现的次数,P
$
(
x
_
i
)
$
表示
$
x
_
i
$
出现的概率。下表展示了事件X的期望频次的详细计算过程。其中
$
x
_
1
,x
_
2
,x
_
3
$
分别表示事件X出现2次,1次和5次的情况。
\begin{table}
[h]
\centering
\caption
{
期望频次的详细计算过程
}
...
...
@@ -893,51 +893,51 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m
}
\end{table}
\noindent\hspace
{
2em
}
因为在P
$
(
s|t
)
$
中,
$
t
_
v
$
翻译(连接)到
$
s
_
u
$
的期望频次为:
\noindent
\hspace
{
2em
}
因为在P
$
(
s|t
)
$
中,
$
t
_
v
$
翻译(连接)到
$
s
_
u
$
的期望频次为:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
\equiv
\sum\limits
_{
j=1
}^{
m
}
\delta
(s
_
j,s
_
u)
\sum\limits
_{
i=0
}^{
l
}
\delta
(t
_
i,t
_
v)
\cdot
\frac
{
f(s
_
u|t
_
v)
}{
\sum\limits
_{
i=0
}^{
l
}
f(s
_
u|t
_
i)
}
\label
{
eqC3.41-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
所以公式
\ref
{
eqC3.40-new
}
可重写为:
\noindent
\hspace
{
2em
}
所以公式
\ref
{
eqC3.40-new
}
可重写为:
\begin{eqnarray}
f(s
_
u|t
_
v)=
\lambda
_{
t
_
v
}^{
-1
}
\cdot
\textrm
{
P
}
(s|t)
\cdot
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
\label
{
eqC3.42-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
在此如果令
$
\lambda
_{
t
_
v
}^{
'
}
=
\frac
{
\lambda
_{
t
_
v
}}{
\textrm
{
P
}
(
s|t
)
}$
,可得:
\noindent
\hspace
{
2em
}
在此如果令
$
\lambda
_{
t
_
v
}^{
'
}
=
\frac
{
\lambda
_{
t
_
v
}}{
\textrm
{
P
}
(
s|t
)
}$
,可得:
\begin{eqnarray}
f(s
_
u|t
_
v)
&
=
&
\lambda
_{
t
_
v
}^{
-1
}
\cdot
\textrm
{
P
}
(s|t)
\cdot
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
\nonumber
\\
&
=
&{
(
\lambda
_{
t
_
v
}^{
'
}
)
}^{
-1
}
\cdot
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
\label
{
eqC3.43-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
又因为IBM模型对
$
f
(
\cdot
|
\cdot
)
$
的约束如下:
\noindent
\hspace
{
2em
}
又因为IBM模型对
$
f
(
\cdot
|
\cdot
)
$
的约束如下:
\begin{eqnarray}
\forall
t
_
y :
\sum\limits
_{
s
_
x
}
f(s
_
x|t
_
y) =1
\label
{
eqC3.44-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
为了满足
$
f
(
\cdot
|
\cdot
)
$
的概率归一化约束,易知
$
\lambda
_{
t
_
v
}^{
'
}$
的计算为:
\noindent
\hspace
{
2em
}
为了满足
$
f
(
\cdot
|
\cdot
)
$
的概率归一化约束,易知
$
\lambda
_{
t
_
v
}^{
'
}$
的计算为:
\begin{eqnarray}
\lambda
_{
t
_
v
}^{
'
}
=
\sum\limits
_{
s
_
u
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
\label
{
eqC3.45-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
因此,
$
f
(
s
_
u|t
_
v
)
$
的计算式可再一步变换成下式:
\noindent
\hspace
{
2em
}
因此,
$
f
(
s
_
u|t
_
v
)
$
的计算式可再一步变换成下式:
\begin{eqnarray}
f(s
_
u|t
_
v)=
\frac
{
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
}
{
\sum\limits
_{
s
_
u
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
}
\label
{
eqC3.46-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
总的来说,对于实际情况中我们拥有的N个互译的句对(称作平行语料):
\noindent
\hspace
{
2em
}
总的来说,对于实际情况中我们拥有的N个互译的句对(称作平行语料):
${
(
s
^{
[
1
]
}
,t
^{
[
1
]
}
)
,
(
s
^{
[
2
]
}
,t
^{
[
2
]
}
)
,...,
(
s
^{
[
N
]
}
,t
^{
[
N
]
}
)
}$
来说,
$
f
(
s
_
u|t
_
v
)
$
的期望频次为:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v)=
\sum\limits
_{
i=1
}^{
N
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s
^{
[i]
}
,t
^{
[i]
}
)
\label
{
eqC3.47-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
于是有
$
f
(
s
_
u|t
_
v
)
$
的计算公式和迭代过程如下:
\noindent
\hspace
{
2em
}
于是有
$
f
(
s
_
u|t
_
v
)
$
的计算公式和迭代过程如下:
%----------------------------------------------
% 图3.30
\begin{figure}
[htp]
...
...
@@ -948,7 +948,7 @@ c_{\mathbb{E}}(s_u|t_v)=\sum\limits_{i=1}^{N} c_{\mathbb{E}}(s_u|t_v;s^{[i]},t^
\end{figure}
%---------------------------
\noindent\hspace
{
2em
}
完整的EM算法如下图所示。其中E-Step对应4-5行,目的是计算
$
c
_{
\mathbb
{
E
}}
(
\cdot
)
$
;M-Step对应6-9行,目的是计算
$
f
(
\cdot
)
$
。
\noindent
\hspace
{
2em
}
完整的EM算法如下图所示。其中E-Step对应4-5行,目的是计算
$
c
_{
\mathbb
{
E
}}
(
\cdot
)
$
;M-Step对应6-9行,目的是计算
$
f
(
\cdot
)
$
。
%----------------------------------------------
% 图3.31
\begin{figure}
[htp]
...
...
@@ -960,14 +960,14 @@ c_{\mathbb{E}}(s_u|t_v)=\sum\limits_{i=1}^{N} c_{\mathbb{E}}(s_u|t_v;s^{[i]},t^
%---------------------------
\noindent\hspace
{
2em
}
同样的,EM算法可以直接用于训练IBM模型2。对于句对
$
(
s,t
)
$
,
$
m
=
|s|
$
,
$
l
=
|t|
$
,E-Step的计算公式如下,其中参数
$
f
(
s
_
j|t
_
i
)
$
与IBM模型1一样:
\noindent
\hspace
{
2em
}
同样的,EM算法可以直接用于训练IBM模型2。对于句对
$
(
s,t
)
$
,
$
m
=
|s|
$
,
$
l
=
|t|
$
,E-Step的计算公式如下,其中参数
$
f
(
s
_
j|t
_
i
)
$
与IBM模型1一样:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s,t)
&
=
\sum\limits
_{
j=1
}^{
m
}
\sum\limits
_{
i=0
}^{
l
}
\frac
{
f(s
_
u|t
_
v)a(i|j,m,l)
\delta
(s
_
j,s
_
u)
\delta
(t
_
i,t
_
v)
}
{
\sum
_{
k=0
}^{
l
}
f(s
_
u|t
_
v)a(k|j,m,l)
}
\\
c
_{
\mathbb
{
E
}}
(i|j,m,l;s,t)
&
=
\frac
{
f(s
_
j|t
_
i)a(i|j,m,l)
}
{
\sum
_{
k=0
}^{
l
}
f(s
_
j|t
_
k)a(k,j,m,l)
}
\label
{
eqC3.49-new
}
\end{eqnarray}
\noindent\hspace
{
2em
}
M-Step的计算公式如下,其中参数
$
a
(
i|j,m,l
)
$
表示调序概率:
\noindent
\hspace
{
2em
}
M-Step的计算公式如下,其中参数
$
a
(
i|j,m,l
)
$
表示调序概率:
\begin{eqnarray}
f(s
_
u|t
_
v)
&
=
\frac
{
\sum
_{
k=0
}^{
K
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s
^{
[k]
}
,t
^{
[k]
}
)
}
{
\sum
_{
s
_
u
}
\sum
_{
k=0
}^{
K
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s
^{
[k]
}
,t
^{
[k]
}
)
}
\\
a(i|j,m,l)
&
=
\frac
{
\sum
_{
k=0
}^{
K
}
c
_{
\mathbb
{
E
}}
(i|j;s
^{
[k]
}
,t
^{
[k]
}
)
}
{
\sum
_{
i
}
\sum
_{
k=0
}^{
K
}
c
_{
\mathbb
{
E
}}
(i|j;s
^{
[k]
}
,t
^{
[k]
}
)
}
...
...
@@ -1028,7 +1028,7 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\label
{
fig:3-30
}
\end{figure}
\noindent
其中
$
τ
_{
j
1
}^{
k
-
1
}$
表示
$
\tau
_{
j
1
}
\tau
_{
j
2
}
\cdots
\tau
_{
j
(
k
-
1
)
}$
,
$
\pi
_{
j
1
}^{
k
-
1
}$
表示
$
\pi
_{
j
1
}
\pi
_{
j
2
}
\cdots
\pi
_{
j
(
k
-
1
)
}$
。我们可以把图
\ref
{
fig:3-30
}
中的公式分为5个部分,并用不同的序号和颜色进行标注。每部分的具体含义是:
\noindent
其中
$
τ
_{
j
1
}^{
k
-
1
}$
表示
$
\tau
_{
j
1
}
\tau
_{
j
2
}
\cdots
\tau
_{
j
(
k
-
1
)
}$
,
$
\pi
_{
j
1
}^{
k
-
1
}$
表示
$
\pi
_{
j
1
}
\pi
_{
j
2
}
\cdots
\pi
_{
j
(
k
-
1
)
}$
。我们可以把图
\ref
{
fig:3-30
}
中的公式分为5个部分,并用不同的序号和颜色进行标注。每部分的具体含义是:
\begin{itemize}
...
...
@@ -1066,7 +1066,7 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\label
{
eqC3.57-new
}
\end{eqnarray}
\noindent
其中,
\ref
{
eqC3.57-new
}
中
$
p
_
0
+
p
_
1
=
1
$
。到此为止,我们完成了公式
\ref
{
eqC3.57-new
}
中第2和5部分的建模。最终根据这些假设可以得到
$
\textrm
{
P
}
(
s|t
)
$
的形式:
\noindent
其中,
\ref
{
eqC3.57-new
}
中
$
p
_
0
+
p
_
1
=
1
$
。到此为止,我们完成了公式
\ref
{
eqC3.57-new
}
中第2和5部分的建模。最终根据这些假设可以得到
$
\textrm
{
P
}
(
s|t
)
$
的形式:
\begin{eqnarray}
{
\textrm
{
P
}
(s|t)
}&
=
&{
\sum
_{
a
_
1=0
}^{
l
}{
\cdots
}
\sum
_{
a
_
m=0
}^{
l
}{
(
\begin{array}
{
c
}
m-
\varphi
_
0
\\
...
...
@@ -1076,7 +1076,7 @@ m-\varphi_0\\
\label
{
eqC3.58-new
}
\end{eqnarray}
\noindent
其中,
$
n
(
\varphi
_
j |e
_
j
)=
{
\textrm
{
P
}
(
\varphi
_
j|t
_
j
)
}$
表示产出率的分布。这里的约束条件为,
\noindent
其中,
$
n
(
\varphi
_
j |e
_
j
)=
{
\textrm
{
P
}
(
\varphi
_
j|t
_
j
)
}$
表示产出率的分布。这里的约束条件为,
\begin{eqnarray}
\sum
_{
f
}
t(s|t)
&
=
&
1
\label
{
eqC3.59-new
}
\\
\sum
_{
i
}
d(i|j,m,l)
&
=
&
1
\label
{
eqC3.60-new
}
\\
...
...
@@ -1111,7 +1111,7 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\label
{
eqC3.63-new
}
\end{equation}
\noindent
其中,译文的第
$
j
$
个单词生成的第
$
k
$
个源语单词在源语言句子中的位置用变量
$
\pi
_{
jk
}$
表示,
$
\pi
_{
jk
}$
表示它的观测值。而对于列表(
$
\tau
_{
[
j
]
}$
)中的其它的单词(
$
\tau
_{
[
j
]
k
}
,
1
<k<
\varphi
[
j
]
$
)的扭曲度计算,进行如下计算
\noindent
其中,译文的第
$
j
$
个单词生成的第
$
k
$
个源语单词在源语言句子中的位置用变量
$
\pi
_{
jk
}$
表示,
$
\pi
_{
jk
}$
表示它的观测值。而对于列表(
$
\tau
_{
[
j
]
}$
)中的其它的单词(
$
\tau
_{
[
j
]
k
}
,
1
<k<
\varphi
[
j
]
$
)的扭曲度计算,进行如下计算
\begin{equation}
\textrm
{
P
}
(
\pi
_{
[j]k
}
=i|
{
\pi
}_{
[j]1
}^{
k-1
}
,
\pi
_
1
^{
[j]-1
}
,
\tau
_
0
^
l,
\varphi
_
0
^
l,t)=d
_{
>1
}
(i-
\pi
_{
[j]k-1
}
|B(f
_
i))
...
...
@@ -1184,11 +1184,11 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\parinterval
总结起来,HMM能够解决下面三个问题:
\begin{itemize}
\item
估计。即给定模型(硬币种类和转移概率),根据可见状态链(抛硬币的结果),计算在该模型下得到这个结果的概率,这个问题的解决需要用到前后向算法。
\item
估计。即给定模型(硬币种类和转移概率),根据可见状态链(抛硬币的结果),计算在该模型下得到这个结果的概率,这个问题的解决需要用到前后向算法。
\item
参数学习。即给定硬币种类(隐含状态数量),根据多个可见状态链(抛硬币的结果),估计模型的参数(转移概率),这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
\item
参数学习。即给定硬币种类(隐含状态数量),根据多个可见状态链(抛硬币的结果),估计模型的参数(转移概率),这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
\item
解码问题。即给定模型(硬币种类和转移概率)和可见状态链(抛硬币的结果),计算在可见状态链的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法。
\item
解码问题。即给定模型(硬币种类和转移概率)和可见状态链(抛硬币的结果),计算在可见状态链的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法。
\end{itemize}
\subsubsection
{
(二)词对齐模型
}
...
...
@@ -1263,7 +1263,7 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\label
{
eqC3.71-new
}
\end{eqnarray}
\parinterval
本质上,模型3和模型4就是对应
$
\textrm
{
P
}
(
{
\textrm
{
failure
}
|t
}
)
>
0
$
的情况。这部分概率是模型损失掉的。有时候也把这类Deficiency问题称为Technical Deficiency。还有一种Deficiency问题被称作
{
\red
{
Spiritual Deficiency
}}
,它是指
$
\textrm
{
P
}
(
{
\textrm
{
well
}
|t
}
)
+
\textrm
{
P
}
(
{
\textrm
{
ill
}
|t
}
)
=
1
$
且
$
\textrm
{
P
}
(
{
\textrm
{
ill
}
|t
}
)
>
0
$
的情况。模型1和模型2就有Spiritually Deficiency的问题。可以注意到,Technical Deficiency只存在于模型3和模型4中,模型1和模型2并没有Technical Deficiency问题。根本原因是模型1和模型2的词对齐是从源语言出发对应到目标语言,
$
t
$
到
$
s
$
的翻译过程实际上是从单词
$
s
_
1
$
开始到单词
$
s
_
m
$
结束,依次把每个源语言单词
$
s
_
i
$
对应到唯一一个目标语言位置。显然,这个过程能够保证每个源语言单词仅对应一个目标语言单词。但是,模型3和模型4中对齐是从目标语言出发对应到源语言,
$
t
$
到
$
s
$
的翻译过程从
$
t
_
1
$
开始
$
t
_
l
$
结束,依次把目标语言单词
$
t
_
j
$
生成的单词对应到某个源语言位置上。但是这个过程不能保证
$
t
_
j
$
中生成的单词所对应的位置没有被其它已经完成对齐的目标语单词所生成的某个源语言单词对应过,因此也就产生了Deficency问题。
\parinterval
本质上,模型3和模型4就是对应
$
\textrm
{
P
}
(
{
\textrm
{
failure
}
|t
}
)
>
0
$
的情况。这部分概率是模型损失掉的。有时候也把这类Deficiency问题称为Technical Deficiency。还有一种Deficiency问题被称作
{
\red
{
Spiritual Deficiency
}}
,它是指
$
\textrm
{
P
}
(
{
\textrm
{
well
}
|t
}
)
+
\textrm
{
P
}
(
{
\textrm
{
ill
}
|t
}
)
=
1
$
且
$
\textrm
{
P
}
(
{
\textrm
{
ill
}
|t
}
)
>
0
$
的情况。模型1和模型2就有Spiritually Deficiency的问题。可以注意到,Technical Deficiency只存在于模型3和模型4中,模型1和模型2并没有Technical Deficiency问题。根本原因是模型1和模型2的词对齐是从源语言出发对应到目标语言,
$
t
$
到
$
s
$
的翻译过程实际上是从单词
$
s
_
1
$
开始到单词
$
s
_
m
$
结束,依次把每个源语言单词
$
s
_
i
$
对应到唯一一个目标语言位置。显然,这个过程能够保证每个源语言单词仅对应一个目标语言单词。但是,模型3和模型4中对齐是从目标语言出发对应到源语言,
$
t
$
到
$
s
$
的翻译过程从
$
t
_
1
$
开始
$
t
_
l
$
结束,依次把目标语言单词
$
t
_
j
$
生成的单词对应到某个源语言位置上。但是这个过程不能保证
$
t
_
j
$
中生成的单词所对应的位置没有被其它已经完成对齐的目标语单词所生成的某个源语言单词对应过,因此也就产生了Deficency问题。
\parinterval
这里还要强调的是,Technical Deficiency是模型3和模型4是模型本身的缺陷造成的,如果有一个``更好''的模型就可以完全避免这个问题。而Spiritually Deficiency几乎是不能从模型上根本解决的,因为对于任意一种语言我们都不能枚举所有的句子(
$
\textrm
{
P
}
(
{
\textrm
{
ill
}
|t
}
)
$
实际上是得不到的)。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论