%------------------------------------------------------ \begin{tikzpicture} \setlength{\base}{0.9cm} \tikzstyle{rnnnode} = [rounded corners=1pt,minimum height=0.5\base,minimum width=1\base,draw,inner sep=0pt,outer sep=0pt] \tikzstyle{wordnode} = [font=\tiny] % RNN translation model \begin{scope}[local bounding box=RNNMT] % RNN Encoder \coordinate (eemb0) at (0,0); \foreach \x [count=\y from 0] in {1,2,...,3} \node[rnnnode,minimum height=0.5\base,fill=green!30!white,anchor=west] (eemb\x) at ([xshift=0.4\base]eemb\y.east) {\tiny{$e_x()$}}; \foreach \x in {1,2,...,3} \node[rnnnode,fill=blue!30!white,anchor=south] (enc\x) at ([yshift=0.3\base]eemb\x.north) {}; \node[] (enclabel1) at (enc1) {\tiny{$\vectorn{\emph{h}}_{m-2}$}}; \node[] (enclabel2) at (enc2) {\tiny{$\vectorn{\emph{h}}_{m-1}$}}; \node[rnnnode,fill=purple!30!white] (enclabel3) at (enc3) {\tiny{$\vectorn{\emph{h}}_{m}$}}; \node[wordnode,left=0.4\base of enc1] (init1) {$\cdots$}; \node[wordnode,left=0.4\base of eemb1] (init2) {$\cdots$}; \node[wordnode,below=0pt of eemb1] () {走}; \node[wordnode,below=0pt of eemb2] () {吗}; \node[wordnode,below=0pt of eemb3] () {$\langle$eos$\rangle$}; % RNN Decoder \foreach \x in {1,2,...,3} \node[rnnnode,minimum height=0.5\base,fill=green!30!white,anchor=south] (demb\x) at ([yshift=\base]enc\x.north) {\tiny{$e_y()$}}; \foreach \x in {1,2,...,3} \node[rnnnode,fill=blue!30!white,anchor=south] (dec\x) at ([yshift=0.3\base]demb\x.north) {{\tiny{$\vectorn{\emph{s}}_\x$}}}; \foreach \x in {1,2,...,3} \node[rnnnode,minimum height=0.5\base,fill=red!30!white,anchor=south] (softmax\x) at ([yshift=0.3\base]dec\x.north) {\tiny{Softmax}}; \node[wordnode,right=0.4\base of demb3] (end1) {$\cdots$}; \node[wordnode,right=0.4\base of dec3] (end2) {$\cdots$}; \node[wordnode,right=0.4\base of softmax3] (end3) {$\cdots$}; % Decoder input words \node[wordnode,below=0pt of demb1] (decwordin) {$\langle$sos$\rangle$}; \ExtractX{$(demb2.south)$} \ExtractY{$(decwordin.base)$} \node[wordnode,anchor=base] () at (\XCoord,\YCoord) {Do}; \ExtractX{$(demb3.south)$} \ExtractY{$(decwordin.base)$} \node[wordnode,anchor=base] () at (\XCoord,\YCoord) {you}; % Decoder output words \node[wordnode,above=0pt of softmax1] (decwordout) {Do}; \ExtractX{$(softmax2.north)$} \ExtractY{$(decwordout.base)$} \node[wordnode,anchor=base] () at (\XCoord,\YCoord) {you}; \ExtractX{$(softmax3.north)$} \ExtractY{$(decwordout.base)$} \node[wordnode,anchor=base] () at (\XCoord,\YCoord) {know}; % Connections \draw[-latex'] (init1.east) to (enc1.west); \draw[-latex'] (dec3.east) to (end2.west); \foreach \x in {1,2,...,3} \draw[-latex'] (eemb\x) to (enc\x); \foreach \x in {1,2,...,3} \draw[-latex'] (demb\x) to (dec\x); \foreach \x in {1,2,...,3} \draw[-latex'] (dec\x.north) to (softmax\x.south); \foreach \x [count=\y from 2] in {1,2} { \draw[-latex'] (enc\x.east) to (enc\y.west); \draw[-latex'] (dec\x.east) to (dec\y.west); } \coordinate (bridge) at ([yshift=0.4\base]enc2.north west); \draw[-latex'] (enc3.north) .. controls +(north:0.3\base) and +(east:\base) .. (bridge) .. controls +(west:2.7\base) and +(west:0.3\base) .. (dec1.west); \end{scope} \begin{scope} \coordinate (start) at (5.8\base,0.3\base); { \node [anchor=south west] (one) at (start) {\scriptsize{$\begin{bmatrix} 0 \\ 0 \\ 0 \\ \vdots \\ 0 \\ {\color{ugreen} 1} \\ 0 \\ 0 \end{bmatrix}$}}; \node [anchor=south west,inner sep=0pt] (T) at ([yshift=-0.5em,xshift=-0.5em]one.north east) {\tiny{T}}; } { \node [draw=ugreen,fill=green!20!white,rounded corners=0.3em,minimum width=3.8cm,minimum height=0.9em,anchor=south west] (emb) at ([shift={(1.25cm,0.8cm)}]start) {}; } \node [anchor=north] (w) at ([yshift=3pt]one.south) {\scriptsize{\color{ugreen} you}}; \node [anchor=north west] (words) at ([xshift=10pt]one.north east) {\scriptsize{$\begin{matrix} \langle\textrm{eos}\rangle \\ \langle\textrm{sos}\rangle \\ \textrm{Do} \\ \vdots \\ \textrm{know} \\ \textrm{you} \\ \textrm{?} \\ \textrm{have} \end{matrix}$}}; \node [anchor=north west] (mat) at ([xshift=-6pt]words.north east) {\scriptsize{$ \begin{bmatrix} .1 & -4 & \cdots & 2 \\ 5 & 2 & \cdots & .2 \\ 2 & .1 & \cdots & .3 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & .8 & \cdots & 4 \\ -1 & -2 & \cdots & -3 \\ .7 & .5 & \cdots & 3 \\ -2 & .3 & \cdots & .1 \end{bmatrix} $}}; \draw [decorate,decoration={brace,mirror}] ([shift={(6pt,2pt)}]mat.south west) to node [auto,swap,font=\scriptsize] {词嵌入矩阵} ([shift={(-6pt,2pt)}]mat.south east); { \draw [-latex'] ([xshift=-2pt,yshift=-0.65cm]one.east) to ([yshift=-0.65cm]words.west); } { \draw [-latex'] (emb.east) -| ([yshift=0.4cm]mat.north east) node [pos=1,above] {\scriptsize{RNN输入}}; } \draw [-latex'] ([yshift=-0.4cm]w.south) to ([yshift=2pt]w.south); \node [anchor=north] (wlabel) at ([yshift=-0.6em]w.south) {\scriptsize{输入的单词}}; \node [draw=ugreen,densely dashed,thick,rounded corners=3pt,fit=(one) (words) (mat) (w)] (input) {}; \end{scope} \draw [->,thick,densely dashed,ugreen] ([yshift=-0.2em]demb3.east) to [out=0,in=180] ([yshift=-1cm]input.west); \end{tikzpicture}