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
dd755fc1
Commit
dd755fc1
authored
Jan 14, 2021
by
曹润柘
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update 17
parent
2a3323d2
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
56 行增加
和
38 行删除
+56
-38
Chapter17/Figures/figure-an-end-to-end-voice-translation-model-based-on-transformer.tex
+2
-2
Chapter17/Figures/figure-audio-processing.tex
+2
-0
Chapter17/Figures/figure-speech-recognition-model-based-on-transformer.tex
+49
-33
Chapter17/chapter17.tex
+3
-3
没有找到文件。
Chapter17/Figures/figure-an-end-to-end-voice-translation-model-based-on-transformer.tex
查看文件 @
dd755fc1
...
...
@@ -20,8 +20,8 @@
\node
[layer,anchor=south,fill=blue!20]
(sf) at ([yshift=1.6em]de
_
ffn.north)
{
Softmax
}
;
%\node[layer,anchor=south,fill=orange!20] (output) at ([yshift=1.4em]sf.north){STLoss};
\node
[anchor=north,font=\scriptsize,align=center]
(en
_
input) at ([yshift=-1em]en
_
cnn.south)
{
语音特征
\\
(FBank/MFCC)
}
;
\node
[anchor=north,font=\scriptsize,align=center]
(de
_
input) at ([yshift=-1.1em]de
_
add.south)
{
标注
文本
\\
编码表示
}
;
\node
[anchor=north,font=\scriptsize,align=center]
(en
_
input) at ([yshift=-1em]en
_
cnn.south)
{
源语言
语音特征
\\
(FBank/MFCC)
}
;
\node
[anchor=north,font=\scriptsize,align=center]
(de
_
input) at ([yshift=-1.1em]de
_
add.south)
{
目标语言
文本
\\
编码表示
}
;
\node
[anchor=east,font=\scriptsize,align=center]
(en
_
pos) at ([xshift=-2em]en
_
add.west)
{
位置编码
}
;
\node
[anchor=west,font=\scriptsize,align=center]
(de
_
pos) at ([xshift=2em]de
_
add.east)
{
位置编码
}
;
...
...
Chapter17/Figures/figure-audio-processing.tex
查看文件 @
dd755fc1
...
...
@@ -36,6 +36,7 @@
\draw
[->,very thick]
(process
_
2.east)to([xshift=1.8cm]process
_
2.east);
%%%%音频
\node
(signal)[right of = process
_
2,xshift=5.5cm]
{}
;
\node
(text
_
3)[below of = signal,yshift=-1.98cm,scale=1.3]
{
语音信号
}
;
\draw
[-,thick,]
([xshift=-1.2cm]signal.center)--([xshift=1.2cm]signal.center);
\draw
[-,thick]
([xshift=-1cm,yshift=-0.8cm]signal.center)--([xshift=-0.9cm,yshift=0.4cm]signal.center)--([xshift=-0.8cm,yshift=-0.3cm]signal.center)--([xshift=-0.7cm,yshift=0.7cm]signal.center)--([xshift=-0.6cm,yshift=-0.1cm]signal.center)--([xshift=-0.5cm,yshift=0.3cm]signal.center)--([xshift=-0.4cm,yshift=-0.5cm]signal.center)--([xshift=-0.3cm,yshift=0.7cm]signal.center)--([xshift=-0.2cm,yshift=-0.2cm]signal.center)--([xshift=-0.1cm,yshift=0.4cm]signal.center)--([xshift=0cm,yshift=-0.9cm]signal.center)--([xshift=0.1cm,yshift=0.5cm]signal.center)--([xshift=0.2cm,yshift=-0.4cm]signal.center)--([xshift=0.3cm,yshift=0.3cm]signal.center)--([xshift=0.4cm,yshift=-0.2cm]signal.center)--([xshift=0.5cm,yshift=0.1cm]signal.center)--([xshift=0.6cm,yshift=-0.8cm]signal.center)--([xshift=0.7cm,yshift=0.4cm]signal.center)--([xshift=0.8cm,yshift=-0.6cm]signal.center)--([xshift=0.9cm,yshift=0.7cm]signal.center)--([xshift=1cm,yshift=-0.2cm]signal.center);
\end{tikzpicture}
\ No newline at end of file
Chapter17/Figures/figure-speech-recognition-model-based-on-transformer.tex
查看文件 @
dd755fc1
\begin{tikzpicture}
\tikzstyle
{
layer
}
=[draw,rounded corners=2pt,font=
\scriptsize
,align=center,minimum width=
5
em]
\tikzstyle
{
layer
}
=[draw,rounded corners=2pt,font=
\scriptsize
,align=center,minimum width=
7.1
em]
\tikzstyle
{
word
}
=[font=
\scriptsize
]
%%%%encoder
\node
[layer,fill=red!20]
(en
_
sa) at (0,0)
{
Multi-Head
\\
Attention
}
;
\node
[layer,anchor=south,fill=green!20]
(en
_
ffn) at ([yshift=1.4em]en
_
sa.north)
{
Feed Forward
\\
Network
}
;
\node
[draw,circle,inner sep=0pt, minimum size=1em,anchor=north]
(en
_
add) at ([yshift=-1.4em]en
_
sa.south)
{}
;
\draw
[]
(en
_
add.90) -- (en
_
add.-90);
\draw
[]
(en
_
add.0) -- (en
_
add.180);
\node
[layer,anchor=north,fill=yellow!20]
(en
_
cnn) at ([yshift=-1.4em]en
_
add.south)
{
CNN
}
;
\node
[anchor=south,layer,fill=yellow!20]
(en
_
add1) at ([yshift=1.0em]en
_
sa.north)
{
Add
\&
LayerNorm
}
;
\node
[layer,anchor=south,fill=green!20]
(en
_
ffn) at ([yshift=1.0em]en
_
add1.north)
{
Feed Forward
\\
Network
}
;
\node
[anchor=south,layer,fill=yellow!20]
(en
_
add2) at ([yshift=1.0em]en
_
ffn.north)
{
Add
\&
LayerNorm
}
;
\node
[draw,circle,inner sep=0pt, minimum size=1em,anchor=north,thick]
(en
_
add) at ([yshift=-1.4em]en
_
sa.south)
{}
;
\draw
[thick]
(en
_
add.90) -- (en
_
add.-90);
\draw
[thick]
(en
_
add.0) -- (en
_
add.180);
\node
[layer,anchor=north,fill=yellow!20]
(en
_
cnn) at ([yshift=-1.0em]en
_
add.south)
{
CNN
}
;
\node
[anchor=east,font=\scriptsize,align=center]
(en
_
pos) at ([xshift=-2em]en
_
add.west)
{
位置编码
}
;
\node
[anchor=north,font=\scriptsize,align=center]
(en
_
input) at ([yshift=-1em]en
_
cnn.south)
{
语音特征
\\
(FBank/MFCC)
}
;
\draw
[->,thick]
(en
_
input.90) -- ([yshift=-0.1em]en
_
cnn.-90);
\draw
[->,thick]
([yshift=0.1em]en
_
cnn.90) -- ([yshift=-0.1em]en
_
add.-90);
\draw
[->,thick]
([yshift=0.1em]en
_
add.90) -- ([yshift=-0.1em]en
_
sa.-90);
\draw
[->,thick]
([yshift=0.1em]en
_
sa.90) -- ([yshift=-0.1em]en
_
add1.-90);
\draw
[->,thick]
([yshift=0.1em]en
_
add1.90) -- ([yshift=-0.1em]en
_
ffn.-90);
\draw
[->,thick]
([yshift=0.1em]en
_
ffn.90) --([yshift=-0.1em]en
_
add2.-90);
\draw
[->,rounded corners=2pt,thick]
([yshift=-0.6em]en
_
sa.south)--([yshift=-0.6em,xshift=-4.0em]en
_
sa.south)--([xshift=-0.43em]en
_
add1.west)--(en
_
add1.west);
\draw
[->,rounded corners=2pt,thick]
([yshift=-0.6em]en
_
ffn.south)--([yshift=-0.6em,xshift=-4.0em]en
_
ffn.south)--([xshift=-0.43em]en
_
add2.west)--(en
_
add2.west);
\node
[draw,circle,inner sep=0pt, minimum size=1em,anchor=west]
(de
_
add) at ([xshift=7em]en
_
add.east)
{}
;
\draw
[]
(de
_
add.90) -- (de
_
add.-90);
\draw
[]
(de
_
add.0) -- (de
_
add.180);
%%%%decoder
\node
[draw,circle,inner sep=0pt, minimum size=1em,anchor=west,thick]
(de
_
add) at ([xshift=9em]en
_
add.east)
{}
;
\draw
[thick]
(de
_
add.90) -- (de
_
add.-90);
\draw
[thick]
(de
_
add.0) -- (de
_
add.180);
\node
[layer,anchor=south,fill=red!20]
(de
_
sa) at ([yshift=1.4em]de
_
add.north)
{
Masked
\\
Multi-Head
\\
Attention
}
;
\node
[layer,anchor=south,fill=red!20]
(de
_
ca) at ([yshift=1.4em]de
_
sa.north)
{
Multi-Head
\\
Attention
}
;
\node
[layer,anchor=south,fill=green!20]
(de
_
ffn) at ([yshift=1.4em]de
_
ca.north)
{
Feed Forward
\\
Network
}
;
\node
[layer,anchor=south,fill=blue!20]
(sf) at ([yshift=1.6em]de
_
ffn.north)
{
Softmax
}
;
%\node[layer,anchor=south,fill=orange!20] (output) at ([yshift=1.4em]sf.north){Output Probabilities};
\node
[anchor=north,font=\scriptsize,align=center]
(en
_
input) at ([yshift=-1em]en
_
cnn.south)
{
语音特征
\\
(FBank/MFCC)
}
;
\node
[anchor=south,layer,fill=yellow!20]
(de
_
add1) at ([yshift=1.0em]de
_
sa.north)
{
Add
\&
LayerNorm
}
;
\node
[layer,anchor=south,fill=red!20]
(de
_
ca) at ([yshift=1.0em]de
_
add1.north)
{
Multi-Head
\\
Attention
}
;
\node
[anchor=south,layer,fill=yellow!20]
(de
_
add2) at ([yshift=1.0em]de
_
ca.north)
{
Add
\&
LayerNorm
}
;
\node
[layer,anchor=south,fill=green!20]
(de
_
ffn) at ([yshift=1.0em]de
_
add2.north)
{
Feed Forward
\\
Network
}
;
\node
[anchor=south,layer,fill=yellow!20]
(de
_
add3) at ([yshift=1.0em]de
_
ffn.north)
{
Add
\&
LayerNorm
}
;
\node
[layer,anchor=south,fill=blue!20]
(sf) at ([yshift=1.2em]de
_
add3.north)
{
Softmax
}
;
\node
[anchor=north,font=\scriptsize,align=center]
(de
_
input) at ([yshift=-1.1em]de
_
add.south)
{
标注文本
\\
编码表示
}
;
\node
[anchor=east,font=\scriptsize,align=center]
(en
_
pos) at ([xshift=-2em]en
_
add.west)
{
位置编码
}
;
\node
[anchor=west,font=\scriptsize,align=center]
(de
_
pos) at ([xshift=2em]de
_
add.east)
{
位置编码
}
;
\draw
[->]
(en
_
input.90) -- ([yshift=-0.1em]en
_
cnn.-90);
\draw
[->]
([yshift=0.1em]en
_
cnn.90) -- ([yshift=-0.1em]en
_
add.-90);
\draw
[->]
([yshift=0.1em]en
_
add.90) -- ([yshift=-0.1em]en
_
sa.-90);
\draw
[->]
([yshift=0.1em]en
_
sa.90) -- ([yshift=-0.1em]en
_
ffn.-90);
\draw
[->]
(de
_
input.90) -- ([yshift=-0.1em]de
_
add.-90);
\draw
[->]
([yshift=0.1em]de
_
add.90) -- ([yshift=-0.1em]de
_
sa.-90);
\draw
[->]
([yshift=0.1em]de
_
sa.90) -- ([yshift=-0.1em]de
_
ca.-90);
\draw
[->]
([yshift=0.1em]de
_
ca.90) -- ([yshift=-0.1em]de
_
ffn.-90);
\draw
[->]
([yshift=0.1em]de
_
ffn.90) -- ([yshift=-0.1em]sf.-90);
\draw
[->]
([yshift=0.1em]sf.90) -- ([yshift=1.5em]sf.90);
\draw
[->]
([xshift=0.1em]en
_
pos.0) -- ([xshift=-0.1em]en
_
add.180);
\draw
[->]
([xshift=-0.1em]de
_
pos.180) -- ([xshift=0.1em]de
_
add.0);
\draw
[->,rounded corners=2pt]
([yshift=0.1em]en
_
ffn.90) -- ([yshift=2em]en
_
ffn.90) -- ([xshift=4em,yshift=2em]en
_
ffn.90) -- ([xshift=-1.5em]de
_
ca.west) -- ([xshift=-0.1em]de
_
ca.west);
\draw
[->,thick]
(de
_
input.90) -- ([yshift=-0.1em]de
_
add.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
add.90) -- ([yshift=-0.1em]de
_
sa.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
sa.90) -- ([yshift=-0.1em]de
_
add1.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
add1.90) -- ([yshift=-0.1em]de
_
ca.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
ca.90) -- ([yshift=-0.1em]de
_
add2.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
add2.90) -- ([yshift=-0.1em]de
_
ffn.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
ffn.90) -- ([yshift=-0.1em]de
_
add3.-90);
\draw
[->,thick]
([yshift=0.1em]de
_
add3.90) -- ([yshift=-0.1em]sf.-90);
\draw
[->,thick]
([yshift=0.1em]sf.90) -- ([yshift=1.0em]sf.90);
\draw
[->,thick]
([xshift=0.1em]en
_
pos.0) -- ([xshift=-0.1em]en
_
add.180);
\draw
[->,thick]
([xshift=-0.1em]de
_
pos.180) -- ([xshift=0.1em]de
_
add.0);
\draw
[->,rounded corners=2pt,thick]
([yshift=-0.6em]de
_
sa.south)--([yshift=-0.6em,xshift=4.0em]de
_
sa.south)--([xshift=0.43em]de
_
add1.east)--(de
_
add1.east);
\draw
[->,rounded corners=2pt,thick]
([yshift=-0.6em]de
_
ca.south)--([yshift=-0.6em,xshift=4.0em]de
_
ca.south)--([xshift=0.43em]de
_
add2.east)--(de
_
add2.east);
\draw
[->,rounded corners=2pt,thick]
([yshift=-0.6em]de
_
ffn.south)--([yshift=-0.6em,xshift=4.0em]de
_
ffn.south)--([xshift=0.43em]de
_
add3.east)--(de
_
add3.east);
\draw
[->,rounded corners=2pt,thick]
([yshift=0.1em]en
_
add2.90) -- ([yshift=1.5em]en
_
add2.90) -- ([xshift=5.0em,yshift=1.5em]en
_
add2.90) -- ([xshift=-1.5em]de
_
ca.west) -- ([xshift=-0.1em]de
_
ca.west);
\begin{pgfonlayer}
{
background
}
\node
[draw=ugreen,rounded corners=2pt,inner xsep=6pt,inner ysep=8pt,dashed,thick
][fit=
(en_sa)(en_ffn)]
(box1)
{}
;
\node
[draw=red,rounded corners=2pt,inner xsep=6pt,inner ysep=8pt,dashed,thick
][fit=(de_sa)(de_ca)(de_ffn
)]
(box2)
{}
;
\node
[draw=ugreen,rounded corners=2pt,inner xsep=6pt,inner ysep=8pt,dashed,thick
,xshift=-0.2em,yshift=-0.2em][fit=(en_add1)(en_add2)
(en_sa)(en_ffn)]
(box1)
{}
;
\node
[draw=red,rounded corners=2pt,inner xsep=6pt,inner ysep=8pt,dashed,thick
,xshift=0.2em,yshift=-0.2em][fit=(de_sa)(de_ca)(de_ffn)(de_add3
)]
(box2)
{}
;
\end{pgfonlayer}
\node
[anchor=east,font=\scriptsize,text=ugreen]
at ([xshift=-0.1em]box1.west)
{$
N
\times
$}
;
...
...
Chapter17/chapter17.tex
查看文件 @
dd755fc1
...
...
@@ -117,7 +117,7 @@
\parinterval
传统的语音识别模型和统计机器翻译相似,需要利用声学模型、语言模型和发音词典联合进行识别,系统较为复杂
\upcite
{
DBLP:journals/ftsig/GalesY07,DBLP:journals/taslp/MohamedDH12,DBLP:journals/spm/X12a
}
。而近些年来,随着神经网络的发展,基于神经网络的端到端语音识别模型逐渐受到关注,大大简化了训练流程
\upcite
{
DBLP:conf/nips/ChorowskiBSCB15,DBLP:conf/icassp/ChanJLV16
}
。目前的端到端语音识别模型主要基于序列到序列结构,编码器根据输入的声学特征进一步提取高级特征,解码器根据编码器提取的特征识别对应的文本。在后文中即将介绍的端到端语音翻译模型也是基于十分相似的结构。因此,从某种意义上说,语音识别和翻译所使用的端到端方法与神经机器翻译是一致的。
\parinterval
语音识别目前广泛使用基于Transformer的模型结构(见
{
\chaptertwelve
}
),如图
\ref
{
fig:17-5
}
所示。可以看出,相比文本翻译,模型结构上唯一的区别在于编码器的输入为声学特征,以及编码器底层会使用额外的卷积层来减小输入序列的长度
,从而降低长序列带来的显存占用以及建模难度。由于语音对应的特征序列过长,在计算注意力模型的时候,会占用大量的内存/显存,并增加训练时间。因此,通常会先对语音特征做一个下采样,缩小语音的序列长度。目前一个常用的做法,是在输入的语音特征上进行两层步长为2的卷积操作,从而将输入序列的长度缩小为之前的1/4。
通过大量的语音-标注平行数据对模型进行训练,可以得到高质量的语音识别模型。
\parinterval
语音识别目前广泛使用基于Transformer的模型结构(见
{
\chaptertwelve
}
),如图
\ref
{
fig:17-5
}
所示。可以看出,相比文本翻译,模型结构上唯一的区别在于编码器的输入为声学特征,以及编码器底层会使用额外的卷积层来减小输入序列的长度
。这是由于语音对应的特征序列过长,在计算注意力模型的时候,会占用大量的内存/显存,并增加训练时间。因此,一个常用的做法是在语音特征上进行两层步长为2的卷积操作,从而将输入序列的长度缩小为之前的1/4。
通过大量的语音-标注平行数据对模型进行训练,可以得到高质量的语音识别模型。
%----------------------------------------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -145,7 +145,7 @@
\end{figure}
%----------------------------------------------------------------------------------------------------
\parinterval
可以看出,词格可以保存多条搜索路径,路径中保存了输入序列的时间信息以及解码过程。翻译模型基于词格进行翻译,可以降低语音识别模型带来的误差
\upcite
{
DBLP:conf/acl/ZhangGCF19,DBLP:conf/acl/SperberNPW19
}
。但在端到端语音识别模型中,一般使用基于束搜索的方法进行解码,
解码序列的长度与输入序列并不匹配,相比传统声学模型解码丢失了语音的时间信息,
因此这种基于词格的方法主要集中在传统语音识别系统上。
\parinterval
可以看出,词格可以保存多条搜索路径,路径中保存了输入序列的时间信息以及解码过程。翻译模型基于词格进行翻译,可以降低语音识别模型带来的误差
\upcite
{
DBLP:conf/acl/ZhangGCF19,DBLP:conf/acl/SperberNPW19
}
。但在端到端语音识别模型中,一般使用基于束搜索的方法进行解码,
因为解码序列的长度与输入序列并不匹配,相比传统声学模型解码丢失了语音的时间信息。
因此这种基于词格的方法主要集中在传统语音识别系统上。
\parinterval
为了降低错误传播问题带来的影响,一种思路是通过一个后处理模型修正识别结果中的错误,再送给文本翻译模型进行翻译。也可以进一步对文本做
{
\small\bfnew
{
顺滑
}}
\index
{
顺滑
}
(Disfluency Detection
\index
{
Disfluency Detection
}
)处理,使得送给翻译系统的文本更加干净、流畅,比如除去一些导致停顿的语气词。这一做法在工业界得到了广泛应用,但由于每个模型只能串行地计算,也会带来额外的计算代价以及运算时间。另外一种思路是训练更加健壮的文本翻译模型,使其可以处理输入中存在的噪声或误差
\upcite
{
DBLP:conf/acl/LiuTMCZ18
}
。
...
...
@@ -433,7 +433,7 @@
\parinterval
由于解码器输出的是语言文字序列,因此需要考虑语言的特点对其进行改进。 例如,解码过程中, “the”,“on”,“at”这种介词或者冠词与图像的相关性较低
\upcite
{
DBLP:conf/cvpr/LuXPS17
}
。因此,可以通过门控单元,控制视觉信号作用于文字生成的程度。另外,在解码过程中,生成的每个单词对应着图像的区域可能是不同的。因此也可以设计更为有效的注意力机制来捕捉解码器端对不同图像局部信息的关注程度
\upcite
{
DBLP:conf/cvpr/00010BT0GZ18
}
。
\parinterval
除了更好地使生成文本与图像特征进行相互作用以外,还有一些改进方法。例如,用卷积神经网络或者Transformer代替解码器所使用的循环神经网络
\upcite
{
DBLP:conf/cvpr/AnejaDS18
}
。或者使用更深层的神经网络学习动词或者
名
词等视觉中不易表现出来的单词
\upcite
{
DBLP:journals/mta/FangWCT18
}
,其思想与深层神经机器翻译模型有相通之处(见
{
\chapterfifteen
}
)。
\parinterval
除了更好地使生成文本与图像特征进行相互作用以外,还有一些改进方法。例如,用卷积神经网络或者Transformer代替解码器所使用的循环神经网络
\upcite
{
DBLP:conf/cvpr/AnejaDS18
}
。或者使用更深层的神经网络学习动词或者
形容
词等视觉中不易表现出来的单词
\upcite
{
DBLP:journals/mta/FangWCT18
}
,其思想与深层神经机器翻译模型有相通之处(见
{
\chapterfifteen
}
)。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论