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
730fc76f
Commit
730fc76f
authored
Aug 14, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
第二章修改
parent
246cda72
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
14 行增加
和
14 行删除
+14
-14
Chapter2/chapter2.tex
+14
-14
没有找到文件。
Chapter2/chapter2.tex
查看文件 @
730fc76f
...
...
@@ -152,7 +152,7 @@ P(x_1,x_2, \ldots ,x_n)=P(x_1) \prod_{i=2}^n P(x_i \mid x_1,x_2, \ldots ,x_{i-1}
\label
{
eq:2-6
}
\end{eqnarray}
\parinterval
下面的例子有助于更好的理解链式法则,如图
\ref
{
fig:2-3
}
所示,
$
A
$
、
$
B
$
、
$
C
$
、
$
D
$
、
\\
$
E
$
分别代表五个事件,其中,
$
A
$
只和
$
B
$
有关,
$
C
$
只和
$
B
$
、
$
D
$
有关,
$
E
$
只和
$
C
$
有关,
$
B
$
和
$
D
$
不依赖其他任何事件。则
$
P
(
A,B,C,D,E
)
$
的表达式如下式:
\parinterval
下面的例子有助于更好的理解链式法则,如图
\ref
{
fig:2-3
}
所示,
$
A
$
、
$
B
$
、
$
C
$
、
$
D
$
、
$
E
$
分别代表五个事件,其中,
$
A
$
只和
$
B
$
有关,
$
C
$
只和
$
B
$
、
$
D
$
有关,
$
E
$
只和
$
C
$
有关,
$
B
$
和
$
D
$
不依赖其他任何事件。则
$
P
(
A,B,C,D,E
)
$
的表达式如下式:
\begin{eqnarray}
&
&
P(A,B,C,D,E)
\nonumber
\\
...
...
@@ -228,7 +228,7 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\label
{
eq:2-12
}
\end{eqnarray}
\parinterval
贝叶斯公式常用于根据已知的结果来推断使之发生的各因素的可能性。
\\
\\
\parinterval
贝叶斯公式常用于根据已知的结果来推断使之发生的各因素的可能性。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -505,7 +505,7 @@ P(w_m|w_1 w_2 \ldots w_{m-1}) \approx P(w_m|w_{m-n+1} \ldots w_{m-1})
}
\end{table}
%------------------------------------------------------
\parinterval
可以看到,1-gram语言模型只是
$
n
$
-gram语言模型的一种特殊形式。基于独立性假设,1-gram假定当前词出现与否与任何历史都无关,这种方法大大化简了求解句子概率的复杂度。但是,实际上句子中的词汇并非完全相互独立的,这种语言模型并不能完美的描述客观世界的问题。如果需要更精确地获取句子的概率,就需要使用
$
n
$
-gram语言模型
。
\parinterval
可以看到,1-gram语言模型只是
$
n
$
-gram语言模型的一种特殊形式。基于独立性假设,1-gram假定当前词出现与否与任何历史都无关,这种方法大大化简了求解句子概率的复杂度。但是,实际上句子中的词汇并非完全相互独立的,这种语言模型并不能完美的描述客观世界的问题。如果需要更精确地获取句子的概率,就需要使用
更长的“历史”信息
。
\parinterval
$
n
$
-gram的优点在于,它所使用的历史信息是有限的,即
$
n
-
1
$
个单词。这种性质也反映了经典的马尔可夫链的思想
\upcite
{
liuke-markov-2004
}
\upcite
{
resnick1992adventures
}
,有时也被称作马尔可夫假设或者马尔可夫属性。因此
$
n
$
-gram也可以被看作是变长序列上的一种马尔可夫模型,比如,2-gram语言模型对应着1阶马尔可夫模型,3-gram语言模型对应着2阶马尔可夫模型,以此类推。
...
...
@@ -527,11 +527,11 @@ P(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\tex
\end{itemize}
\vspace
{
0.5em
}
\parinterval
极大似然估计方法和
前面介绍的统计分词中的方法是一致的,它的核心是使用
$
n
$
-gram出现的频度进行参数估计,因此也是自然语言处理中一类经典的
$
n
$
-gram方法
。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入
$
(
w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
和输出
$
P
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于
$
n
$
-gram的方法,或者说它并没有显性记录
$
n
$
-gram的生成概率,也不依赖
$
n
$
-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统
$
n
$
-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在
{
\chapternine
}
和
{
\chapterten
}
进行详细介绍。
\parinterval
极大似然估计方法和
掷骰子游戏中介绍的统计词汇概率的方法是一致的,它的核心是使用
$
n
$
-gram出现的频度进行参数估计
。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入
$
(
w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
和输出
$
P
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于
$
n
$
-gram的方法,或者说它并没有显性记录
$
n
$
-gram的生成概率,也不依赖
$
n
$
-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统
$
n
$
-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在
{
\chapternine
}
和
{
\chapterten
}
进行详细介绍。
\parinterval
$
n
$
-gram语言模型的使用非常简单。可以直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个
分词序列
的概率:
\parinterval
$
n
$
-gram语言模型的使用非常简单。可以直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个
句子出现
的概率:
\begin{eqnarray}
&
&
P
_{
2-
\textrm
{
gram
}}{
(
\textrm
{
确实
}
/
\textrm
{
现在
}
/
\textrm
{
数据
}
/
\textrm
{
很
}
/
\textrm
{
多
}
)
}
\nonumber
\\
&
&
P
_{
2-
\textrm
{
gram
}}{
(
\textrm
{
确实
现在数据很
多
}
)
}
\nonumber
\\
&
=
&
P(
\textrm
{
确实
}
)
\times
P(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
\times
P(
\textrm
{
数据
}
|
\textrm
{
现在
}
)
\times
\nonumber
\\
&
&
P(
\textrm
{
很
}
|
\textrm
{
数据
}
)
\times
P(
\textrm
{
多
}
|
\textrm
{
很
}
)
\label
{
eq:2-23
}
...
...
@@ -543,17 +543,17 @@ P(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\tex
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
未登录词和平滑算法
}
\label
{
sec2:smoothing
}
\subsection
{
未登录词和平滑算法
}
\parinterval
在式
\ref
{
eq:2-23
}
所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算
切分“确实/现在/数据/很/
多”的概率时,会出现如下情况
\parinterval
在式
\ref
{
eq:2-23
}
所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算
句子“确实现在数据很
多”的概率时,会出现如下情况
\begin{eqnarray}
P(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\textrm
{
count
}
(
\textrm
{
确实
}
\
,
\textrm
{
现在
}
)
}{
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\nonumber
\\
P(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\textrm
{
count
}
(
\textrm
{
确实
}
\
\textrm
{
现在
}
)
}{
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\nonumber
\\
&
=
&
\frac
{
0
}{
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\nonumber
\\
&
=
&
0
\label
{
eq:2-24
}
\end{eqnarray}
\parinterval
显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个
切分结果
的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为
{
\small\sffamily\bfseries
{
未登录词
}}
\index
{
未登录词
}
(Out-Of-Vocabulary Word,OOV Word)
\index
{
Out-Of-Vocabulary Word,OOV Word
}
,比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图
\ref
{
fig:2-11
}
展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
\parinterval
显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个
句子出现
的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为
{
\small\sffamily\bfseries
{
未登录词
}}
\index
{
未登录词
}
(Out-Of-Vocabulary Word,OOV Word)
\index
{
Out-Of-Vocabulary Word,OOV Word
}
,比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图
\ref
{
fig:2-11
}
展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -574,13 +574,13 @@ P(\textrm{现在}|\textrm{确实}) & = & \frac{\textrm{count}(\textrm{确实}\,
\subsubsection
{
1.加法平滑方法
}
\parinterval
{
\small\bfnew
{
加法平滑
}}
\index
{
加法平滑
}
(Additive Smoothing)
\index
{
Additive Smoothing
}
是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料
$
C
$
(从未出现“确实
\
现在”二元语法),评估一个
已经分好词的句子
$
S
$
=“确实/现在/物价/很/高”的概率。当计算“确实/
现在”的概率时,
$
P
(
S
)
=
0
$
。显然这个结果是不合理的。
\parinterval
{
\small\bfnew
{
加法平滑
}}
\index
{
加法平滑
}
(Additive Smoothing)
\index
{
Additive Smoothing
}
是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料
$
C
$
(从未出现“确实
\
现在”二元语法),评估一个
句子
$
S
$
=“确实现在物价很高”的概率。当计算“确实
\
现在”的概率时,
$
P
(
S
)
=
0
$
。显然这个结果是不合理的。
\parinterval
加法平滑方法假设每个
$
n
$
-gram出现的次数比实际统计次数多
$
\theta
$
次,
$
0
\le
\theta\le
1
$
。这样,计算概率的时候分子部分不会为0。重新计算
$
P
(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
$
,可以得到:
\begin{eqnarray}
P(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实
/现在
}
)
}{
\sum
_{
w
}^{
|V|
}
(
\theta
+
\textrm
{
count
}
(
\textrm
{
确实/
}
w))
}
\nonumber
\\
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实
/
现在
}
)
}{
\theta
{
|V|
}
+
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
P(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实
\
现在
}
)
}{
\sum
_{
w
}^{
|V|
}
(
\theta
+
\textrm
{
count
}
(
\textrm
{
确实
\
}
w))
}
\nonumber
\\
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实
\
现在
}
)
}{
\theta
{
|V|
}
+
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\label
{
eq:2-25
}
\end{eqnarray}
...
...
@@ -980,7 +980,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\begin{adjustwidth}
{
1em
}{}
\begin{itemize}
\vspace
{
0.5em
}
\item
在
{
\small\sffamily\bfseries
{
建模
}}
方面,本章介绍的语言建模采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被“一步一步”生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,
分词结果
是隐含在背后的变量),之后通过对隐含变量生成观测结果的过程进行建模,以达到对问题进行数学描述的目的。这类模型一般需要依赖一些独立性假设,假设的合理性对最终的性能有较大影响。相对于
{
\small\sffamily\bfseries
{
生成模型
}}
\index
{
生成模型
}
(Generative Model)
\index
{
Generative Model
}
,另一类方法是
{
\small\sffamily\bfseries
{
判别模型
}}
\index
{
判别模型
}
(Discriminative Model)
\index
{
Discriminative Model
}
,它直接描述了从隐含变量生成观测结果的过程,这样对问题的建模更加直接,同时这类模型可以更加灵活地引入不同的特征
\upcite
{
DBLP:conf/acl/OchN02
}
。判别模型在自然语言处理中也有广泛应用
\upcite
{
shannon1948mathematical
}
\upcite
{
ng2002discriminative
}
。 在本书的第四章也会使用到判别式模型。
\item
在
{
\small\sffamily\bfseries
{
建模
}}
方面,本章介绍的语言建模采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被“一步一步”生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,
句子出现的概率
是隐含在背后的变量),之后通过对隐含变量生成观测结果的过程进行建模,以达到对问题进行数学描述的目的。这类模型一般需要依赖一些独立性假设,假设的合理性对最终的性能有较大影响。相对于
{
\small\sffamily\bfseries
{
生成模型
}}
\index
{
生成模型
}
(Generative Model)
\index
{
Generative Model
}
,另一类方法是
{
\small\sffamily\bfseries
{
判别模型
}}
\index
{
判别模型
}
(Discriminative Model)
\index
{
Discriminative Model
}
,它直接描述了从隐含变量生成观测结果的过程,这样对问题的建模更加直接,同时这类模型可以更加灵活地引入不同的特征
\upcite
{
DBLP:conf/acl/OchN02
}
。判别模型在自然语言处理中也有广泛应用
\upcite
{
shannon1948mathematical
}
\upcite
{
ng2002discriminative
}
。 在本书的第四章也会使用到判别式模型。
\vspace
{
0.5em
}
\item
从现在
{
\small\sffamily\bfseries
{
自然语言处理的前沿
}}
看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法,而且在近些年取得了巨大成功
\upcite
{
DBLP:conf/nips/BengioDV00
}
。关于神经语言模型的内容,会在
{
\chapternine
}
进行进一步介绍。这里更多地关注了语言模型的基本问题和求解思路,因为对问题的建模是自然语言处理的基础,对问题的本质刻画并不会因为方法的改变而改变。在后续章节还将看到,这里所使用的生成序列的建模方法会作为机器翻译最基本的范式。
\vspace
{
0.5em
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论