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
0fe6f0ab
Commit
0fe6f0ab
authored
Sep 17, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'shanweiqiao' 到 'caorunzhe'
第二章文字 查看合并请求
!214
parents
fb986ce7
c7976982
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
6 行增加
和
6 行删除
+6
-6
Chapter2/chapter2.tex
+6
-6
没有找到文件。
Chapter2/chapter2.tex
查看文件 @
0fe6f0ab
...
...
@@ -747,11 +747,11 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\parinterval
在使用语言模型时,往往需要知道模型的质量。
{
\small\sffamily\bfseries
{
困惑度
}}
\index
{
困惑度
}
(Perplexity
\index
{
Perplexity
}
,PPL)是一种衡量语言模型的好坏的指标。对于一个真实的词序列
$
w
_
1
\dots
w
_
m
$
,困惑度被定义为:
\begin{eqnarray}
{
\rm
{
PPL
}}&
=
&
{
\rm
P
}{
(w
_
1
\dots
w
_
m)
}^{
-
\frac
{
1
}{
m
}}
{
\rm
{
PPL
}}&
=
&
\funp
{
P
}{
(w
_
1
\dots
w
_
m)
}^{
-
\frac
{
1
}{
m
}}
\label
{
eq:5-65
}
\end{eqnarray}
\parinterval
本质上,PPL反映了语言模型对序列可能性预测能力的一种评估。如果
$
w
_
1
\dots
w
_
m
$
\\
是真实的自然语言,``完美''的模型会得到
$
{
\rm
P
}
(
w
_
1
\dots
w
_
m
)=
1
$
,它对应了最低的困惑度
$
{
\rm
{
PPL
}}
=
1
$
,这说明模型可以完美地对词序列出现的可能性进行预测。当然,真实的语言模型是无法达到
$
{
\rm
{
PPL
}}
=
1
$
的,比如,在著名的Penn Treebank(PTB)数据上最好的语言模型的PPL值也只能到达35左右。可见自然语言处理任务的困难程度。
\parinterval
本质上,PPL反映了语言模型对序列可能性预测能力的一种评估。如果
$
w
_
1
\dots
w
_
m
$
\\
是真实的自然语言,``完美''的模型会得到
$
\funp
{
P
}
(
w
_
1
\dots
w
_
m
)=
1
$
,它对应了最低的困惑度PPL=1,这说明模型可以完美地对词序列出现的可能性进行预测。当然,真实的语言模型是无法达到PPL=1
的,比如,在著名的Penn Treebank(PTB)数据上最好的语言模型的PPL值也只能到达35左右。可见自然语言处理任务的困难程度。
%----------------------------------------------------------------------------------------
% NEW SECTION
...
...
@@ -800,7 +800,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\parinterval
从词序列建模的角度看,这两类预测问题本质上是一样的。因为,它们都在使用语言模型对词序列进行概率评估。但是,从实现上看,词序列的生成问题更难。因为,它不仅要对所有可能的词序列进行打分,同时要“找到”最好的词序列。由于潜在的词序列不计其数,因此这个“找”最优词序列的过程并不简单。
\parinterval
实际上,生成最优词序列的问题也
对应着
自然语言处理中的一大类问题
\ \dash\
{
\small\bfnew
{
序列生成
}}
\index
{
序列生成
}
(Sequence Generation)
\index
{
Sequence Generation
}
。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言词序列生成与之相对应的目标语言词序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成问题的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的
{
\small\bfnew
{
搜索问题
}}
\index
{
搜索问题
}
(Search Problem)
\index
{
Search Problem
}
。下面将着重介绍序列生成背后的建模方法,以及在序列生成里常用的搜索技术。
\parinterval
实际上,生成最优词序列的问题也
是
自然语言处理中的一大类问题
\ \dash\
{
\small\bfnew
{
序列生成
}}
\index
{
序列生成
}
(Sequence Generation)
\index
{
Sequence Generation
}
。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言词序列生成与之相对应的目标语言词序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成问题的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的
{
\small\bfnew
{
搜索问题
}}
\index
{
搜索问题
}
(Search Problem)
\index
{
Search Problem
}
。下面将着重介绍序列生成背后的建模方法,以及在序列生成里常用的搜索技术。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -878,7 +878,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
}
\end{table}
%------------------------------------------------------
\parinterval
那么是否有比枚举策略更高效的方法呢?答案是肯定的。一种直观的方法是将搜索的过程表示成树型结构,称为解空间树。它包含了搜索过程中可生成的全部序列。该树的根节点恒为<sos>,代表序列均从<sos> 开始。该树结构中非叶子节点的兄弟节点有
$
|V|
$
个,由词表和结束符号<eos>构成。从图
\ref
{
fig:2-14
}
可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树中从根节点<sos> 开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词
$
i
$
也就是在上图选择
$
w
_
i
$
一列的一个节点,语言模型就可以为当前的树节点
$
w
_
i
$
给出一个分值,即
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。对于
$
n
$
-gram语言模型,这个分值
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)=
\funp
{
P
}
(
w
_
i | w
_{
i
-
n
+
1
}
\ldots
w
_{
i
-
1
}
)
$
\parinterval
那么是否有比枚举策略更高效的方法呢?答案是肯定的。一种直观的方法是将搜索的过程表示成树型结构,称为解空间树。它包含了搜索过程中可生成的全部序列。该树的根节点恒为<sos>,代表序列均从<sos> 开始。该树结构中非叶子节点的兄弟节点有
$
|V|
+
1
$
个,由词表和结束符号<eos>构成。从图
\ref
{
fig:2-14
}
可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树中从根节点<sos> 开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词
$
i
$
也就是在上图选择
$
w
_
i
$
一列的一个节点,语言模型就可以为当前的树节点
$
w
_
i
$
给出一个分值,即
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。对于
$
n
$
-gram语言模型,这个分值可以表示为
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)=
\funp
{
P
}
(
w
_
i | w
_{
i
-
n
+
1
}
\ldots
w
_{
i
-
1
}
)
$
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -1040,13 +1040,13 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\begin{adjustwidth}
{
1em
}{}
\begin{itemize}
\vspace
{
0.5em
}
\item
在
$
n
$
-gram语言模型中,由于语料中往往存在大量的低频词以及未登录词,模型会产生不合理的概率预测结果。因此本章介绍了三种平滑方法,以解决上述问题。实际上,平滑方法是语言建模中的重要研究方向。除了上述三种方法之外,还有Jelinek–Mercer平滑
\upcite
{
jelinek1980interpolated
}
、Katz 平滑
\upcite
{
katz1987estimation
}
以及Witten–Bell平滑等等
\upcite
{
bell1990text,witten1991the
}
。
相关工作也对这些平滑方法进行了详细对比
\upcite
{
chen1999empirical,goodman2001a
}
。
\item
在
$
n
$
-gram语言模型中,由于语料中往往存在大量的低频词以及未登录词,模型会产生不合理的概率预测结果。因此本章介绍了三种平滑方法,以解决上述问题。实际上,平滑方法是语言建模中的重要研究方向。除了上述三种方法之外,还有Jelinek–Mercer平滑
\upcite
{
jelinek1980interpolated
}
、Katz 平滑
\upcite
{
katz1987estimation
}
以及Witten–Bell平滑等等
\upcite
{
bell1990text,witten1991the
}
。相关工作也对这些平滑方法进行了详细对比
\upcite
{
chen1999empirical,goodman2001a
}
。
\vspace
{
0.5em
}
\item
除了平滑方法,也有很多工作对
$
n
$
-gram语言模型进行改进。比如,对于形态学丰富的语言,可以考虑对单词的形态学变化进行建模。这类语言模型在一些机器翻译系统中也体现出了很好的潜力
\upcite
{
kirchhoff2005improved,sarikaya2007joint,koehn2007factored
}
。此外,如何使用超大规模数据进行语言模型训练也是备受关注的研究方向。比如,有研究者探索了对超大语言模型进行压缩和存储的方法
\upcite
{
federico2007efficient,federico2006how,heafield2011kenlm
}
。另一个有趣的方向是,利用随机存储算法对大规模语言模型进行有效存储
\upcite
{
talbot2007smoothed,talbot2007randomised
}
,比如,在语言模型中使用Bloom
\
Filter等随机存储的数据结构。
\vspace
{
0.5em
}
\item
本章更多地关注了语言模型的基本问题和求解思路,但是基于
$
n
$
-gram的方法并不是语言建模的唯一方法。从现在自然语言处理的前沿看,端到端的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法
\upcite
{
jing2019a
}
,而且在近些年取得了巨大成功。例如,最早提出的前馈神经语言模型
\upcite
{
bengio2003a
}
和后来的基于循环单元的语言模型
\upcite
{
mikolov2010recurrent
}
、基于长短期记忆单元的语言模型
\upcite
{
sundermeyer2012lstm
}
以及现在非常流行的Transformer
\upcite
{
vaswani2017attention
}
。 关于神经语言模型的内容,会在
{
\chapternine
}
进行进一步介绍。
\vspace
{
0.5em
}
\item
最后,本章结合语言模型的序列生成任务对搜索技术进行了介绍。类似地,机器翻译任务也需要从大量的翻译候选中快速寻找最优译文。因此在机器翻译任务中也使用了搜索方法,这个过程通常被称作
{
\small\bfnew
{
解码
}}
\index
{
解码
}
(Decoding)
\index
{
Decoding
}
。例如,有研究者在基于词的翻译模型中尝试使用启发式搜索
\upcite
{
DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97,tillmann1997a
}
以及贪婪搜索方法
\upcite
{
germann2001fast
}
\upcite
{
germann2003greedy
}
,也有研究者
研究基于短语的栈解码方法
\upcite
{
Koehn2007Moses,DBLP:conf/amta/Koehn04
}
。此外,解码方法还包括有限状态机解码
\upcite
{
bangalore2001a
}
\upcite
{
DBLP:journals/mt/BangaloreR02
}
以及基于语言学约束的解码
\upcite
{
venugopal2007an,zollmann2007the,liu2006tree,galley2006scalable,chiang2005a
}
。相关内容将在
{
\chaptereight
}
和
{
\chapterfourteen
}
进行介绍。
\item
最后,本章结合语言模型的序列生成任务对搜索技术进行了介绍。类似地,机器翻译任务也需要从大量的翻译候选中快速寻找最优译文。因此在机器翻译任务中也使用了搜索方法,这个过程通常被称作
{
\small\bfnew
{
解码
}}
\index
{
解码
}
(Decoding)
\index
{
Decoding
}
。例如,有研究者在基于词的翻译模型中尝试使用启发式搜索
\upcite
{
DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97,tillmann1997a
}
以及贪婪搜索方法
\upcite
{
germann2001fast
}
\upcite
{
germann2003greedy
}
,也有研究者
探索基于短语的栈解码方法
\upcite
{
Koehn2007Moses,DBLP:conf/amta/Koehn04
}
。此外,解码方法还包括有限状态机解码
\upcite
{
bangalore2001a
}
\upcite
{
DBLP:journals/mt/BangaloreR02
}
以及基于语言学约束的解码
\upcite
{
venugopal2007an,zollmann2007the,liu2006tree,galley2006scalable,chiang2005a
}
。相关内容将在
{
\chaptereight
}
和
{
\chapterfourteen
}
进行介绍。
\vspace
{
0.5em
}
\end{itemize}
\end{adjustwidth}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论