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
4f88c767
Commit
4f88c767
authored
Jan 02, 2021
by
曹润柘
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'caorunzhe' 到 'master'
Caorunzhe 查看合并请求
!765
parents
35a1347f
934796f3
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
370 行增加
和
7 行删除
+370
-7
Chapter11/chapter11.tex
+1
-1
Chapter12/chapter12.tex
+1
-1
Chapter13/Figures/figure-a-predefined-course-planning.tex
+51
-0
Chapter13/Figures/figure-bpe.tex
+1
-1
Chapter13/Figures/figure-curriculum-learning-framework.tex
+34
-0
Chapter13/Figures/figure-exposure-bias.tex
+146
-0
Chapter13/Figures/figure-framework-of-Adversarial-Neural-machine-translation.jpg
+0
-0
Chapter13/Figures/figure-framework-of-Adversarial-Neural-machine-translation.tex
+39
-0
Chapter13/Figures/figure-of-scheduling-sampling-method.tex
+57
-0
Chapter13/Figures/figure-reinforcement-learning-method-based-on-actor-critic.tex
+35
-0
Chapter13/Figures/figure-word-root.tex
+3
-2
Chapter13/chapter13.tex
+0
-0
Chapter16/chapter16.tex
+0
-0
ChapterPreface/chapterpreface.tex
+2
-2
没有找到文件。
Chapter11/chapter11.tex
查看文件 @
4f88c767
...
...
@@ -34,7 +34,7 @@
\section
{
卷积神经网络
}
\parinterval
{
\small\bfnew
{
卷积神经网络
}}
\index
{
卷积神经网络
}
(Convolutional Neural Network,CNN)
\index
{
Convolutional Neural Network
}
是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上
\upcite
{
Waibel1989PhonemeRU
}
,之后在图像处理领域取得了很好的效果
\upcite
{
LeCun1989BackpropagationAT,726791
}
。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架
\upcite
{
DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15
,DBLP:conf/cvpr/HuangLMW17,Girshick2015FastR,He2020MaskR
}
。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类
\upcite
{
Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN
}
、情感分析
\upcite
{
Santos2014DeepCN,
}
、语言建模
\upcite
{
DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW
}
、机器翻译
\upcite
{
devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC,Wu2019PayLA
}
等任务中取得不错的成绩。
\parinterval
{
\small\bfnew
{
卷积神经网络
}}
\index
{
卷积神经网络
}
(Convolutional Neural Network,CNN)
\index
{
Convolutional Neural Network
}
是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上
\upcite
{
Waibel1989PhonemeRU
}
,之后在图像处理领域取得了很好的效果
\upcite
{
LeCun1989BackpropagationAT,726791
}
。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架
\upcite
{
DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15
}
。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类
\upcite
{
Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN
}
、情感分析
\upcite
{
Santos2014DeepCN,
}
、语言建模
\upcite
{
DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW
}
、机器翻译
\upcite
{
devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC
}
等任务中取得不错的成绩。
\parinterval
图
\ref
{
fig:11-1
}
展示了全连接层和卷积层的结构对比,可以看到在全连接层中,模型考虑了所有的输入,层输出中的每一个元素都依赖于所有输入。这种全连接层适用于大多数任务,但是当处理图像这种网格数据的时候,规模过大的数据会导致模型参数量过大,难以处理。其次,在一些网格数据中,通常具有局部不变性的特征,比如图像中不同位置的相同物体,语言序列中相同的
$
n
$
-gram等。而全连接网络很难提取这些局部不变性特征。为此,一些研究人员提出使用卷积层来替换全连接层
\upcite
{
DBLP:conf/eccv/LiuAESRFB16,DBLP:journals/pami/RenHG017
}
。
...
...
Chapter12/chapter12.tex
查看文件 @
4f88c767
...
...
@@ -594,7 +594,7 @@ Transformer Deep(48层) & 30.2 & 43.1 & 194$\times 10^
\vspace
{
0.5em
}
\item
神经机器翻译依赖成本较高的GPU设备,因此对模型的裁剪和加速也是很多系统研发人员所感兴趣的方向。比如,从工程上,可以考虑减少运算强度,比如使用低精度浮点数
\upcite
{
Ott2018ScalingNM
}
或者整数
\upcite
{
DBLP:journals/corr/abs-1906-00532,Lin2020TowardsF8
}
进行计算,或者引入缓存机制来加速模型的推断
\upcite
{
Vaswani2018Tensor2TensorFN
}
;也可以通过对模型参数矩阵的剪枝来减小整个模型的体积
\upcite
{
DBLP:journals/corr/SeeLM16
}
;另一种方法是知识蒸馏
\upcite
{
Hinton2015Distilling,kim-rush-2016-sequence
}
。 利用大模型训练小模型,这样往往可以得到比单独训练小模型更好的效果
\upcite
{
DBLP:journals/corr/ChenLCL17
}
。
\vspace
{
0.5em
}
\item
自注意力网络作为Transformer模型中重要组成部分,近年来受到研究人员的广泛关注,尝试设计更高效地操作来替代它。比如,利用动态卷积网络来替换编码器与解码器的自注意力网络,在保证推断效率的同时取得了和Transformer相当甚至略好的翻译性能
\upcite
{
Wu2019PayLA
}
;为了加速Transformer处理较长输入文本的效率,利用局部敏感哈希替换自注意力机制的Reformer模型也吸引了广泛的关注
\upcite
{
Kitaev2020ReformerTE
}
。此外,在自注意力网络引入额外的编码信息能够进一步提高模型的表示能力。比如,引入固定窗口大小的相对位置编码信息
\upcite
{
Shaw2018SelfAttentionWR,
dai-etal-2019-transformer
}
,或利用动态系统的思想从数据中学习特定的位置编码表示,具有更好的泛化能力
\upcite
{
Liu2020LearningTE
}
。通过对Transformer模型中各层输出进行可视化分析,研究人员发现Transformer自底向上各层网络依次聚焦于词级-语法级-语义级的表示
\upcite
{
Jawahar2019WhatDB,li2020shallow
}
,因此在底层的自注意力网络中引入局部编码信息有助于模型对局部特征的抽象
\upcite
{
Yang2018ModelingLF,DBLP:journals/corr/abs-1904-03107
}
。
\item
自注意力网络作为Transformer模型中重要组成部分,近年来受到研究人员的广泛关注,尝试设计更高效地操作来替代它。比如,利用动态卷积网络来替换编码器与解码器的自注意力网络,在保证推断效率的同时取得了和Transformer相当甚至略好的翻译性能
\upcite
{
Wu2019PayLA
}
;为了加速Transformer处理较长输入文本的效率,利用局部敏感哈希替换自注意力机制的Reformer模型也吸引了广泛的关注
\upcite
{
Kitaev2020ReformerTE
}
。此外,在自注意力网络引入额外的编码信息能够进一步提高模型的表示能力。比如,引入固定窗口大小的相对位置编码信息
\upcite
{
Shaw2018SelfAttentionWR,
Dai2019TransformerXLAL
}
,或利用动态系统的思想从数据中学习特定的位置编码表示,具有更好的泛化能力
\upcite
{
Liu2020LearningTE
}
。通过对Transformer模型中各层输出进行可视化分析,研究人员发现Transformer自底向上各层网络依次聚焦于词级-语法级-语义级的表示
\upcite
{
Jawahar2019WhatDB,li2020shallow
}
,因此在底层的自注意力网络中引入局部编码信息有助于模型对局部特征的抽象
\upcite
{
Yang2018ModelingLF,DBLP:journals/corr/abs-1904-03107
}
。
\vspace
{
0.5em
}
\item
除了针对Transformer中子层的优化,网络各层之间的连接方式在一定程度上也能影响模型的表示能力。近年来针对网络连接优化的工作如下:在编码器顶部利用平均池化或权重累加等融合手段得到编码器各层的全局表示
\upcite
{
Wang2018MultilayerRF,Bapna2018TrainingDN,Dou2018ExploitingDR,Wang2019ExploitingSC
}
,利用之前各层表示来生成当前层的输入表示
\upcite
{
WangLearning,Dou2019DynamicLA,Wei2020MultiscaleCD
}
。
\end{itemize}
Chapter13/Figures/figure-a-predefined-course-planning.tex
0 → 100644
查看文件 @
4f88c767
\begin{tikzpicture}
\tikzstyle
{
node1
}
=[inner sep=0mm,minimum height=1em,minimum width=3em,fill=ugreen!10!blue!10]
\tikzstyle
{
node2
}
=[inner sep=0mm,minimum height=1em,minimum width=3em,fill=ugreen!20!blue!20]
\tikzstyle
{
node3
}
=[inner sep=0mm,minimum height=1em,minimum width=3em,fill=ugreen!30!blue!30]
\tikzstyle
{
node4
}
=[inner sep=0mm,minimum height=1em,minimum width=3em,fill=ugreen!40!blue!40]
\tikzstyle
{
node5
}
=[inner sep=0mm,minimum height=1em,minimum width=3em,fill=ugreen!50!blue!50]
\begin{scope}
\node
[anchor=north west]
(l1) at (0,0)
{
易
}
;
\node
[anchor=west]
(l2) at ([xshift=10.3em,yshift=0em]l1.east)
{
难
}
;
\draw
[->,thick] ([xshift=-2em,yshift=-1em]l1.south) -- ([xshift=2em,yshift=-1em]l2.south);
\node
[anchor=north,node1]
(c1) at ([xshift=0em,yshift=-2em]l1.south)
{}
;
\node
[anchor=west,node2]
(c2) at ([xshift=0em,yshift=0em]c1.east)
{}
;
\node
[anchor=west,node3]
(c3) at ([xshift=0em,yshift=0em]c2.east)
{}
;
\node
[anchor=west,node4]
(c4) at ([xshift=0em,yshift=0em]c3.east)
{}
;
\node
[anchor=west,node5]
(c5) at ([xshift=0em,yshift=0em]c4.east)
{}
;
\node
[anchor=north]
(lb1) at ([xshift=0em,yshift=-1.5em]c3.south)
{
(a)样本难易程度图示
}
;
\end{scope}
\begin{scope}
[yshift = -1.7in]
\foreach
\i
/
\j
/
\z
in
{
0/0/node1, 1/0/node1, 2/0/node1, 3/0/node1, 4/0/node1, 5/0/node1, 6/0/node1,
1/1/node2, 2/1/node2, 3/1/node2, 4/1/node2, 5/1/node2, 6/1/node2,
2/2/node3, 3/2/node3, 4/2/node3, 5/2/node3, 6/2/node3,
3/3/node4, 4/3/node4, 5/3/node4, 6/3/node4,
4/4/node5, 5/4/node5, 6/4/node5,
}
\node
[anchor=north west,\z,draw=white]
(n
\i\j
) at (1.0*3em*
\j
+ 0*0em,-1.0*1em*
\i
+ 0*0em)
{}
;
\node
[anchor=north west,node1,draw=white]
(nc) at (0,0)
{}
;
\draw
[->,very thick] ([xshift=-1em,yshift=1em]n00.north west) -- ([xshift=16em,yshift=1em]n00.north west);
\draw
[->,very thick] ([xshift=-1em,yshift=1em]n00.north west) -- ([xshift=-1em,yshift=-9em]n00.north west);
\node
[anchor=west]
(x1) at ([xshift=12em,yshift=2em]n00.north west)
{
数据块
}
;
\node
[anchor=east]
(y1) at ([xshift=-1em,yshift=-7.5em]n00.north west)
{
轮次
}
;
\node
[anchor=west,font=\small]
(t1) at ([xshift=0em,yshift=-1em]n60.south west)
{$
\ldots
$
直到模型收敛
}
;
\node
[anchor=north]
(lb2) at ([xshift=0em,yshift=-3em]n62.south)
{
(b)不同训练阶段使用的数据
}
;
\end{scope}
\end{tikzpicture}
\ No newline at end of file
Chapter13/Figures/figure-bpe.tex
查看文件 @
4f88c767
...
...
@@ -17,7 +17,7 @@
\draw
[->,line width=.03cm]
([yshift=0em]node5.south) -- ([yshift=0em]node6.north);
\node
[node,anchor = west]
(node8) at ([xshift = 2em,yshift = 2em]node7.east)
{
对于词表外的词lowest
}
;
\node
[node,anchor = north west]
(node9) at ([yshift = 0.3em]node8.south west)
{
可以被
分割
为low est
}
;
\node
[node,anchor = north west]
(node9) at ([yshift = 0.3em]node8.south west)
{
可以被
合并
为low est
}
;
\node
[node,font=\scriptsize,anchor = north,fill=ugreen!5,drop shadow]
(dict) at ([xshift = 5em,yshift = -5em]node6.south)
{
\begin{tabular}
{
llllll
}
\multirow
{
3
}{
*
}{
符号合并表:
}
&
('e','s')
&
('es','t')
&
('est','
$
<
$
e
$
>
$
')
&
('l','o')
&
('lo','w')
\\
...
...
Chapter13/Figures/figure-curriculum-learning-framework.tex
0 → 100644
查看文件 @
4f88c767
\begin{tikzpicture}
\tikzstyle
{
node
}
=[inner sep=0mm,minimum height=3em,minimum width=6em,rounded corners=5pt]
\node
[anchor=west,node,fill=ugreen!30]
(n1) at (0,0)
{
训练集
}
;
\node
[anchor=west,node,fill=yellow!30]
(n2) at ([xshift=2em,yshift=0em]n1.east)
{
难度评估器
}
;
\node
[anchor=west,node,fill=red!30]
(n3) at ([xshift=4em,yshift=0em]n2.east)
{
训练调度器
}
;
\node
[anchor=west,node,fill=blue!30]
(n4) at ([xshift=4em,yshift=0em]n3.east)
{
模型训练器
}
;
\draw
[->,very thick] ([xshift=0em,yshift=0em]n1.east) -- ([xshift=0em,yshift=0em]n2.west);
\draw
[->,very thick] ([xshift=0em,yshift=0em]n2.east) -- ([xshift=0em,yshift=0em]n3.west);
\draw
[->,very thick] ([xshift=0em,yshift=0em]n3.east) -- ([xshift=0em,yshift=0em]n4.west);
\node
[anchor=west,inner sep=0mm,minimum height=2em,minimum width=3em,font=\small,align=left]
(n5) at ([xshift=0.5em,yshift=-1.5em]n2.east)
{
排序过
\\
的数据
}
;
\node
[anchor=west,inner sep=0mm,minimum height=2em,minimum width=3em,font=\small,align=left]
(n6) at ([xshift=1em,yshift=-1.5em]n3.east)
{
采样
\\
批次
$
t
$}
;
\node
[anchor=south west,inner sep=0mm,minimum height=2em,minimum width=4em,font=\small]
(n7) at ([xshift=2.5em,yshift=1em]n3.north)
{
如果模型收敛
}
;
\node
[anchor=south west,inner sep=0mm]
(n8) at ([xshift=0em,yshift=1.5em]n4.north)
{
批次
$
t
$}
;
\node
[anchor=north east,inner sep=0mm]
(n9) at ([xshift=0em,yshift=-1em]n3.south east)
{
课程设计
}
;
\draw
[->,dotted,very thick] ([xshift=0em,yshift=0em]n4.north) -- ([xshift=0em,yshift=1em]n4.north) -- ([xshift=0em,yshift=1em]n3.north) -- (n3.north);
\begin{pgfonlayer}
{
background
}
\node
[rectangle,inner sep=5pt,rounded corners=5pt,fill=gray!30]
[fit = (n3) (n4) (n6) (n8) ] (g2)
{}
;
\node
[rectangle,inner sep=5pt,rounded corners=5pt,fill=orange!30]
[fit = (n2) (n3) (n9) ] (g1)
{}
;
\end{pgfonlayer}
\end{tikzpicture}
\ No newline at end of file
Chapter13/Figures/figure-exposure-bias.tex
0 → 100644
查看文件 @
4f88c767
%------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}
[]
\tikzstyle
{
rnnnode
}
= [draw,inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt,fill=red!20]
\tikzstyle
{
snode
}
= [draw,inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt,fill=blue!20]
\tikzstyle
{
ynode
}
= [inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt]
\node
[anchor=west,rnnnode] (n1) at (0,0)
{$
\mathbi
{
h
}_{
1
}$}
;
\node
[anchor=west] (n2) at ([xshift=2em,yshift=0em]n1.east)
{$
\cdots
$}
;
\node
[anchor=west,rnnnode] (n3) at ([xshift=2em,yshift=0em]n2.east)
{$
\mathbi
{
h
}_{
j
-
1
}$}
;
\node
[anchor=west,rnnnode] (n4) at ([xshift=2em,yshift=0em]n3.east)
{$
\mathbi
{
h
}_{
j
}$}
;
\node
[anchor=south,snode,font=
\footnotesize
] (n5) at ([xshift=0em,yshift=1em]n3.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n6) at ([xshift=0em,yshift=1em]n5.north)
{$
\tilde
{{
y
}}_{
j
-
1
}$}
;
\node
[anchor=south,snode,font=
\footnotesize
] (n7) at ([xshift=0em,yshift=1em]n4.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n8) at ([xshift=0em,yshift=1em]n7.north)
{$
\tilde
{{
y
}}_{
j
}$}
;
\node
[anchor=north] (n11) at ([xshift=0em,yshift=-1em]n3.south)
{${{
y
}}_{
j
-
2
}$}
;
\node
[anchor=north] (n12) at ([xshift=0em,yshift=-1em]n4.south)
{${{
y
}}_{
j
-
1
}$}
;
\node
[anchor=north] (n9) at ([xshift=0em,yshift=-3em]n4.south)
{
\small
{
(a)训练阶段
}}
;
\node
[anchor=north] (x1) at ([xshift=0em,yshift=-1em]n1.south)
{$
\seq
{
x
}$}
;
\node
[anchor=south,inner sep=2pt] (st1) at (n6.north)
{
\scriptsize
{
\textbf
{
[step
$
j
-
1
$
]
}}}
;
\node
[anchor=south,inner sep=2pt] (st2) at (n8.north)
{
\scriptsize
{
\textbf
{
[step
$
j
$
]
}}}
;
\draw
[->,thick] ([xshift=0em,yshift=0em]x1.north)--([xshift=0em,yshift=0em]n1.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n1.east)--([xshift=0em,yshift=0em]n2.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n2.east)--([xshift=0em,yshift=0em]n3.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.east)--([xshift=0em,yshift=0em]n4.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.east)--([xshift=2em,yshift=0em]n4.east);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.north)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n5.north)--([xshift=0em,yshift=0em]n6.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.north)--([xshift=0em,yshift=0em]n7.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n7.north)--([xshift=0em,yshift=0em]n8.south);
\draw
[->,thick,dotted] ([xshift=-0em,yshift=0em]n11.north)--([xshift=-0em,yshift=0em]n3.south);
\draw
[->,thick,dotted] ([xshift=0em,yshift=0em]n12.north)--([xshift=-0em,yshift=-0em]n4.south);
\node
[anchor=west] (n10) at ([xshift=4em,yshift=0em]n8.east)
{
真实数据
$
\seq
{
y
}$
服从的分布:
}
;
\node
[anchor=north west] (y1) at ([xshift=0em,yshift=-4em]n10.south west)
{${
y
}_{
1
}$}
;
\node
[anchor=west] (y2) at ([xshift=1em,yshift=0em]y1.east)
{${
y
}_{
2
}$}
;
\node
[anchor=west] (y3) at ([xshift=1em,yshift=0em]y2.east)
{${
y
}_{
3
}$}
;
\node
[anchor=west] (y4) at ([xshift=1em,yshift=0em]y3.east)
{$
\ldots
$}
;
\node
[anchor=west] (y5) at ([xshift=1em,yshift=0em]y4.east)
{${
y
}_{
n
}$}
;
%\draw [-,thick] ([xshift=0em,yshift=0.5em]y1.north) cos(9,0.8) sin (10,1.5) cos(11.5,0.7) sin(12.5,0.2) ;
\node
[anchor=south,minimum width=1.2em,minimum height=1.4em,fill=red!50,inner sep=0pt] (label1) at (y1.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=2.8em,fill=red!50,inner sep=0pt] (label2) at (y2.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=1.7em,fill=red!50,inner sep=0pt] (label3) at (y3.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=1.4em,fill=red!50,inner sep=0pt] (label4) at (y5.north)
{}
;
\begin{pgfonlayer}
{
background
}
\node
[rectangle,inner sep=0em,rounded corners=5pt,very thick,dotted,draw=red] [fit = (n11) (n12)] (b1)
{}
;
\node
[rectangle,inner sep=0.5em,rounded corners=5pt,very thick,dotted,draw=red] [fit = (n10) (y1) (y5)] (b2)
{}
;
\draw
[->,dotted,very thick,red] ([yshift=-0em]b1.east) .. controls +(east:2) and +(west:1) .. (b2.west);
\end{pgfonlayer}
\end{scope}
\begin{scope}
[yshift=-2in]
\tikzstyle
{
rnnnode
}
= [draw,inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt,fill=red!20]
\tikzstyle
{
snode
}
= [draw,inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt,fill=blue!20]
\tikzstyle
{
ynode
}
= [inner sep=2pt,minimum width=3em,minimum height=1.5em,rounded corners=1pt]
\node
[anchor=west,rnnnode] (n1) at (0,0)
{$
\mathbi
{
h
}_{
1
}$}
;
\node
[anchor=west] (n2) at ([xshift=2em,yshift=0em]n1.east)
{$
\cdots
$}
;
\node
[anchor=west,rnnnode] (n3) at ([xshift=2em,yshift=0em]n2.east)
{$
\mathbi
{
h
}_{
j
-
1
}$}
;
\node
[anchor=west,rnnnode] (n4) at ([xshift=2em,yshift=0em]n3.east)
{$
\mathbi
{
h
}_{
j
}$}
;
\node
[anchor=south,snode,font=
\footnotesize
] (n5) at ([xshift=0em,yshift=1em]n3.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n6) at ([xshift=0em,yshift=1em]n5.north)
{$
\tilde
{{
y
}}_{
j
-
1
}$}
;
\node
[anchor=south,snode,font=
\footnotesize
] (n7) at ([xshift=0em,yshift=1em]n4.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n8) at ([xshift=0em,yshift=1em]n7.north)
{$
\tilde
{{
y
}}_{
j
}$}
;
\node
[anchor=north] (n9) at ([xshift=0em,yshift=-2em]n4.south)
{
\small
{
(b)解码阶段
}}
;
\node
[anchor=north] (x1) at ([xshift=0em,yshift=-1em]n1.south)
{$
\seq
{
x
}$}
;
\node
[anchor=south,inner sep=2pt] (st1) at (n6.north)
{
\scriptsize
{
\textbf
{
[step
$
j
-
1
$
]
}}}
;
\node
[anchor=south,inner sep=2pt] (st2) at (n8.north)
{
\scriptsize
{
\textbf
{
[step
$
j
$
]
}}}
;
\draw
[->,thick] ([xshift=0em,yshift=0em]x1.north)--([xshift=0em,yshift=0em]n1.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n1.east)--([xshift=0em,yshift=0em]n2.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n2.east)--([xshift=0em,yshift=0em]n3.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.east)--([xshift=0em,yshift=0em]n4.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.east)--([xshift=2em,yshift=0em]n4.east);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.north)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n5.north)--([xshift=0em,yshift=0em]n6.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.north)--([xshift=0em,yshift=0em]n7.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n7.north)--([xshift=0em,yshift=0em]n8.south);
\draw
[->,thick,dotted] ([xshift=-2em,yshift=-1.3em]n3.south) .. controls +(east:1.5em) and +(south:0.2em) .. ([xshift=-0em,yshift=0em]n3.south);
\draw
[->,thick,dotted] ([xshift=0em,yshift=0em]n6.east) .. controls ([xshift=2em,yshift=1em]n6.east) and ([xshift=-2em,yshift=-5em]n4.south west) .. ([xshift=-0em,yshift=-0em]n4.south);
\node
[anchor=west] (n10) at ([xshift=4em,yshift=0em]n8.east)
{
模型输出
$
\tilde
{{
y
}}$
服从的分布:
}
;
\node
[anchor=north west] (y1) at ([xshift=0em,yshift=-4em]n10.south west)
{$
\tilde
{{
y
}}_{
1
}$}
;
\node
[anchor=west] (y2) at ([xshift=1em,yshift=0em]y1.east)
{$
\tilde
{{
y
}}_{
2
}$}
;
\node
[anchor=west] (y3) at ([xshift=1em,yshift=0em]y2.east)
{$
\tilde
{{
y
}}_{
3
}$}
;
\node
[anchor=west] (y4) at ([xshift=1em,yshift=0em]y3.east)
{$
\ldots
$}
;
\node
[anchor=west] (y5) at ([xshift=1em,yshift=0em]y4.east)
{$
\tilde
{{
y
}}_{
n
}$}
;
%\draw [-,thick] ([xshift=0em,yshift=0.5em]y1.north) cos(9,0.8) sin (10,1.5) cos(11.5,0.7) sin(12.5,0.2) ;
\node
[anchor=south,minimum width=1.2em,minimum height=0.7em,fill=ublue!80,inner sep=0pt] (label1) at (y1.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=1.5em,fill=ublue!80,inner sep=0pt] (label2) at (y2.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=2.4em,fill=ublue!80,inner sep=0pt] (label3) at (y3.north)
{}
;
\node
[anchor=south,minimum width=1.2em,minimum height=0.2em,fill=ublue!80,inner sep=0pt] (label4) at (y5.north)
{}
;
\begin{pgfonlayer}
{
background
}
\node
[rectangle,inner sep=0em,rounded corners=5pt,very thick,dotted,draw=ublue] [fit = (n6) (n8)] (b1)
{}
;
\node
[rectangle,inner sep=0.5em,rounded corners=5pt,very thick,dotted,draw=ublue] [fit = (n10) (y1) (y5)] (b2)
{}
;
\draw
[->,dotted,very thick,ublue] ([xshift=-0em,yshift=-0em]b1.east) .. controls +(east:1) and +(west:1) .. (b2.west);
\end{pgfonlayer}
\end{scope}
\end{tikzpicture}
Chapter13/Figures/figure-framework-of-Adversarial-Neural-machine-translation.jpg
0 → 100644
查看文件 @
4f88c767
113 KB
Chapter13/Figures/figure-framework-of-Adversarial-Neural-machine-translation.tex
0 → 100644
查看文件 @
4f88c767
%------------------------------------------------------------
\begin{tikzpicture}
\tikzstyle
{
rnnnode
}
= [draw,inner sep=2pt,minimum width=4em,minimum height=2em,rounded corners=1pt,fill=yellow!20]
\tikzstyle
{
snode
}
= [draw,inner sep=2pt,minimum width=4em,minimum height=2em,rounded corners=1pt,fill=red!20]
\tikzstyle
{
wode
}
= [inner sep=0pt,minimum width=4em,minimum height=2em,rounded corners=0pt]
\node
[anchor=west,wode] (n1) at (0,0)
{${
y
}_
1
,
{
y
}_
2
,
\ldots
,
{
y
}_
n
$}
;
\node
[anchor=north west,wode] (n2) at ([xshift=1em,yshift=0.5em]n1.south east)
{${
x
}_
1
,
{
x
}_
2
,
\ldots
,
{
x
}_
m
$}
;
\node
[anchor=south west,rnnnode] (n3) at ([xshift=8em,yshift=0.5em]n2.north east)
{
生成模型G
}
;
\node
[anchor=south east,wode] (n4) at ([xshift=-2em,yshift=0em]n3.north west)
{$
\tilde
{{
y
}}_{
1
}
,
\tilde
{{
y
}}_{
2
}
,...,
\tilde
{{
y
}}_{
J
}$}
;
\node
[anchor=south,snode] (n5) at ([xshift=0em,yshift=6em]n2.north)
{
判别网络D
}
;
\node
[anchor=west,align=left,font=
\small
] (n6) at ([xshift=15em,yshift=-3em]n5.east)
{
根据
$
(
\seq
{
x
}
,
\seq
{
\tilde
{
y
}}
)
$
生
\\
成奖励信号
}
;
\draw
[->,thick] ([xshift=0em,yshift=0em]n1.north)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n2.north)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.west)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.north)--([xshift=0em,yshift=1em]n3.north)--([xshift=0em,yshift=0em]n4.east);
\draw
[->,thick] ([xshift=0em,yshift=0em]n5.east) -- ([xshift=14.5em,yshift=0em]n5.east) -- ([xshift=1em,yshift=0em]n3.east) -- ([xshift=0em,yshift=0em]n3.east);
\draw
[->,thick] ([xshift=0em,yshift=0em]n2.east) -- ([xshift=0em,yshift=-1.5em]n3.south) -- ([xshift=0em,yshift=0em]n3.south);
\begin{pgfonlayer}
{
background
}
%\node [rectangle,inner sep=0.5em,rounded corners=5pt,very thick,dotted,draw=yellow] [fit = (n3) (n4)] (b1) {};
%\node [rectangle,inner sep=0.5em,rounded corners=5pt,very thick,dotted,draw=red] [fit = (n5)] (b2) {};
\end{pgfonlayer}
%\draw [->,thick] ([xshift=0em,yshift=0em]n3.south) .. controls +(south:1em) and +(north:1em) .. ([xshift=0em,yshift=0em]n5.north);
\end{tikzpicture}
Chapter13/Figures/figure-of-scheduling-sampling-method.tex
0 → 100644
查看文件 @
4f88c767
%------------------------------------------------------------
\begin{tikzpicture}
\tikzstyle
{
rnnnode
}
= [draw,inner sep=2pt,minimum width=4em,minimum height=2em,rounded corners=1pt,fill=red!20]
\tikzstyle
{
snode
}
= [draw,inner sep=2pt,minimum width=4em,minimum height=2em,rounded corners=1pt,fill=blue!20]
\tikzstyle
{
ynode
}
= [inner sep=2pt,minimum width=4em,minimum height=2em,rounded corners=1pt]
\node
[anchor=west,rnnnode] (n1) at (0,0)
{$
\mathbi
{
h
}_{
1
}$}
;
\node
[anchor=west] (n2) at ([xshift=3em,yshift=0em]n1.east)
{$
\cdots
$}
;
\node
[anchor=west,rnnnode] (n3) at ([xshift=3em,yshift=0em]n2.east)
{$
\mathbi
{
h
}_{
j
-
1
}$}
;
\node
[anchor=west,rnnnode] (n4) at ([xshift=3em,yshift=0em]n3.east)
{$
\mathbi
{
h
}_{
j
}$}
;
\node
[anchor=south,snode] (n5) at ([xshift=0em,yshift=1em]n3.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n6) at ([xshift=0em,yshift=1em]n5.north)
{$
\tilde
{{
y
}}_{
j
-
1
}$}
;
\node
[anchor=south,snode] (n7) at ([xshift=0em,yshift=1em]n4.north)
{
Softmax
}
;
\node
[anchor=south,ynode] (n8) at ([xshift=0em,yshift=1em]n7.north)
{$
\tilde
{{
y
}}_{
j
}$}
;
\node
[anchor=north] (x1) at ([xshift=0em,yshift=-1em]n1.south)
{$
\seq
{
x
}$}
;
\node
[anchor=north,font=
\small
,align=left] (x2) at ([xshift=-4em,yshift=-1.7em]n3.south)
{
采样出
\\
的
$
\tilde
{{
y
}}_{
j
-
2
}$}
;
\node
[anchor=north,font=
\small
,align=left] (x3) at ([xshift=2em,yshift=-2.5em]n3.south)
{
真实答
\\
案
${
y
}_{
j
-
2
}$}
;
\node
[anchor=north,font=
\small
,align=left] (x4) at ([xshift=2em,yshift=-2.5em]n4.south)
{
真实答
\\
案
${
y
}_{
j
-
1
}$}
;
\node
[anchor=south,inner sep=2pt] (st1) at (n6.north)
{
\scriptsize
{
\textbf
{
[step
$
j
-
1
$
]
}}}
;
\node
[anchor=south,inner sep=2pt] (st2) at (n8.north)
{
\scriptsize
{
\textbf
{
[step
$
j
$
]
}}}
;
\node
[anchor=north,font=
\scriptsize
] (e1) at ([xshift=-3em,yshift=-0em]n3.south)
{$
\funp
{
P
}
=
{
(
1
-
\epsilon
_
i
)
}^
2
$}
;
\node
[anchor=north,font=
\scriptsize
] (e2) at ([xshift=2em,yshift=-0.1em]n3.south)
{$
\funp
{
P
}
=
\epsilon
_
i
$}
;
\node
[anchor=north,font=
\scriptsize
] (e3) at ([xshift=-2em,yshift=-1em]n4.south)
{$
\funp
{
P
}
=
{
(
1
-
\epsilon
_
i
)
}^
2
$}
;
\node
[anchor=north,font=
\scriptsize
] (e4) at ([xshift=2em,yshift=-0.1em]n4.south)
{$
\funp
{
P
}
=
\epsilon
_
i
$}
;
\node
[anchor=south east,font=
\small
] (l1) at ([xshift=-1em,yshift=0.5em]n5.north west)
{
Loss
}
;
\node
[anchor=south west,font=
\small
] (l2) at ([xshift=1em,yshift=0.5em]n7.north east)
{
Loss
}
;
\draw
[->,thick] ([xshift=0em,yshift=0em]x1.north)--([xshift=0em,yshift=0em]n1.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n1.east)--([xshift=0em,yshift=0em]n2.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n2.east)--([xshift=0em,yshift=0em]n3.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.east)--([xshift=0em,yshift=0em]n4.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.east)--([xshift=3em,yshift=0em]n4.east);
\draw
[->,thick] ([xshift=0em,yshift=0em]n3.north)--([xshift=0em,yshift=0em]n5.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n5.north)--([xshift=0em,yshift=0em]n6.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n4.north)--([xshift=0em,yshift=0em]n7.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]n7.north)--([xshift=0em,yshift=0em]n8.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]l1.south) .. controls +(south:1em) and +(west:0.1em) .. ([xshift=0em,yshift=0em]n5.west);
\draw
[->,thick] ([xshift=0em,yshift=0em]l2.south) .. controls +(south:1em) and +(east:0.1em) .. ([xshift=0em,yshift=0em]n7.east);
\draw
[->,thick,dotted] ([xshift=0em,yshift=-0.5em]x2.north east) .. controls +(east:1.5em) and +(south:0.2em) .. ([xshift=-0.5em,yshift=0em]n3.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]x3.north) .. controls +(north:1em) and +(south:2em) .. ([xshift=0em,yshift=0em]n3.south);
\draw
[->,thick,dotted] ([xshift=0em,yshift=0em]n6.east) .. controls ([xshift=2em,yshift=1em]n6.east) and ([xshift=-2em,yshift=-5em]n4.south west) .. ([xshift=-0.5em,yshift=-0em]n4.south);
\draw
[->,thick] ([xshift=0em,yshift=0em]x4.north) .. controls +(north:1em) and +(south:2em) .. ([xshift=0em,yshift=0em]n4.south);
\end{tikzpicture}
Chapter13/Figures/figure-reinforcement-learning-method-based-on-actor-critic.tex
0 → 100644
查看文件 @
4f88c767
\begin{tikzpicture}
\node
[anchor=west,inner sep=0mm,minimum height=4em,minimum width=5.5em,rounded corners=15pt,align=left,draw]
(n1) at (0,0)
{
Decoder
\\
Encoder
}
;
\node
[anchor=west,inner sep=0mm,minimum height=4em,minimum width=5.5em,rounded corners=15pt,align=left,draw]
(n2) at ([xshift=10em,yshift=0em]n1.east)
{
Decoder
\\
Encoder
}
;
\node
[anchor=south,inner sep=0mm,font=\small]
(a1) at ([xshift=0em,yshift=1em]n1.north)
{
演员
$
p
_{
\theta
}$}
;
\node
[anchor=north,inner sep=0mm]
(a2) at ([xshift=0em,yshift=-1em]n1.south)
{${
x
}_
1
,
{
x
}_
2
,
\ldots
,
{
x
}_
m
$}
;
\node
[anchor=south,inner sep=0mm,font=\small]
(c1) at ([xshift=0em,yshift=1em]n2.north)
{
评论家
$
Q
$}
;
\node
[anchor=north,inner sep=0mm]
(c2) at ([xshift=0em,yshift=-1em]n2.south)
{${
y
}_
1
,
{
y
}_
2
,
\ldots
,
{
y
}_
J
$}
;
% \node[anchor=west,inner sep=0mm] (n3) at ([xshift=2.1em,yshift=2em]n1.east) {$Q_1,Q_2,\ldots,Q_J$};
% \node[anchor=west,inner sep=0mm] (n4) at ([xshift=2.9em,yshift=-0.4em]n1.east) {$\hat{\mathbi{y}}_1,\hat{\mathbi{y}}_2,\ldots,\hat{\mathbi{y}}_J$};
% \node[anchor=west,inner sep=0mm,font=\small] (n5) at ([xshift=3em,yshift=-3em]n1.east) {演员状态};
\draw
[-,thick] ([xshift=0em,yshift=0em]n1.west) -- ([xshift=0em,yshift=0em]n1.east);
\draw
[-,thick] ([xshift=0em,yshift=0em]n2.west) -- ([xshift=0em,yshift=0em]n2.east);
%\draw [->,thick] ([xshift=0em,yshift=1em]n2.west) -- ([xshift=0em,yshift=1em]n1.east);
%\draw [->,thick] ([xshift=0em,yshift=0.5em]n1.east) -- ([xshift=0em,yshift=0.5em]n2.west);
%\draw [->,dotted,very thick] ([xshift=0em,yshift=0em]n1.east) .. controls ([xshift=3em,yshift=-1em]n1.-90) and ([xshift=-3em,yshift=-1em]n2.-90) .. (n2.west);
\node
[anchor=west,inner sep=0mm]
(n3) at ([xshift=2.1em,yshift=1em]n1.east)
{$
Q
_
1
,Q
_
2
,
\ldots
,Q
_
J
$}
;
\node
[anchor=west,inner sep=0mm]
(n4) at ([xshift=2.9em,yshift=-1em]n1.east)
{$
\tilde
{{
y
}}_
1
,
\tilde
{{
y
}}_
2
,
\ldots
,
\tilde
{{
y
}}_
J
$}
;
\draw
[->,thick] ([xshift=0em,yshift=0.2em]n2.west) -- ([xshift=0em,yshift=0.2em]n1.east);
\draw
[->,thick] ([xshift=0em,yshift=-0.2em]n1.east) -- ([xshift=0em,yshift=-0.2em]n2.west);
\end{tikzpicture}
\ No newline at end of file
Chapter13/Figures/figure-word-root.tex
查看文件 @
4f88c767
...
...
@@ -11,8 +11,8 @@
\node
[anchor = north]
(new
_
root) at ([yshift = -1.5em]newer.south)
{
new
}
;
\draw
[->] ([yshift=0.2em]do
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(do.south);
\draw
[->] (do
_
root.north) -- (does.south);
\draw
[->] ([yshift=0.2em]do
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(
[yshift=0.1em]
doing.south);
\draw
[->] ([yshift=0.2em]do
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(doing.south);
\draw
[->] ([yshift=0.2em]new
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(new.south);
\draw
[->] (new
_
root.north) -- (newer.south);
\draw
[->] ([yshift=0.2em]new
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(
[yshift=0.08em]
newest.south);
\draw
[->] ([yshift=0.2em]new
_
root.north) .. controls +(north:0.4) and +(south:0.6) ..(newest.south);
\end{tikzpicture}
\ No newline at end of file
Chapter13/chapter13.tex
查看文件 @
4f88c767
差异被折叠。
点击展开。
Chapter16/chapter16.tex
查看文件 @
4f88c767
差异被折叠。
点击展开。
ChapterPreface/chapterpreface.tex
查看文件 @
4f88c767
...
...
@@ -32,7 +32,7 @@
与所有从事机器翻译研究的人一样,笔者也梦想着有朝一日机器翻译能够完全实现。这个想法可以追溯到1980年,姚天顺教授和王宝库教授创立了东北大学自然语言处理实验室,把机器翻译作为毕生为之奋斗的目标。这也影响了包括笔者在内的许多人。虽然,那时的机器翻译技术并不先进,研究条件也异常艰苦,但是实现机器翻译的梦想从未改变。
步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个时代,同时也加入到机器翻译研究的浪潮中
,从2007年开始研发NiuTrans开源系统,到2012年正式进行机器翻译产业化,并创立小牛翻译,笔者目睹了机器翻译的成长,并且
不断地被机器翻译取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。
步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个时代,同时也加入到机器翻译研究的浪潮中
。笔者从2007年开始研发NiuTrans开源系统,在2012年对NiuTrans机器翻译系统进行产业化,并创立了小牛翻译。在此过程中,笔者目睹了机器翻译的成长,并
不断地被机器翻译取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。
但是机器翻译领域进展之快是无法预见的。2016年之后,随着深度学习方法在机器翻译中的进一步应用,机器翻译迎来了前所未有的大好机遇。新的技术方法层出不穷,机器翻译系统也得到了广泛应用。这时,笔者心里又涌现出将机器翻译的技术内容编撰成书的想法。这种强烈的念头使得笔者完成了本书的第一个版本(包含七章),并开源供人广泛阅读。承蒙同行们厚爱,得到了很多反馈,包括一些批评意见。这些使得笔者可以更加全面地梳理思路。
...
...
@@ -48,7 +48,7 @@
本书全面回顾了近三十年内机器翻译的技术发展历程,并围绕
{
\sffamily\bfseries
机器翻译的建模和深度学习方法
}
这两个主题对机器翻译的技术方法进行了全面介绍。在写作中,笔者力求用朴实的语言和简洁的实例阐述机器翻译的基本模型,同时对相关的技术前沿进行讨论。其中也会涉及大量的实践经验,包括许多机器翻译系统开发的细节。从这个角度来说,本书不单单是一本理论书籍,它还结合了机器翻译的应用,给读者提供了很多机器翻译技术落地的具体思路。
本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章
的主题都十分明确,内容也相对集中
。因此,读者也可将每章作为某一专题的学习资料。
本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章
主题明确,内容紧凑
。因此,读者也可将每章作为某一专题的学习资料。
{
\sffamily\bfseries
用最简单的方式阐述机器翻译的基本思想
}
是笔者所期望达到的目标。但是,书中不可避免会使用一些形式化定义和算法的抽象描述,因此,笔者尽所能通过图例进行解释(本书共XXX张插图)。不过,本书所包含的内容较为广泛,难免会有疏漏,望读者海涵,并指出不当之处。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论