Я з Беларусі і кожны пост у гэтым блогу выходзіць яшчэ і па-беларуску. GPT-3 цяпер відавочны памочнік для такой працы, а плацяць за яго па токенах. Перш чым ім карыстацца, я хацеў ведаць, колькі там каштуе беларуская.
На старонцы дапамогі OpenAI пра токены ёсць правіла на вока: 1 токен гэта прыкладна 4 сімвалы англійскага тэксту. Я ўзяў гэтае правіла і ў галаве перанёс яго на рускую з папраўкай. Кірылічная літара ў UTF-8 займае 2 байты, токенізатар працуе з байтамі, значыць руская павінна каштаваць прыкладна ўдвая даражэй, мабыць, крыху больш. На той жа старонцы ёсць прыклад па-іспанску і фраза пра тое, што іншыя мовы бываюць даражэйшыя. Я яе прапусціў і ніводную з дзвюх моваў так і не палічыў.
Перад падлікам я запісаў сваю здагадку: руская прыкладна ў 4 разы даражэй за англійскую, беларуская прыкладна ў 5. Яна ўсё роўна аказалася заніжанай.
Як мераў
Корпус гэта FLORES-101 devtest, які Facebook выклаў у чэрвені мінулага года. У ім 1012 сказаў, перакладзеных людзьмі з англійскай на 100 іншых моваў, так што сэнс аднолькавы і змяняецца толькі мова. Я ўзяў англійскую, рускую, беларускую, а для параўнання ўкраінскую і польскую. Кожны сказ кадуецца асобна, без службовых токенаў. Падатак гэта колькасць токенаў мовы, падзеленая на колькасць токенаў англійскай на тым жа токенізатары.
У артыкуле пра GPT-3 сказана, што мадэль выкарыстоўвае токенізацыю GPT-2. Гэта BPE на ўзроўні байтаў і яго слоўнік адкрыты з 2019 года. Акрамя яго я ўзяў яшчэ 4 токенізатары. ruGPT-3 ад Сбера навучаны на рускай. mBERT, XLM-R і mT5 шматмоўныя і беларуская была ў іх навучальных даных. Лічыў я бібліятэкамі tokenizers 0.12.1 і sentencepiece 0.1.96.
Для mBERT гэта лічылі да мяне. Ács у 2019 годзе разабрала яго слоўнік і вымерала, як ён рэжа словы ў 54 са сваіх 104 моў. Rust з суаўтарамі ў мінулым годзе параўналі яго з аднамоўнымі токенізатарамі, руская там таксама ёсць. Я не знайшоў нікога, хто прагнаў бы беларускую праз токенізатар GPT-3 або параўнаў бы яе на кірыліцы і на лацініцы на адных і тых жа сказах.
У 6,47 раза
На GPT-2 англійскі корпус займае 27044 токены. Руская ў 5,68 раза больш, беларуская ў 6,47. Украінская 5,71, амаль як руская. Польская, якая пішацца лацініцай з дыякрытыкай, 2,68.
Па цане Davinci, 0,06 долара за 1000 токенаў, англійскі корпус каштуе 1,62 долара, а беларускі 10,50. Базавая мадэль Davinci прымае 2048 токенаў на запыт і адказ разам. Сярэдні англійскі сказ тут займае 27 токенаў, беларускі 173, таму ў акно змяшчаецца 76 англійскіх сказаў і 11 беларускіх.
Шматмоўныя токенізатары нашмат мякчэйшыя: на XLM-R руская ў 1,16 раза даражэй за англійскую, беларуская ў 1,45, на mBERT беларуская ў 1,99.
Потым я захацеў паглядзець на сам слоўнік. Першы падлік паказаў, што кірыліцы ў GPT-2 няма зусім. Так быць не можа, бо ў рускай выйшла 1,08 токена на сімвал, а не каля 1,8, столькі, колькі ў яе байтаў на сімвал. Я забыўся перавесці байтавыя кавалкі назад у тэкст перад пошукам. Другі падлік знайшоў 18 запісаў з кірыліцай сярод 50257. 17 з іх гэта адзіночныя малыя літары: о, а, е, и, т і іншыя частыя ў рускай. Любая іншая літара гэта 2 токены, яе 2 байты. Вялікія літары таксама па 2 токены.
Выходзіць, GPT-2 чытае кірыліцу па літарах, а беларуская часцей карыстаецца дарагімі літарамі. Літары ў і і ў гэтыя 17 не ўваходзяць, разам гэта 7,4% усіх беларускіх літар. Калі дадаць з, ц, ч, ш, вялікія і астатнія, па 2 токены каштуюць 29,1% беларускіх літар супраць 17,0% рускіх. Да таго ж у беларускім перакладзе прыкладна на 4% больш літар. Падлік адных толькі літар, па 1 або 2 токены на кожную, тлумачыць прыкладна 90% з тых 21598 токенаў, якія беларуская траціць звыш рускай.
Лацініца
У беларускай ёсць свая лацініца, лацінка, з č, š, ž, ŭ і ł. Калі кошт ідзе ад алфавіта, то тыя ж словы лацінкай павінны выйсці на GPT-2 значна танней. Я напісаў грубы канвертар з класічнымі правіламі для ł/l, ia/ja і мяккага ś перад мяккім зычным. Выключэнняў для запазычанняў у ім няма. Беларускі чытач знойдзе ў яго выніку памылкі, але словы застаюцца тымі ж, мяняюцца толькі літары.
На GPT-2 лацінка ў 2,98 раза даражэй за англійскую, а не ў 6,47, гэта значыць рахунак падае на 54%. “навукоўцы” гэта 12 токенаў на кірыліцы і 5 у выглядзе “navukoŭcy”. Гэтая частка супала з чаканнем, я запісаў: прынамсі на 30% танней.
Потым я прагнаў тое ж пераўтварэнне на астатніх 4 токенізатарах і на кожным выйшла наадварот. На mBERT лацінка на 6% даражэй за кірыліцу, на ruGPT-3 на 52%, mT5 і XLM-R пасярэдзіне. 3 шматмоўныя токенізатары бачылі беларускую на кірыліцы падчас навучання. Думаю, яны вывучылі яе кавалкі, а лацінскае напісанне тых жа слоў у іх даных сустракалася рэдка, асабліва ŭ. На XLM-R “навукоўцы” гэта 2 токены, на адзін менш, чым рускае “учёные”. Лацінкай гэтае слова займае 4. У слоўніку ruGPT-3 усяго 2 запісы з літарай ў, але там, хутчэй за ўсё, працуе тое ж самае. Ён вывучыў кірылічныя кавалкі на рускай, а лацінка іх выкідае.
Токенізатар суседа
ruGPT-3 уладкаваны гэтаксама, як GPT-2: BPE на ўзроўні байтаў на 50257 запісаў, толькі зліцці ён вывучыў на рускай. Для рускай Сбер зняў большую частку падатку: рускі корпус займае на ім 29833 токены, у 1,10 раза больш, чым англійскі на GPT-2.
Я чакаў, што беларускай гэта таксама дапаможа: мовы блізкія і большасць літар агульныя. На ruGPT-3 беларуская ў 2,12 раза даражэй за рускую. На GPT-2 разрыў быў усяго 1,14, бо абедзве мовы там абслугоўваліся аднолькава дрэнна. 78% рускіх слоў на ruGPT-3 змяшчаюцца ў адзін токен, а беларускіх 27%. “навукоўцы” займае 5 токенаў, “учёные” 1.
Зноў здавалася, што вінаватыя 2 літары. Я замяніў літару ў на у, а і на и ва ўсім беларускім корпусе. На GPT-2 гэта закрывае 42% разрыву з рускай, што адпавядае чытанню па літарах. На ruGPT-3 толькі 16%. Там у слоўніку цэлыя рускія словы, а беларускія словы проста іншыя і замена літар не робіць іх рускімі. Думаю, гэта і ёсць большая частка тых 2,12, але асобна я гэтага не вылучаў.
Чаго я не правяраў
- Толькі кошт у токенах. Ці горш GPT-3 адказвае па-беларуску, я не вымяраў.
- Мой канвертар у лацінку грубы. У першай версіі не было ji пасля галосных і мяккага ś. Калі я іх дадаў, GPT-2 зрушыўся з 2,91 да 2,98, а астатнія 4 засталіся даражэйшымі за кірыліцу. Акуратная ручная транслітарацыя можа зрушыць лічбы яшчэ крыху.
- FLORES гэта тэксты з праектаў Вікімедыя накшталт Вікінавін, перакладзеныя з англійскай. Тэкст, які адразу пісаўся па-беларуску, можа токенізавацца інакш.
- OpenAI можа змяніць токенізатар у новых мадэлях. Я лічыў на слоўніку GPT-2, пра які сам артыкул аб GPT-3 піша, што ён “распрацаваны для амаль цалкам англійскага навучальнага набору”.