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
194657b1
Commit
194657b1
authored
Aug 27, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
大小写和排版
parent
3a1431cd
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
4 行增加
和
4 行删除
+4
-4
Chapter2/chapter2.tex
+4
-4
没有找到文件。
Chapter2/chapter2.tex
查看文件 @
194657b1
...
...
@@ -285,7 +285,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\subsubsection
{
2.KL距离
}
\parinterval
如果同一个随机变量
$
X
$
上有两个概率分布
$
\funp
{
P
}
(
x
)
$
和
$
\funp
{
Q
}
(
x
)
$
,那么可以使用
{
\small\bfnew
{
Kullback-
leibler距离
}}
\index
{
Kullback-l
eibler距离
}
或
{
\small\bfnew
{
KL距离
}}
\index
{
KL距离
}
(KL Distance
\index
{
KL Distance
}
)来衡量这两个分布的不同(也称作KL 散度),这种度量就是
{
\small\bfnew
{
相对熵
}}
\index
{
相对熵
}
(Relative Entropy)
\index
{
Relative Entropy
}
。其公式如下:
\parinterval
如果同一个随机变量
$
X
$
上有两个概率分布
$
\funp
{
P
}
(
x
)
$
和
$
\funp
{
Q
}
(
x
)
$
,那么可以使用
{
\small\bfnew
{
Kullback-
Leibler距离
}}
\index
{
Kullback-L
eibler距离
}
或
{
\small\bfnew
{
KL距离
}}
\index
{
KL距离
}
(KL Distance
\index
{
KL Distance
}
)来衡量这两个分布的不同(也称作KL 散度),这种度量就是
{
\small\bfnew
{
相对熵
}}
\index
{
相对熵
}
(Relative Entropy)
\index
{
Relative Entropy
}
。其公式如下:
\begin{eqnarray}
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)
&
=
&
\sum
_{
x
\in
\textrm
{
X
}}
[
\funp
{
P
}
(x)
\log
\frac
{
\funp
{
P
}
(x)
}{
\funp
{
Q
}
(x)
}
]
\nonumber
\\
&
=
&
\sum
_{
x
\in
\textrm
{
X
}
}
[
\funp
{
P
}
(x)(
\log
\funp
{
P
}
(x)-
\log
\funp
{
Q
}
(x))]
...
...
@@ -823,7 +823,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\parinterval
在序列生成任务中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并生成序列的长度是无法预先知道的。比如,机器翻译中目标语序列的长度是任意的。那么怎样判断一个序列何时完成了生成过程呢?这里借用人类书写中文和英文的过程:句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。
\parinterval
对于一个序列
$
<
$
sos
$
>
$
\ \
I
\ \
agree
\ \
$
<
$
eos
$
>
$
,图
\ref
{
fig:2-13
}
展示语言模型视角下该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作
{
\small\bfnew
{
自左向右生成
}}
\index
{
自左向右生成
}
(Left-
To-Right Generation)
\index
{
Left-To-R
ight Generation
}
。注意,这种序列生成策略与
$
n
$
-gram的思想天然契合,因为
$
n
$
-gram语言模型中,每个词的生成概率依赖前面(左侧)若干词,因此
$
n
$
-gram语言模型也是一种自左向右的计算模型。
\parinterval
对于一个序列
$
<
$
sos
$
>
$
\ \
I
\ \
agree
\ \
$
<
$
eos
$
>
$
,图
\ref
{
fig:2-13
}
展示语言模型视角下该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作
{
\small\bfnew
{
自左向右生成
}}
\index
{
自左向右生成
}
(Left-
to-right Generation)
\index
{
Left-to-r
ight Generation
}
。注意,这种序列生成策略与
$
n
$
-gram的思想天然契合,因为
$
n
$
-gram语言模型中,每个词的生成概率依赖前面(左侧)若干词,因此
$
n
$
-gram语言模型也是一种自左向右的计算模型。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -894,7 +894,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\end{figure}
%-------------------------------------------
\parinterval
从这个角度来看,在树的遍历中,可以很自然地引入语言模型打分:在解空间树中引入节点的权重
\ \
dash\
将当前节点
$
i
$
的得分重设为语言模型打分
$
\log
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
,其中
$
w
_
1
w
_
2
\ldots
w
_{
i
-
1
}$
是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式
$
\log
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
代替
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。此时对于图中一条包含<eos>的完整序列来说,它的最终得分
$
\textrm
{
score
}
(
\cdot
)
$
可以被定义为:
\parinterval
从这个角度来看,在树的遍历中,可以很自然地引入语言模型打分:在解空间树中引入节点的权重
\ \
\dash\ \
将当前节点
$
i
$
的得分重设为语言模型打分
$
\log
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
$
\\
$
w
_{
i
-
1
}
)
$
,其中
$
w
_
1
w
_
2
\ldots
w
_{
i
-
1
}$
是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式
$
\log
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
代替
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。此时对于图中一条包含<eos>的完整序列来说,它的最终得分
$
\textrm
{
score
}
(
\cdot
)
$
可以被定义为:
\begin{eqnarray}
\textrm
{
score
}
(w
_
1 w
_
2
\ldots
w
_
m)
&
=
&
\log
\funp
{
P
}
(w
_
1 w
_
2
\ldots
w
_
m)
\nonumber
\\
&
=
&
\sum
_{
i=1
}^{
m
}
\log
\funp
{
P
}
(w
_
i | w
_
1 w
_
2
\ldots
w
_{
i-1
}
)
...
...
@@ -948,7 +948,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\end{figure}
%-------------------------------------------
\parinterval
类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图
\ref
{
fig:2-17
}
所示,由于“<sos>
\
I”在图右侧的5条路径中分数最高,因此下一步将要扩展
$
w
_
2
$
一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做
{
\small\bfnew
{
一致代价搜索
}}
\index
{
一致代价搜索
}
(Uniform-cost Search)
\index
{
Uniform-cost Search
}
\upcite
{
russell2003artificial
}
。
\parinterval
类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图
\ref
{
fig:2-17
}
所示,由于“<sos>
\
I”在图右侧的5条路径中分数最高,因此下一步将要扩展
$
w
_
2
$
一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做
{
\small\bfnew
{
一致代价搜索
}}
\index
{
一致代价搜索
}
(Uniform-cost Search)
\index
{
Uniform-cost Search
}
\upcite
{
DBLP:journals/ai/SabharwalS11
}
。
%----------------------------------------------
\begin{figure}
[htp]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论