Нишпорка 0.24.0: нові моделі для рукописів XVIII–XIX століть
Версія 0.24.0 оновлює всі три моделі розпізнавання рукописного тексту. На метричних книгах XVIII століття прізвище потрапляє в правильний запис у шість разів частіше, ніж у попередній версії. У польському канцелярському курсиві помилкових символів на 38% менше, а слів, прочитаних без жодної помилки, у 1,6 раза більше. Швидкість обробки справи на одній карті Tesla V100 практично не змінилась, а в хмарному режимі на двох таких картах зросла приблизно на 70%.
Що змінено
- Писар (кирилиця, основна модель) — версія 19. Навчена з додатковою ручною розміткою метрик XVIII ст.
- Дяк-Літописець (кирилиця, друга модель) — нове покоління Дяка на відкритій основі PP-OCRv6.
- Скриба PPv3 (латинка: польський і латинський курсив) — нова модель на тій самій основі, навчена на 28 почерках.
Новий рушій kraken 7.1
Нові моделі побудовано на іншій архітектурі (PP-OCRv6), і правильно вона працює лише на kraken 7.1. Тому це оновлення більше за звичайні: після nysh update треба оновити й сам рушій читання (nysh htr install).
Kraken у Нишпорці пропатчений: шість патчів швидкості, звірених на новій версії, тримають обробку справи на одній карті Tesla V100 на попередньому рівні, а латинку на тій самій карті читають майже вдвічі швидше. Розбивка сторінок на рядки, порахована старою версією, читається новою без перерахунку.
Якість розпізнавання
Попередню й нову версії порівняно на однакових сторінках, на одній машині, з повторним розпізнаванням з нуля.
| Матеріал і міра | Було | Стало |
|---|---|---|
| Метричні книги XVIII ст. (ЦДІАК ф.224, 657 записів): прізвище в правильному записі, понад випадковий збіг | 0,038 | 0,231 |
| Те саме, ім'я | 0,142 | 0,317 |
| Польський нотаріат (ДАВіО ф.792, рядки поза навчанням): частка помилкових символів | 20,9% | 12,9% |
| Те саме: слова, прочитані без жодної помилки | 27,4% | 45,0% |
| Протокол Подільського дворянського зібрання 1802 р. (почерк поза навчанням): частка помилкових символів | 32,5% | 26,5% |
| Метрики XIX ст. (2808 прізвищ з еталонного набору): знайдено | 54,9% | 55,2% |
| Пошук конкретного роду на 72 сторінках метрик XIX ст.: сторінок знайдено обома моделями разом | 65 | 64 |
«Понад випадковий збіг» — частка записів, де прізвище з ручного реєстру знайдено в тому самому записі розпізнаного тексту, за відрахуванням збігів, які дала б випадкова сторінка. Еталон — ручні регести дослідниці, складені незалежно від розпізнавання.
На книгах XIX століття якість збережена на попередньому рівні. Друга модель Дяк-Літописець рідше плутає шукане прізвище з подібним прізвищем сусідньої родини: на контрольних сторінках таких помилок одна проти чотирьох.
Швидкість і вартість
| Режим | Було | Стало |
|---|---|---|
| Повна справа на одній карті Tesla V100 (271 сторінка, усі етапи, один процес) | 1871 с | 1918 с |
| Латинка: розпізнавання однієї сторінки, Tesla V100 | 1,86 с | 0,99 с |
| Хмара, машина з двома картами Tesla V100 (16 ГБ): сторінок за годину, кирилиця, справа 606 стор. | ≈ 4600 | ≈ 8000 |
| Хмара, та сама машина (оренда $0,244/год): вартість тисячі сторінок, кирилиця | ≈ $0,05 | ≈ $0,03 |
Нові кириличні моделі більші, але найдовший етап обробки сторінки — визначення рядків — не змінився, тож повна справа на одній карті Tesla V100 обробляється практично з тією самою швидкістю (+2,5%). У хмарному режимі нова версія вміщує на карті вдвічі більше паралельних процесів. Для справ із мішаним кириличним і латинським письмом, де працюють усі три моделі, на тій самій машині з двома картами Tesla V100 (16 ГБ) швидкість становить близько 5000 сторінок за годину.
Без відеокарти
Процесор Intel Core i7-9750H (6 ядер), щільна сторінка (~128 рядків), секунд на сторінку:
| Режим | Було | Стало |
|---|---|---|
| Кирилиця, дві моделі | ≈ 46 | ≈ 57 (+24%) |
Кирилиця, одна модель (--one-voice) |
≈ 42 | ≈ 42 |
| Латинка | ≈ 18 | ≈ 29 (+60%) |
| Справа 600 сторінок кирилиці, дві моделі | ≈ 7,7 год | ≈ 9,5 год |
Сповільнення стосується лише процесора: на карті Tesla V100 латинка, навпаки, читається майже вдвічі швидше. Велику справу швидше прочитати в хмарі (nysh cloud go).
На чому навчено
- Ручна розмітка рядків метричних книг XVIII ст. (ЦДІАК ф.224 та інші справи).
- Для латинки — 28 почерків: нотаріальні книги ДАВіО ф.792, гродські книги Київського воєводства (ЦДІАК ф.2), протоколи Подільського дворянського зібрання (ДАХмО ф.230), списи душ Чечельницького деканату (ДАК ф.312), метрики римо-католицького костелу (ф.685), а також відкритий корпус голландських нотаріальних актів XIX ст.
- Основа нових моделей — PP-OCRv6 medium (Benjamin Kiessling, Inria; Zenodo, DOI 10.5281/zenodo.21788410), ліцензія Apache-2.0.
Обмеження
- На метриках другої половини XIX ст. Писар v19 знаходить прізвища приблизно на 1 відсотковий пункт рідше, ніж попередня версія.
- Окремі тести невеликі (143 рядки латинки; одна сторінка протоколу 1802 р.), тож різниці в 1–2 пункти на них не є значущими. Основні зміни (у шість разів на прізвищах XVIII ст., на 38% менше помилок у латинці) значно перевищують цю похибку.
- Для малих справ (до 100 сторінок) хмарна швидкість на машині з двома картами Tesla V100 нижча, близько 2000 сторінок за годину, через час запуску на кожну справу.
Інші зміни версії
Менше місця на диску
Бібліотека torch більше не ставиться двічі — поруч із застосунком і в рушії читання. Тепер вона лише в рушії; на Linux це звільняє кілька гігабайтів.
Хмара
- Партія справ готується за хвилини. Щоб вибрати машину, Нишпорка оцінює, скільки рядків на сторінці нечитаної справи. Тепер для партії ця оцінка береться з уже прочитаних справ того самого опису — 0,3 с замість ~85 с на справу. Партія з 25 метрик одного опису раніше стояла на такій оцінці 35 хв із 50 хв підготовки.
- Готова сегментація не рахується вдруге. Догін справи, повтор після обриву чи нова модель у ту саму теку беруть сегментацію попереднього прогону.
- Видно, які справи не поїхали. Вивід партії друкує «поїде N з M справ» і причину для кожної справи, що випала.
Завантаження
- Обірване завантаження продовжується з місця обриву, а не починається з нуля.
- На обмеження частоти запитів (429) Нишпорка чекає рівно стільки, скільки просить сервер.
- Файл із Wikimedia Commons звіряється з контрольною сумою SHA-1.
Супряга
- Якщо справа лежить у Супрязі кількома пакетами, Нишпорка бере той, що прочитаний найновішими бойовими моделями; якщо такого немає — попередніми; серед рівних — найсвіжіший.
- Нові жанри карток: метрична книга повна і неповна, шлюбні обшуки, довідкові видання (адрес-календарі, пам'ятні книжки), судові справи, станові справи (дворянство, родовідні книги), візитації, інвентарі, переписи, формулярні списки.
- Одиночна відмова з'єднання зі сховищем більше не вважається блокуванням: Нишпорка пробує ще раз.
- Якщо в теці лежить лише частина кадрів справи, пакування просить назвати кількість кадрів цілої справи. Раніше картка могла показати покриття понад 100%.
Питання й відповіді
Навіщо випускати нові моделі, якщо старий текст придатний?
Старий текст придатний, з ним усе гаразд. Нові моделі виходять, бо точніший текст робить пошук дешевшим і точнішим.
Агент, який шукає рід у прочитаному, мусить переглянути кандидатів і відкинути хибні збіги. Що більше помилок у тексті, то більше контексту доводиться розбирати й відкидати. Точніша модель дає менше хибних кандидатів: агент швидше знаходить потрібне місце, витрачає менше токенів і рідше щось пропускає.
Пропускаємо ми й зараз мало, але кожна нова модель цю частку зменшує. Нові моделі виходитимуть і надалі.
Чи мають цінність справи й внески, прочитані старими моделями?
Так. Пошук працює на тексті будь-якої з моделей: щоденні звіти пошуку роду, які ми розбираємо, дають знахідки й на справах, прочитаних попередніми версіями. Кожну знахідку перевіряють оком на кадрі, тож точність моделі впливає на те, скільки роботи до знахідки, а не на те, чи можна їй вірити.
Тому ваші внески в Супрягу потрібні вже зараз, на тих моделях, які є. Справи читаємо далі наявними моделями; коли вийдуть новіші, перечитати можна ту частину, де це варте зусиль.
Зроблена робота не пропадає і при перечитуванні: розбивка сторінок на рядки — найдовша частина читання — береться з кешу, і нові моделі читають ті самі рядки.
Чи треба тепер переганяти всі прочитані справи?
Ні. Усе прочитане лишається в пошуку і не застаріває.
Перечитування потрібне лише там, де хочеться максимального ефекту пошуку з меншими витратами: метрики XVIII ст., латинські й мішані справи, а також справи, де пошук роду нічого не знайшов. На книгах XIX ст. якість майже та сама (55,2% проти 54,9% знайдених прізвищ), тож перечитувати їх заради нових моделей потреби немає.
Перечитування дешевше за перше читання: готова розбивка сторінок на рядки береться з кешу. На одній карті Tesla V100 вона займає більшу частину часу сторінки (5,5 с із 8,9 с), тож перечитування приблизно вдвічі–втричі швидше. Достатньо знову запустити nysh read для справи — нові моделі підхопляться самі; у хмарі nysh cloud go бере готову розбивку автоматично.
Чи можна лишитися на старих моделях?
Так. Старі ваги лишаються на диску: поки нових не завантажено (nysh models get), Нишпорка читає ними, а щойно нові з'являться — бере найновіші бойові. Будь-яку справу можна прочитати явно названою моделлю: nysh read <справа> --model pysar_cyr_v17.pt.
Після оновлення самої Нишпорки потрібно оновити рушій читання (nysh htr install): без цього читання не запуститься. Старі моделі на оновленому рушії працюють, як і раніше.
Який текст Нишпорка бере із Супряги?
Якщо справа лежить у Супрязі кількома пакетами, Нишпорка бере той, що прочитаний найновішими бойовими моделями; якщо такого немає — попередніми; серед рівних — найсвіжіший. Так само для однієї справи й для цілого фонду чи опису. Біля кожної справи в каталозі видно, якими моделями її прочитано. Прийнята справа приходить з усіма своїми прочитаннями (голосами), і пошук іде по всіх них.
Якщо справу вже взято, а в каталозі з'явився пакет тієї самої справи, прочитаний новішими моделями, замінити взяте можна командою nysh share pull … --force.
Для тих, хто оновлюється з версій до 0.22: перенос обліку справ
Якщо ви оновлюєтесь із версії, старішої за 0.22, оновлення включає перенос обліку справ на нові ключі. Це єдиний крок, який змінює ваші дані, тому його варто зробити уважно.
У ключі кожної справи тепер завжди є опис: REPO/фонд/опис/справа, наприклад DAHMO/315/1/8433. Якщо опис невідомий, на його місці стоїть _. Раніше опис входив у ключ лише в частині фондів, і дві книги з однаковим номером у різних описах (наприклад, ДАДнО 193-1-213 і 193-3-213) мали один ключ.
Переносяться: сховище сторінок, прив'язки прогонів, вердикти справ і рядків, журнал пошуку, картки Супряги, черга справ і профілі вичитки.
Порядок дій
- Зупиніть інші сесії й фонові процеси, що пишуть в облік. Поки вони працюють, перенос не почнеться.
- Подивіться план:
nysh cases rekey. Він показує, що перейменується, що зіллється і що перенести не вдасться. - Перевірте злиття. Якщо одна справа мала вердикти під двома старими ключами, чинним стане пізніший, а інший збережеться поруч як замінений.
- Виконайте перенос:
nysh cases rekey --apply. Перед змінами створюється архів уdata/cases/rekey/<час>/; збій посередині повертає простір у попередній стан. - Справам з невідомим описом (
_) допишіть опис у паспорт (nysh case <тека> --shifra "…") і повторітьnysh cases rekey --apply.
Що варто знати
- До переносу читання й пошук працюють, але запис в облік відмовляє з підказкою, яку команду виконати.
- Відкат —
nysh cases rekey --rollback. Якщо після переносу облік уже змінювався, відкат відмовляє з переліком змінених файлів;--rollback --force— лише свідомо. - Старі ключі в нотатках і повідомленнях і далі ведуть до своєї справи через карту переїзду (
data/cases/key_moves.json).
Як оновитись
Після nysh update потрібні дві команди: nysh htr install (оновлює рушій читання на місці) і nysh models get (нові ваги, близько 225 МБ). Нишпорка сама читає найновішими бойовими моделями, якщо вони є на диску; якщо їх ще не завантажено — попередніми. Нічого перемикати вручну не треба.
Як проводилось порівняння
Обидві версії обробляли ті самі 271 сторінку на одній орендованій машині з картою Tesla V100, без сторонніх процесів; кожна сторінка розпізнавалась з нуля. Хмарну швидкість виміряно окремо на машині з двома картами V100 на справі з 606 сторінок. Сторінки, які використовувались для навчання моделей, з порівняння виключено. Процесорні заміри — на Intel Core i7-9750H, три щільні сторінки ДАК 312-1-27.