Sistemas de recomendação do zero, chatbots e muito mais
Depois de mergulhar no abismo dos dados textuais, em outubro deste ano treinamos os modelos ruGPT-3 - modelos para o idioma russo baseados na arquitetura da OpenAI. Mas do que esses modelos são capazes? Neste artigo, coletaremos os primeiros exemplos de aplicação do modelo - e tentaremos novos.
Apresentamos os primeiros resultados do maior modelo treinado, ruGPT-3 Large, desenvolvido em colaboração com as equipes SberDevices , Sber.AI e SberCloud . Vamos explorar os limites de sua aplicação com você.

No AI Journey deste ano, preparamos um concurso de aplicativos ruGPT-3 - qualquer solução usando um modelo, avaliada em três escalas - inovação, envolvimento emocional e aplicabilidade de negócios - pode ser submetida à pista.
Spoiler:
1 milhão de rublos para o primeiro lugar
Como treinar o modelo para uma nova tarefa?
Os modelos e o código deles estão no repositório sberbank-ai : você pode usar a biblioteca de transformadores ou Megatron-LM.
Neste artigo, forneço exemplos de uso de interface / transformadores - o código dos casos é fornecido aqui:
- Ajustando Modelos de Laptop Colab
- Apenas gerando um laptop Colab
Cartões de modelo na biblioteca de transformadores: Grande Médio Pequeno
Quando você executa o script de geração, é mais fácil executar Executar todos - e então esperar um pouco enquanto o modelo é carregado.

O roteiro da última célula pedirá que você digite o início do texto - minha semente favorita: “Cientistas brasileiros descobriram uma espécie rara de unicórnio-anão que vive no oeste da Jutlândia”. Obtemos : Apenas o ruGPT-3 Small cabe no laptop Colab, então é melhor usar cartões com mais de 14 Gb de memória.
ruGPT-3 Small: , . Agence France-Presse. , Pygmaliona (. Pygmaliona pygmalioni), . 30 , — 1 . . , .
A propósito, durante a competição, damos aos participantes da pista acesso às instalações do Christofari!
Para os participantes da trilha ruGPT-3, alocamos 100 contas - em cada conta 1 GPU Tesla V100-SXM3 32 Gb de graça durante a competição.
Como faço para obter uma conta?
1) Registre-se para a trilha ruGPT-3 (AI 4 Humanities) ods.ai/tracks/aij2020
2) Escreva uma pequena carta com o nome de sua equipe e a tarefa para AIJ_ruGPT-3@sberbank.ru

Few-Shot vs Fine Tuning
No caso de modelos generativos grandes, como arquiteturas do tipo GPT, há várias maneiras de "lidar" com eles.
- : «» — . (GPT-3 ), . ( « → ») .
- : , « » (. «prompt engineering» — , , .
?
Pode ser muito caro retreinar modelos grandes, então essa forma de "comunicação" com eles permite que você evite até isso. A essência da programação de sementes é selecionar esses exemplos preparados e inícios para geração, de modo que, posteriormente, o modelo produza exatamente o que é necessário.
Escolhendo a "semente" e os hiperparâmetros do gerador (temperatura, top_n, top_k), você pode obter respostas bastante toleráveis devido apenas ao treinamento preliminar do modelo.

Um exemplo de semente com 1 exemplo e uma descrição do problema.
Testaremos os dois métodos na prática - tentaremos resolver problemas populares do zero e outros específicos - com treinamento adicional.
Sistemas de recomendação
Vamos fazer um sistema de recomendação sem treinamento: enviaremos informações sobre as preferências do usuário em forma de texto para o ruGPT-3 Large, e veremos como o modelo continua. Podemos gerar muitas opções de uma vez para obter mais recomendações.
Recomendações de filmes: nada mal! Pelo menos os filmes parecem ser gerados de acordo com a semente. Como não sou conhecedor do cinema soviético, nem conhecia o filme "Três mais dois", mas é. Para a geração, usamos os seguintes hacks - fornecemos especialmente o texto com aspas abertas para forçar o modelo a gerar nomes próprios, e também cortamos todos os desnecessários após a primeira frase. Recomendações de música:
: — “”, “”, “
ruGPT-3 Large: — “”, “”, “ ”, “ ”, “ ”.
ruGPT-3 Large: — “”, “”, “ ”, “”, “” (, , , ).
ruGPT-3 Large: — “”, “”, “” .”
: : “ ”, “
ruGPT-3 Large: : “ ”, “ ” “ ”.
ruGPT-3 Large: : “ ”, “ ”.
ruGPT-3 Large: : “ ”, “ ”, “ ” .
: “ , “ ”, “ #( , )
ruGPT-3 Large: , “ ”, “” “”.
ruGPT-3 Large: , “ ”, “” “ ”.
ruGPT-3 Large: , “ ”, “”, “ ”, “ ”, “” “”.
Os resultados são diferentes o tempo todo - você pode gerar potencialmente N variantes, extrair todos os nomes de grupos e coletar o Contador dos mais populares - voila, um sistema de recomendação do zero.
Gerando comentários
Vamos fazer uma tarefa mais difícil - vamos fazer o modelo imitar uma pessoa em discussões ou lojas: Como você pode ver, para tópicos muito difundidos na Internet, o modelo pode gerar textos coerentes sem treinamento. Mas onde ainda não há caminho sem treinamento adicional? Existem 3 desses casos:
: “ .
- ”
ruGPT-3 Large: “ .
- . , .”
: “ .
”
ruGPT-3 Large: “ .
.
, .
, , . , , .”
: .
"1+1"
ruGPT-3 Large: .
"1+1" — , . . . . " ", .
- formato de dados complexo - se, durante a geração sem treinamento, você perde qualidade devido à geração no formato errado - problema de NER, geração de código, cálculos simbólicos, etc .;
- , — QA , , , ;
- , , , — , .
StackOverflow
Vamos aumentar o nível de complexidade: baixe o russo [estouro de pilha] (https://ru.stackoverflow.com/) e tente fazer um sistema de perguntas e respostas. Seremos capazes de aprender imediatamente o estilo de respostas e conhecimento e várias linguagens de programação? Não é fácil conseguir um bom resultado em um problema de taoki na hora, mas podemos nos divertir - em 5 épocas, a modelo aprendeu a reproduzir o estilo, ficando muito confusa no conteúdo. Mas aprendi bem os links para a documentação - um resultado bastante bom para 5 épocas de aprendizado.
Formato de treinamento: enviamos os textos de perguntas e melhores respostas no formato Q: ”blabla” A: ”blabla”. (na verdade não existe tal biblioteca, o modelo gerou um link para a documentação)
Q: python?
A: : push.log("Shalom").
- , .
set.log()**)
rGet = puts.random(extents) log.findIndex(puts.current) void join($window, command='unsetMainServer onManager') }
,
Q: python?
A: import pycode as pyc;
// ( href=https://docs.python.org/3/library/pycode.html )
Para tais tarefas, você pode inserir argumentos adicionais - por exemplo, o nome da seção / assunto / linguagem de programação sobre a qual deseja responder e treinar o modelo nos dados da forma {"parâmetro": "valor", "pergunta": "texto_questão", "resposta": "Answer_text"}.
Em termos de código e texto, temos um arquivo imediatamente - talvez alguém faça melhor dentro da faixa? Já existem implementações bastante bem-sucedidas no modelo da língua inglesa com o código: escrever o código html dos elementos da página da web, gerando modelos Figma.
Tentando outros idiomas! Twitter e mais
A principal língua de ensino do modelo é o russo, mas é possível aplicar o modelo em tarefas multilíngues? Algumas outras línguas sempre caem no exemplo de treinamento da web, então há esperança. A abordagem direta com as sementes mostra que o modelo sabe um pouco sobre o modelo inglês: Bem, quase: às vezes não funciona: Por que não praticar com dados puramente em inglês: peguei o conjunto de dados de classificação de texto do Twitter da competição Kaggle. Após 5 épocas em 5 mil primeiros comentários (20 minutos em Colab ), temos uma geração bastante tolerável de comentários muito tóxicos em inglês:
ruGPT-3 Large:
—> cat
—> dog
—> pear
—> coder
—> cat
—> dog
—> pear
—> Python
—> cat
—> dog
—> pear
—> bunch #
—> dog
—> cat
—> dog

Context >>> Is it
ruGPT-3 Small: Is it's the case that #Microsoft is using #SAP to manage #Microsoft’s business?
Context >>> It is
ruGPT-3 Small: It is the only one that I've been trying to do. Siri is on the verge of death, and I'm not aware of why she has to be on the verge.
Context >>> Why
ruGPT-3 Small: Why do I go here? I'm wondering if I can use the #Microsoft Windows 8 Pro for the #WindowsPhone phone? Thanks!
Sistemas de diálogo
Já, sem pré-treinamento, aplicar o modelo a sistemas de diálogo funciona muito bem: o modelo pode executar a função chit-chat (falar sobre nada), conversando livremente sobre vários tópicos. Com treinamento adicional em cenários e domínios específicos, você pode implementar aplicativos de negócios.
O exemplo abaixo é um exemplo de um diálogo sem treinamento, em um tópico estreitamente focado - um suporte de provedor de Internet.
Semeando: primeiras 2 linhas - geração seguinte. É claro que, sem o pré-treinamento, o modelo não tem uma ideia clara dos roteiros e roteiros dos especialistas de suporte, porém, mesmo essa inicialização a frio já mostra a forma padrão de “descobrir o que aconteceu - pendurar - redirecionar a chamada”. Você pode se lembrar dos clássicos:
User1: , ! ?
User2: .
User1: ?
User2: 500
User1: ?
User2: . .. .
User1: ?
User2: . , - ...
User1: , , , , ?
User2:
User1: , . , .
User2: , . .
User1: . , , .
User2: , , ?
User1: ?
User2: . .
User1: ?
User2:
User1: . .
User1: , . - .
User2: , .
User1:
User2:
User1: «», 656, , .
User2: , 766—1669, : , , , , , , ?
User1: 1 . , , .
User2: , , , - ?
User1: , 1 . , - , , , . .
User2: , , , , - .
User1: .
User2: , ?
User1: , , .
User2: , , .
Em geral, "você tem que ser paciente". A modelo até lembrou que o nome do Usuário1 é Dmitry, e o Usuário2 se despediu dele de acordo.
Em vez de uma conclusão
Para continuar a desenvolver a direção de modelos generativos e melhorar as arquiteturas em problemas de PNL, é sempre necessário entender os limites de aplicabilidade de uma determinada tecnologia - e sua relevância.
Agora, com cada versão de arquiteturas semelhantes - Reformer, Longformer, BigBird, etc. - olhamos para grandes modelos pré-treinados de uma forma ligeiramente nova, apresentando novos desafios para eles.
Além dos casos acima mencionados, o ruGPT-3 pode ser definitivamente aplicado e benéfico em práticas como:
- aumento de dados de texto para tarefas de ML
- modelos de diálogo para automação
- tarefas de soma gerativa
- reescrita, geração de notícias, notas esportivas com base em informações estruturadas.
Esperamos que as demos e modelos beneficiem a comunidade - e sejam divertidos!
E, claro, estamos aguardando suas decisões sobre a faixa ruGPT-3 até o final de 22 de novembro!