rut5-base-absum / README.md
cointegrated's picture
Update README.md (#1)
ba0a6f7
metadata
language:
  - ru
tags:
  - russian
  - summarization
datasets:
  - IlyaGusev/gazeta
  - csebuetnlp/xlsum
  - mlsum
  - wiki_lingua
license: mit
widget:
  - text: >-
      Высота башни составляет 324 метра (1063 фута), примерно такая же высота,
      как у 81-этажного здания, и самое высокое сооружение в Париже. Его
      основание квадратно, размером 125 метров (410 футов) с любой стороны. Во
      время строительства Эйфелева башня превзошла монумент Вашингтона, став
      самым высоким искусственным сооружением в мире, и этот титул она
      удерживала в течение 41 года до завершения строительство здания Крайслер в
      Нью-Йорке в 1930 году. Это первое сооружение которое достигло высоты 300
      метров. Из-за добавления вещательной антенны на вершине башни в 1957 году
      она сейчас выше здания Крайслер на 5,2 метра (17 футов). За исключением
      передатчиков, Эйфелева башня является второй самой высокой отдельно
      стоящей структурой во Франции после виадука Мийо.

This is a model for abstractive Russian summarization, based on cointegrated/rut5-base-multitask and fine-tuned on 4 datasets.

It can be used as follows:

import torch
from transformers import T5ForConditionalGeneration, T5Tokenizer
MODEL_NAME = 'cointegrated/rut5-base-absum'
model = T5ForConditionalGeneration.from_pretrained(MODEL_NAME)
tokenizer = T5Tokenizer.from_pretrained(MODEL_NAME)
model.cuda();
model.eval();

def summarize(
    text, n_words=None, compression=None,
    max_length=1000, num_beams=3, do_sample=False, repetition_penalty=10.0, 
    **kwargs
):
    """
    Summarize the text
    The following parameters are mutually exclusive:
    - n_words (int) is an approximate number of words to generate.
    - compression (float) is an approximate length ratio of summary and original text.
    """
    if n_words:
        text = '[{}] '.format(n_words) + text
    elif compression:
        text = '[{0:.1g}] '.format(compression) + text
    x = tokenizer(text, return_tensors='pt', padding=True).to(model.device)
    with torch.inference_mode():
        out = model.generate(
            **x, 
            max_length=max_length, num_beams=num_beams, 
            do_sample=do_sample, repetition_penalty=repetition_penalty, 
            **kwargs
        )
    return tokenizer.decode(out[0], skip_special_tokens=True)

text = """Высота башни составляет 324 метра (1063 фута), примерно такая же высота, как у 81-этажного здания, и самое высокое сооружение в Париже. Его основание квадратно, размером 125 метров (410 футов) с любой стороны. Во время строительства Эйфелева башня превзошла монумент Вашингтона, став самым высоким искусственным сооружением в мире, и этот титул она удерживала в течение 41 года до завершения строительство здания Крайслер в Нью-Йорке в 1930 году. Это первое сооружение которое достигло высоты 300 метров. Из-за добавления вещательной антенны на вершине башни в 1957 году она сейчас выше здания Крайслер на 5,2 метра (17 футов). За исключением передатчиков, Эйфелева башня является второй самой высокой отдельно стоящей структурой во Франции после виадука Мийо."""
print(summarize(text))
# Эйфелева башня достигла высоты 300 метров.
print(summarize(text, n_words=10))
# Французская Эйфелева башня достигла высоты 300 метров.