Opublikowano Dodaj komentarz

Nowa koleżanka w zespole, czyli o sztucznej inteligencji w służbie historii

— Mamy nową koleżankę w zespole! — wykrzyknęła Aneta, gdy dowiedziała się o wgraniu do Geneo pierwszych indeksów zindeksowanych przez sztuczną inteligencję (AI – Artificial Intelligence). Jak to się stało? Odpowiedzi szukajcie niżej.

Cyfryzacja i udostępnianie źródeł historycznych to kluczowy element zachowania dziedzictwa kulturowego. Wiele archiwów i bibliotek na całym świecie podejmuje wysiłki, aby udostępnić swoje zbiory online, umożliwiając badaczom i pasjonatom historii dostęp do cennych dokumentów. Jednym z wyzwań, jakie niesie ze sobą cyfryzacja, jest indeksacja i transkrypcja tych dokumentów, szczególnie tych pisanych odręcznie lub w trudnych do odczytania językach. W tym artykule przyjrzymy się, jak sztuczna inteligencja może pomóc w indeksacji na przykładzie list wyborców powiatu augustowskiego z 1906 roku, analizując zarówno sukcesy, jak i trudności związane z tym procesem.

Wykorzystanie sztucznej inteligencji w indeksacji

Sztuczna inteligencja, a w szczególności modele uczenia maszynowego, mogą być wykorzystane do automatycznego rozpoznawania tekstu (OCR) i indeksowania danych z zeskanowanych dokumentów. W przypadku list wyborców powiatu augustowskiego z 1906 roku, modele te mogą analizować zeskanowane strony, rozpoznawać poszczególne litery i cyfry, a następnie przypisywać je do odpowiednich kolumn w tabeli. Dzięki temu możliwe jest szybkie i efektywne tworzenie indeksów, które ułatwiają wyszukiwanie informacji o konkretnych osobach.

Trudności i wyzwania

Mimo postępów w dziedzinie sztucznej inteligencji, indeksacja historycznych dokumentów nadal stanowi wyzwanie. W trakcie pracy nad listami wyborców powiatu augustowskiego napotkałem kilka kluczowych problemów, które znacząco utrudniały automatyzację procesu:

  • Jakość skanów i stan dokumentów – Niektóre skany, czy raczej fotokopie były niewyraźne lub zawierały uszkodzenia, co powodowało błędy w rozpoznawaniu tekstu przez OCR.
  • Różnorodność czcionek i stylów pisma – Dokumenty historyczne często zawierają teksty pisane różnymi krojami pisma, co sprawia, że modele AI mogą mieć trudności z jednolitym rozpoznawaniem liter.
  • Język rosyjski i polski – Listy zawierają nazwiska polskie, ale imiona zapisane w formie rosyjskiej. Sztuczna inteligencja musiała nie tylko poprawnie rozpoznać tekst, ale także uwzględnić transliterację (np. „Иван” na „Jan”).
  • Niejednoznaczność danych – Niektóre nazwiska miały różne warianty pisowni, a pewne imiona powtarzały się wielokrotnie w różnych konfiguracjach.
  • Błędy w odczytywaniu wartości liczbowych – Kwoty podatków wyrażone w rublach i kopiejkach czy ilość posiadanego gruntu wyrażona w dziesięcinach były trudne do odczytania, szczególnie w przypadku uszkodzeń dokumentu lub nietypowego zapisu cyfr.

Moje doświadczenia i rozwiązania

Podczas indeksowania tej listy mieszkańców Augustowa musiałem podejmować decyzje dotyczące transliteracji oraz normalizacji danych. Jednym z rozwiązań było stworzenie listy reguł zamiany imion rosyjskich na ich polskie odpowiedniki, aby ujednolicić zapis. Dodatkowo weryfikacja błędnie rozpoznanych znaków przez OCR wymagała ręcznej korekty, co znacząco wydłużało czas pracy nad dokumentami.

W przypadku problemów z rozpoznawaniem nazwisk pomocne okazało się porównywanie wyników AI z bazą znanych nazwisk z regionu. Model musiał być również dostosowany do rozpoznawania nazwisk żydowskich, które miały specyficzną pisownię.

Prompt

Kluczem do otrzymania wyników jak najbliższych oczekiwaniom jest zbudowanie odpowiedniego polecenia dla AI, zwanego promptem. Na zakończenie procesu indeksacji posługiwałem się następującym promptem:

Odczytaj tekst z załączonego pliku i przetłumacz go z języka rosyjskiego na język polski. Jest to kontynuacja spisu mieszkańców miasta Augustowa z 1906 roku. Struktura jest następująca:
numer porządkowy
nazwisko
imię
imię ojca
wysokość podatku w rublach i kopiejkach
Pokaż wynik w postaci tabelarycznej na ekranie
Lista zawiera [xxx] nazwisk i tyle nazwisk powinno być w tabeli, którą wygenerujesz. Lista nie zawiera powtórzeń. Dodatkowe wskazówki: zwróć uwagę, że to w głównej mierze spis Polaków, więc imiona powinny być podane w notacji polskiej, np. nie Iwan, tylko Jan, nie Osip tylko Józef. Imię ojca pokaż również w formie podstawowej, np. Antoni, a nie Antonow czy Antonowicz. Na liście są też osoby narodowości Żydowskiej zamieszkujący wówczas licznie Augustów.

Oczywiście nie od razu powstało takie właśnie polecenie. Dochodziłem do niego systematycznie, obserwując jakość wyników względem swoich oczekiwań.

Różne modele AI

Indeksację próbowałem wykonywać przy pomocy różnych modeli uczenia maszynowego. Wszystkie z nich w przypadku nazwisk i imion starały się porównywać odczytane teksty z własnymi bazami danych i wnioskować, czy odczytany tekst w bazie istnieje (czy jest to nazwisko spotykane w regionie, czy jest to imię występujące w bazie imion polskich czy żydowskich) i znaleźć formę jak najbliższą odczytanemu tekstowi. Wynik jest podstawiany jako odczytany tekst. Przypuszczam, ze taka formuła bardzo dobrze sprawdza się w przypadku zwykłych tekstów, ale w przypadku list, gdzie kolejne pozycje nie są powiązane z poprzednią, może sprowadzić model uczenia maszynowego na manowce.

CoPilot od Microsofta spisał się w tym względzie dość słabo. Przypuszczam, ze było bardzo dużo błędów OCR, co spowodowało błędne, wręcz przypadkowe podstawianie wielu nazwisk. Z rozmysłem używam tu słowa „przypuszczam”, gdyż nie widziałem i nie jestem w stanie zobaczyć pośrednich kroków procesu indeksacji przez AI. Przydatność listy wynikowej była bardzo mocno ograniczona i szybko zaniechałem dalszych prac z tym modelem uczenia maszynowego.

ChatGPT od OpenAI był znacznie lepszy. Imiona były odczytywane i konwertowane do polskiego czy żydowskiego odpowiednika niemal perfekcyjnie. Nazwiska wymagały nieco poprawek, ale jak zauważyłem już wcześniej było to związane głównie z nieprawidłową interpretacją znaków alfabetu rosyjskiego, zwłaszcza tych, których obecnie się nie używa. Pojawiły się natomiast inne problemy. Mianowicie ChatGPT nie radził sobie dobrze z długimi listami. W przypadku listy zawierającej powiedzmy 80 osób pierwsze 40 było indeksowanych prawidłowo, a w kolejnych pojawiało się coraz więcej błędów, a pod koniec zindeksowane teksty miały się nijak do oryginalnego zapisu. Musiałem więc dzielić skany na mniejsze, zawierające nie więcej niż 40-50 pozycji, co znacząco wydłużało proces indeksacji. Nie wspomnę o tym, że po kilku poleceniach ChatGPT zachęcał mnie do przejścia na wersję płatną lub proponował odczekanie kilkunastu godzin.

Gemini od Google okazał się najlepszy do celów indeksacji. Po pierwsze znakomicie radził sobie z całymi stronami zawierającymi ok. 150-170 osób. Po drugie znakomicie odczytywał nazwiska i liczebniki. Właściwie na całą stronę poprawiałem po 2-3 nazwiska i były to poprawki typu Mezio -> Miezio lub Maksymowski -> Maksimowski. Jednak początki z tym modelem uczenia maszynowego nie były takie różowe. Na początku (prawdopodobnie na skutek nieprawidłowego polecenia) Gemini odmówił odczytywania rosyjskich dokumentów zasłaniając się brakiem OCR dla tego języka (co oczywiście nie jest prawdą)! Gdy jakoś przebrnąłem przez tę przeszkodę Gemini odmówił indeksowania spisu wyborców pisząc: „Na razie nie mogę udzielać odpowiedzi na pytania dotyczące wyborów i polityków”. I nie przekonywały go wyjaśnienia, że to spis wyborców sprzed niemal 120 lat! Stąd w konsekwencji zamiana „spis wyborców” na „spis mieszkańców” w poleceniu wydawanemu AI.

Ogólne spostrzeżenia są takie, że aby indeksacja poprzez AI była dobra lub bardzo dobra, fotografie czy skany stron powinny być wykonane w prawidłowym oświetleniu i z dużym kontrastem, powinny być rozłożone na płasko i nieuszkodzone. W takiej sytuacji AI rodzi sobie bardzo dobrze. Czy jednak w zbiorach historycznych dokumentów można takie „ładne” strony znaleźć? Czy można skanować idealnie mając je wpięte w grube księgi? Raczej nie.

Podsumowanie

Indeksacja historycznych dokumentów za pomocą sztucznej inteligencji to obiecujące narzędzie, które może znacznie ułatwić pracę historyków i badaczy. Mimo pewnych trudności i wyzwań, postępy w dziedzinie uczenia maszynowego pozwalają na coraz dokładniejsze i efektywniejsze indeksowanie danych. Moje doświadczenia pokazują, że choć AI jest niezwykle pomocnym narzędziem, nadal wymaga nadzoru i ręcznej korekty. W miarę rozwoju technologii możemy jednak spodziewać się coraz lepszych algorytmów, które pozwolą na jeszcze sprawniejszą cyfryzację i indeksację dokumentów historycznych. Jeszcze rok czy dwa lata temu eksperymenty jakie wykonałem byłyby nie do pomyślenia. Jak będą wyglądać procesy indeksacji maszynowej za rok czy dwa? Wkrótce się dowiemy.

Myślę, że ten sposób indeksacji będzie się coraz częściej gościć w pracach JZI.

Statystyczne post scriptum

Nie byłbym sobą, gdybym nie dołożył kilku statystyk. Wziąłem pod lupę mieszkańców Augustowa płacących zwykły podatek dochodowy. W spisie wymieniono ich 871, z czego 165 (19%) to byli Żydzi, a pozostali reprezentowali pozostałe wyznania (katolicy, ewangelicy, prawosławni). Łącznie obywatele miasta odprowadzili 4153 ruble 89 kopiejek podatku, z czego 2423 rubli 65 kopiejek (58%) odprowadzili Żydzi.

Najmniejszy płacony podatek dochodowy do kasy miejskiej odprowadził Stanisław Piotrowski, syn Jana i wynosił on zaledwie 16 kopiejek! Jaka była wówczas wartość nabywcza takiej kwoty? Za tę kwotę można było kupić 8 funtów chleba lub 3 litry mleka, albo funt cukru lub 16 funtów ziemniaków. Jednym słowem niewiele. Oczywiście 16 kopiejek to kwota odprowadzanego podatku, a nie dochodów, ale Stanisław Piotrowski musiał żyć w skrajnym ubóstwie.

Za to największa kwota podatku wynosiła 284 ruble i 22 kopiejki, a więc była prawie 1800 razy wyższa od kwoty podatku najniższego. Tym najmożniejszym był Żyd Dawid Warhaftig. Nie jest on wymieniany w "Księdze pamięci Żydów Augustowskich". O rozwarstwieniu społeczeństwa najlepiej świadczy jednak mediana, która wynosiła zaledwie 1 rubel i 58 kopiejek (połowa obywateli płaciła większy podatek niż 1,58 r., a połowa mniejszy). Porównajmy teraz mediany dla ludności żydowskiej i nieżydowskiej. Mediana podatku odprowadzanego przez Żydów wynosiła 5 rubli 63 kopiejki, a przez pozostałych 1 rubel 36 kopiejek. Można więc rzec, że przeciętny Żyd był 4 razy bogatszy od przeciętnego goja. Nie zaskakuje więc to, że wśród 10 najbogatszych (odprowadzających najwyższe podatki osobiste) obywateli Augustowa było 8 Żydów i tylko 2 Polaków. Tych dziesięciu odprowadziło co czwartego rubla, który trafił do kasy miejskiej.

Być może w przyszłości wrócę do analizy tych spisów w innej płaszczyźnie, bo to bardzo ciekawa analiza lokalnego społeczeństwa.

 
Dodaj komentarz