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
a3236115
Commit
a3236115
authored
Sep 12, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 9)
parent
f42bf08d
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
12 行增加
和
6 行删除
+12
-6
Chapter9/chapter9.tex
+12
-6
没有找到文件。
Chapter9/chapter9.tex
查看文件 @
a3236115
...
...
@@ -1983,7 +1983,7 @@ w_{t+1}&=&w_t-\frac{\eta}{\sqrt{z_t+\epsilon}} v_t
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
基于
神经网络的语言建模
}
\subsection
{
基于
前馈神经网络的语言模型
}
\parinterval
回顾一下
{
\chaptertwo
}
的内容,语言建模的问题被定义为:对于一个词序列
$
w
_
1
w
_
2
\dots
w
_
m
$
,如何计算该词序列的可能性?词序列出现的概率可以通过链式法则得到:
\begin{eqnarray}
...
...
@@ -2018,7 +2018,7 @@ w_{t+1}&=&w_t-\frac{\eta}{\sqrt{z_t+\epsilon}} v_t
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
1. 基于前馈神经网络的语言模型
}
\subsubsection
{
建模
}
\parinterval
最具代表性的神经语言模型是Bengio等人提出的
{
\small\sffamily\bfseries
{
前馈神经网络语言模型
}}
\index
{
前馈神经网络语言模型
}
(Feed-forward Neural Network Language Model
\index
{
Feed-forward Neural Network Language Model
}
,简称FNNLM)。这种语言模型的目标是用神经网络计算
$
{
\rm
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
\dots
w
_{
m
-
1
}
)
$
,之后将多个
$
n
$
-gram的概率相乘得到整个序列的概率
\cite
{
bengio2003a
}
。
...
...
@@ -2064,14 +2064,20 @@ w_{t+1}&=&w_t-\frac{\eta}{\sqrt{z_t+\epsilon}} v_t
\parinterval
当然,FNNLM模型也引发后人的许多思考,比如:神经网络每一层都学到了什么?是词法、句法,还是一些其他知识?如何理解词的分布式表示?等等。在随后的内容中也会看到,随着近几年深度学习和自然语言处理的发展,部分问题已经得到了很好的解答,但是仍有许多问题需要进一步探索。
%----------------------------------------------------------------------------------------
% NEW SUB
SUB
-SECTION
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subs
ubsection
{
2. 基于循环神经网络的语言模型
}
\subs
ection
{
对于长序列的建模
}
\parinterval
FNNLM模型固然有效,但是和传统的
$
n
$
-gram语言模型一样需要依赖有限上下文假设,也就是
$
w
_
i
$
的生成概率只依赖于之前的
$
n
-
1
$
个单词。很自然的一个想法是引入更大范围的历史信息,这样可以捕捉单词间的长距离依赖。
\parinterval
对于这个问题,可以通过
{
\small\sffamily\bfseries
{
循环神经网络
}}
\index
{
循环神经网络
}
(Recurrent Neural Network
\index
{
Recurrent Neural Network
}
,或RNN)进行求解。通过引入循环单元这种特殊的结构,循环神经网络可以对任意长度的历史进行建模,因此在一定程度上解决了传统
$
n
$
-gram语言模型有限历史的问题。正是基于这个优点,
{
\small\sffamily\bfseries
{
循环神经网络语言模型
}}
\index
{
循环神经网络语言模型
}
(RNNLM)
\index
{
RNNLM
}
应运而生
\cite
{
mikolov2010recurrent
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
1. 基于循环神经网络的语言模型
}
\parinterval
对于长距离依赖问题,可以通过
{
\small\sffamily\bfseries
{
循环神经网络
}}
\index
{
循环神经网络
}
(Recurrent Neural Network
\index
{
Recurrent Neural Network
}
,或RNN)进行求解。通过引入循环单元这种特殊的结构,循环神经网络可以对任意长度的历史进行建模,因此在一定程度上解决了传统
$
n
$
-gram语言模型有限历史的问题。正是基于这个优点,
{
\small\sffamily\bfseries
{
循环神经网络语言模型
}}
\index
{
循环神经网络语言模型
}
(RNNLM)
\index
{
RNNLM
}
应运而生
\cite
{
mikolov2010recurrent
}
。
\parinterval
在循环神经网络中,输入和输出都是一个序列,分别记为
$
(
\mathbf
x
_
1
,
\dots
,
\mathbf
x
_
m
)
$
和
$
(
\mathbf
y
_
1
,
\dots
,
\\
\mathbf
y
_
m
)
$
。它们都可以被看作是时序序列,其中每个时刻
$
t
$
都对应一个输入
$
\mathbf
x
_
t
$
和输出
$
\mathbf
y
_
t
$
。循环神经网络的核心是
{
\small\sffamily\bfseries
{
循环单元
}}
\index
{
循环单元
}
(RNN Cell)
\index
{
RNN Cell
}
,它读入前一个时刻循环单元的输出和当前时刻的输入,生成当前时刻循环单元的输出。图
\ref
{
fig:5-62
}
展示了一个简单的循环单元结构,对于时刻
$
t
$
,循环单元的输出被定义为:
\begin{eqnarray}
...
...
@@ -2104,7 +2110,7 @@ w_{t+1}&=&w_t-\frac{\eta}{\sqrt{z_t+\epsilon}} v_t
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
3
. 其他类型的语言模型
}
\subsubsection
{
2
. 其他类型的语言模型
}
\parinterval
通过引入记忆历史的能力,RNNLM缓解了
$
n
$
-gram模型中有限上下文的局限性,但依旧存在一些问题。随着序列变长,不同单词之间信息传递路径变长,信息传递的效率变低。对于长序列,很难通过很多次的循环单元操作保留很长的历史信息。过长的序列还容易引起梯度消失和梯度爆炸问题(详见
\ref
{
sec:5.4.4
}
节),增加模型训练的难度。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论