Tutorial: Como afinar o BERT para a Sumarização Extractiva
Tutorial: Como afinar o BERT para a Sumarização Extractiva
Publicado originalmente pelo investigador de aprendizagem automática da Skim AI, Chris Tran
1. Introdução
A sumarização é há muito um desafio no Processamento de Linguagem Natural. Para gerar uma versão resumida de um documento, mantendo as informações mais importantes, é necessário um modelo capaz de extrair com precisão os pontos-chave, evitando informações repetitivas. Felizmente, trabalhos recentes em PNL, como os modelos Transformer e o pré-treinamento de modelos de linguagem, fizeram avançar o estado da arte da sumarização.
Neste artigo, vamos explorar o BERTSUM, uma variante simples do BERT, para a sumarização extractiva de Sumarização de texto com codificadores pré-treinados (Liu et al., 2019). Em seguida, num esforço para tornar a sumarização extractiva ainda mais rápida e mais pequena para dispositivos com poucos recursos, iremos afinar o DistilBERT (Sanh et al., 2019) e MobileBERT (Sun et al., 2019), duas versões lite recentes do BERT, e discutimos as nossas conclusões.
2. Sumarização extractiva
Existem dois tipos de compactação: abstrativo e compactação extractiva. A sumarização abstractiva significa basicamente reescrever os pontos-chave, enquanto a sumarização extractiva gera um resumo copiando diretamente os trechos/sentenças mais importantes de um documento.
A sumarização abstractiva é mais difícil para os seres humanos e também mais dispendiosa em termos computacionais para as máquinas. No entanto, a melhor forma de resumir depende do objetivo do utilizador final. Se estiver a escrever um ensaio, o resumo abstrato pode ser a melhor escolha. Por outro lado, se estiver a fazer uma investigação e precisar de obter um resumo rápido do que está a ler, a sumarização extractiva será mais útil para essa tarefa.
Nesta secção, vamos explorar a arquitetura do nosso modelo de sumarização extractiva. O resumidor BERT tem 2 partes: um codificador BERT e um classificador de resumo.
Codificador BERT
A arquitetura geral da BERTSUM
O nosso codificador BERT é o codificador BERT-base pré-treinado da tarefa de modelação de linguagem mascarada (Devlin et at., 2018). A tarefa de sintetização extractiva é um problema de classificação binária ao nível da frase. Queremos atribuir a cada frase uma etiqueta $y_i \in {0, 1}$ indicando se a frase deve ser incluída no resumo final. Por conseguinte, é necessário acrescentar um token [CLS]
antes de cada frase. Depois de passarmos uma vez pelo codificador, a última camada oculta destas [CLS]
serão utilizados como representações das nossas frases.
Classificador de Sumarização
Depois de obter a representação vetorial de cada frase, podemos utilizar uma camada simples de feed forward como classificador para devolver uma pontuação a cada frase. No artigo, o autor fez experiências com um classificador linear simples, uma rede neuronal recorrente e um pequeno modelo transformador com 3 camadas. O classificador Transformer produz os melhores resultados, mostrando que as interacções entre frases através do mecanismo de auto-atenção são importantes para selecionar as frases mais importantes.
Assim, no codificador, aprendemos as interacções entre tokens no nosso documento, enquanto no classificador de resumo, aprendemos as interacções entre frases.
3. Tornar a compactação ainda mais rápida
Os modelos transformadores atingem o desempenho mais avançado na maioria dos bechmarks de PNL; no entanto, a sua formação e a realização de previsões a partir deles são computacionalmente dispendiosas. Num esforço para tornar a sumarização mais leve e rápida para ser implementada em dispositivos com poucos recursos, modifiquei o códigos-fonte fornecido pelos autores de BERTSUM para substituir o codificador BERT por DistilBERT e MobileBERT. As camadas de resumo não são alteradas.
Eis as perdas de treino destas 3 variantes: TensorBoard
Apesar de ser 40% mais pequeno do que a base BERT, o DistilBERT tem as mesmas perdas de formação que a base BERT, enquanto o MobileBERT tem um desempenho ligeiramente pior. A tabela seguinte mostra o seu desempenho no conjunto de dados CNN/DailyMail, o tamanho e o tempo de execução de uma passagem para a frente:
Modelos | ROUGE-1 | ROUGE-2 | ROUGE-L | Tempo de inferência* | Tamanho | Parâmetros |
---|---|---|---|---|---|---|
bert-base | 43.23 | 20.24 | 39.63 | 1.65 s | 475 MB | 120.5 M |
destilador | 42.84 | 20.04 | 39.31 | 925 ms | 310 MB | 77.4 M |
mobilebert | 40.59 | 17.98 | 36.99 | 609 ms | 128 MB | 30.8 M |
*Tempo médio de execução de uma passagem para a frente numa única GPU num computador portátil padrão do Google Colab
Sendo 45% mais rápido, o DistilBERT tem quase o mesmo desempenho que o BERT-base. O MobileBERT mantém o desempenho de 94% do BERT-base, sendo 4x mais pequeno do que o BERT-base e 2,5x mais pequeno do que o DistilBERT. No documento do MobileBERT, mostra-se que o MobileBERT supera significativamente o DistilBERT no SQuAD v1.1. No entanto, não é o caso da sumarização extractiva. Mas este é ainda um resultado impressionante para o MobileBERT com um tamanho de disco de apenas 128 MB.
4. Vamos resumir
Todos os pontos de controlo pré-treinados, detalhes de formação e instruções de configuração podem ser encontrados em este repositório GitHub. Além disso, implementei uma demonstração do BERTSUM com o codificador MobileBERT.
Aplicação Web: https://extractive-summarization.herokuapp.com/
Código:
importar torch
from models.model_builder import ExtSummarizer
from ext_sum import summarize
# Carregar modelo
model_type = 'mobilebert' #@param ['bertbase', 'distilbert', 'mobilebert']
checkpoint = torch.load(f'checkpoints/{model_type}_ext.pt', map_location='cpu')
model = ExtSummarizer(checkpoint=checkpoint, bert_type=model_type, device='cpu')
# Resumo de execução
input_fp = 'raw_data/input.txt'
result_fp = 'results/summary.txt'
summary = summarize(input_fp, result_fp, model, max_length=3)
print(resumo)
Amostra de resumo
Original: https://www.cnn.com/2020/05/22/business/hertz-bankruptcy/index.html
Ao declarar falência, a Hertz afirma que pretende manter-se em atividade, reestruturando as suas dívidas e emergindo como uma empresa
e emergir como uma empresa financeiramente mais saudável. A empresa aluga automóveis desde 1918, quando se estabeleceu com uma dúzia de Ford Model Ts.
Ford Modelo Ts, e sobreviveu à Grande Depressão, à paragem virtual da produção automóvel dos EUA durante a Segunda Guerra Mundial
e a numerosos choques nos preços do petróleo. "O impacto da Covid-19 na procura de viagens foi súbito e dramático, causando um
O impacto da Covid-19 na procura de viagens foi súbito e dramático, causando um declínio abrupto nas receitas da empresa e nas suas reservas futuras", afirmou o comunicado da empresa.
5. Conclusão
Neste artigo, explorámos o BERTSUM, uma variante simples do BERT, para a sumarização extractiva do documento Sumarização de texto com codificadores pré-treinados (Liu et al., 2019). Em seguida, em um esforço para tornar o resumo extrativo ainda mais rápido e menor para dispositivos com poucos recursos, ajustamos o DistilBERT (Sanh et al., 2019) e o MobileBERT (Sun et al., 2019) nos conjuntos de dados CNN/DailyMail.
O DistilBERT mantém o desempenho do BERT-base na sumarização extractiva, sendo 45% mais pequeno. O MobileBERT é 4x mais pequeno e 2,7x mais rápido que o BERT-base, mas mantém 94% do seu desempenho.
Por fim, implementámos uma demonstração da aplicação Web do MobileBERT para resumo extrativo em https://extractive-summarization.herokuapp.com/.