
Agora, na imprensa, há muitas notícias como "A IA aprendeu a escrever no estilo do autor X" ou "ML cria arte". Olhando para isso, decidimos - seria ótimo se essas declarações de alto perfil pudessem ser verificadas na prática.
É possível organizar uma briga entre bots para escrever poemas? Uma história competitiva pode ser esclarecida e reproduzível a partir disso? Agora podemos dizer com certeza que isso é possível. E como escrever seu primeiro algoritmo para gerar poemas, continue lendo.
1. IA clássica
A tarefa dos participantes
De acordo com os termos da competição, os participantes precisam criar um modelo que gere poemas sobre um determinado tópico no estilo de um dos clássicos russos. O sujeito e o autor são apresentados com modelos de entrada, e um poema é esperado na saída. A descrição completa está no
repositório do concurso.
As condições são suaves com o tópico: pode ser uma frase curta, frase ou poucas palavras. A única restrição está no tamanho: não mais que 1000 caracteres. Os tópicos sobre os quais os algoritmos serão testados serão compilados por especialistas. Alguns tópicos serão abertos e públicos, mas um conjunto oculto de tópicos será usado para determinar o melhor algoritmo.
A idéia global da competição é a seguinte: uma breve anotação de várias palavras pode ser compilada para qualquer poema. Vamos mostrar um exemplo.
Se você tirar um trecho de
"Eugene Onegin" A.S. Pushkin :
"... Naquele ano, o clima de outono
Fiquei muito tempo no quintal
O inverno estava esperando, a natureza estava esperando.
A neve caiu apenas em janeiro
Na terceira noite. Acordando cedo
Tatyana viu pela janela
De manhã, o quintal branqueado
Cortinas, telhados e cercas,
Padrões de luz no vidro
Árvores em prata de inverno
Quarenta diversão no quintal
E montanhas suavemente espalhadas
Invernos com um tapete brilhante.
Tudo é brilhante, tudo é branco por toda parte ... "1823-1830
Esse é um breve resumo disso: "Tatyana vê a primeira neve pela janela". E então o modelo poético ideal para essa entrada produzirá algo muito próximo do original.
Para treinamento nesta competição, é proposto um
conjunto de
dados de mais de 3000 obras de cinco famosos poetas russos:
1. Pushkin
2. Yesenin
3. Mayakovsky
4. Bloco
5. Tyutchev
O algoritmo deve ser escrito para gerar com rapidez suficiente e ter a interface necessária. Em termos de velocidade, você pode igualar o poder dos PCs modernos de tamanho médio. A interface e as restrições são descritas em detalhes na seção "Formato da solução".
Para poder acompanhar o progresso de suas decisões, bem como compará-las com outras decisões dos participantes, a marcação de decisões por meio do bot de bate-papo ocorrerá durante toda a competição. Os resultados dos algoritmos serão avaliados de acordo com dois critérios:
- A qualidade da versificação e o estilo de um determinado poeta clássico
- A integridade da divulgação de um determinado tópico em um poema
Uma escala de 5 pontos será fornecida para cada critério. O algoritmo terá que compor versos para cada tópico do conjunto de testes. Os tópicos sobre os quais os algoritmos serão testados serão compilados por especialistas. Alguns tópicos serão abertos e acessíveis, mas um conjunto oculto de tópicos será usado para identificar o melhor algoritmo.
O poema obtido como resultado do algoritmo pode ser rejeitado pelos seguintes motivos:
- o texto gerado não é um poema em russo
- o texto gerado contém linguagem obscena
- O texto gerado contém frases ou subtextos ofensivos incluídos intencionalmente
Programa de competição
Ao contrário de muitos, nesta competição há apenas uma etapa on-line: de 30.07 a 26.08.
Durante esse período, você pode enviar soluções diariamente com as seguintes restrições:
- não mais que 200 decisões durante a competição
- não mais que 2 decisões bem-sucedidas por dia
- não contam no limite diário de decisões cuja verificação falhou
O fundo do prêmio corresponde à complexidade da tarefa: os três primeiros lugares receberão 1 milhão de rublos!
2. Abordagens para criar geradores de versos
Como já ficou claro, a tarefa não é trivial, mas não é nova. Vamos tentar descobrir como os pesquisadores abordaram esse problema antes? Vejamos as abordagens mais interessantes para a criação de geradores de poesia nos últimos 30 anos.
1989A Scientific American N08, 1989 publicou um artigo de A.K. Dyudney "O computador está tentando prosa e poesia." Não recontaremos o artigo, existe um link para o texto completo, apenas queremos chamar a atenção para a descrição de GERADOR DE POESIA de Rosemary West.
Este gerador foi totalmente automatizado. Essa abordagem baseia-se em um grande dicionário, cujas frases são selecionadas aleatoriamente e são formadas a partir delas, de acordo com um conjunto de regras gramaticais. Cada linha é dividida em partes da frase e substituída aleatoriamente por outras palavras.
1996Há mais de 20 anos, um graduado de uma conhecida universidade de Moscou defendeu um diploma no tópico "Modelagem linguística e inteligência artificial": autor -
Leonid Kaganov . Aqui está o
link para o texto completo.
"Modelagem linguística e inteligência artificial" - soa assim
o nome do meu tópico. "Um programa que compõe poesia" - é assim que eu respondo
perguntas de amigos. "Mas você já tem esses programas?" - eles me dizem. "Sim", respondo, "mas o meu é diferente, pois não usa os modelos originais".
c) Kaganov L.A.
Em 1996, geradores como:
- BRED.COM criando uma frase pseudocientífica
- TREPLO.EXE, gerando divertido texto literário
- POET.EXE compondo versos com um determinado ritmo
- DUEL.EXE
“Por exemplo, POET.EXE contém um dicionário de palavras com acentos e algumas outras informações sobre eles, além de definir o ritmo e indicar quais linhas rimam (por exemplo, 1 e 4). E todos esses programas têm uma propriedade comum - eles usam modelos e dicionários pré-preparados. ”
Como principais vantagens, podemos destacar o fato de o programa:
- usa experiência associativa
- executa rima independentemente
- tem a possibilidade de uma composição temática
- permite que você defina qualquer ritmo do verso
O algoritmo e o código podem ser encontrados aqui. 2016Cientistas da China geram poemas em seu próprio idioma. Eles têm um
repositório de projetos ao vivo que pode ser útil na competição atual.
Se for muito breve, funcionará assim (
link para a fonte da imagem ):
Também em 2016, outro grupo apresentou seu desenvolvimento
Hafez (repositório
aqui ).
Este gerador “compõe” versículos sobre um determinado tópico usando:
- Dicionário acentuado
- Palavras relacionadas
- Palavras que rimam de um conjunto de palavras sobre um tópico
- Aceitador de estado finito (FSA)
- Escolhendo o melhor caminho através da FSA usando RNN
Seu algoritmo (
link para a fonte da imagem ):
Eles ensinaram o algoritmo não apenas em inglês, mas também em espanhol. Eles prometem que tudo deve funcionar em quase todos os lugares. A declaração é bastante alta, por isso recomendamos que você tome cuidado.
3. Programação de um poeta artificial
Um exemplo de um gerador poético simples
A competição, por um lado, pode parecer bastante complicada, mas para ele é bem possível criar uma
linha de base simples, mas funcional.
De acordo com a condição, o identificador do autor (author_id) e o texto do tópico (semente) inserem a entrada deste programa; em resposta a isso, o modelo deve retornar o poema.
Vamos tentar formalizar o tópico para que ele possa ser operado com segurança dentro de um determinado espaço semântico vetorial. A maneira mais fácil de obter isso é obter o vetor semântico de cada palavra (por exemplo, Word2Vec) e depois calculá-los.
Assim, obtemos uma espécie de "seed2vec", que nos permite traduzir o tema em um vetor.
De fato, isso abre um tópico amplo para a pesquisa, como O problema de isolar o tópico vem enfrentando cientistas há muito tempo, eis apenas alguns exemplos:
-
Destacando tópicos por meio da LDA-
lda2vec-
sent2vec-
ADMAgora, você precisa entender como usar author_id para gerar um poema exatamente no estilo desse autor.
Aqui a idéia não é menos simples: vamos pegar o poema aleatório de um autor a partir do corpus de poemas, após o qual substituiremos cada palavra por outra que seja mais consoante com o original (tem o mesmo número de sílabas, o mesmo estresse e as três últimas letras são o mais semelhante possível ao original em termos de distância de Levenshtein) e tem o vetor mais semelhante ao vetor do tema. Por exemplo, para o tópico "Futebol" e a linha "E brilhava como âmbar", a linha de saída poderia ser "E jogou como um goleiro". Assim, temos uma espécie de estilização do texto.
Como base das palavras para a substituição, foi usado um conjunto de dados que contém pequenos parágrafos dos textos da Wikipedia (uma descrição de seu uso pode ser encontrada no código de linha de base no GitHub).
Após esse processamento, serão obtidos textos que se parecerão com poesia do autor, mas ao mesmo tempo conterão um tópico que o autor não estabeleceu.
O resultado da linha de base:
Tópico: Física
Estilo: Bloco
unidades de chumbo e bismuto
búfalo da mídia não-linear antiga
estou em um painel de partículas kelvin
seus fenômenos sua depois científica
Faraday Sevilha Barata
seu tver agora inventando
gravidade média do fônon
fumaça de escola fantasma pósitron
Tema: Matemática
Estilo: Bloco
como uma caneca de laboratórios entre idéias
curvado e escola aprender
mas um rebanho um rebanho no estudo da criatividade
curva para exemplos crianças cerebrais
o nadador conhece as curvas
e a prancha vai passar e o tribunal vai para o Senado
do que a filha de um barranco, o mais antigo o goba
e Surya em perigo
nadador estuda toda a sombra sobre Euclides
título é publicado e cotas
dominando-o com trabalho
piada educacional do professor
Obviamente, a linha de base não é perfeita e, portanto, é a linha de base.
Você pode adicionar facilmente alguns recursos que ajudarão a melhorar bem a geração e elevar você ao topo:
- Você precisa remover palavras duplicadas, porque rimar uma palavra por si só não é bom para um bom poeta.
- Agora, as palavras não são consistentes entre si, porque não usamos informações sobre partes do discurso e casos de palavras
- Você pode usar um corpo mais rico de palavras, por exemplo, um dump da Wikipedia
- O uso de outras incorporações também pode melhorar, por exemplo, o FastText não funciona no nível das palavras, mas no nível de n-gramas, o que permite incorporar palavras desconhecidas
- Use IDF como peso ao pesar palavras para calcular o vetor de tópicos
Aqui você pode adicionar muitos outros pontos, a seu critério.
Preparando uma solução para expedição
Após o treinamento do modelo, é necessário enviar o código do algoritmo compactado no arquivo ZIP para o sistema de teste.
As soluções são executadas em um ambiente isolado usando o Docker, o tempo e os recursos para testes são limitados. A solução deve atender aos seguintes requisitos técnicos:
Ele deve estar na forma de um servidor HTTP disponível na porta 8000, que responde a dois tipos de solicitações:
GET /ready
A solicitação deve ser respondida com o código 200 OK se a solução estiver pronta para uso. Qualquer outro código significa que a solução ainda não está pronta. O algoritmo tem um tempo limitado de preparação para o trabalho, para o qual você pode ler dados do disco, criar as estruturas de dados necessárias na RAM.
POST /generate/<poet_id>
Pedido para gerar um poema. O identificador do poeta em cujo estilo é necessário compor é indicado no URL. O conteúdo da solicitação é JSON com um único campo de semente que contém o assunto do ensaio:
{"seed": " "}
Como resposta, você deve fornecer ao JSON a composição gerada no campo de poema no tempo alocado:
{"poem": " \n \n..."}
A solicitação e a resposta devem ter o Tipo de conteúdo: application / json. A codificação UTF-8 é recomendada.
O contêiner com a solução inicia nas seguintes condições:- recursos disponíveis para a solução:
- 16 GB de RAM
- 4 vCPU
- GPU Nvidia K80
- a solução não tem acesso aos recursos da Internet
- uma solução no diretório / data / compartilhou conjuntos de dados
- tempo para se preparar para o trabalho: 120 segundos (após o qual é necessário responder 200 com a solicitação / ready)
- tempo por solicitação / geração /: 5 segundos
- a solução deve aceitar solicitações HTTP de máquinas externas (não apenas localhost / 127.0.0.1)
- durante o teste, as solicitações são feitas seqüencialmente (não mais que uma solicitação por vez)
- o tamanho máximo de um arquivo compactado e descompactado com uma solução: 10 GB
O poema gerado deve estar em conformidade com o formato:
- tamanho do verso - de 3 a 8 linhas
- cada linha contém no máximo 120 caracteres
- as linhas são separadas por \ n
- linhas em branco são ignoradas
O tema do assunto (semente) de comprimento não excede 1000 caracteres.
Durante o teste, apenas os estilos dos 5 poetas selecionados listados acima são usados.
Informações detalhadas sobre o envio da solução para o sistema com análise dos erros mais comuns estão disponíveis
aqui .
4. plataforma Hackathon
Uma plataforma com todas as informações necessárias sobre este concurso está localizada em
classic.sberbank.ai . Regras detalhadas podem ser encontradas
aqui . No fórum, você pode obter uma resposta sobre a tarefa e sobre questões técnicas, se algo der errado.
Competições criativas para modelos ML não são fáceis. Muitas pessoas abordaram a tarefa de gerar poesia, mas ainda não há um avanço significativo. Já agora, em nossa plataforma classic.sberbank.ai, participantes de toda a Rússia estão competindo nessa tarefa difícil. Esperamos que as decisões dos vencedores superem todas as decisões criadas anteriormente!
5. Referências