Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
0aaf5bc6
Commit
0aaf5bc6
authored
Jan 08, 2021
by
曹润柘
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'caorunzhe' 到 'master'
Caorunzhe 查看合并请求
!825
parents
c1e1f3db
0cf5f53e
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
58 行增加
和
58 行删除
+58
-58
Chapter14/Figures/figure-3vs.tex
+1
-1
Chapter14/Figures/figure-syntax.tex
+3
-3
Chapter14/chapter14.tex
+3
-3
Chapter16/chapter16.tex
+14
-14
Chapter17/chapter17.tex
+7
-7
Chapter3/chapter3.tex
+14
-14
Chapter4/chapter4.tex
+0
-0
Chapter8/chapter8.tex
+2
-2
Chapter9/chapter9.tex
+14
-14
没有找到文件。
Chapter14/Figures/figure-3vs.tex
查看文件 @
0aaf5bc6
\begin{tikzpicture}
\tikzstyle
{
decoder
}
= [rectangle,thick,rounded corners,minimum width=5cm,minimum height=0.6cm,text centered,draw=black,fill=blue!15]
\tikzstyle
{
decoder
}
= [rectangle,thick,rounded corners,minimum width=5cm,minimum height=0.6cm,text centered,draw=black,fill=blue!15
,drop shadow
]
\begin{scope}
\node
(encoder) at (0,0)
{
来自编码器的信息
}
;
...
...
Chapter14/Figures/figure-syntax.tex
查看文件 @
0aaf5bc6
\begin{tikzpicture}
\tikzstyle
{
encoder
}
= [rectangle,thick,rounded corners,minimum width=1.9cm,minimum height=1.2cm,text centered,draw=black,fill=red!25]
\tikzstyle
{
autodecoder
}
= [rectangle,thick,rounded corners,minimum width=3cm,minimum height=1.2cm,text centered,draw=black,fill=blue!15]
\tikzstyle
{
nonautodecoder
}
= [rectangle,thick,rounded corners,minimum width=4cm,minimum height=1.2cm,text centered,draw=black!70,fill=blue!15]
\tikzstyle
{
encoder
}
= [rectangle,thick,rounded corners,minimum width=1.9cm,minimum height=1.2cm,text centered,draw=black,fill=red!25
,drop shadow
]
\tikzstyle
{
autodecoder
}
= [rectangle,thick,rounded corners,minimum width=3cm,minimum height=1.2cm,text centered,draw=black,fill=blue!15
,drop shadow
]
\tikzstyle
{
nonautodecoder
}
= [rectangle,thick,rounded corners,minimum width=4cm,minimum height=1.2cm,text centered,draw=black!70,fill=blue!15
,drop shadow
]
\node
(encoder)[encoder] at (0,0)
{
编码器
}
;
%\node (des)[anchor=north] at ([yshift=2cm]encoder.north) {<Mask>:<Mask>};
...
...
Chapter14/chapter14.tex
查看文件 @
0aaf5bc6
...
...
@@ -154,7 +154,7 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
长度惩罚因子
。用译文长度来归一化翻译概率是最常用的方法:对于源语言句子
$
\seq
{
x
}$
和译文句子
$
\seq
{
y
}$
,模型得分
$
\textrm
{
score
}
(
\seq
{
x
}
,
\seq
{
y
}
)
$
的值会随着译文
$
\seq
{
y
}$
的长度增大而减小。为了避免此现象,可以引入一个长度惩罚函数
$
\textrm
{
lp
}
(
\seq
{
y
}
)
$
,并定义模型得分如公式
\eqref
{
eq:14-12
}
所示:
\item
{
\small\sffamily\bfseries
{
长度惩罚因子
}}
。用译文长度来归一化翻译概率是最常用的方法:对于源语言句子
$
\seq
{
x
}$
和译文句子
$
\seq
{
y
}$
,模型得分
$
\textrm
{
score
}
(
\seq
{
x
}
,
\seq
{
y
}
)
$
的值会随着译文
$
\seq
{
y
}$
的长度增大而减小。为了避免此现象,可以引入一个长度惩罚函数
$
\textrm
{
lp
}
(
\seq
{
y
}
)
$
,并定义模型得分如公式
\eqref
{
eq:14-12
}
所示:
\begin{eqnarray}
\textrm
{
score
}
(
\seq
{
x
}
,
\seq
{
y
}
)
&
=
&
\frac
{
\log
\funp
{
P
}
(
\seq
{
y
}
\vert\seq
{
x
}
)
}{
\textrm
{
lp
}
(
\seq
{
y
}
)
}
...
...
@@ -179,7 +179,7 @@
\end{table}
%----------------------------------------------------------------------------------------------------
\vspace
{
0.5em
}
\item
译文长度范围约束
。为了让译文的长度落在合理的范围内,神经机器翻译的推断也会设置一个译文长度约束
\upcite
{
Vaswani2018Tensor2TensorFN,KleinOpenNMT
}
。令
$
[
a,b
]
$
表示一个长度范围,可以定义:
\item
{
\small\sffamily\bfseries
{
译文长度范围约束
}}
。为了让译文的长度落在合理的范围内,神经机器翻译的推断也会设置一个译文长度约束
\upcite
{
Vaswani2018Tensor2TensorFN,KleinOpenNMT
}
。令
$
[
a,b
]
$
表示一个长度范围,可以定义:
\begin{eqnarray}
a
&
=
&
\omega
_{
\textrm
{
low
}}
\cdot
|
\seq
{
x
}
|
\label
{
eq:14-3
}
\\
...
...
@@ -188,7 +188,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\vspace
{
0.5em
}
\noindent
其中,
$
\omega
_{
\textrm
{
low
}}$
和
$
\omega
_{
\textrm
{
high
}}$
分别表示译文长度的下限和上限,比如,很多系统中设置为
$
\omega
_{
\textrm
{
low
}}
=
1
/
2
$
,
$
\omega
_{
\textrm
{
high
}}
=
2
$
,表示译文至少有源语言句子一半长,最多有源语言句子两倍长。
$
\omega
_{
\textrm
{
low
}}$
和
$
\omega
_{
\textrm
{
high
}}$
的设置对推断效率影响很大,
$
\omega
_{
\textrm
{
high
}}$
可以被看作是一个推断的终止条件,最理想的情况是
$
\omega
_{
\textrm
{
high
}}
\cdot
|
\seq
{
x
}
|
$
恰巧就等于最佳译文的长度,这时没有浪费任何计算资源。反过来的一种情况,
$
\omega
_{
\textrm
{
high
}}
\cdot
|
\seq
{
x
}
|
$
远大于最佳译文的长度,这时很多计算都是无用的。为了找到长度预测的准确率和召回率之间的平衡,一般需要大量的实验最终确定
$
\omega
_{
\textrm
{
low
}}$
和
$
\omega
_{
\textrm
{
high
}}$
。当然,利用统计模型预测
$
\omega
_{
\textrm
{
low
}}$
和
$
\omega
_{
\textrm
{
high
}}$
也是非常值得探索的方向,比如基于繁衍率的模型
\upcite
{
Gu2017NonAutoregressiveNM,Feng2016ImprovingAM
}
。
\vspace
{
0.5em
}
\item
覆盖度模型
。译文长度过长或过短的问题,本质上对应着
{
\small\sffamily\bfseries
{
过翻译
}}
\index
{
过翻译
}
(Over Translation)
\index
{
Over Translation
}
和
{
\small\sffamily\bfseries
{
欠翻译
}}
\index
{
欠翻译
}
(Under Translation)
\index
{
Under Translation
}
的问题
\upcite
{
Yang2018OtemUtemOA
}
。这两种问题出现的原因主要在于:神经机器翻译没有对过翻译和欠翻译建模,即机器翻译覆盖度问题
\upcite
{
TuModeling
}
。针对此问题,最常用的方法是在推断的过程中引入一个度量覆盖度的模型。比如,使用GNMT 覆盖度模型定义模型得分
\upcite
{
Wu2016GooglesNM
}
,如下:
\item
{
\small\sffamily\bfseries
{
覆盖度模型
}}
。译文长度过长或过短的问题,本质上对应着
{
\small\sffamily\bfseries
{
过翻译
}}
\index
{
过翻译
}
(Over Translation)
\index
{
Over Translation
}
和
{
\small\sffamily\bfseries
{
欠翻译
}}
\index
{
欠翻译
}
(Under Translation)
\index
{
Under Translation
}
的问题
\upcite
{
Yang2018OtemUtemOA
}
。这两种问题出现的原因主要在于:神经机器翻译没有对过翻译和欠翻译建模,即机器翻译覆盖度问题
\upcite
{
TuModeling
}
。针对此问题,最常用的方法是在推断的过程中引入一个度量覆盖度的模型。比如,使用GNMT 覆盖度模型定义模型得分
\upcite
{
Wu2016GooglesNM
}
,如下:
\begin{eqnarray}
\textrm
{
score
}
(
\seq
{
x
}
,
\seq
{
y
}
)
&
=
&
\frac
{
\log
\funp
{
P
}
(
\seq
{
y
}
|
\seq
{
x
}
)
}{
\textrm
{
lp
}
(
\seq
{
y
}
)
}
+
\textrm
{
cp
}
(
\seq
{
x
}
,
\seq
{
y
}
)
\label
{
eq:14-5
}
\\
\textrm
{
cp
}
(
\seq
{
x
}
,
\seq
{
y
}
)
&
=
&
\beta
\cdot
\sum
_{
i=1
}^{
|
\seq
{
x
}
|
}
\log
(
\textrm
{
min
}
(
\sum
_{
j
}^{
|
\seq
{
y
}
|
}
a
_{
ij
}
, 1))
...
...
Chapter16/chapter16.tex
查看文件 @
0aaf5bc6
...
...
@@ -88,11 +88,11 @@
%----------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
丢掉单词
:句子中的每个词均有
$
\funp
{
P
}_{
\rm
{
Drop
}}$
的概率被丢弃。
\item
{
\small\bfnew
{
丢掉单词
}}
:句子中的每个词均有
$
\funp
{
P
}_{
\rm
{
Drop
}}$
的概率被丢弃。
\vspace
{
0.5em
}
\item
掩码单词
:句子中的每个词均有
$
\funp
{
P
}_{
\rm
{
Mask
}}$
的概率被替换为一个额外的<Mask>词。<Mask>的作用类似于占位符,可以理解为一个句子中的部分词被屏蔽掉,无法得知该位置词的准确含义。
\item
{
\small\bfnew
{
掩码单词
}}
:句子中的每个词均有
$
\funp
{
P
}_{
\rm
{
Mask
}}$
的概率被替换为一个额外的<Mask>词。<Mask>的作用类似于占位符,可以理解为一个句子中的部分词被屏蔽掉,无法得知该位置词的准确含义。
\vspace
{
0.5em
}
\item
打乱顺序
:将句子中距离较近的某些词的位置进行随机交换。
\item
{
\small\bfnew
{
打乱顺序
}}
:将句子中距离较近的某些词的位置进行随机交换。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------
...
...
@@ -112,11 +112,11 @@
%----------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
对单语数据加噪
。通过一个端到端模型预测源语言句子的调序结果,该模型和神经机器翻译模型的编码器共享参数,从而增强编码器的特征提取能力
\upcite
{
DBLP:conf/emnlp/ZhangZ16
}
;
\item
{
\small\bfnew
{
对单语数据加噪
}}
。通过一个端到端模型预测源语言句子的调序结果,该模型和神经机器翻译模型的编码器共享参数,从而增强编码器的特征提取能力
\upcite
{
DBLP:conf/emnlp/ZhangZ16
}
;
\vspace
{
0.5em
}
\item
训练降噪自编码器
。将加噪后的句子作为输入,原始句子作为输出,用来训练降噪自编码器,这一思想在无监督机器翻译中得到了广泛应用,详细方法可以参考
\ref
{
unsupervised-NMT
}
节;
\item
{
\small\bfnew
{
训练降噪自编码器
}}
。将加噪后的句子作为输入,原始句子作为输出,用来训练降噪自编码器,这一思想在无监督机器翻译中得到了广泛应用,详细方法可以参考
\ref
{
unsupervised-NMT
}
节;
\vspace
{
0.5em
}
\item
对伪数据进行加噪
。比如在上文中提到的对伪数据加入噪声的方法中,通常也使用上述这三种加噪方法来提高伪数据的多样性;
\item
{
\small\bfnew
{
对伪数据进行加噪
}}
。比如在上文中提到的对伪数据加入噪声的方法中,通常也使用上述这三种加噪方法来提高伪数据的多样性;
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------
...
...
@@ -512,9 +512,9 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
基于无监督的分布匹配
。该步骤利用一些无监督的方法来得到一个包含噪声的初始化词典
$
D
$
。
\item
{
\small\bfnew
{
基于无监督的分布匹配
}}
。该步骤利用一些无监督的方法来得到一个包含噪声的初始化词典
$
D
$
。
\vspace
{
0.5em
}
\item
基于有监督的微调
。利用两个单语词嵌入和第一步中学习到的种子字典执行一些对齐算法来迭代微调,例如,
{
\small\bfnew
{
普氏分析
}}
\index
{
普氏分析
}
(Procrustes Analysis
\index
{
Procrustes Analysis
}
)
\upcite
{
1966ASchnemann
}
。
\item
{
\small\bfnew
{
基于有监督的微调
}}
。利用两个单语词嵌入和第一步中学习到的种子字典执行一些对齐算法来迭代微调,例如,
{
\small\bfnew
{
普氏分析
}}
\index
{
普氏分析
}
(Procrustes Analysis
\index
{
Procrustes Analysis
}
)
\upcite
{
1966ASchnemann
}
。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -542,9 +542,9 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
基于生成对抗网络的方法
\upcite
{
DBLP:conf/iclr/LampleCRDJ18,DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/XuYOW18,DBLP:conf/naacl/MohiuddinJ19
}
。在这个方法中,通过生成器来产生映射
$
\mathbi
{
W
}$
,鉴别器负责区分随机抽样的元素
$
\mathbi
{
W
}
\mathbi
{
X
}$
和
$
\mathbi
{
Y
}$
,两者共同优化收敛后即可得到映射
$
\mathbi
{
W
}$
。
\item
{
\small\bfnew
{
基于生成对抗网络的方法
}}
\upcite
{
DBLP:conf/iclr/LampleCRDJ18,DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/XuYOW18,DBLP:conf/naacl/MohiuddinJ19
}
。在这个方法中,通过生成器来产生映射
$
\mathbi
{
W
}$
,鉴别器负责区分随机抽样的元素
$
\mathbi
{
W
}
\mathbi
{
X
}$
和
$
\mathbi
{
Y
}$
,两者共同优化收敛后即可得到映射
$
\mathbi
{
W
}$
。
\vspace
{
0.5em
}
\item
基于Gromov-wasserstein 的方法
\upcite
{
DBLP:conf/emnlp/Alvarez-MelisJ18,DBLP:conf/lrec/GarneauGBDL20,DBLP:journals/corr/abs-1811-01124,DBLP:conf/emnlp/XuYOW18
}
。Wasserstein距离是度量空间中定义两个概率分布之间距离的函数。在这个任务中,它用来衡量不同语言中单词对之间的相似性,利用空间近似同构的信息可以定义出一些目标函数,之后通过优化该目标函数也可以得到映射
$
\mathbi
{
W
}$
。
\item
{
\small\bfnew
{
基于Gromov-wasserstein 的方法
}}
\upcite
{
DBLP:conf/emnlp/Alvarez-MelisJ18,DBLP:conf/lrec/GarneauGBDL20,DBLP:journals/corr/abs-1811-01124,DBLP:conf/emnlp/XuYOW18
}
。Wasserstein距离是度量空间中定义两个概率分布之间距离的函数。在这个任务中,它用来衡量不同语言中单词对之间的相似性,利用空间近似同构的信息可以定义出一些目标函数,之后通过优化该目标函数也可以得到映射
$
\mathbi
{
W
}$
。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -675,10 +675,10 @@
\parinterval
无监督神经机器翻译还有两个关键的技巧:
\begin{itemize}
\vspace
{
0.5em
}
\item
词表共享
:对于源语言和目标语言里都一样的词使用同一个词嵌入,而不是源语言和目标语言各自对应一个词嵌入,比如,阿拉伯数字或者一些实体名字。这样相当于告诉模型这个词在源语言和目标语言里面表达同一个意思,隐式地引入了单词翻译的监督信号。在无监督神经机器翻译里词表共享搭配子词切分会更加有效,因为子词的覆盖范围广,比如,多个不同的词可以包含同一个子词。
\item
{
\small\bfnew
{
词表共享
}}
:对于源语言和目标语言里都一样的词使用同一个词嵌入,而不是源语言和目标语言各自对应一个词嵌入,比如,阿拉伯数字或者一些实体名字。这样相当于告诉模型这个词在源语言和目标语言里面表达同一个意思,隐式地引入了单词翻译的监督信号。在无监督神经机器翻译里词表共享搭配子词切分会更加有效,因为子词的覆盖范围广,比如,多个不同的词可以包含同一个子词。
\vspace
{
0.5em
}
\item
模型共享
:与多语言翻译系统类似,使用同一个翻译模型来进行正向翻译(源语言
$
\to
$
目标语言)和反向翻译(目标语言
$
\to
$
源语言)。这样做降低了模型的参数量。而且,两个翻译方向可以互相为对方起到正则化的作用,减小了过拟合的风险。
\item
{
\small\bfnew
{
模型共享
}}
:与多语言翻译系统类似,使用同一个翻译模型来进行正向翻译(源语言
$
\to
$
目标语言)和反向翻译(目标语言
$
\to
$
源语言)。这样做降低了模型的参数量。而且,两个翻译方向可以互相为对方起到正则化的作用,减小了过拟合的风险。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -752,9 +752,9 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
基于数据的方法
。利用源领域的双语数据或目标领域单语数据进行数据选择或数据增强,来增加模型训练的数据量。
\item
{
\small\bfnew
{
基于数据的方法
}}
。利用源领域的双语数据或目标领域单语数据进行数据选择或数据增强,来增加模型训练的数据量。
\vspace
{
0.5em
}
\item
基于模型的方法
。针对领域适应开发特定的模型结构、训练策略和推断方法。
\item
{
\small\bfnew
{
基于模型的方法
}}
。针对领域适应开发特定的模型结构、训练策略和推断方法。
\vspace
{
0.5em
}
\end{itemize}
...
...
Chapter17/chapter17.tex
查看文件 @
0aaf5bc6
...
...
@@ -160,11 +160,11 @@
%----------------------------------------------------------------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
错误传播问题
。级联模型导致的一个很严重的问题在于,语音识别模型得到的文本如果存在错误,这些错误很可能在翻译过程中被放大,从而使最后翻译结果出现比较大的偏差。比如识别时在句尾少生成了个“吗”,会导致翻译模型将疑问句翻译为陈述句。
\item
{
\small\bfnew
{
错误传播问题
}}
。级联模型导致的一个很严重的问题在于,语音识别模型得到的文本如果存在错误,这些错误很可能在翻译过程中被放大,从而使最后翻译结果出现比较大的偏差。比如识别时在句尾少生成了个“吗”,会导致翻译模型将疑问句翻译为陈述句。
\vspace
{
0.5em
}
\item
翻译效率问题
。由于需要语音识别模型和文本标注模型只能串行地计算,翻译效率相对较低,而实际很多场景中都需要达到低延时的翻译。
\item
{
\small\bfnew
{
翻译效率问题
}}
。由于需要语音识别模型和文本标注模型只能串行地计算,翻译效率相对较低,而实际很多场景中都需要达到低延时的翻译。
\vspace
{
0.5em
}
\item
语音中的副语言信息丢失
。将语音识别为文本的过程中,语音中包含的语气、情感、音调等信息会丢失,而同一句话在不同的语气中表达的意思很可能是不同的。尤其是在实际应用中,由于语音识别结果通常并不包含标点,还需要额外的后处理模型将标点还原,也会带来额外的计算代价。
\item
{
\small\bfnew
{
语音中的副语言信息丢失
}}
。将语音识别为文本的过程中,语音中包含的语气、情感、音调等信息会丢失,而同一句话在不同的语气中表达的意思很可能是不同的。尤其是在实际应用中,由于语音识别结果通常并不包含标点,还需要额外的后处理模型将标点还原,也会带来额外的计算代价。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------------------------------------------------------------
...
...
@@ -199,9 +199,9 @@
%----------------------------------------------------------------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
训练数据稀缺
。虽然语音识别和文本翻译的训练数据都很多,但是直接由源语言语音到目标语言文本的平行数据十分有限,因此端到端语音翻译天然地就是一种低资源翻译任务。
\item
{
\small\bfnew
{
训练数据稀缺
}}
。虽然语音识别和文本翻译的训练数据都很多,但是直接由源语言语音到目标语言文本的平行数据十分有限,因此端到端语音翻译天然地就是一种低资源翻译任务。
\vspace
{
0.5em
}
\item
建模复杂度更高
。在语音识别中,模型是学习如何生成语音对应的文字序列,输入和输出的对齐比较简单,不涉及到调序的问题。在文本翻译中,模型要学习如何生成源语言序列对应的目标语言序列,仅需要学习不同语言之间的映射,不涉及到模态的转换。而语音翻译模型需要学习从语音到目标语言文本的生成,任务更加复杂。
\item
{
\small\bfnew
{
建模复杂度更高
}}
。在语音识别中,模型是学习如何生成语音对应的文字序列,输入和输出的对齐比较简单,不涉及到调序的问题。在文本翻译中,模型要学习如何生成源语言序列对应的目标语言序列,仅需要学习不同语言之间的映射,不涉及到模态的转换。而语音翻译模型需要学习从语音到目标语言文本的生成,任务更加复杂。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------------------------------------------------------------
...
...
@@ -231,9 +231,9 @@
%----------------------------------------------------------------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
输入和输出之间的对齐是单调的
。也就是后面的输入只会预测与前面的序列相同或后面的输出内容。比如对于图
\ref
{
fig:17-8
}
中的例子,如果输入的位置t已经预测了字符l,那么t之后的位置不会再预测前面的字符h和e。
\item
{
\small\bfnew
{
输入和输出之间的对齐是单调的
}}
。也就是后面的输入只会预测与前面的序列相同或后面的输出内容。比如对于图
\ref
{
fig:17-8
}
中的例子,如果输入的位置t已经预测了字符l,那么t之后的位置不会再预测前面的字符h和e。
\vspace
{
0.5em
}
\item
输入和输出之间是多对一的关系
。也就是多个输入会对应到同一个输出上。这对于语音序列来说是非常自然的一件事情,由于输入的每个位置只包含非常短的语音特征,因此多个输入才可以对应到一个输出字符。
\item
{
\small\bfnew
{
输入和输出之间是多对一的关系
}}
。也就是多个输入会对应到同一个输出上。这对于语音序列来说是非常自然的一件事情,由于输入的每个位置只包含非常短的语音特征,因此多个输入才可以对应到一个输出字符。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------------------------------------------------------------
...
...
Chapter3/chapter3.tex
查看文件 @
0aaf5bc6
...
...
@@ -173,9 +173,9 @@ Interests $\to$ \; Interest/s & selected $\to$ \; se/lect/ed & processed $\to$ \
\begin{itemize}
\vspace
{
0.5em
}
\item
训练
。利用标注数据,对统计模型的参数进行学习。
\item
{
\small\sffamily\bfseries
{
训练
}}
。利用标注数据,对统计模型的参数进行学习。
\vspace
{
0.5em
}
\item
预测
。利用学习到的模型和参数,对新的句子进行切分。这个过程也可以被看作是利用学习到的模型在新的数据上进行推断。
\item
{
\small\sffamily\bfseries
{
预测
}}
。利用学习到的模型和参数,对新的句子进行切分。这个过程也可以被看作是利用学习到的模型在新的数据上进行推断。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -244,9 +244,9 @@ $计算这种切分的概率值。
\begin{itemize}
\vspace
{
0.5em
}
\item
BIO(Beginning-inside-outside)格式
。以命名实体识别为例,B代表一个命名实体的开始,I表示一个命名实体的其它部分,O表示一个非命名实体单元。
\item
{
\small\sffamily\bfseries
{
BIO格式
}}
(Beginning-inside-outside)
。以命名实体识别为例,B代表一个命名实体的开始,I表示一个命名实体的其它部分,O表示一个非命名实体单元。
\vspace
{
0.5em
}
\item
BIOES格式
。与BIO格式相比,多出了标签E(End)和S(Single)。仍然以命名实体识别为例,E和S分别用于标注一个命名实体的结束位置和仅含一个单词的命名实体。
\item
{
\small\sffamily\bfseries
{
BIOES格式
}}
。与BIO格式相比,多出了标签E(End)和S(Single)。仍然以命名实体识别为例,E和S分别用于标注一个命名实体的结束位置和仅含一个单词的命名实体。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -284,9 +284,9 @@ $计算这种切分的概率值。
\begin{itemize}
\vspace
{
0.5em
}
\item
样本在这些特征上的差异度
,即特征对于样本的区分能力。比如,可以考虑优先选择样本特征值方差较大即区分能力强的特征
\footnote
{
方差如果很小,意味着样本在这个特征上基本上没有差异,那么这个特征对于样本的区分并没有什么用。
}
;
\item
{
\small\sffamily\bfseries
{
样本在这些特征上的差异度
}}
,即特征对于样本的区分能力。比如,可以考虑优先选择样本特征值方差较大即区分能力强的特征
\footnote
{
方差如果很小,意味着样本在这个特征上基本上没有差异,那么这个特征对于样本的区分并没有什么用。
}
;
\vspace
{
0.5em
}
\item
特征与任务目标的相关性
。优先选择相关性高的特征。
\item
{
\small\sffamily\bfseries
{
特征与任务目标的相关性
}}
。优先选择相关性高的特征。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -378,11 +378,11 @@ $计算这种切分的概率值。
\begin{itemize}
\vspace
{
0.5em
}
\item
隐含状态序列的概率计算:
即给定模型(转移概率和发射概率),根据可见状态序列(抛硬币的结果)计算在该模型下得到这个结果的概率,这个问题的求解需要用到前后向算法
\upcite
{
baum1970maximization
}
。
\item
{
\small\sffamily\bfseries
{
隐含状态序列的概率计算
}}
,
即给定模型(转移概率和发射概率),根据可见状态序列(抛硬币的结果)计算在该模型下得到这个结果的概率,这个问题的求解需要用到前后向算法
\upcite
{
baum1970maximization
}
。
\vspace
{
0.5em
}
\item
参数学习:
即给定硬币种类(隐含状态数量),根据多个可见状态序列(抛硬币的结果)估计模型的参数(转移概率),这个问题的求解需要用到EM算法
\upcite
{
1977Maximum
}
。
\item
{
\small\sffamily\bfseries
{
参数学习
}}
,
即给定硬币种类(隐含状态数量),根据多个可见状态序列(抛硬币的结果)估计模型的参数(转移概率),这个问题的求解需要用到EM算法
\upcite
{
1977Maximum
}
。
\vspace
{
0.5em
}
\item
解码:
即给定模型(转移概率和发射概率)和可见状态序列(抛硬币的结果),计算在可见状态序列的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的方法,通常也被称作
{
\small\sffamily\bfseries
{
维特比算法
}}
\index
{
维特比算法
}
(Viterbi Algorithm)
\index
{
Viterbi Algorithm
}
\upcite
{
1967Error
}
。
\item
{
\small\sffamily\bfseries
{
解码
}}
,
即给定模型(转移概率和发射概率)和可见状态序列(抛硬币的结果),计算在可见状态序列的情况下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的方法,通常也被称作
{
\small\sffamily\bfseries
{
维特比算法
}}
\index
{
维特比算法
}
(Viterbi Algorithm)
\index
{
Viterbi Algorithm
}
\upcite
{
1967Error
}
。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -547,15 +547,15 @@ Z(\seq{x})&=&\sum_{\seq{y}}\exp(\sum_{i=1}^m\sum_{j=1}^k\lambda_{j}F_{j}(y_{i-1}
\begin{itemize}
\vspace
{
0.5em
}
\item
$
K
$
-近邻分类算法
。
$
K
$
-近邻分类算法通过计算不同特征值之间的距离进行分类,这种方法适用于可以提取到数值型特征
\footnote
{
即可以用数值大小对某方面特征进行衡量。
}
的分类问题。该方法的基本思想为:将提取到的特征分别作为坐标轴,建立一个
$
k
$
维坐标系(对应特征数量为
$
k
$
的情况),此时每个样本都将成为该
$
k
$
维空间的一个点,将未知样本与已知类别样本的空间距离作为分类依据进行分类,比如,考虑与输入样本最近的
$
K
$
个样本的类别进行分类。
\item
{
\small\sffamily\bfseries
{$
K
$
-近邻分类算法
}}
。
$
K
$
-近邻分类算法通过计算不同特征值之间的距离进行分类,这种方法适用于可以提取到数值型特征
\footnote
{
即可以用数值大小对某方面特征进行衡量。
}
的分类问题。该方法的基本思想为:将提取到的特征分别作为坐标轴,建立一个
$
k
$
维坐标系(对应特征数量为
$
k
$
的情况),此时每个样本都将成为该
$
k
$
维空间的一个点,将未知样本与已知类别样本的空间距离作为分类依据进行分类,比如,考虑与输入样本最近的
$
K
$
个样本的类别进行分类。
\vspace
{
0.5em
}
\item
支持向量机
。支持向量机是一种二分类模型,其思想是通过线性超平面将不同输入划分为正例和负例,并使线性超平面与不同输入的距离都达到最大。与
$
K
$
-近邻分类算法类似,支持向量机也适用于可以提取到数值型特征的分类问题。
\item
{
\small\sffamily\bfseries
{
支持向量机
}}
。支持向量机是一种二分类模型,其思想是通过线性超平面将不同输入划分为正例和负例,并使线性超平面与不同输入的距离都达到最大。与
$
K
$
-近邻分类算法类似,支持向量机也适用于可以提取到数值型特征的分类问题。
\vspace
{
0.5em
}
\item
最大熵模型
。最大熵模型是根据最大熵原理提出的一种分类模型,其基本思想是:以在训练数据集中学习到的经验知识作为一种“约束”,并在符合约束的前提下,在若干合理的条件概率分布中选择“使条件熵最大”的模型。
\item
{
\small\sffamily\bfseries
{
最大熵模型
}}
。最大熵模型是根据最大熵原理提出的一种分类模型,其基本思想是:以在训练数据集中学习到的经验知识作为一种“约束”,并在符合约束的前提下,在若干合理的条件概率分布中选择“使条件熵最大”的模型。
\vspace
{
0.5em
}
\item
决策树分类算法
。决策树分类算法是一种基于实例的归纳学习方法:将样本中某些决定性特征作为决策树的节点,根据特征表现进行对样本划分,最终根节点到每个叶子节点均形成一条分类的路径规则。这种分类方法适用于可以提取到离散型特征
\footnote
{
即特征值是离散的。
}
的分类问题。
\item
{
\small\sffamily\bfseries
{
决策树分类算法
}}
。决策树分类算法是一种基于实例的归纳学习方法:将样本中某些决定性特征作为决策树的节点,根据特征表现进行对样本划分,最终根节点到每个叶子节点均形成一条分类的路径规则。这种分类方法适用于可以提取到离散型特征
\footnote
{
即特征值是离散的。
}
的分类问题。
\vspace
{
0.5em
}
\item
朴素贝叶斯分类算法
。朴素贝叶斯算法是以贝叶斯定理为基础并且假设特征之间相互独立的方法,以特征之间相互独立作为前提假设,学习从输入到输出的联合概率分布,并以后验概率最大的输出作为最终类别。
\item
{
\small\sffamily\bfseries
{
朴素贝叶斯分类算法
}}
。朴素贝叶斯算法是以贝叶斯定理为基础并且假设特征之间相互独立的方法,以特征之间相互独立作为前提假设,学习从输入到输出的联合概率分布,并以后验概率最大的输出作为最终类别。
\vspace
{
0.5em
}
\end{itemize}
...
...
Chapter4/chapter4.tex
查看文件 @
0aaf5bc6
差异被折叠。
点击展开。
Chapter8/chapter8.tex
查看文件 @
0aaf5bc6
...
...
@@ -532,9 +532,9 @@ span\textrm{[0,4]}&=&\textrm{“猫} \quad \textrm{喜欢} \quad \textrm{吃} \q
\begin{itemize}
\vspace
{
0.5em
}
\item
剪枝
:在CKY中,每个跨度都可以生成非常多的推导(局部翻译假设)。理论上,这些推导的数量会和跨度大小成指数关系。显然不可能保存如此大量的翻译推导。对于这个问题,常用的办法是只保留top-
$
k
$
个推导。也就是每个局部结果只保留最好的
$
k
$
个,即束剪枝。在极端情况下,当
$
k
$
=1时,这个方法就变成了贪婪的方法;
\item
{
\small\bfnew
{
剪枝
}}
:在CKY中,每个跨度都可以生成非常多的推导(局部翻译假设)。理论上,这些推导的数量会和跨度大小成指数关系。显然不可能保存如此大量的翻译推导。对于这个问题,常用的办法是只保留top-
$
k
$
个推导。也就是每个局部结果只保留最好的
$
k
$
个,即束剪枝。在极端情况下,当
$
k
$
=1时,这个方法就变成了贪婪的方法;
\vspace
{
0.5em
}
\item
$
n
$
-best结果的生成
:
$
n
$
-best推导(译文)的生成是统计机器翻译必要的功能。比如,最小错误率训练中就需要最好的
$
n
$
个结果用于特征权重调优。在基于CKY的方法中,整个句子的翻译结果会被保存在最大跨度所对应的结构中。因此一种简单的
$
n
$
-best生成方法是从这个结构中取出排名最靠前的
$
n
$
个结果。另外,也可以考虑自上而下遍历CKY生成的推导空间,得到更好的
$
n
$
-best结果
\upcite
{
huang2005better
}
。
\item
{
\small\bfnew
{$
n
$
-best结果的生成
}}
:
$
n
$
-best推导(译文)的生成是统计机器翻译必要的功能。比如,最小错误率训练中就需要最好的
$
n
$
个结果用于特征权重调优。在基于CKY的方法中,整个句子的翻译结果会被保存在最大跨度所对应的结构中。因此一种简单的
$
n
$
-best生成方法是从这个结构中取出排名最靠前的
$
n
$
个结果。另外,也可以考虑自上而下遍历CKY生成的推导空间,得到更好的
$
n
$
-best结果
\upcite
{
huang2005better
}
。
\end{itemize}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
Chapter9/chapter9.tex
查看文件 @
0aaf5bc6
...
...
@@ -142,11 +142,11 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
特征的构造需要耗费大量的时间和精力
。在传统机器学习的特征工程方法中,特征提取都是基于人力完成的,该过程往往依赖于大量的先验假设,会导致相关系统的研发周期也大大增加;
\item
{
\small\sffamily\bfseries
{
特征的构造需要耗费大量的时间和精力
}}
。在传统机器学习的特征工程方法中,特征提取都是基于人力完成的,该过程往往依赖于大量的先验假设,会导致相关系统的研发周期也大大增加;
\vspace
{
0.5em
}
\item
最终的系统性能强弱非常依赖特征的选择
。有一句话在业界广泛流传:“数据和特征决定了机器学习的上限”,但是人的智力和认知是有限的,因此人工设计的特征的准确性和覆盖度会存在瓶颈;
\item
{
\small\sffamily\bfseries
{
最终的系统性能强弱非常依赖特征的选择
}}
。有一句话在业界广泛流传:“数据和特征决定了机器学习的上限”,但是人的智力和认知是有限的,因此人工设计的特征的准确性和覆盖度会存在瓶颈;
\vspace
{
0.5em
}
\item
通用性差
。针对不同的任务,传统机器学习的特征工程方法需要选择出不同的特征,在某个任务上表现很好的特征在其他任务上可能没有效果。
\item
{
\small\sffamily\bfseries
{
通用性差
}}
。针对不同的任务,传统机器学习的特征工程方法需要选择出不同的特征,在某个任务上表现很好的特征在其他任务上可能没有效果。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -645,11 +645,11 @@ x_1\cdot w_1+x_2\cdot w_2+x_3\cdot w_3 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\begin{itemize}
\vspace
{
0.5em
}
\item
对问题建模
,即定义输入
$
\{
x
_
i
\}
$
的形式;
\item
{
\small\sffamily\bfseries
{
对问题建模
}}
,即定义输入
$
\{
x
_
i
\}
$
的形式;
\vspace
{
0.5em
}
\item
设计有效的决策模型
,即定义
$
y
$
;
\item
{
\small\sffamily\bfseries
{
设计有效的决策模型
}}
,即定义
$
y
$
;
\vspace
{
0.5em
}
\item
得到模型参数
(如权重
$
\{
w
_
i
\}
$
)的最优值。
\item
{
\small\sffamily\bfseries
{
得到模型参数
}}
(如权重
$
\{
w
_
i
\}
$
)的最优值。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -1899,11 +1899,11 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\begin{itemize}
\vspace
{
0.3em
}
\item
输入层
(词的分布式表示层),即把输入的离散的单词变为分布式表示对应的实数向量;
\item
{
\small\sffamily\bfseries
{
输入层
}}
(词的分布式表示层),即把输入的离散的单词变为分布式表示对应的实数向量;
\vspace
{
0.3em
}
\item
隐藏层
,即将得到的词的分布式表示进行线性和非线性变换;
\item
{
\small\sffamily\bfseries
{
隐藏层
}}
,即将得到的词的分布式表示进行线性和非线性变换;
\vspace
{
0.3em
}
\item
输出层
(Softmax层),根据隐藏层的输出预测单词的概率分布。
\item
{
\small\sffamily\bfseries
{
输出层
}}
(Softmax层),根据隐藏层的输出预测单词的概率分布。
\vspace
{
0.3em
}
\end{itemize}
...
...
@@ -2076,11 +2076,11 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\parinterval
为了方便理解,看一个简单的例子。假如现在有个“预测下一个单词”的任务:有这样一个句子“屋里 要 摆放 一个
\rule
[-3pt]
{
1cm
}{
0.05em
}
”,其中下划线的部分表示需要预测的下一个单词。如果模型在训练数据中看到过类似于“摆放 一个 桌子”这样的片段,那么就可以很自信的预测出“桌子”。另一方面,很容易知道,实际上与“桌子”相近的单词,如“椅子”,也是可以预测的单词的。但是,“椅子”恰巧没有出现在训练数据中,这时如果用One-hot编码来表示单词,显然无法把“椅子”填到下划线处;而如果使用单词的分布式表示,很容易就知道 “桌子”与“椅子”是相似的,因此预测“ 椅子”在一定程度上也是合理的。
\begin{example}
屋里
要 摆放
一个
\_\_\_\_\_
\hspace
{
0.5em
}
\quad
\quad
预测下个词
屋里
\
要
\
摆放
\
一个
\_\_\_\_\_
\hspace
{
0.5em
}
\quad
\quad
预测下个词
\hspace
{
2em
}
屋里
要 摆放 一个
{
\red
{
桌子
}}
\hspace
{
3.2em
}
见过
\hspace
{
2em
}
屋里
\
要
\
摆放
\
一个
\
{
\red
{
桌子
}}
\hspace
{
3.2em
}
见过
\hspace
{
2em
}
屋里
要 摆放 一个
{
\blue
{
椅子
}}
\hspace
{
3.2em
}
没见过,但是仍然是合理预测
\hspace
{
2em
}
屋里
\
要
\
摆放
\
一个
\
{
\blue
{
椅子
}}
\hspace
{
3.2em
}
没见过,但是仍然是合理预测
\end{example}
\parinterval
关于单词的分布式表示还有一个经典的例子:通过词嵌入可以得到如下关系:
$
\textrm
{
“国王”
}
=
\textrm
{
“女王”
}
-
\textrm
{
“女人”
}
+
\textrm
{
“男人”
}$
。从这个例子可以看出,词嵌入也具有一些代数性质,比如,词的分布式表示可以通过加、减等代数运算相互转换。图
\ref
{
fig:9-66
}
展示了词嵌入在一个二维平面上的投影,不难发现,含义相近的单词分布比较临近。
...
...
@@ -2116,9 +2116,9 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\parinterval
目前,词嵌入已经成为诸多自然语言处理系统的标配,也衍生出很多有趣的研究法方向。但是,冷静地看,词嵌入依旧存在一些问题:每个词都对应唯一的向量表示,那么对于一词多义现象,词义需要通过上下文进行区分,这时使用简单的词嵌入式是无法处理的。有一个著名的例子:
\begin{example}
Aaron is an employee of
{
\red
{
\underline
{
apple
}}}
.
Aaron is an employee of
{
\red
{
\underline
{
apple
}}}
\
.
\hspace
{
2em
}
He finally ate the
{
\red
{
\underline
{
apple
}}}
.
\hspace
{
2em
}
He finally ate the
{
\red
{
\underline
{
apple
}}}
\
.
\end{example}
\parinterval
这两句中“apple”的语义显然是不同的,第一句中的上下文“Jobs”和“CEO”可以帮助我们判断“apple”是一个公司名字,而不是水果。但是词嵌入只有一个结果,因此无法区分这两种情况。这个例子给我们一个启发:在一个句子中,不能孤立的看待单词,应同时考虑其上下文的信息。也就是需要一个能包含句子中上下文信息的表示模型。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论