Pesquisa de site

Modelo BART para resumo de texto


Introdução

Abordagens autossupervisionadas concluíram muitos tipos diferentes de tarefas de PNL.
A remoção de ruído de codificadores automáticos treinados para recuperar texto quando um subconjunto aleatório de palavras foi mascarado provou ser o método mais eficaz.
Os ganhos foram comprovados em trabalhos recentes, melhorando a distribuição de mascaramento, a ordem de previsão de mascaramento e o contexto para substituir tokens de máscara.
Embora promissoras, essas abordagens são frequentemente limitadas em escopo a apenas algumas tarefas distintas (como previsão de span, criação de span, etc.).

Pré-requisitos

Para acompanhar este artigo, você precisará de experiência com código Python e um conhecimento básico de Deep Learning. Operaremos sob a suposição de que todos os leitores tenham acesso a máquinas suficientemente poderosas para que possam executar o código fornecido.

Caso você não tenha acesso a uma GPU, sugerimos acessá-la pela nuvem. Existem muitos provedores de nuvem que oferecem GPUs. Os Droplets de GPU DigitalOcean estão atualmente em Disponibilidade Antecipada, saiba mais e inscreva-se para obter interesse em Droplets de GPU aqui

Para obter instruções sobre como começar a usar o código Python, recomendamos experimentar este guia para iniciantes para configurar seu sistema e se preparar para executar tutoriais para iniciantes.

Qual é o modelo do transformador BART na PNL?

Este artigo apresenta o BART, um método de pré-treinamento que combina transformadores bidirecionais e auto-regressivos. BART é um autoencoder de eliminação de ruído que usa um paradigma sequência a sequência, tornando-o útil para diversas aplicações. O pré-treinamento consiste em duas fases: (1) o texto é corrompido usando uma função de ruído arbitrária e (2) um modelo sequência a sequência é aprendido para reconstruir o texto original.

A arquitetura de tradução automática neural baseada em Transformer do BART pode ser vista como uma generalização de BERT (devido ao codificador bidirecional), GPT (com o decodificador da esquerda para a direita) e muitas outras abordagens contemporâneas de pré-treinamento.

Fonte

Além de sua força em tarefas de compreensão, a eficácia do BART aumenta com o ajuste fino para geração de texto. Ele gera novos resultados de última geração em várias tarefas abstrativas de conversação, resposta a perguntas e resumo, combinando o desempenho do RoBERTa com recursos de treinamento comparáveis em GLUE e SQuAD.

Arquitetura

Exceto alterar as funções de ativação ReLU para GeLUs e inicializar os parâmetros de (0, 0,02), o BART segue o design geral do Transformador sequência a sequência (Vaswani et al., 2017). Existem seis camadas no codificador e decodificador para o modelo básico e doze camadas em cada para o modelo grande.

Semelhante à arquitetura usada no BERT, as duas principais diferenças são que (1) no BERT, cada camada do decodificador realiza adicionalmente atenção cruzada sobre a camada oculta final do codificador (como no modelo sequência a sequência do transformador) ; e (2) no BERT uma rede feed-forward adicional é usada antes da previsão de palavras, enquanto no BART não existe.

BART pré-treinamento

Para treinar o BART, primeiro corrompemos os documentos e depois otimizamos a perda de reconstrução, que é a entropia cruzada entre a saída do decodificador e o documento original. Em contraste com os autoencoders convencionais de eliminação de ruído, o BART pode ser usado para qualquer tipo de corrupção de documento.

O pior cenário para o BART é quando todas as informações de origem são perdidas, o que se torna análogo a um modelo de linguagem. Os pesquisadores experimentam diversas transformações novas e antigas, mas também acreditam que há muito espaço para criar alternativas ainda mais exclusivas.
A seguir, descreveremos as transformações que eles realizaram e forneceremos alguns exemplos. Abaixo está um resumo das transformações usadas, e uma ilustração de alguns dos resultados é fornecida na figura.

  • Mascaramento de token: Seguindo o BERT, tokens aleatórios são amostrados e substituídos por elementos MASK.
  • Exclusão de token: tokens aleatórios são excluídos da entrada. Em contraste com o mascaramento de token, o modelo deve prever quais posições estão faltando entradas.
  • Preenchimento de texto: Vários trechos de texto são amostrados, com comprimentos de trecho extraídos de uma distribuição de Poisson (λ=3). Cada intervalo é substituído por um único token MASK. O preenchimento de texto ensina o modelo a prever quantos tokens estão faltando em um intervalo.
  • Permutação de frases: um documento é dividido em frases com base em pontos finais e essas frases são embaralhadas em ordem aleatória.
  • Rotação de Documento: Um token é escolhido de maneira uniforme e aleatória, e o documento é girado para começar com esse token. Esta tarefa treina o modelo para identificar o início do documento.

Fonte

Ajuste fino do BART

Existem vários usos potenciais para as representações que o BART gera nas etapas de processamento subsequentes:

  • Tarefas de classificação de sequência: Para problemas de classificação de sequência, a mesma entrada é fornecida ao codificador e ao decodificador, e os estados ocultos finais do último token do decodificador são alimentados no novo classificador linear multiclasse.

Fonte

  • Tarefas de classificação de token: Tanto o codificador quanto o decodificador recebem o documento inteiro como entrada e, do estado oculto superior do decodificador, uma representação de cada palavra é derivada. A classificação do token depende da sua representação.
  • Tarefas de geração de sequência: para tarefas de geração de sequência, como responder perguntas abstratas e resumir texto, o decodificador autorregressivo do BART permite o ajuste fino direto. Ambas as tarefas estão relacionadas ao objetivo pré-treinamento de remoção de ruído, uma vez que envolvem a cópia e posterior manipulação dos dados de entrada. Aqui, a sequência de entrada serve como entrada para o codificador, enquanto o decodificador gera saídas de maneira autoregressiva.
  • Tradução automática: Os pesquisadores investigam a viabilidade de usar o BART para aprimorar decodificadores de tradução automática para tradução para o inglês. Foi comprovado que o uso de codificadores pré-treinados melhora os modelos, enquanto os benefícios da incorporação de modelos de linguagem pré-treinados em decodificadores têm sido mais limitados. Usando um conjunto de parâmetros do codificador aprendidos com o bitexto, eles demonstram que todo o modelo BART pode ser usado como um único decodificador pré-treinado para tradução automática. Mais especificamente, eles trocam a camada de incorporação do codificador BART por um codificador totalmente novo usando inicialização aleatória. Quando o modelo é treinado do início ao fim, o novo codificador é treinado para mapear palavras estrangeiras em uma entrada que o BART pode então traduzir para o inglês. Em ambos os estágios de treinamento, a perda de entropia cruzada é retropropagada a partir da saída do modelo BART para treinar o codificador de origem. No primeiro estágio, eles corrigem a maioria dos parâmetros do BART e atualizam apenas o codificador de origem inicializado aleatoriamente, os embeddings posicionais do BART e a matriz de projeção de entrada de autoatenção da primeira camada do codificador do BART. Segundo, eles realizam um número limitado de iterações de treinamento em todos os parâmetros do modelo.

Fonte

Modelo BART para resumo de texto

Leva muito tempo para um pesquisador ou jornalista vasculhar todas as informações extensas na Internet e encontrar o que precisa. Você pode economizar tempo e energia folheando os destaques de uma extensa literatura usando um resumo ou paráfrase da sinopse.
A tarefa da PNL de resumir textos pode ser automatizada com a ajuda de modelos transformadores. Existem técnicas extrativas e abstrativas para atingir esse objetivo. Resumir um documento de forma extrativa envolve encontrar as afirmações mais críticas no texto e anotá-las. Pode-se classificar isso como um tipo de recuperação de informação. Mais desafiador do que o resumo literal é o resumo abstrato, que busca apreender todo o material e fornecer um texto parafraseado para resumir os pontos-chave. O segundo tipo de resumo é realizado por modelos de transformadores como o BART.

HuggingFace nos dá acesso rápido e fácil a milhares de pesos pré-treinados e ajustados para modelos Transformer, incluindo BART. Você pode escolher um modelo BART personalizado para a tarefa de resumo de texto no site do explorador de modelos HuggingFace. Cada modelo enviado inclui uma descrição detalhada de sua configuração e treinamento. O modelo bart-large-cnn adequado para iniciantes merece uma olhada, então vamos dar uma olhada nele. Use a página de instalação do HuggingFace ou execute pip install transformers para começar. A seguir, seguiremos estas três etapas fáceis para criar nosso resumo:

    from transformers import pipeline
    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")

O pipeline do modelo de transformadores deve ser carregado primeiro. O módulo no pipeline é definido nomeando a tarefa e o modelo. O termo “resumo” é usado e o modelo é referido como “facebook/bart-large-xsum. ”Se quisermos tentar algo diferente do conjunto de dados de notícias padrão, podemos usar o conjunto de dados Extreme Summary (XSum). O modelo foi treinado para gerar resumos exclusivamente de uma frase.

A última etapa é construir uma sequência de entrada e colocá-la à prova usando o pipeline summarizer(). Em termos de tokens, o comprimento do resumo também pode ser ajustado usando os argumentos opcionais max_length e min_length da função.

    from transformers import pipeline

    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
    
    ARTICLE = """ New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
    A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
    Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared "I do" five more times, sometimes only within two weeks of each other.
    In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her "first and only" marriage.
    Barrientos, now 39, is facing two criminal counts of "offering a false instrument for filing in the first degree," referring to her false statements on the
    2010 marriage license application, according to court documents.
    Prosecutors said the marriages were part of an immigration scam.
    On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
    After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
    Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
    All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
    Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
    Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
    The case was referred to the Bronx District Attorney\'s Office by Immigration and Customs Enforcement and the Department of Homeland Security\'s
    Investigation Division. Seven of the men are from so-called "red-flagged" countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
    Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
    If convicted, Barrientos faces up to four years in prison.  Her next court appearance is scheduled for May 18.
    """
    print(summarizer(ARTICLE, max_length=130, min_length=30, do_sample=False))

Output:

    [{'summary_text': 'Liana Barrientos, 39, is charged with two counts of "offering a false instrument for filing in the first degree" In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. She is believed to still be married to four men.'}]

Outra opção é usar BartTokenizer para gerar tokens a partir de sequências de texto e BartForConditionalGeneration para resumir.

    # Importing the model
    from transformers import BartForConditionalGeneration, BartTokenizer, BartConfig

As a pre-trained model, " bart-large-cnn" is optimized for the summary job.  
The **from_pretrained()** function is used to load the model, as seen below.

    # Tokenizer and model loading for bart-large-cnn 
    
    tokenizer=BartTokenizer.from_pretrained('facebook/bart-large-cnn')
    model=BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')

Suponha que você precise resumir o mesmo texto do exemplo acima. Você pode aproveitar o recurso batch_encode_plus() do tokenizer para essa finalidade. Quando chamado, esse método produz um dicionário que armazena a sequência codificada ou par de sequências e qualquer outra informação fornecida.
Como podemos restringir a sequência mais curta possível que pode ser retornada?

Em batch_encode_plus(), defina o valor do parâmetro max_length. Para obter os ids da saída resumida, alimentamos os input_ids na função model.generate().

    # Transmitting the encoded inputs to the model.generate() function
    inputs = tokenizer.batch_encode_plus([ARTICLE],return_tensors='pt')
    summary_ids =  model.generate(inputs['input_ids'], num_beams=4, max_length=150, early_stopping=True)

O resumo do texto original foi gerado como uma sequência de ids pelo método model.generate(). A função model.generate() possui vários parâmetros, entre os quais:

  • input_ids: A sequência usada como prompt para a geração.
  • max_length: o comprimento máximo da sequência a ser gerada. Entre min_length e infinito. Padrão para 20.
  • min_length: o comprimento mínimo da sequência a ser gerada. Entre 0 e infinito. O padrão é 0.
  • num_beams: Número de feixes para pesquisa de feixes. Deve estar entre 1 e infinito. 1 significa que não há busca de feixe. Padrão para 1.
  • early_stopping: se definido como True Beam, a pesquisa é interrompida quando pelo menos num_beams sentenças são concluídas por lote.

A função decode() pode ser usada para transformar a sequência ids em texto simples.

    # Decoding and printing the summary
    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
    print(summary)

O decode() converte uma lista de listas de ids de token em uma lista de strings. Aceita diversos parâmetros entre os quais citaremos dois deles:

  • token_ids: lista de ids de entrada tokenizados.
  • skip_special_tokens : Se deve ou não remover tokens especiais na decodificação.

Como resultado, obtemos isto:

Liana Barrientos, 39, is charged with two counts of offering a false instrument for filing in the first degree. In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. At one time, she was married to eight men at once, prosecutors say.

Resumindo documentos com BART usando ktrain

ktrain é um pacote Python que reduz a quantidade de código necessária para implementar o aprendizado de máquina. Juntando o TensorFlow e outras bibliotecas, seu objetivo é tornar modelos de ML de ponta acessíveis a não especialistas, ao mesmo tempo que satisfaz as necessidades dos especialistas na área. Com a interface simplificada do ktrain, você pode lidar com uma ampla variedade de problemas com apenas três ou quatro “comandos” ou linhas de código, independentemente de os dados com os quais trabalhar serem textuais, visuais, gráficos ou tabulares.

Usando um modelo BART pré-treinado da biblioteca de transformadores, o ktrain pode resumir o texto. Primeiro, criaremos a instância TransformerSummarizer para realizar o resumo real. (Observe que a instalação do PyTorch é necessária para usar esta função.)

    from ktrain.text.summarization import TransformerSummarizer
    ts = TransformerSummarizer()

Vamos em frente e escrever um artigo:

    article = """ Saturn orbiter and Titan atmosphere probe. Cassini is a joint
        NASA/ESA project designed to accomplish an exploration of the Saturnian
        system with its Cassini Saturn Orbiter and Huygens Titan Probe. Cassini
        is scheduled for launch aboard a Titan IV/Centaur in October of 1997.
        After gravity assists of Venus, Earth and Jupiter in a VVEJGA
        trajectory, the spacecraft will arrive at Saturn in June of 2004. Upon
        arrival, the Cassini spacecraft performs several maneuvers to achieve an
        orbit around Saturn. Near the end of this initial orbit, the Huygens
        Probe separates from the Orbiter and descends through the atmosphere of
        Titan. The Orbiter relays the Probe data to Earth for about 3 hours
        while the Probe enters and traverses the cloudy atmosphere to the
        surface. After the completion of the Probe mission, the Orbiter
        continues touring the Saturnian system for three and a half years. Titan
        synchronous orbit trajectories will allow about 35 flybys of Titan and
        targeted flybys of Iapetus, Dione and Enceladus. The objectives of the
        mission are threefold: conduct detailed studies of Saturn's atmosphere,
        rings and magnetosphere; conduct close-up studies of Saturn's
        satellites, and characterize Titan's atmosphere and surface."""

We can now summarize this article by using TransformerSummarizer instance:

    ts.summarize(article)

Conclusão

Antes de mergulhar na arquitetura BART e nos dados de treinamento, este artigo descreveu o desafio que o BART está tentando responder e a metodologia que leva ao seu excelente desempenho. Também vimos um exemplo de inferência de demonstração usando HuggingFace, ktrain e implementação Python do BART. Esta revisão da teoria e do código lhe dará um grande avanço, permitindo que você construa um poderoso modelo seq2seq baseado em Transformer em Python.

Referências

https://huggingface.co/transformers/v2.11.0/model_doc/bart.html
https://arxiv.org/abs/1910.13461
https://www.projectpro.io/article/transformers-bart-model-explained/553
https://github.com/amaiya/ktrain
https://www.machinelearningplus.com/nlp/text-summarization-approaches-nlp-example/

Artigos relacionados: