saarus72's picture
Reference correct package
8c2476b verified
|
raw
history blame
No virus
4.66 kB
metadata
language:
  - ru
license: apache-2.0

Russian text (number) normalization

Finetuned version of FRED-T5 large 820M.

Code repo.

Trained on ficbook, librusec and pikabu sentences, inverse text normalized using modified version of word_to_number_ru package. Haven't trained anything yet but number normalization.

Usage

Put numbers inside of squared brackets and follow with T5 tokens <extra_id_0>, <extra_id_1> and so on. One is advised to split numbers on groups by 3 digits always and do not put anything else inside of [ ] brackets.

import torch
from transformers import GPT2Tokenizer, T5ForConditionalGeneration 


device='cuda'
tokenizer = GPT2Tokenizer.from_pretrained('saarus72/russian_text_normalizer', eos_token='</s>')
model = T5ForConditionalGeneration.from_pretrained('saarus72/russian_text_normalizer').to(device)
lm_text = '<SC1>Было у отца [3]<extra_id_0> сына, но не было даже [2-3]<extra_id_1> пиджаков с блёстками за [142 990]<extra_id_2> руб.'
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:]))
# '<extra_id_0>  три\n <extra_id_1>  двух- трёх\n <extra_id_2>  сто сорок две тысячи девятьсот девяносто\n</s>'

More examples

Model input After replacement Is correct
<SC1>Временами я думаю, какое применение найти тем [14 697]<extra_id_0> рублям, что лежат уже больше [33]<extra_id_1> лет? Временами я думаю, какое применение найти тем четырнадцати тысячам шестистам девяносто семи рублям, что лежат уже больше тридцати трёх лет? Yes
<SC1>я купил iphone [12]<extra_id_0> за [142 990]<extra_id_1> руб без [3-x]<extra_id_2> часов полдень и т.д. я купил iphone двенадцатый за сто сорок две тысячи девятьсот девяносто руб без трех часов полдень и т.д.? Yes
<SC1>В школе у меня одни [5]<extra_id_0>. В школе у меня одни пятые. No (пятёрки is correct)
<SC1>Было у отца [3]<extra_id_0> сына. Старшему было [35]<extra_id_1>, среднему - не меньше [33]<extra_id_2>, а младший на [4]<extra_id_3> младше всех. Бывает. Было у отца три сына. Старшему было тридцать пять, среднему - не меньше тридцати трех, а младший на четыре младше всех. Бывает. Yes
<SC1>я подарю тебе [1 000 000]<extra_id_0> алых роз, я научу тебя смеяться я подарю тебе миллион алых роз, я научу тебя смеяться Yes
<SC1>запомни телефон — [8 9 555 35 35]<extra_id_0>, проще позвонить, чем занимать запомни телефон — восемь девять пятьсот пятьдесят пять тридцать пять тридцать пять, проще позвонить, чем занимать Yes
<SC1>стоимость айфон [32]<extra_id_0> — всего [189 553 600]<extra_id_1> руб.! стоимость айфон тридцать два — всего сто восемьдесят девять миллионов пятьсот пятьдесят три тысячи шестьсот руб.! Yes
<SC1>[91 957 552 336]<extra_id_0> минус [3 474 354 354]<extra_id_1> равно ? Девяносто девять миллиардов пятьдесят семь миллионов пятьсот пятьдесят два миллиона триста тридцать шесть минус три миллиарда четыреста семьдесят четыре тысячи триста пятьдесят четыре тысячи триста пятьдесят четыре равно ? No :(