transformers pytorch mbart text2text-generation summarization ru dataset:IlyaGusev/gazeta arxiv:2006.11063 license:apache-2.0 autotrain_compatible endpoints_compatible region:us
---
datasets:
- IlyaGusev/gazeta
language:
- ru
license: apache-2.0
tags:
- summarization
- mbart
inference:
  parameters:
    no_repeat_ngram_size: 4
widget:
- text: Высота башни составляет 324 метра (1063 фута), примерно такая же высота, как
    у 81-этажного здания, и самое высокое сооружение в Париже. Его основание квадратно,
    размером 125 метров (410 футов) с любой стороны. Во время строительства Эйфелева
    башня превзошла монумент Вашингтона, став самым высоким искусственным сооружением
    в мире, и этот титул она удерживала в течение 41 года до завершения строительство
    здания Крайслер в Нью-Йорке в 1930 году. Это первое сооружение которое достигло
    высоты 300 метров. Из-за добавления вещательной антенны на вершине башни в 1957
    году она сейчас выше здания Крайслер на 5,2 метра (17 футов). За исключением передатчиков,
    Эйфелева башня является второй самой высокой отдельно стоящей структурой во Франции
    после виадука Мийо.
  example_title: Википедия
- text: С 1 сентября в России вступают в силу поправки в закон «О банкротстве» — теперь
    должники смогут освобождаться от непосильных обязательств во внесудебном порядке,
    если сумма задолженности составляет не менее 50 тыс. рублей и не превышает 500
    тыс. рублей без учета штрафов, пени, процентов за просрочку платежа и прочих имущественных
    или финансовых санкций. У физлиц и индивидуальных предпринимателей появилась возможность
    пройти процедуру банкротства без участия суда и финансового управляющего — достаточно
    подать соответствующее заявление через МФЦ. Сумму задолженности и список всех
    известных заявителю кредиторов нужно предоставить самостоятельно. Если все условия
    соблюдены, сведения внесут в Единый федеральный реестр в течение трех рабочих
    дней. При этом на момент подачи заявления в отношении заявителя должно быть окончено
    исполнительное производство с возвращением исполнительного документа взыскателю.
    Это значит, что у потенциального банкрота не должно быть имущества, которое можно
    взыскать. Кроме того, в отношении гражданина не должно быть возбуждено другое
    исполнительное производство. В период всей процедуры заявитель не сможет брать
    займы, кредиты, выдавать поручительства, совершать иные обеспечительные сделки.
    Внесудебное банкротство будет длиться шесть месяцев, в течение которых также будет
    действовать мораторий на удовлетворение требований кредиторов, отмеченных в заявлении
    должника, и мораторий об уплате обязательных платежей. Кроме того, прекращается
    начисление неустоек и иных финансовых санкций; имущественные взыскания (кроме
    алиментов) также будут приостановлены. По завершению процедуры заявителя освободят
    от дальнейшего выполнения требований кредиторов, указанных в заявлении о признании
    его банкротом, а эта задолженность признается безнадежной. В прошлом месяце стало
    известно, что за первое полугодие 2020 года российские суды признали банкротами
    42,7 тыс. граждан (в том числе индивидуальных предпринимателей) — по данным единого
    реестра «Федресурс», это на 47,2% больше показателя аналогичного периода 2019
    года. Рост числа обанкротившихся граждан во втором квартале по сравнению с первым
    замедлился — такая динамика обусловлена тем, что в период ограничений с 19 марта
    по 11 мая суды редко рассматривали банкротные дела компаний и меньше, чем обычно,
    в отношении граждан, объяснял руководитель проекта «Федресурс» Алексей Юхнин.
    Он прогнозирует, что во втором полугодии мы увидим рост показателя, когда суды
    рассмотрят все дела, что не смогли ранее в режиме ограничений. По его данным,
    уже в июне число личных банкротств выросло до 11,5 тыс., что в два раза превышает
    показатель аналогичного периода 2019 года.
  example_title: Новости
- text: 'Актуальность проблемы. Электронная информация играет все большую  роль во
    всех сферах жизни современного общества. В последние годы объем научно-технической
    текстовой информации в электронном виде возрос настолько, что возникает угроза
    обесценивания этой информации в связи с трудностями поиска необходимых сведений
    среди множества доступных текстов. Развитие информационных ресурсов Интернет многократно
    усугубило проблему информационной перегрузки. В этой ситуации особенно актуальными
    становятся методы автоматизации реферирования текстовой информации, то есть методы
    получения сжатого представления текстовых документов–рефератов (аннотаций). Постановка  проблемы  автоматического
    реферирования текста и соответственно попытки ее решения с использованием различных
    подходов предпринимались многими исследователями. История применения вычислительной
    техники для реферирования  насчитывает уже более 50 лет и связана с именами таких
    исследователей, как Г.П. Лун, В.Е. Берзон, И.П. Cевбо, Э.Ф. Скороходько, Д.Г.
    Лахути, Р.Г. Пиотровский и др. За эти годы  выработаны  многочисленные подходы
    к решению данной проблемы, которые достаточно четко подразделяются на два направления:
    автоматическое реферирование, основанное на экстрагировании из первичных документов
    с помощью определенных формальных признаков «наиболее информативных» фраз (фрагментов),
    совокупность которых образует некоторый экстракт; автоматическое реферирование,
    основанное на выделении из текстов с помощью специальных информационных языков
    наиболее существенной информации и порождении новых текстов (рефератов), содержательно
    обобщающих первичные  документы.'
  example_title: Научная статья
---

# MBARTRuSumGazeta

## Model description

This is a ported version of [fairseq model](https://www.dropbox.com/s/fijtntnifbt9h0k/gazeta_mbart_v2_fairseq.tar.gz).

For more details, please see [Dataset for Automatic Summarization of Russian News](https://arxiv.org/abs/2006.11063).

## Intended uses & limitations

#### How to use

Colab: [link](https://colab.research.google.com/drive/1wdo_nPZPk6dWAn1J8nGx4Z5Ef82jCCob)

```python
from transformers import MBartTokenizer, MBartForConditionalGeneration

model_name = "IlyaGusev/mbart_ru_sum_gazeta"
tokenizer = MBartTokenizer.from_pretrained(model_name)
model = MBartForConditionalGeneration.from_pretrained(model_name)

article_text = "..."

input_ids = tokenizer(
    [article_text],
    max_length=600,
    padding="max_length",
    truncation=True,
    return_tensors="pt",
)["input_ids"]

output_ids = model.generate(
    input_ids=input_ids,
    no_repeat_ngram_size=4
)[0]

summary = tokenizer.decode(output_ids, skip_special_tokens=True)
print(summary)
```

#### Limitations and bias

- The model should work well with Gazeta.ru articles, but for any other agencies it can suffer from domain shift


## Training data

- Dataset: [Gazeta](https://huggingface.co/datasets/IlyaGusev/gazeta)

## Training procedure

- Fairseq training script: [train.sh](https://github.com/IlyaGusev/summarus/blob/master/external/bart_scripts/train.sh)
- Porting: [Colab link](https://colab.research.google.com/drive/13jXOlCpArV-lm4jZQ0VgOpj6nFBYrLAr)

## Eval results

* Train dataset: **Gazeta v1 train**
* Test dataset: **Gazeta v1 test**
* Source max_length: **600**
* Target max_length: **200**
* no_repeat_ngram_size: **4**
* num_beams: **5**

| Model                     | R-1-f | R-2-f | R-L-f | chrF | METEOR | BLEU | Avg char length |
|:--------------------------|:------|:------|:------|:-------|:-------|:-----|:-----|
| [mbart_ru_sum_gazeta](https://huggingface.co/IlyaGusev/mbart_ru_sum_gazeta)       | **32.4**  | 14.3  | 28.0  | 39.7 | **26.4** | 12.1 | 371 |
| [rut5_base_sum_gazeta](https://huggingface.co/IlyaGusev/rut5_base_sum_gazeta)      | 32.2  | **14.4**  | **28.1** | **39.8** | 25.7 | **12.3** | 330 |
| [rugpt3medium_sum_gazeta](https://huggingface.co/IlyaGusev/rugpt3medium_sum_gazeta) | 26.2 | 7.7 | 21.7 | 33.8 | 18.2 | 4.3 | 244 |

* Train dataset: **Gazeta v1 train**
* Test dataset: **Gazeta v2 test**
* Source max_length: **600**
* Target max_length: **200**
* no_repeat_ngram_size: **4**
* num_beams: **5**

| Model                     | R-1-f | R-2-f | R-L-f | chrF | METEOR | BLEU | Avg char length |
|:--------------------------|:------|:------|:------|:-------|:-------|:-----|:-----|
| [mbart_ru_sum_gazeta](https://huggingface.co/IlyaGusev/mbart_ru_sum_gazeta)        | **28.7**  | **11.1**  | 24.4  | **37.3** | **22.7**  | **9.4** | 373 |
| [rut5_base_sum_gazeta](https://huggingface.co/IlyaGusev/rut5_base_sum_gazeta)      | 28.6 | **11.1** | **24.5** | 37.2 | 22.0 | **9.4** | 331 |
| [rugpt3medium_sum_gazeta](https://huggingface.co/IlyaGusev/rugpt3medium_sum_gazeta) | 24.1 | 6.5 | 19.8 | 32.1 | 16.3 | 3.6 | 242 |

Predicting all summaries:
```python
import json
import torch
from transformers import MBartTokenizer, MBartForConditionalGeneration
from datasets import load_dataset


def gen_batch(inputs, batch_size):
    batch_start = 0
    while batch_start < len(inputs):
        yield inputs[batch_start: batch_start + batch_size]
        batch_start += batch_size


def predict(
    model_name,
    input_records,
    output_file,
    max_source_tokens_count=600,
    batch_size=4
):
    device = "cuda" if torch.cuda.is_available() else "cpu"
    
    tokenizer = MBartTokenizer.from_pretrained(model_name)
    model = MBartForConditionalGeneration.from_pretrained(model_name).to(device)
    
    predictions = []
    for batch in gen_batch(inputs, batch_size):
        texts = [r["text"] for r in batch]
        input_ids = tokenizer(
            batch,
            return_tensors="pt",
            padding="max_length",
            truncation=True,
            max_length=max_source_tokens_count
        )["input_ids"].to(device)
        
        output_ids = model.generate(
            input_ids=input_ids,
            no_repeat_ngram_size=4
        )
        summaries = tokenizer.batch_decode(output_ids, skip_special_tokens=True)
        for s in summaries:
            print(s)
        predictions.extend(summaries)
    with open(output_file, "w") as w:
        for p in predictions:
            w.write(p.strip().replace("\n", " ") + "\n")

gazeta_test = load_dataset('IlyaGusev/gazeta', script_version="v1.0")["test"]
predict("IlyaGusev/mbart_ru_sum_gazeta", list(gazeta_test), "mbart_predictions.txt")
```

Evaluation: https://github.com/IlyaGusev/summarus/blob/master/evaluate.py

Flags: --language ru --tokenize-after --lower

### BibTeX entry and citation info

```bibtex
@InProceedings{10.1007/978-3-030-59082-6_9,
    author="Gusev, Ilya",
    editor="Filchenkov, Andrey and Kauttonen, Janne and Pivovarova, Lidia",
    title="Dataset for Automatic Summarization of Russian News",
    booktitle="Artificial Intelligence and Natural Language",
    year="2020",
    publisher="Springer International Publishing",
    address="Cham",
    pages="122--134",
    isbn="978-3-030-59082-6"
}
```
