--- language: - ru license: apache-2.0 --- # Russian text (number) normalization Finetuned version of [FRED-T5 large 820M](https://huggingface.co/ai-forever/FRED-T5-large). Code [repo](https://github.com/saarus72/text_normalization/tree/dev). Trained on [ficbook](https://huggingface.co/datasets/IlyaGusev/ficbook), [librusec](https://huggingface.co/datasets/IlyaGusev/librusec) and [pikabu](https://huggingface.co/datasets/IlyaGusev/pikabu) sentences, inverse text normalized using modified version of [Russian_w2n](https://github.com/Oknolaz/Russian_w2n) package. Haven't trained anything yet but number normalization. ## Usage Put numbers inside of squared brackets and follow with T5 tokens ``, `` and so on. One is advised to split numbers on groups by 3 digits always and do not put anything else inside of `[ ]` brackets. ```python import torch from transformers import GPT2Tokenizer, T5ForConditionalGeneration device='cuda' tokenizer = GPT2Tokenizer.from_pretrained('saarus72/russian_text_normalizer', eos_token='') model = T5ForConditionalGeneration.from_pretrained('saarus72/russian_text_normalizer').to(device) lm_text = 'Было у отца [3] сына, но не было даже [2-3] пиджаков с блёстками за [142 990] руб.' input_ids = torch.tensor([tokenizer.encode(lm_text)]).to(device) outputs = model.generate(input_ids, eos_token_id=tokenizer.eos_token_id, early_stopping=True) print(tokenizer.decode(outputs[0][1:])) # ' три\n двух- трёх\n сто сорок две тысячи девятьсот девяносто\n' ``` ### More examples | Model input | After replacement | Is correct | |---|---|---| | `Временами я думаю, какое применение найти тем [14 697] рублям, что лежат уже больше [33] лет?` | `Временами я думаю, какое применение найти тем четырнадцати тысячам шестистам девяносто семи рублям, что лежат уже больше тридцати трёх лет?` | Yes | | `я купил iphone [12] за [142 990] руб без [3-x] часов полдень и т.д.` | `я купил iphone двенадцатый за сто сорок две тысячи девятьсот девяносто руб без трех часов полдень и т.д.?` | Yes | | `В школе у меня одни [5].` | `В школе у меня одни пятые.` | **No (`пятёрки` is correct)** | | `Было у отца [3] сына. Старшему было [35], среднему - не меньше [33], а младший на [4] младше всех. Бывает.` | `Было у отца три сына. Старшему было тридцать пять, среднему - не меньше тридцати трех, а младший на четыре младше всех. Бывает.` | Yes | | `я подарю тебе [1 000 000] алых роз, я научу тебя смеяться` | `я подарю тебе миллион алых роз, я научу тебя смеяться` | Yes | | `запомни телефон — [8 9 555 35 35], проще позвонить, чем занимать` | `запомни телефон — восемь девять пятьсот пятьдесят пять тридцать пять тридцать пять, проще позвонить, чем занимать` | Yes | | `стоимость айфон [32] — всего [189 553 600] руб.!` | `стоимость айфон тридцать два — всего сто восемьдесят девять миллионов пятьсот пятьдесят три тысячи шестьсот руб.!` | Yes | | `[91 957 552 336] минус [3 474 354 354] равно ?` | `Девяносто девять миллиардов пятьдесят семь миллионов пятьсот пятьдесят два миллиона триста тридцать шесть минус три миллиарда четыреста семьдесят четыре тысячи триста пятьдесят четыре тысячи триста пятьдесят четыре равно ?` | **No :(** |