FRED T5 Large Habr Summarizer
Model Overview
Model Features
Model Capabilities
Use Cases
🚀 FRED-T5-large Habr Article Summarizer
An abstractive summarizer for Habr articles, trained on data from a test task during GPT Week. It uses ai-forever/FRED-T5-large as the base model.
🚀 Quick Start
Using this summarizer involves pre - and post - processing the text, as shown in the following example:
import re
from transformers import pipeline
clean_expr = re.compile(r"[\xa0\x1a\x16\x1b\x17\x15\u2004]")
spaces_expr = re.compile(r"\s{2,}")
def process_text(text: str) -> str:
"""Performs pre - and post - processing of the text."""
text = clean_expr.sub(" ", text)
text = spaces_expr.sub(" ", text)
if "." in text:
index = text.rindex(".")
text = text[:index + 1]
return text
summarizer = pipeline("summarization", model="basic-go/FRED-T5-large-habr-summarizer", device=0)
ARTICLE = """
Трогательный инженерный бизиборд, Новый Год и волонтеры / Хабр
31-12-2019
Зачем нужен бизиборд, когда у папы много интересных инструментов? Опасные убраны, а пассатижами пусть ребенок играет, шуруповерт нажимает, ручки осциллографа крутит. Но наступил момент и сделан инженерный бизиборд. Таким каким он должен быть, в противоположность фабричному изделию – красивому, глянцевому, красочному, со всеми закругленными углами и краями. Разноцветному для глаз, но однородному и скучному на ощупь. С чего все началось Началось с объявления чуть больше года назад в социальной сети, что московскому психоневралогическому интернату (ПНИ) требуются бизиборды: Что это такое Что такое ПНИ трудно представить, но можно посмотреть в youtube. И если волонтеры пишут, что в ПНИ проблема дефицита сенсорных впечатлений, значит это ОЧЕНЬ большая проблема. Мы, взрослые, ходим по строительному гипермаркету и крутим в руках железки, щупаем трубки, проводим рукой по оплетке и т.д. Женщины в магазине трогают вообще всё. Я инженер, регулярно покупаю какие-то детали, чтобы на столе лежали, и я достаточное количество раз их потрогал и постепенно понял – смогу ли применить как задумал. Каждый в детстве лежал на кровати и бесконечно долго разглядывал и щупал ковер. Или, провинившись, стоял в углу и ковырял обои. Щупать – это способность и потребность человека. Когда мы с товарищем увидели бизиборды, которые планируется купить для ПНИ, решили сделать максимально трогательный бизиборд сами. Трогательный в прямом смысле. Куплены парные раскручивающиеся фитинги из пластика, никелированной стали, бронзы, чугуна оцинкованного и черного чугуна. Медные трубки, гофрированная трубка из нержавеющей стали, по которой со звоном долго спускается шайба, если ее поднять и отпустить. Самый красивый материал, конечно, никелированная сталь. Но красота не главное, главное контраст. Поэтому рядом с никелированной деталью висит деталь из черного чугуна, и трудно сказать – какой материал даст больший чувственный опыт. «Чугунные игрушки» из анекдота – не насмешка, а необходимость; ребенку важно почувствовать тяжесть и грубую фактуру материала. Все фитинги по-разному закручиваются, интересней других крутить сложные составные фитинги для труб ПНД. Гофра для унитаза удивляет диаметром, и ее можно растягивать. Пеньковая веревка впечатляюще колюча. Отрезной диск красивый, брутальный, и на ощупь грубый. Образцы керамики вдали выглядят обычно, но красивые, если рассматривать их многослойное покрытие вблизи, проводя по рельефу пальцами. Как это сделано За основу взят лист фанеры 1500×1000×10 мм. В строительном гипермаркете есть услуга пила в размер, к основному листу дополнительно нарезали ребер жесткости. С размером листа ошибся, лист чуть-чуть не влез в автомобиль, а гипермаркет уже закрылся и пришлось в ночь идти с этим листом домой пешком – не надо так. Ребра жесткости прикручены шурупами 16 мм – стянут оба листа, но не выйдут с другой стороны. Всюду, где можно, использован детский труд. Детский труд экономит деньги – не нужно покупать очередной конструктор. Вон папе купили новое кресло, иди распаковывай и собирай, нужна будет помощь — позовешь. И детский труд – это педагогично, ребенок вырастет умеющим не только работать руками, но и делегировать задачи. Дети учатся не тому, чему их учат взрослые, а тому что взрослые при детях делают. Покрасили на лестничной площадке, постелив полиэтилен. Закрепили детали тросами в ПВХ-оплетке. Стальные тросы в ПВХ-оплетке — прекрасный материал, только пришлось отдельно ехать в магазин за кусачками, которые этот трос смогут перекусить. На обратной стороне тросы затянули узлами, а узлы залили термоклеем. Термоклей имеет хорошую адгезию к ПВХ, залитый узел сам не распустится и выдернуть его с лицевой стороны стенда невозможно. Чем все закончилось В «наш» ПНИ уже успели закупить готовые бизиборды, меня переправили к волонтерам другого ПНИ. Там фотографии посмотрели и сказали – а давайте отправим ваш стенд в Азовский интернат для умственно отсталых детей. Сказали – и отправили. В новогоднюю ночь приехала еще одна бригада волонтеров, погрузили стенд в огромный прицеп к АЗЛК 2141 уже забитый коробками с подарками интернату, и в метель уехали. Очень романтично. Дальше я долго пытался получить какую-то обратную связь от волонтеров, но смог лишь узнать телефон интерната. Там звонку удивились, обрадовались, сказали, что не поняли, что это им привезли и отдали в уголок труда. И сказали, что примут любую помощь, и чтобы я приходил и помогал. Я посмотрел фотографии интерната, посмотрел на детей и увидел, что стенд отправили совершенно не туда. Ситуация в интернате по сравнению с ПНИ роскошная, проблемы запертости в своем теле и на своей кровати у детей нет. Жил бы рядом с интернатом – приходил бы по субботам, учил бы этих детей программировать Ардуино. Опыт преподавания робототехники в школе есть, справился бы и в интернате. Но между нами 1100 км. А стенд все же нужен был в ПНИ. Выводы Все сделано правильно, только нужно самому говорить с тем, для кого что-то делаешь. Самому изучать потребность, самому получать обратную связь и самому делать следующий шаг. Стенд делается относительно легко, технология «фанера + тросы в пвх + термоклей» рабочая, предлагаю использовать наш опыт.
"""
ARTICLE = process_text(ARTICLE)
response = summarizer(ARTICLE, max_new_tokens=360, num_beams=2, do_sample=True, top_k=100,
repetition_penalty=2.5, length_penalty=1.0)
summary = process_text(response[0]["summary_text"])
print(summary)
# Трогательный инженерный бизиборд, сделанный для московского психоневралогического интерната, был сделан самим автором. Он использовал парные раскручивающиеся фитинги из пластика, никелированной стали, бронзы, чугуна оцинкованного и черного чугуна, а также детские труд и инструменты. В новогоднюю ночь стенд был отправлен в Азовский интернат для умственно отсталых детей. Автор выражает благодарность волонтерам, которые помогли сделать этот стенд, и предлагает использовать их опыт для улучшения ситуации в интернате.
💡 History of Approaches
The metrics on the test dataset depending on the approach are presented in the following table:
# | extra | SFT | DPO | post - processing | Metric |
---|---|---|---|---|---|
1 | ✓ | 0.5168 | |||
2 | ✓ | ✓ | 0.5525 | ||
3 | ✓ | ✓ | ✓ | 0.5664 | |
4 | ✓ | ✓ | ✓ | 0.6075 |
At the initial stage, the following problems were identified in the model, which negatively affected the metric:
-
Generation of byte sequences.
The problem was solved through pre - and post - processing.
-
The model often did not complete the last sentence.
This was solved through post - processing by cutting off the incomplete part. For the final model, post - processing makes a small contribution to the metric.
-
Repetition and paraphrasing of text fragments.
In the final model, the problem is significantly mitigated, but repetitions may still occur.
1. SFT
- Make a slice from the training dataset according to the rule
metric > 0.65
. - Split the obtained slice into training and validation parts in a ratio of 4:1.
- Train for 4 epochs with a decreasing step, starting from 1e - 4.
2. SFT + post - processing
- Apply the
process_text
function from the example to the model's text response.
3. SFT + DPO + post - processing
- Perform inference on the training slice using the SFT model.
- One epoch of DPO on the obtained candidates with a step of 1e - 7.
4. Extra + SFT + post - processing
Extra means training more on a larger dataset.
- Perform inference using the model obtained in the previous step on half of the original training dataset.
- Combine with the previous generations and select the best candidate for each article.
- Make a new slice of candidates according to the rule
metric > 0.65
, resulting in a 30% increase in the dataset. - Train from scratch for 8 epochs with a decreasing step, starting from 1e - 4.
😕 What Didn't Work
It was not possible to implement the configuration extra + SFT + DPO [+ post - processing]
due to unstable training. From a certain point, the model started to degrade.
💡 Possible Improvements
In the fourth approach (extra and etc.), approximately 20% of the entire original training dataset was used. By only changing the generation parameters and running inference again, a larger number of candidates passing the threshold metric > 0.65
can be obtained. It is assumed that training the model on a dataset with a larger number of high - quality candidates (due to increased diversity) should lead to an increase in the target metric.
📄 License
The project is licensed under the Apache 2.0 license.






