O problema de tradução entre idiomas é um exemplo clássico do tipo Muitos-para-Muitos não sincronizado (Many-to-Many).
A entrada é uma sequência de palavras (ou tokens) em francês:
["Voulez", "vous", "étudier", "avec", "moi", "?"]→ 6 elementosA saída é uma sequência de palavras em português:
["Você", "quer", "estudar", "comigo", "?"]→ 5 elementosEsse problema não se encaixa no Muitos-para-Muitos sincronizado, pois as saídas não são geradas em correspondência direta e imediata com cada entrada. A palavra "Voulez-vous" (2 tokens em francês) corresponde a "Você quer" (2 tokens em português), mas a ordem e o número de palavras podem variar entre os idiomas — como vemos no par acima, onde 6 tokens na entrada resultam em 5 tokens na saída.
A arquitetura usada para esse tipo de problema é o chamado Encoder-Decoder: a rede primeiro lê toda a sequência de entrada acumulando o contexto em um vetor de estado (fase de Encoding — que é um Muitos-para-Um), e só então gera a sequência de saída token a token a partir desse contexto (fase de Decoding — que é um Um-para-Muitos). O resultado é uma estrutura Muitos-para-Muitos, mas com a produção da saída desacoplada temporalmente da entrada.