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
a50b434b
Commit
a50b434b
authored
Aug 19, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (ngram lm)
parent
d487845b
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
10 行增加
和
8 行删除
+10
-8
Chapter2/chapter2.tex
+10
-8
没有找到文件。
Chapter2/chapter2.tex
查看文件 @
a50b434b
...
...
@@ -51,7 +51,7 @@
\parinterval
{
\small\bfnew
{
概率
}}
\index
{
概率
}
(Probability)
\index
{
Probability
}
是度量随机事件呈现其每个可能状态的可能性的数值,本质上它是一个测度函数
\upcite
{
mao-prob-book-2011,kolmogorov2018foundations
}
。概率的大小表征了随机事件在一次试验中发生的可能性大小。用
$
\funp
{
P
}
(
\cdot
)
$
表示一个随机事件的可能性,即事件发生的概率。比如
$
\funp
{
P
}
(
\textrm
{
太阳从东方升起
}
)
$
表示“太阳从东方升起”的可能性,同理,
$
\funp
{
P
}
(
A
=
B
)
$
表示的就是“
$
A
=
B
$
”这件事的可能性。
\parinterval
在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行
{
\small\sffamily\bfseries
{
估计
}}
\index
{
估计
}
,得到的结果是概率的
{
\small\sffamily\bfseries
{
估计值
}}
\index
{
估计值
}
(Estimate)
\index
{
Estimate
}
。概率值的估计是概率论和统计学中的经典问题,有十分多样的方法可以选择。比如,一个很简单的方法是利用相对频
度作为概率的估计值。如果
$
\{
x
_
1
,x
_
2
,
\dots
,x
_
n
\}
$
是一个试验的样本空间,在相同情况下重复试验
$
N
$
次,观察到样本
$
x
_
i
(
1
\leq
{
i
}
\leq
{
n
}
)
$
的次数为
$
n
(
x
_
i
)
$
,那么
$
x
_
i
$
在这
$
N
$
次试验中的相对频率是
$
\frac
{
n
(
x
_
i
)
}{
N
}$
。 当
$
N
$
越来越大时,相对概率也就越来越接近真实概率
$
\funp
{
P
}
(
x
_
i
)
$
,即
$
\lim
_{
N
\to
\infty
}
\frac
{
n
(
x
_
i
)
}{
N
}
=
\funp
{
P
}
(
x
_
i
)
$
。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度
估计实现。
\parinterval
在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行
{
\small\sffamily\bfseries
{
估计
}}
\index
{
估计
}
,得到的结果是概率的
{
\small\sffamily\bfseries
{
估计值
}}
\index
{
估计值
}
(Estimate)
\index
{
Estimate
}
。概率值的估计是概率论和统计学中的经典问题,有十分多样的方法可以选择。比如,一个很简单的方法是利用相对频
次作为概率的估计值。如果
$
\{
x
_
1
,x
_
2
,
\dots
,x
_
n
\}
$
是一个试验的样本空间,在相同情况下重复试验
$
N
$
次,观察到样本
$
x
_
i
(
1
\leq
{
i
}
\leq
{
n
}
)
$
的次数为
$
n
(
x
_
i
)
$
,那么
$
x
_
i
$
在这
$
N
$
次试验中的相对频率是
$
\frac
{
n
(
x
_
i
)
}{
N
}$
。 当
$
N
$
越来越大时,相对概率也就越来越接近真实概率
$
\funp
{
P
}
(
x
_
i
)
$
,即
$
\lim
_{
N
\to
\infty
}
\frac
{
n
(
x
_
i
)
}{
N
}
=
\funp
{
P
}
(
x
_
i
)
$
。 实际上,很多概率模型都等同于相对频次估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频次
估计实现。
\parinterval
概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果把
$
A
$
看做一个离散变量,
$
a
$
看做变量
$
A
$
的一个取值,那么
$
\funp
{
P
}
(
A
)
$
被称作变量
$
A
$
的概率函数,
$
\funp
{
P
}
(
A
=
a
)
$
被称作
$
A
=
a
$
的概率值,简记为
$
\funp
{
P
}
(
a
)
$
。例如,在相同条件下掷一个骰子50次,用
$
A
$
表示投骰子出现的点数这个离散变量,
$
a
_
i
$
表示点数的取值,
$
\funp
{
P
}_
i
$
表示
$
A
=
a
_
i
$
的概率值。表
\ref
{
tab:2-1
}
为
$
A
$
的概率分布,给出了
$
A
$
的所有取值及其概率。
...
...
@@ -491,7 +491,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
这样,
$
w
_
1
w
_
2
\ldots
w
_
m
$
的生成可以被看作是逐个生成每个单词的过程,即首先生成
$
w
_
1
$
,然后根据
$
w
_
1
$
再生成
$
w
_
2
$
,然后根据
$
w
_
1
w
_
2
$
再生成
$
w
_
3
$
,以此类推,直到根据所有前
$
m
-
1
$
个词生成序列的最后一个单词
$
w
_
m
$
。这个模型把联合概率
$
\funp
{
P
}
(
w
_
1
w
_
2
\ldots
w
_
m
)
$
分解为多个条件概率的乘积,虽然对生成序列的过程进行了分解,但是模型的复杂度和以前是一样的,比如,
$
\funp
{
P
}
(
w
_
m|w
_
1
w
_
2
\ldots
w
_{
m
-
1
}
)
$
仍然不好计算。
\parinterval
换一个角度看,
$
\funp
{
P
}
(
w
_
m|w
_
1
w
_
2
\ldots
w
_{
m
-
1
}
)
$
体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面
$
n
-
1
$
个历史单词来生成当前单词
,这就是
$
n
$
-gram语言模型
。这个模型的数学描述如下:
\parinterval
换一个角度看,
$
\funp
{
P
}
(
w
_
m|w
_
1
w
_
2
\ldots
w
_{
m
-
1
}
)
$
体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面
$
n
-
1
$
个历史单词来生成当前单词
。这就是
$
n
$
-gram语言模型,其中
$
n
$
-gram 表示
$
n
$
个连续的单词构成的单元,也被称作
{
\small\bfnew
{$
n
$
元语法单元
}}
\index
{$
n
$
元语法单元
}
。这个模型的数学描述如下:
\begin{eqnarray}
\funp
{
P
}
(w
_
m|w
_
1 w
_
2
\ldots
w
_{
m-1
}
) =
\funp
{
P
}
(w
_
m|w
_{
m-n+1
}
\ldots
w
_{
m-1
}
)
\label
{
eq:2-21
}
...
...
@@ -525,7 +525,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
极大似然估计
}}
\index
{
极大似然估计
}
。直接利用词序列在训练数据中出现的频度
计算出
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}$
\\
$
\ldots
w
_{
m
-
1
}
)
$
\item
{
\small\bfnew
{
基于频次的方法
}}
\index
{
基于频次的方法
}
。直接利用词序列在训练数据中出现的频次
计算出
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}$
\\
$
\ldots
w
_{
m
-
1
}
)
$
\begin{eqnarray}
\funp
{
P
}
(w
_
m|w
_{
m-n+1
}
\ldots
w
_{
m-1
}
)=
\frac
{
\textrm
{
count
}
(w
_{
m-n+1
}
\ldots
w
_
m)
}{
\textrm
{
count
}
(w
_{
m-n+1
}
\ldots
w
_{
m-1
}
)
}
\label
{
eq:2-22
}
...
...
@@ -539,7 +539,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\end{itemize}
\vspace
{
0.5em
}
\parinterval
极大似然估计方法和掷骰子游戏中介绍的统计词汇概率的方法是一致的,它的核心是使用
$
n
$
-gram出现的频
度进行参数估计。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入
$
(
w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
和输出
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于
$
n
$
-gram的方法,或者说它并没有显性记录
$
n
$
-gram的生成概率,也不依赖
$
n
$
-gram的频度
进行参数估计。为了保证内容的连贯性,接下来仍以传统
$
n
$
-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在
{
\chapternine
}
进行详细介绍。
\parinterval
极大似然估计方法和掷骰子游戏中介绍的统计词汇概率的方法是一致的,它的核心是使用
$
n
$
-gram出现的频
次进行参数估计。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入
$
w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}$
和输出
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于
$
n
$
-gram的方法,或者说它并没有显性记录
$
n
$
-gram的生成概率,也不依赖
$
n
$
-gram的频次
进行参数估计。为了保证内容的连贯性,接下来仍以传统
$
n
$
-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在
{
\chapternine
}
进行详细介绍。
\parinterval
$
n
$
-gram语言模型的使用非常简单。可以直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个句子出现的概率,其中单词之间用斜杠分隔,如下:
\begin{eqnarray}
...
...
@@ -555,9 +555,11 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
未登录词
和平滑算法
}
\subsection
{
参数估计
和平滑算法
}
\parinterval
在式
\ref
{
eq:2-23
}
所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算句子“确实现在数据很多”的概率时,会出现如下情况
对于
$
n
$
-gram语言模型,每个
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
都可以被看作是模型的
{
\small\bfnew
{
参数
}}
\index
{
参数
}
(Parameter
\index
{
参数
}
)。而
$
n
$
-gram语言模型的一个核心任务是估计这些参数的值,即
{
\small\bfnew
{
参数估计
}}
\index
{
参数估计
}
(Parameter Estimation
\index
{
Parameter Estimation
}
)。通常,参数估计可以通过在数据上的统计得到。比如,一种最简单的方法是:给定一定数量的句子,统计每个
$
n
$
-gram 出现的频次,并利用公式
\ref
{
eq:2-22
}
得到每个参数
$
\funp
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
\ldots
w
_{
m
-
1
}
)
$
的值。这个过程也被称作模型的
{
\small\bfnew
{
训练
}}
\index
{
训练
}
(Training
\index
{
训练
}
)。对于自然语言处理任务来说,统计模型的训练是至关重要的。在本书后面的内容中也会看到,不同的问题可能需要不同的模型以及不同的模型训练方法。而很多研究工作也都集中在优化模型训练的效果上。
\parinterval
回到
$
n
$
-gram语言模型上。前面所使用的参数估计方法并不完美,因为它无法很好的处理低频或者未见现象。比如,在式
\ref
{
eq:2-23
}
所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,即
$
\textrm
{
count
}
(
\textrm
{
确实
}
\ \textrm
{
现在
}
)=
0
$
。 那么使用2-gram 计算句子“确实/现在/数据/很多”的概率时,会出现如下情况
\begin{eqnarray}
\funp
{
P
}
(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\textrm
{
count
}
(
\textrm
{
确实
}
\ \textrm
{
现在
}
)
}{
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\nonumber
\\
&
=
&
\frac
{
0
}{
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
\nonumber
\\
...
...
@@ -565,13 +567,13 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\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]
\centering
\input
{
./Chapter2/Figures/figure-word-frequency-distribution
}
\caption
{
词语
频度
的分布
}
\caption
{
词语
出现频次
的分布
}
\label
{
fig:2-11
}
\end{figure}
%---------------------------
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论