GPT3/GPT4 - Large Language Model as a tool for extracting knowledge from text - tests on excerpts from historical publications
(GPT3/GPT4 - Large Language Model jako narzędzie do wydobywania wiedzy z tekstu - testy na fragmentach publikacji historycznych)
English version: link
Testy modeli GPT-3 i GPT-4 udostępnionych przez API OpenAI przeprowadzane na fragmentach publikacji i opracowań historycznych w celu automatycznej ekstrakcji informacji, wyciągania ustrukturyzowanych danych ze źródeł dostępnych w formie nieustrukturyzowanej. Testowany materiał to głównie fragmenty biografii postaci historycznych.
- Wstępne informacje
- Literatura, blogi, repozytoria
- Porównanie dostępnych modeli GPT
- Uwagi techniczne
- Poprawność odpowiedzi
- Wiedza z kontekstu
- Relacje rodzinne postaci
- Funkcje i urzędy
- Lista instytucji
- Imię, nazwisko, data śmierci
- Lista urzędów
- Lista urzędów i funkcji w formie xml
- Relacje rodzinne
- Konwersja tekstu do formatu TEI
- Analiza NER fragmentu publikacji
- Inne przykłady
- Analiza 50 biogramów - relacje rodzinne
- Analiza 50 biogramów - relacje rodzinne - GPT4
- Przetwarzanie haseł SHG do formatu XML - GPT4
- Formatowanie wyników - JSON
- Indeterminizm i halucynacje
- Test modelu Nous-Hermes-13b
- Weryfikacja wyników zwracanych przez LLM - guardrails
- Przykład ekstrakcji informacji z biogramu PSB
- GPT i biogramy PSB - uwagi i wnioski
- Automatyczne tworzenie grafów wiedzy
- Test fine-tuningu modelu gpt-3.5-turbo
- Przetwarzanie 250 biogramów modelem gpt-3.5-turbo po fine-tuningu
- Rozwijanie skrótów w hasłach SHG
- SHG jako źródło wiedzy dla LLM
- SHG - podział na regesty z określeniem tematyki regestu
Definicja GPT-3 (napisana przez ChatGPT): "GPT-3 (Generative Pretrained Transformer 3) jest trzecią wersją sztucznej inteligencji opracowaną przez OpenAI. Jest to jeden z największych modeli językowych na świecie, który został wytrenowany na ogromnych zbiorach danych tekstowych, aby rozumieć i generować język ludzki. GPT-3 jest używany do wielu zastosowań, takich jak generowanie tekstu, tłumaczenie, odpowiadanie na pytania i rozumienie tekstu. Model ten wykorzystuje architekturę Transformer i jest w stanie uczyć się zadanie z niewielką ilością danych, co czyni go bardzo efektywnym i elastycznym narzędziem dla różnych zastosowań."
Testy GPT-3 zostały przeprowadzone poprzez API udostępnione przez firmę OpenAI, wykorzystano głównie model text-davinci-003
.
Istnieją ograniczenia podczas korzystania z API dotyczące liczby zapytań na minutę (3 tys.) i liczby przetworzonych tokenów na minutę (250 tys.).
Token jest rozumiany trochę inaczej niż zwykle w NLP, tu dłuższe wyrazy są rozbijane na krótkie tokeny 3-4 znaki, oprócz tego tokenem są też znaki interpunkcyjne itp. Podawane jest że średnio token to 4 znaki w języku angielskim, na stronie OpenAI jest narzędzie w którym (https://beta.openai.com/tokenizer) można wkleić tekst i zobaczyć ile zawiera tokenów.
Przykładowo biografia Edwarda Józefa Sedlaczka (Polski Słownik Biograficzny t. XXXVI, 1995-6, s. 137-138) zawiera 4433 znaków co przekłada się na 2291 tokenów. W przypadku tekstów polskich sytuację pogarszają polskie znaki, wygląda na to że każdy dwubajtowy unicodowy znak jest traktowany jako osobny token.
-
"Structured information extraction from complex scientific text with fine-tuned large language models" (Alexander Dunn, John Dagdelen, Nicholas Walker, Sanghoon Lee, Andrew S. Rosen, Gerbrand Ceder, Kristin Persson and Anubhav Jain) link
-
"Text Pattern Extraction: Comparing GPT-3 & Human-in-the-Loop Tool" (Maeda Hanafi) link
-
"Getting tabular data from unstructured text with GPT-3: an ongoing experiment" (ROBERTO ROCHA) link
-
"Advanced NER With GPT-3 and GPT-J" (Maxime Cupani) link
-
"Relationship Extraction with GPT-3. Accelerate knowledge graph construction with GPT-3" (Sixing Huang) link
-
"Language Models are Few-Shot Learners" (Tom B. Brown et al.) link
-
"Training language models to follow instructions with human feedback" (Long Ouyang et al., OpenAI) link
Najlepszy model text-davinci-003
(to jednocześnie najdroższy model językowy w OpenAI) ma ograniczenie do 4000 tokenów, przy czym dotyczy to wejścia i wyjścia razem.
Modele słabsze np. text-curie-001
czy text-babbage-001
dają w przypadku wyciągania danych z przekazanego tekstu wyraźnie gorsze wyniki np.:
Funkcje/urzędy z biografii Edwarda Sedlaczka wg. text-davinci-003
(przy standardowych ustawieniach parametrów, np. temperature
= 0.5):
- Kierownik literacki dwutygodnika lwowskiego „Przyjaciel Domowy” (1 VI 1882)
- Kancelista w konsulacie austriackim w Warszawie (1886)
- Konsulat austriacki w Kijowie (do 1895)
- Wicekonsulat w Batumi, Rosja (1896–7)
- Agencja konsularna w Nowosielicy, Rosja
- Agencja konsularna w Burgas, Bułgaria
- Wicekonsulat w Batumi, Rosja
- Wicekonsulat Burgas, Bułgaria
- Wicekonsulat Ploieşti, Rumunia
- Redaktor serii Wydawnictwa Towarzystwa imienia Piotra Skargi (ok 1910).
Funkcje/urzędy wg modelu text-curie-001
(parametry jak wyżej):
- literat
- urzędnik
- kierownik literacki dwutygodnika lwowskiego „Przyjaciel Domowy”
- posada kancelisty w konsulacie austriackim w Warszawie
- kierował kolejno wicekonsulatem w Batumi (Rosja, 1896–7), a od r.n. – agencją konsularną w Nowosielicy (Rosja), agencją konsularną w Burgas (Bułgaria), wicekonsulatem w Batumi, wicekonsulatem w Burgas i wicekonsulatem w Ploieşti (Rumunia)
Te słabsze modele, mają też większe ograniczenia: do 2 tys. tokenów w jednym zapytaniu, są jednak znacznie tańsze.
Parametr temperature
ma wartość 0.0 - 1.0, niższa wartość powoduje że odpowiedź jest bardziej konkretna, deterministyczna, mniej losowa i mniej kreatywna. Wyższa pozwala modelowi na więcej elastyczności. Alternatywnie można modyfikować domyślną wartość parametru top_p
= 1.0, zmniejszając jego wartość - nie jest jednak zalecane jednoczesne modyfikowanie obu parametrów (zob. API reference).
Wielokrotne uruchamianie tego samego zapytania może dawać nieco inne wyniki, jeżeli wartość parametru temperature jest większa od zera.
Zapytania uruchamiane przez API nie znają kontekstu zapytań uruchamianych chwilę przed, inaczej niż w trakcie rozmowy z ChatGPT, należy za każdym razem podawać całą informację w zapytaniu.
Ogromne znaczenie ma konstrukcja zapytania (prompt), całkiem poprawnie działają pytania w języku angielskim dotyczące podanego polskiego tekstu, czasem dają nawet lepsze rezultaty. Zadanie zlecone modelowi powinno być napisane językiem prostym, konkretnym, ale nie musi być bardzo krótkie. Dobry wpływ na jakość odpowiedzi mają podane modelowi przykłady, czego i w jakiej formie się spodziewamy.
Odpowiedzi modelu davinci-003 zadawane przez API, często różnią się od wyników pytań zadanych podczas 'rozmowy' z ChatGPT.
Model text-davinci-003
jest zoptymalizowany do generowania tekstów, sprawiających wrażenie że są przygotowane przez człowieka, lecz bez gwarancji że wszystkie informacje w nich są prawdziwe. Dotyczy to także sytuacji gdy nie zleca się modelowi wygenerowania tekstu na jakiś temat na podstawie jego wewnętrznej wiedzy, lecz model ma wyciągnąć informację z przekazanego mu tekstu. Szczególnie gdy parametr temperature
ma wyższą wartość, model potrafi 'zaokrąglać' informacje - jest bardziej kreatywny, np. przy przetwarzaniu biografii Edwarda Sedlaczka z parametrem temperature
= 1.0 model zapytany o funkcje i urzędy tej postaci generuje m.in. informację:
- Kierownik literacki prasy lwowskiej ("Dziennik dla Wszystkich”, „Dziennik Polski”, „Gazeta Lwowska”, „Gazeta Narodowa”, „Przyjaciel Domowy”) i warszawskiej („Biesiada Literacka”, „Echo”, „Kłosy”, „Kurier Codzienny”, „Kurier Warszawski”, „Niwa", "Słowo", "Tygodnik Ilustrowany", "Tygodni Mód i Powieści" , "Tygodnik Powszechny" i "Wiek").
Tymczasem w rzeczywistości bohater biografii był kierownikiem literackim tylko pisma "Przyjaciel Domowy".
Po obniżeniu wartości temperature
do 0.0 zwracana jest już prawdziwa informacja:
- Kierownik literacki dwutygodnika lwowskiego „Przyjaciel Domowy” (1 VI 1882)
Wpływ ma jakość odpowiedzi mają także parametry frequency_penalty
(standardowo wartość 0.8)
i presence penalty
: kontrolujący tendencję modelu do powtarzania generowanych słów oraz zachęcający model do generowania nowatorskich sformułowań. Manipulowanie nimi spowodowało na przykładowym biogramie Sedlaczka wygenerowanie fałszywego przybliżenia, zamiast:
- Kancelista w austriackim konsulacie w Kijowie (1895)
otrzymujemy:
- Konsul w Kijowie (1882-1895)
gdzie odpowiedni fragment biografii brzmi: "Później pełnił takąż funkcję w austriackim konsulacie w Kijowie (do r. 1895)". Ta skłonność do 'halucynacji' jest jednym z głównych problemów przy ekstrakcji informacji z tekstów historycznych, oczywiście dane wyciągane przez model musiałyby być weryfikowane przez ludzkiego eksperta, warto również przeprowadzić test na większej próbie testów i ocenić poprawność (i kompletność) zwracanych przez model danych.
Najbardziej przydatne wartości parametrów (w przypadku wyciągania informacji z tekstów):
- temperature: 0
- top p: 1.0
- frequency penalty: 0.0
- presence penalty: 0.0
To w czym model bywa zadziwiająco dobry, to umiejętność wyciągania informacji z kontekstu. Dłuższy fragment tej samej biografii Sedlaczka związany jego pracą kancelisty brzmi: "W r. 1886 S. otrzymał posadę kancelisty w konsulacie austriackim w Warszawie – zapewne za poparciem Władysława Łozińskiego, który opiekował się jego karierą także w l.n. Później pełnił takąż funkcję w austriackim konsulacie w Kijowie (do r. 1895)". z czego model (uruchomiony z właściwymi parametrami!) wyciąga informację:
- Kancelista w austriackim konsulacie w Kijowie (1895)
Co nie jest przecież (nazwa funkcji/urzędu) podane wprost.
Podobny przykład występuje w biografii Ludwika Mortęskiego (Polski Słownik Biograficzny t. XXII, 1977, s. 9-11), model wyszukał informację o urzędzie sprawowanym przez bohatera biografii:
- Kasztelan elbląski (1516–1539)
na podstawie wpisu "Jako kasztelan gdański brał M. udział w licznych komisjach powoływanych przez króla dla rozstrzygania spraw spornych na terenie Prus Królewskich. Dn. 4 III 1516 przeszedł M. na kasztelanię elbląską (po zmarłym Janie Wulkowskim) i trzymał ją do śmierci.".
Model: text-davinci-003
Text: biografia Ludwika Mortęskiego (zm. 1539), w języku polskim.
(Polski Słownik Biograficzny t. XXII, 1977, s. 9-11)
Prompt: From this text extract information about parents, wife, children and grandchildren for the person Ludwik Mortęski
Result: Parents: Ludwik (possibly) and Anna
Wife: Elżbieta z Dąbrówki
Children: Katarzyna, Dorota, Gertruda, Elżbieta, Małgorzata, Ludwik and Melchior
Grandchildren: Magdalena Mortęskiej and Ludwik
Prompt: From this text, extract information about the offices, functions and positions held by the person Ludwik Mortęski, present them in the form of a list
Result: Offices, Functions and Positions Held by Ludwik Mortęski:
- Kasztelan gdański (1512–1516)
- Kasztelan elbląski (1516–1539)
- Representative of Prussian States to King Kazimierz Jagiellończyk (1492)
- Member of the Delegation of Prussian States to the Election of a Polish King (1506)
- Podkomorzy chełmiński at the Malbork Assembly of Prussian States with Representatives of King Aleksander Jagiellończyk (1503)
- Representative of Prussian States to Bishop Hiob von Dobenecka (1507)
- Representative of Prussian States to King Zygmunt I at the Krakow Sejm and Malbork Assembly (1508, 1509, 1511)
- Defender of Nobility Rights in Discussions at Assemblies and Sejmik in Elbląg, Malbork, Grudziądz and Gdańsk (1507-1530).
- Opponent to Wojewodas Jan Dabrowski and Mikołaj Wulkowski in 1509
- Member on Commissions Appointed by the King for Resolving Disputes in Prussia Królewskich(after 1512).
- Starostwo pokrzywnickie(1505).
- Starostwo Pokrzywno with Villages Okonin, Nicwałd, Węgrowo Skarszewo Nowawieś i Wiewiórki as a Feudal Estate from Zygmunt Stary for Military Service(1521).
Prompt: From this text, extract information about institutions related to the the person Ludwik Mortęski, present them in the form of a list.
Result: Institutions related to Ludwik Mortęski:
- Stały Sejmik Prus Królewskich
- Kapituła Warmińska
- Rada Pruska
- Sejmik w Malborku (listopad 1530)
- Sejmik w Grudziądzu (12/1511)
- Sejm w Krakowie (1/18/1508)
- Sejm w Malborku (28/5-8/6/1508)
- Zamek Radzyń w ziemi chełmińskiej
- Zamek Pokrzywno
- Kasztelania Gdańska (4/3/1512)
- Kasztelania Elbląska (4/3/1516)
Prompt: From this text give the name, surname and date of death of the main character. Show the result in the form of a table.
{TEXT}
| Name | Surname | Date of death |
Result:
| ------ | ----------------------- | ---- |
| Ludwik | Mortęski (de Mortangen) | 1539 |
| ------ | ----------------------- | ---- |
Text: biografia Mikołaja z Woli (zm. 1346 lub 1347) - w języku polskim. (Polski Słownik Biograficzny t. XXI, 1976, s. 151)
Prompt: From this text, extract information about the offices, held by the person Mikołaj z Woli, present them in the form of a list
Result:
List of offices held by Mikołaj z Woli:
- Kasztelan kruszwicki
- Starosta kujawski
- Podkomorzy brzeski
- Asesor sądu ziemskiego w Inowrocławiu
Text: biografia Edwarda Józefa Sedlaczka (Polski Słownik Biograficzny t. XXXVI, 1995-6, s. 137-138)
Prompt: From this text, extract information about the offices,
functions and positions held by the person Edward Józef Sedlaczek, present them in
the form of xml: <xml><person><office>office, function or position</office><person></xml>
Result:
<xml>
<person>
<name>Edward Józef Sedlaczek</name>
<office>Literat</office>
<office>Kierownik literacki dwutygodnika lwowskiego „Przyjaciel Domowy”</office>
<office>Kancelista w konsulacie austriackim w Warszawie</office>
<office>Kierował wicekonsulatem w Batumi (Rosja, 1896–7)</office>
<office>Agencją konsularną w Nowosielicy (Rosja)</office>
<office>Agencją konsularną w Burgas (Bułgaria)</office >
< office > Wicekonsulatem w Batumi </ office >
< office > Wicekonsulatem w Burgas </ office >
< office > Wicekonsulatem w Ploieşti (Rumunia) </ office >
< office > Redagował serię Wydawnictwa Tow. im. P. Skargi </ office >
</person>
</xml
Text: biografia Andrzeja Rosickiego (1814-1904), (Polski Słownik Biograficzny t. XXXII, 1989-1991, s. 82)
Prompt: From this text extract information about parents, wife, siblings, children and grandchildren for the main character
Result:
Parents: Walenty and Marianna z Idzikowskich
Wife: Anna z Robowskich
Siblings: Unknown
Children: Józefa Konstancja (born 1859), Antonina Wiktoria (born 1863) and Piotr Michał (born 1862)
Grandchildren: Unknown
Text: Fragment Bullarium Poloniae.
Prompt: Tag text and convert to TEI XML format.
Result:
<tei xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Francisco Cruswicz magistro in theologia</title>
</titleStmt>
</fileDesc>
</teiHeader>
<text xml:lang="lat">
<p><persName ref="#Cruswicz">Francisco Cruswicz</persName>, magistro in theologia [in civitate Constantiensi commoranti]: Eidem decano eccl. s. Floriani extra muros Crac. (<amt type="currency" quantity="15" unit="argentum polonorum">15 m. arg.</amt> p.), canonica-tus in eccl. s. Michaelis in castro Crac.(<amt type="currency" quantity="12" unit="argentum polonorum">12 m.</amt>. arg p.), per obitum apud SA ea vacante Nicolai Falkemberg vacans, confertur.;s. m scholastico et cantori ac custodi Crac.<num value="11">XI</num>,<num value = "13">XIII</num>. </p>
</text>
</tei>
Text: Fragment publikacji Stanisława Bodniaka "Polska a Bałtyk za ostatniego z Jagiellona" (1946):
Było to w roku 1552. Już od czerwca bawił król Zygmunt August w pomorskiej ziemi, lipiec i sierpień spędził w Gdańsku, we wrześniu po kilkudniowym pobycie w Malborgu w czasie sejmiku podążył do Królewca na zaproszenie ks. Albrechta. Towarzyszyli mu w podróży hetman Jan Tarnowski, marszałek koronny Piotr Kmita, bp. Stanisław Hozjusz, kanclerz Jan Ocieski, podkanclerzy Jan Przerębski i inni przedniejsi senatorowie i dostojnicy polscy obok przedstawicieli świata umysłowego w osobach Marcina Kromera, Szymona Maricjusa-Czystochlebskiego i Łukasza Górnickiego. Orszak dworzan i rycerstwa przenosił 5 tysięcy osób. Najokazalej podejmował swego władcę Gdańsk, cały roztaczając przed nim przepych, na jaki pozwalało miastu u ujścia Wisły rosnące pod polskim panowaniem bogactwo. Stawił się tam z Zachodniego Pomorza ks. Barnim XI w 300 koni i ze znaczną liczbą pomorskiej szlachty, ażeby spotkać się ze swym dostojnym krewniakiem i suwerenem z tytułu lenna na Lęborgu i Bytowie. W programie gdańskim przyjęcia, obfitującym w uczty, zabawy i gry rycerskie, nie zapomniano o morzu. W dniu 13 lipca zwiedził król w towarzystwie ks. Barnima statek na stoczni w Gdańsku i przyglądał się jego spuszczeniu na wodę. W tydzień później (20 VII) wybrał się barką, wybitą czerwonym suknem i przybraną chorągiewkami, na obejrzenie warowni, nazywanej wówczas „Latarnią” albo „wieżą”,* położonej u ujścia Wisły. Gdy tam wchodził, grzmiały na jego cześć działa warowni i okrętu „Żelazny Henryk", naprzeciw niej umieszczonego , miotając na morze ogniste kule, Po posiłku w warowni powrócił na swą barkę i popłynął dalej — na Bałtyk, wtedy spokojny. Wielu także panów polskich z otoczenia zapuściło się daleko na fale, korzystając z pogody.
Prompt: W podanym tekście wyszukaj informacje o osobach, znalezione osoby wypisz w formie listy, jeżeli są znane funkcje lub urzędy osób umieść te informacje w nawiasach obok osób:
Wynik:
- Zygmunt August (król)
- Jan Tarnowski (hetman)
- Piotr Kmita (marszałek koronny)
- Stanisław Hozjusz (bp)
- Jan Ocieski (kanclerz)
- Jan Przerębski (podkanclerzy)
- Marcin Kromer
- Szymon Maricjus-Czystochlebski
- Łukasz Górnicki
- Barnim XI (książę)
Skrypty do tych i pozostałych przykładów w folderze src
, wyniki w folderze output
.
(zob. też w dalszej części tekstu analogiczną analizę wykonaną z użyciem GPT-4)
Jak model GPT-3 ('davinci-003') radzi sobie z rozpoznawaniem relacji rodzinnych można spróbować ocenić na większej próbce 50 biogramów wybranych losowo z tomów 1-51 Polskiego Słownika Biograficznego. Biogramy mają różną długość, od mniej więcej 1 tys. znaków do kilkudziesięciu tys. Ograniczeniem jest liczba tokenów, które 'davinci' jest w stanie przetworzyć w jednym zapytaniu - 4000 wliczając wygenerowaną odpowiedź. W przypadku dłuższych biogramów zostały one wstępnie 'streszczone': uwzględniono 5 pierwszych i pięć ostatnich zdań (pomijając najpierw część bibliograficzną biogramu) oraz wszystkie zdania pomiędzy nimi jeżeli zawierały treść wskazującą na informacje o rodzinie i krewnych (biogram został podzielony na zdania za pomocą spaCy, w zdaniach analizowano formy podstawowe tokenów i porównywano z przygotowanym słownikiem pojęć związanych z pokrewieństwem). Skracanie biogramów może oczywiście wpłynąć negatywnie na wyniki (zdania są wyrwane z kontekstu, niekiedy użyty model spaCy 'pl_core_news_lg' niepoprawnie dzielił tekst na zdania). W teście skupiono się na pokrewieństwie w stosunku do głównego bohatera/bohaterki biogramu.
Teksty biogramów przetwarzane były promptem o treści:
Na podstawie podanego tekstu wyszukaj
wszystkich krewnych lub powinowatych głównego bohatera tekstu.
Możliwe rodzaje pokrewieństwa: ojciec, matka, syn, córka, brat, siostra, żona, mąż,
teść, teściowa, dziadek, babcia, wnuk, wnuczka, szwagier, szwagierka, siostrzeniec,
siostrzenica, bratanek, bratanica, kuzyn, kuzynka, zięć, synowa, teść bratanicy.
Wynik wypisz w formie listy nienumerowanej, w formie:
główny bohater -> rodzaj pokrewieństwa -> osoba
Każda pozycja w osobnej linii. Na przykład:
- główny bohater -> brat -> Jan Kowalski
- główny bohater -> siostra -> Anna
Pomiń rodzaj pokrewieństwa jeżeli nie występuje w tekście.
Jeżeli w tekście nie ma żadnych informacji o pokrewieństwach głównego bohatera
napisz: brak danych.
(kod skryptu w pliku psb_relacje_rodzinne.py)
Dla 36 z 50 biogramów model znalazł jakieś relacje - w sumie 182 przypadki pokrewieństwa głównego bohatera z inną osobą. Po szczegółowym przeanalizowaniu, 38 z nich było błędne (20.9%), 144 oceniono jako prawdziwe (79.1%).
Szczegółowa lista znalezionych relacji:
Postać -> rodzaj pokrewieństwa/relacja -> osoba spokrewniona | Prawidłowa? |
---|---|
Aloe Franciszek Eljasz | |
główny bohater -> ojciec -> Jan Baptysty d'Aloy | True |
główny bohater -> matka -> Henryka Rakocy | True |
główny bohater -> brat -> Emanuel | True |
główny bohater -> siostry-> piękne siostry | False |
Bezprym | |
główny bohater -> ojciec -> Bolesław Chrobry | True |
główny bohater -> matka -> nieznana Węgierka | True |
główny bohater -> brat -> Mieszko II | True |
główny bohater -> brat -> Otto | True |
główny bohater-> teść bratanicy-> cesarz Konrad II | False |
Dąbrowska_Pelagia | |
główny bohater -> żona -> Dąbrowska Pelagia | False |
główny bohater -> synowie -> brak danych | False |
Daszyński Ignacy | |
główny bohater -> ojciec -> Ferdynand | True |
główny bohater -> matka -> Kamila z Mierzeńskich | True |
główny bohater -> brat -> Feliks | True |
główny bohater-> żona (pierwsza)-> Maria z Paszkowskich | True |
główny bohater-> żona (druga)-> Cecylia Kempnerówna | True |
Dzierżek_Natalia | |
Główny bohater -> matka -> Maria z Piątkowskich Nieczuja-Dzierżków | True |
Główny bohater -> ojciec -> Henryk | True |
Główny bohater -> siostra rodzona-> Henryka Piątkowskiego | False |
Główny bohater -> teść bratanicy-> Tadeusz Gałecki | False |
Główny bohater -> synowa teścia bratanicy-> Teresa z Wołowskich Prażmowska | False |
Eufrozyna | |
Główny bohater -> ojciec -> Kazimierz | True |
Główny bohater -> matka -> Eufrozyna | False |
Główny bohater -> syn -> Władysław Łokietek | True |
Główny bohater -> syn -> Kazimierz | True |
Główny bohater-> syn-> Ziemowit | True |
Główny bohater-> mąż-> Mszczuja II | True |
Ewild al. Eywild | |
Główny bohater -> ojciec -> Stanisław Brzeski | False |
główny bohater -> brat -> Eynur | True |
główny bohater -> dziadek -> Jawilt | False |
główny bohater -> wnukowie-> Dowgird i Daszko Eywiltowicze | False |
Fuzorius Bartłomiej | |
Główny bohater -> ojciec -> Stanisław Lwowczyk | True |
Gliński Iwan | |
główny bohater -> ojciec -> Lew Borysowicz | True |
główny bohater -> brat rodzony -> Michał Mamaj | False |
główny bohater -> bratanica -> Helena | True |
Hincza z Rogowa | |
główny bohater -> ojciec -> Hinczka z Rogowa | True |
główny bohater -> brat -> Jakub | True |
główny bohater -> siostra -> Małgorzata | True |
główny bohater -> żona-> Dorota z Koziegłowskich h. Lis | True |
główny bohater-> teść bratanicy-> Bartłomiej Gruszczyński | False |
Jadwiga Jagiellonka | |
główny bohater -> ojciec -> Kazimierz Jagiellończyk | True |
główny bohater -> matka -> Elżbieta Rakuszanka | True |
główny bohater -> brat -> Aleksander Jagiellończyk | True |
główny bohater -> siostra-> Sonka Jagiellonka | False |
główny bohater-> żona-> Jerzy Bawarski | False |
główny bohater-> córka-> Elżbieta Bawarska | True |
główny bohater-> córka-> Małgorzata Bawarska | True |
główny bohater-> teść bratanicy -> Ludwik Bawarski | False |
Kakowski Aleksander | |
główny bohater -> ojciec -> Franciszek | True |
główny bohater -> matka -> Paulina z Ossowskich | True |
Krumhausen Gabriel | |
główny bohater -> ojciec -> Joachim | True |
główny bohater -> matka -> Gertruda | True |
główny bohater -> brat -> Joachim | True |
główny bohater -> żona-> Konstancja Falcke | True |
Łańcucki Wojciech | |
główny bohater -> ojciec -> Stanisław | True |
Leymiter Stanisław | |
główny bohater -> ojciec -> Mikołaj | True |
główny bohater -> matka -> Benigna | True |
główny bohater -> żona -> Zofia | True |
główny bohater -> syn -> Jan | True |
główny bohater -> syn-> Stanisław | True |
główny bohater-> córka-> Barbara | True |
główny bohater-> córka-> Benigna | True |
główny bohater-> teść-> Jan Tesznar | True |
główny bohater-> brat teściowej-> Mikołaj Kreidler | False |
główny bohater-> siostra teściowa-> Agnieszka Tesznarowa | False |
główny bohater-> siostra teściowa-> Katarzyna Tesznarowa | False |
Mierzeński Aleksander | |
główny bohater -> brat -> Jan Mierzeński | True |
główny bohater -> brat -> Samuel Mierzeński | True |
główny bohater -> syn brata -> Jan Mierzeński | True |
główny bohater -> synowa syna brata-> Mariana z Kawcenich | False |
Mostowska z Bujwidów | |
główny bohater -> ojciec -> Odo Bujwid | True |
główny bohater -> matka -> Kazimiera z Klimontowiczów | True |
główny bohater -> siostra -> Kazimiera Rouppertowa | True |
główny bohater -> siostra-> Jadwiga Demelowa | True |
główny bohater-> siostra-> Helena Jurgielewiczowa | True |
główny bohater-> mąż-> Włodzimierz Mostowski | True |
główny bohater-> syn-> Jerzy Mostowski | True |
główny bohater-> syn-> Czesław Mostowski | True |
Patruus | |
główny bohater -> ojciec -> Jan Patruus z Koła | False |
główny bohater -> syn -> Jan | True |
Pichgiel | |
główny bohater -> ojciec -> Matthias Pichel | False |
główny bohater -> matka -> Barbara z domu Biettin | True |
główny bohater -> syn -> Christian Pichgiel młodszy | True |
główny bohater -> syn -> Johan Pichgiel | True |
główny bohater -> syn-> Daniel Pichgiel | True |
główny bohater-> syn-> Emanuel Pichgiel | True |
główny bohater-> kuzyn-> Matthias Pichgiel młodszy | True |
Pion Maurice | |
główny bohater -> ojciec -> Antoine Claude | True |
główny bohater -> matka -> Anna z domu Pauli | True |
główny bohater -> żona -> Aleksandra Antonina z Budzyńskich | True |
główny bohater -> synowie-> Adolf Stanisław, Władysław Stanisław | True |
główny bohater-> córki-> Adela, Kornelia | True |
główny bohater-> młodsza siostra-> Eugenia | True |
Piotrowiczowa z Rogolińskich | |
główny bohater -> ojciec -> Zygmunt Rogoliński | True |
główny bohater -> matka -> Ansberty z Badeńskich | True |
główny bohater -> mąż -> Konstantego Piotrowicza | True |
główny bohater -> teść bratanicy-> Józef Dworzaczek | False |
Renard Benedykt | |
główny bohater -> ojciec -> Andrzej | True |
główny bohater -> brat -> Jan Baptysta | True |
główny bohater -> siostra -> Anna Orzelska | False |
główny bohater -> siostra-> Anna Katarzyna | True |
Rossi Piotr | |
główny bohater -> ojciec -> Andrzej | True |
główny bohater -> żona -> Małgorzata | True |
główny bohater -> syn -> Andrzej | True |
główny bohater -> syn -> Kornel | True |
główny bohater-> syn-> Klemens | True |
główny bohater-> córka-> Izabella | True |
główny bohater-> córka-> Feliksa | True |
Sapieha_Jan_Fryderyk | |
główny bohater -> ojciec -> Fryderyk | True |
główny bohater -> matka -> Ewa ze Skaszewskich | True |
główny bohater -> brat -> Tomasz Kazimierz | True |
główny bohater -> brat stryjeczny-> Jan Ferdynand | True |
główny bohater-> kuzyn-> Kazimierz Leon Sapieha | True |
główny bohater-> hetman P. J. Sapieha (stryjeczny wujek) | False |
główny bohater-> syn-> Mikołaj Leon | True |
główny bohater-> syn-> Kazimierz Władysław | True |
głowny bohater-> syn-> Paweł Franciszek | True |
Śląska Aleksandra | |
główny bohater -> ojciec -> Edmund Wąsik | True |
główny bohater -> matka -> Helena z Masłowskich | True |
główny bohater -> siostra przyrodnia-> Bożena Jewasińska | True |
główny bohater -> brat-> Olgierd Edmund Wąsik | True |
główny bohater -> mąż pierwszy-> Czesław Michał Górski | True |
główny bohater -> syn-> Szczęsny Tadeusz Górski | True |
główny bohater -> mąż drugi-> Stanisław Śląski | False |
Słowicki Józef | |
główny bohater -> ojciec -> Józef | True |
Śniadecka Kornelia Ludwika | |
główny bohater -> ojciec -> Jędrzej Śniadecki | True |
główny bohater -> matka -> Konstancja z Mikułowskich | True |
główny bohater -> siostra -> Zofia Balińska | True |
główny bohater -> brat-> Józef Konstanty Śniadecki | True |
główny bohater-> teść bratanicy-> Kazimierz Sulistrowski | False |
główny bohater-> stryj-> Jan Śniadecki | True |
główny bohater-> siostrzenica-> Antonina Śniadecka | False |
główny bohater-> stryjenka-> Salomea Bécu | False |
główny bohater-> wujek (brat ojca) -> Ignacy Abramowicz | False |
główny bohater-> wujek (brat ojca) -> Mikołaj Abramowicz | False |
Spektor Mordechaj | |
główny bohater -> żona -> Izabela z Frydbergów | True |
Stańczakowa ze Strancmanów | |
główny bohater -> ojciec -> Adolf Strancman | True |
główny bohater -> matka -> Maria Weinfeld | True |
główny bohater -> brat -> Jan Strancman | True |
główny bohater -> mąż-> Zdzisław Stańczak | True |
główny bohater-> córka-> Anna Stańczak | True |
główny bohater-> zięć-> Tadeusz Sobolewski | True |
Stanisław_Cielątko | |
główny bohater -> ojciec -> Jan | True |
główny bohater -> brat -> Jan Cielątki z Liszyna i Prusiecka | True |
główny bohater -> brat -> Mikołaj | True |
główny bohater-> siostrzenica-> Małgorzata Marta | False |
główny bohater-> teść bratanicy-> Piotr Cikowski z Mikluszowic | True |
Strzelecki Wiesław Marian | |
główny bohater -> ojciec -> Felicjan | True |
główny bohater -> matka -> Stefania z Łękawskich | True |
główny bohater -> syn -> Krzysztof | True |
główny bohater-> żona-> Barbara z Krzemińskich | True |
Świrski Jerzy Włodzimierz | |
główny bohater -> ojciec -> Włodzimierz | True |
główny bohater -> matka -> Celina z Wasiłowskich | True |
główny bohater -> brat -> Małgorzata | False |
główny bohater -> siostrzenica-> Maria Konopnicka | False |
Szapira Majer | |
główny bohater -> ojciec -> Jakub Szamszon | True |
główny bohater -> matka -> Margula Szor | True |
główny bohater -> brat -> Abraham | True |
główny bohater-> dziadek-> Samuel Izaak Szor | True |
główny bohater-> żona-> Małka Towa | True |
główny bohater-> teść bratanicy-> Salomon Moskowicz | False |
Szapocznikow_Alina | |
główny bohater -> ojciec -> Jakub | True |
główny bohater -> matka -> Regina | True |
główny bohater -> brat -> Mirosław | True |
główny bohater-> syn-> Piotr Stanisławski | True |
Szczubioł_Andrzej | |
główny bohater -> ojciec -> Stefan z Jasieńca i Ciechomic | True |
główny bohater -> matka -> Sędka | True |
główny bohater -> brat -> Mikołaj z Ciechomic | True |
główny bohater -> brat-> Jan z Dłotowa | True |
główny bohater-> żona-> Anna | True |
główny bohater-> syn-> Maciej | True |
główny bohater-> syn-> Szymon zwany Gostyńskim z Ciechomic | True |
główny bohater-> syn-> Andrzej | True |
główny bohater-> teść bratanicy -> Ścibor z Sąchocina h. Rogala | False |
Szumski Boksa | |
główny bohater -> ojciec -> Krzesław z Szumska | True |
główny bohater -> brat -> Jan (Jaszek) Rej z Nagłowic | True |
główny bohater -> żona -> Stachna h. Poraj | True |
główny bohater -> syn-> Jan Rey | True |
główny bohater-> teść-> Chociemir Garnka (Garnysza) z Pojałowic i Suchcic | False |
główny bohater-> teściowa-> Świątka, żona Mikołaja z Barczkowic, następnie Wisława z Kościelca | False |
główny bohater-> bratanek-> Jan Rey (zm. 1468) | True |
główny bohater-> bratanek-> Stogniew, żonaty z Małgorzatą | True |
Ważne jest oczywiście także to czego model nie znajduje. Dla 14 biogramów model ocenił, że nie ma danych dotyczących relacji rodzinnych dla głównego bohatera. W 5 z tych przypadków jest to prawdopodobnie błąd (15 brakujących relacji).
Postać | Wynik |
---|---|
Bartoszewski Jan | True |
Ezra_ben_Nisan | True (w biogramie jest tylko niejasna wzmianka, że miał jakieś córki) |
Falęta | True |
Fiorentini Władysław | False (jest informacja o ojcu, dziadku i żonie) |
Gołaski Jan | True |
Grzegorzewski Jan | False (jest informacja o ojcu i matce) |
Guicciardini Galeazzo | True (występuje tylko niesjasna wzmianka o jego bracie, niewymienionym z imienia) |
Hirschenfeld-Mielecki Józef | True |
Langfort Teodor Henryk | True |
Popiel | True |
Siemowit | False (w biogramie wymieniony ojciec, matka, syn, wnuk i prawnuk) |
Spycigniew z Dąbrowy | False (w biogramie występuje inf. o prawdopodobnym synu i wnuku, być może problemem jest skrót S-a na oznaczenie głównego bohatera) |
Swach | False (jest inf. o ojcu, matce i bracie) |
Sztaffel Izrael | True |
W biogramach w których model odnalazł krewnych głównego bohatera/bohaterki zdarzało się, że była to tylko część informacji na temat relacji rodzinnych - teki problem wystąpił w 12 na 36 biogramów (pominiętych 26 relacji rodzinnych). Szczegółowy wykaz poniżej.
Postać | Czy uwzgl. wszystkie ralacje, ew. jakich brakuje |
---|---|
Aloe Franciszek Eljasz | True |
Bezprym | True |
Dąbrowska Pelagia | False, pominięta matka Pelagia i ojciec Michał, ciotki Waleria i Ignacja, mąż Jarosław. Może to wynikać ze specyficzneg stylu podania tych informacji i stosowania skrótów: "Ur. 10 IX w Dubience (w Lubelskiem) z Pelagii z Piotrowskich i Michała Zgliczyńskiego, wcześnie osierocona, wychowywała się u ciotek Walerii i Ignacji Piotrowskich." |
Daszyński Ignacy | True |
Dzierżek Natalia | True |
Eufrozyna | False, pominięta informacja o pierwszym mężu - Kazimierzu |
Ewild al. Eywild | True |
Fuzorius Bartłomiej | True |
Gliński Iwan | False, pominięta informacja o bracie Wasylu |
Hincza z Rogowa | True (jest wzmianka o małoletnich dzieciach ale bez konkretów) |
Jadwiga Jagiellonka | True (część informacji jest pomylona - Jerzy Bawarski nie jest żoną bohaterki tylko mężem, ale inf. została znaleziona...) |
Kakowski Aleksander | True |
Krumhausen Gabriel | False, pominięta informacja o 'dziadku po kądzieli' |
Łańcucki Wojciech | True |
Leymiter Stanisław | False, pominięta inf. o szwagrze i 2 szwagierkach, bracie oraz o zięciach (z tym że córki wyszły za mąż po śmierci bohatera), biogram napisany dość zawile, jeżeli chodzi o opis rodziny bohatera. |
Mierzeński Aleksander | False, pominięta informacja o ojcu i matce. |
Mostowska z Bujwidów | True |
Patruus | True (są tylko wzmianki o nieznanych z imienia synach i córkach) |
Pichgiel | False, pominięta inf. o stryju i o żonie bohatera biogramu |
Pion Maurice | True |
Piotrowiczowa z Rogolińskich | True |
Renard Benedykt | True |
Rossi Piotr | False, pominięta informacja o teściu |
Sapieha Jan Fryderyk | False, brak informacji o dziadku i o zięciu |
Śląska Aleksandra | True (brak tylko inf. o 'dalekiej krewnej' Eugenii Deutsch) |
Słowicki Józef | True |
Śniadecka Kornelia Ludwika | False, brak informacji o szwagrze (mężu siostry), fragment o krewnych dość zawiły. |
Spektor Mordechaj - True (krewni są wzmiankowani, ale bez konkretów) | |
Stańczakowa ze Strancmanów | True |
Stanisław_Cielątko | True (pominięty mąż bratanicy ale czy to w sumie pokrewieństwo?) |
Strzelecki Wiesław Marian | True |
Świrski Jerzy Włodzimierz | True (ale część ze znalezionych relacji jest niepoprawnego typu, siostrzenica zamiast ciotka, brat zamiast siostra) |
Szapira Majer | True |
Szapocznikow Alina | False, pominięta informacja o 2 mężach |
Szczubioł Andrzej | True |
Szumski Boksa | False, pominięta informacja o przodku - dziad lub pradziad Jakub |
Jeśli przeanalizuje się wspólnie dane z powyższych trzech tabel w biogramach znajdują się 223 relacje, model wymienił 182, z tego 38 błędnie, co oznacza 64.5% dokładności (144 prawidłowe). Zupełnie innym pytaniem pozostaje czy i jak uzyskane dane można wykorzystać np. do budowania baz wiedzy.
Poprzednie testy dotyczyły działania modelu GPT-3 ('davinci-003'), nie mam jeszcze dostępu do API z GPT4, ale jakie wyniki mógłby osiągnąć najnowszy model można spróbować ocenić poprzez działanie ChatGPT Plus z włączonym modelem GPT-4. Jeden z problematycznych biogramów: 'Natalii Dzierżek (1861-1931)' dla którego wyszukane zostało 5 relacji z tego 3 błędnie, tym razem został przetworzony całkowicie poprawnie:
- główna bohaterka -> ojciec -> Henryk Dzierżek
- główna bohaterka -> matka -> Maria z Piątkowskich Nieczuja-Dzierżków
- główna bohaterka -> wujek (brat matki) -> Henryk Piątkowski
Podobnie poprawił się wynik przetwarzania dla Pelagii Dąbrowskiej (1843-1909), gdzie poprzednio model GPT-3 znalazł tylko dwie i to błędne relacje, obecnie GPT-4 zwraca poprawną listę:
- Główna bohaterka -> ojciec -> Michał Zgliczyński
- Główna bohaterka -> matka -> Pelagia z Piotrowskich
- Główna bohaterka -> mąż -> Jarosław Dąbrowski
- Główna bohaterka -> syn -> trzech synów
- Główna bohaterka -> ciotka -> Waleria Piotrowska
- Główna bohaterka -> ciotka -> Ignacja Piotrowska
- Główna bohaterka -> wuj -> Piotr Falkenhagen-Zaleski.
Niewielkim modyfikacjom uległ użyty prompt:
Na podstawie podanego tekstu wyszukaj wszystkich krewnych lub powinowatych głównej bohaterki/bohatera tekstu: {name}. Możliwe rodzaje pokrewieństwa: ojciec, matka, syn, córka, brat, siostra, żona, mąż, teść, teściowa, dziadek, babcia, wnuk, wnuczka, szwagier, szwagierka, siostrzeniec, siostrzenica, bratanek, bratanica, kuzyn, kuzynka, zięć, synowa.
Wynik wypisz jako listę nienumerowaną w formie: główna bohaterka -> rodzaj pokrewieństwa (kim osoba była dla niej) -> osoba.
Każda pozycja w osobnej linii. Na przykład:
- główna bohaterka -> brat -> Jan Kowalski
- główna bohaterka -> siostra -> Anna
Wypisz tylko rodzaje pokrewieństwa, które występują w tekście.
Jeżeli w tekście nie ma żadnych informacji o pokrewieństwach głównego bohatera/bohaterki napisz: brak danych.
Jak wyglądają wyniki dla całej serii 50 biogramów?
Postać -> rodzaj pokrewieństwa/relacja -> osoba spokrewniona | Prawidłowa? |
---|---|
Aloe Franciszek Eljasz | |
główny bohater -> ojciec -> Jan Baptysta d'Aloy | True |
główny bohater -> matka -> Henryka Rakocy | True |
główny bohater -> brat -> Emanuel d'Aloy | True |
główny bohater -> siostry -> piękne siostry Aloe (imię niepodane) | True |
Bartoszewski Jan | |
brak danych | True |
Bezprym | |
główny bohater -> ojciec -> Bolesław Chrobry | True |
główny bohater -> matka -> nieznana z imienia Węgierka (być może córka księcia Gejzy) | True |
główny bohater -> brat -> Mieszko II | True |
główny bohater -> brat -> Otton | True |
Dąbrowska_Pelagia | |
główna bohaterka -> ojciec -> Michał Zgliczyński | True |
główna bohaterka -> matka -> Pelagia z Piotrowskich | True |
główna bohaterka -> mąż -> Jarosław Dąbrowski | True |
główna bohaterka -> ciotka -> Waleria Piotrowska | True |
główna bohaterka -> ciotka -> Ignacja Piotrowska | True |
główna bohaterka -> wuj -> Piotr Falkenhagen-Zaleski | True |
główna bohaterka -> syn -> (trzej synowie, imiona nie podane) | True |
Daszyński Ignacy | |
główny bohater -> ojciec -> Ferdynand Daszyński | True |
główny bohater -> matka -> Kamila Daszyńska z Mierzeńskich | True |
główny bohater -> brat -> Feliks Daszyński | True |
główny bohater -> żona (pierwsza) -> Maria Daszyńska z Paszkowskich | True |
główny bohater -> żona (druga) -> Cecylia Daszyńska z domu Kempnerówna | True |
Dzierżek_Natalia | |
główna bohaterka -> ojciec -> Henryk Dzierżek | True |
główna bohaterka -> matka -> Maria z Piątkowskich Nieczuja-Dzierżków | True |
główna bohaterka -> wujek (brat matki) -> Henryk Piątkowski | True |
Eufrozyna | |
główna bohaterka -> ojciec -> Kazimierz, ks. opolski | True |
główna bohaterka -> mąż (pierwszy) -> Kazimierz, ks. kujawski | True |
główna bohaterka -> syn -> Władysław Łokietek | True |
główna bohaterka -> syn -> Kazimierz | True |
główna bohaterka -> syn -> Ziemowit | True |
główna bohaterka -> mąż (drugi) -> Mszczuj II, ks. pomorski | True |
Ewild al. Eywild | |
główny bohater -> brat -> Eynurem | True |
Ezra ben Nisan | |
główny bohater -> ojciec -> Nisan | True |
główny bohater -> córka -> córka Jana Kazimierza (niepodane imię) | False |
Falęta | |
brak danych | True |
Fiorentini Władysław | |
główny bohater -> ojciec -> Antoni | True |
główny bohater -> dziadek -> Franciszek | True |
główny bohater -> żona -> Anna | True |
główny bohater -> teść -> Bazyle Popow | True |
główny bohater -> teściowa -> Bogumiła z Gizbertów | True |
Fuzorius Bartłomiej | |
główny bohater -> ojciec -> Stanisław Lwowczyk | True |
Gliński Iwan | |
główny bohater -> ojciec -> Lew Borysowicz | True |
główny bohater -> brat -> Michał | True |
główny bohater -> brat -> Wasyl | True |
główny bohater -> bratanica -> Helena | True |
Gołaski Jan | |
brak danych | True |
Grzegorzewski Jan | |
główny bohater -> ojciec -> Jakub Grzegorzewski | True |
główny bohater -> matka -> Anna Grzegorzewska z domu Zaleska | True |
Guicciardini Galeazzo | |
główny bohater -> brat -> nieznane imię | True |
Hincza z Rogowa | |
główny bohater -> ojciec -> Hinczka z Rogowa | True |
główny bohater -> brat -> Jakub | True |
główny bohater -> brat -> Henryk | True |
główny bohater -> żona -> Dorota z Koziegłowskich | True |
główny bohater -> siostra -> Małgorzata | True |
Hirschenfeld-Mielecki Józef | |
brak danych | True |
Jadwiga Jagiellonka | |
główna bohaterka -> ojciec -> Kazimierz Jagiellończyk | True |
główna bohaterka -> matka -> Elżbieta Rakuszanka | True |
główna bohaterka -> mąż -> Jerzy Bawarski | True |
główna bohaterka -> brat -> Władysław Jagiellończyk | True |
główna bohaterka -> brat -> Aleksander Jagiellończyk | True |
główna bohaterka -> brat -> Zygmunt I Jagiellończyk | True |
główna bohaterka -> córka -> Elżbieta | True |
główna bohaterka -> córka -> Małgorzata | True |
główna bohaterka -> wnuk -> Ruprecht hr. Palatynatu | False |
brak -> syn -> Ludwik | False |
brak -> syn -> Ruprecht | False |
brak -> wnuk -> (niewymieniony z imienia) | False |
Kakowski Aleksander | |
łówny bohater -> ojciec -> Franciszek Kakowski | True |
główny bohater -> matka -> Paulina Kakowska z domu Ossowska | True |
Krumhausen Gabriel | |
główny bohater -> ojciec -> Joachim Krumhausen | True |
główny bohater -> matka -> Gertruda Krumhausen z domu Schumann | True |
główny bohater -> żona -> Konstancja Krumhausen z domu Falcke | True |
główny bohater -> dziadek (po kądzieli) -> Stanisław Bornbach | True |
główny bohater -> brat -> Joachim Krumhausen | True |
Łańcucki Wojciech | |
główny bohater -> ojciec -> Stanisław | True |
Langfort Teodor Henryk | |
brak danych | True |
Leymiter Stanisław | |
główny bohater -> ojciec -> Mikołaj | True |
główny bohater -> matka -> Benigna | True |
główny bohater -> żona -> Zofia | True |
główny bohater -> teść -> Jan Tesznar | True |
główny bohater -> syn -> Jan | True |
główny bohater -> syn -> Stanisław | True |
główny bohater -> córka -> Barbara | True |
główny bohater -> córka -> Benigna | True |
główny bohater -> szwagier -> Jan Wierzyniek | True |
główny bohater -> szwagier -> Mikołaj Kreidler | True |
brak -> szwagierka -> Agnieszka | False |
brak -> szwagierka -> Katarzynę | False |
brak -> szwagierka -> Jan Tesznar | False |
brak -> brat -> Mikołaj Leymiter | False |
brak -> zięć -> Wincenty Beck | False |
brak -> zięć -> Jan Tretkop | False |
Mierzeński Aleksander | |
główny bohater -> ojciec -> Abraham | True |
główny bohater -> matka -> Elżbieta Morsztynówna | True |
główny bohater -> brat -> Jan Mierzeński | True |
główny bohater -> brat -> Samuel Mierzeński | True |
główny bohater -> brat -> Krzysztof Mierzeński | True |
główny bohater -> brat -> Daniel Mierzeński | True |
Mostowska z Bujwidów | |
Mostowska z Bujwidów Zofia -> ojciec -> Odo Bujwida | True |
Mostowska z Bujwidów Zofia -> matka -> Kazimiera z Klimontowiczów | True |
Mostowska z Bujwidów Zofia -> siostra -> Kazimiera Rouppertowa | True |
Mostowska z Bujwidów Zofia -> siostra -> Jadwiga Demelowa | True |
Mostowska z Bujwidów Zofia -> siostra -> Helena Jurgielewiczowa | True |
Mostowska z Bujwidów Zofia -> mąż -> Włodzimierz Mostowski | True |
Mostowska z Bujwidów Zofia -> syn -> Jerzy Mostowski | True |
Mostowska z Bujwidów Zofia -> syn -> Czesław Mostowski | True |
Patruus | |
główny bohater -> ojciec -> Jan «ojciec» (zm. 1538) | False |
główny bohater -> syn -> Jan | True |
główny bohater -> żona -> nieznana | True |
Pichgiel | |
główny bohater -> stryj -> Matthias Pichel | True |
główny bohater -> kuzyn -> Matthias Pichgiel młodszy | True |
główny bohater -> syn -> Christian Pichgiel młodszy | True |
główny bohater -> żona -> Barbara z domu Biettin | True |
główny bohater -> syn -> Christian | True (dublet) |
główny bohater -> syn -> Johan | True |
główny bohater -> syn -> Daniel | True |
główny bohater -> syn -> Emanuel | True |
Pion Maurice | |
główny bohater -> ojciec -> Antoine Claude | True |
główny bohater -> matka -> Anne z domu Pauli | True |
główny bohater -> żona -> Aleksandra Antonina z Budzyńskich | True |
główny bohater -> córka -> Adela | True |
główny bohater -> syn -> Adolf Stanisław | True |
główny bohater -> syn -> Władysław Stanisław | True |
główny bohater -> córka -> Kornelia, zamężna Quattrini | True |
główny bohater -> siostra -> Eugenia, zamężna Koss | True |
Piotrowiczowa z Rogolińskich | |
główna bohaterka -> ojciec -> Zygmunt Rogoliński | True |
główna bohaterka -> matka -> Ansberty z Badeńskich | True |
główna bohaterka -> mąż -> Konstanty Piotrowicz | True |
Popiel | |
główny bohater -> syn -> dwóch synów (ich imion nie podano) | True |
Renard Benedykt | |
główny bohater -> ojciec -> Andrzej | True |
główny bohater -> brat -> Jan Baptysta | True |
główny bohater -> siostra -> Anna Katarzyna (Anna Orzelska) | True ? |
Rossi Piotr | |
główny bohater -> ojciec -> Andrzej | True |
główny bohater -> żona -> Małgorzata (córka Józefa Baltazary) | True |
główny bohater -> syn -> Andrzej (ur. 1790) | True |
główny bohater -> syn -> Kornel (ur. 1791) | True |
główny bohater -> syn -> Klemens (ur. 1794) | True |
główny bohater -> córka -> Izabella (ur. 1792) | True |
główny bohater -> córka -> Feliksa (ur. 1793) | True |
brak -> teść -> Józef Baltazary | False |
Sapieha_Jan_Fryderyk | |
główny bohater -> dziadek -> Mikołaj (wojewoda witebski) | True |
główny bohater -> ojciec -> Fryderyk (podkomorzy włodzimierski) | True |
główny bohater -> matka -> Ewa ze Skaszewskich | True |
główny bohater -> brat -> Tomasz Kazimierz (oboźny litewski) | True |
główny bohater -> brat -> Aleksander Kazimierz (biskup wileński) | True |
główny bohater -> brat -> Krzysztof Franciszek (krajczy litewski) | True |
główny bohater -> kuzyn -> Kazimierz Leon Sapieha | True |
główny bohater -> żona -> Konstancja | True |
główny bohater -> córka -> Ludwika Konstancja (żona ks. Konstantego Szujskiego, pisarza wielkiego litewskiego) | True |
główny bohater -> syn -> Mikołaj Leon (wojewoda bracławski) | True |
główny bohater -> syn -> Kazimierz Władysław (wojewoda trocki) | True |
główny bohater -> syn -> Paweł Franciszek (biskup żmudzki) | True |
brak -> brata stryjecznego -> Jana Ferdynanda | False |
Siemowit | |
Siemowit -> ojciec -> Piast | True |
Siemowit -> matka -> Rzepicha (Rzepka) | True |
Siemowit -> syn -> Lestik (Lestek) | True |
Siemowit -> wnuk -> Siemomysł | True |
Siemowit -> prawnuk -> Mieszko I | True |
Śląska Aleksandra | |
Aleksandra Śląska -> ojciec -> Edmund Wąsik | True |
Aleksandra Śląska -> matka -> Helena Wąsik (z domu Masłowska) | True |
Aleksandra Śląska -> siostra przyrodnia -> Bożena Jewasińska (Naturska) | True |
Aleksandra Śląska -> brat -> Olgierd Edmund Wąsik | True |
Aleksandra Śląska -> krewne -> Eugenia Deutsch (z domu Taczanowska) | True |
Aleksandra Śląska -> mąż (1) -> Czesław Michał Górski | True |
Aleksandra Śląska -> syn -> Szczęsny Tadeusz Górski | True |
Aleksandra Śląska -> mąż (2) -> Janusz Warmiński | True |
Słowicki Józef | |
Słowicki Józef -> ojciec -> Józef Słowicki | True |
Śniadecka Kornelia Ludwika | |
główna bohaterka -> ojciec -> Jędrzej Śniadecki | True |
główna bohaterka -> matka -> Konstancja z Mikułowskich | True |
główna bohaterka -> siostra -> Zofia Balińska | True |
główna bohaterka -> brat -> Józef Konstanty Śniadecki | True |
główna bohaterka -> szwagier -> Michał Baliński | True |
główna bohaterka -> bratanek -> Jan Śniadecki | False |
główna bohaterka -> szwagierka -> Antonina Śniadecka | True |
główna bohaterka -> teść -> Kazimierz Sulistrowski | False |
główna bohaterka -> siostrzeniec -> Ignacy Abramowicz | False |
główna bohaterka -> siostrzeniec -> Mikołaj Abramowicz | False |
główna bohaterka -> szwagier -> Aleksander Skirmunt | False |
główna bohaterka -> mąż -> Michał Czajkowski (Mehmed Sadyk) | True |
Spektor Mordechaj | |
główny bohater -> ojciec -> kramarz, chasyd | True |
główny bohater -> matka (niewymieniona z imienia) | True |
główny bohater -> brat (niewymieniony z imienia) | True |
główny bohater -> żona -> Izabela z Frydbergów | True |
główny bohater -> syn | False |
główny bohater -> córka | False |
Spycigniew_z_Dąbrowy | |
główny bohater -> syn -> Zawisza | True |
główny bohater -> wnuk -> Spycigniew | True |
Stańczakowa ze Strancmanów | |
główna bohaterka -> ojciec -> Adolf Strancman (Franciszek Kotarbiński) | True |
główna bohaterka -> matka -> Maria Weinfeld (Helena z Koprowskich Kotarbińska) | True |
główna bohaterka -> brat -> Jan | True |
główna bohaterka -> mąż -> Zdzisław Stańczak | True |
główna bohaterka -> córka -> Anna | True |
główna bohaterka -> zięć -> Tadeusz Sobolewski | True |
Stanisław_Cielątko | |
główny bohater -> ojciec -> Jan | True |
główny bohater -> brat -> Jan Cielątki z Liszyna i Prusiecka | True |
główny bohater -> brat -> Mikołaj | True |
główny bohater -> szwagierka -> Anna z Oględowa | True |
główny bohater -> siostrzenica -> Małgorzata Marta | False |
główny bohater -> zięć (Małgorzaty Marty) -> Mikołaj Cikowski | False |
główny bohater -> teść (Małgorzaty Marty) -> Piotr Cikowski z Mikluszowic | False ? |
Strzelecki Wiesław Marian | |
główny bohater -> ojciec -> Felicjan | True |
główny bohater -> matka -> Stefania z Łękawskich | True |
główny bohater -> żona -> Barbara z Krzemińskich | True |
główny bohater -> syn -> Krzysztof | True |
Swach Jerzy | |
główny bohater -> ojciec -> Udalryk (Oldrzych) | True |
główny bohater -> matka -> Katarzyna | True |
główny bohater -> brat -> Karol Antoni | True |
Świrski Jerzy Włodzimierz | |
główny bohater -> ojciec -> Włodzimierz | True |
główny bohater -> matka -> Celina z Wasiłowskich | True |
główny bohater -> siostra -> Małgorzata (1. v. Kucharska, 2. v. Łyszkowska) | True |
główny bohater -> siostrzeniec -> Maria Konopnicka | False |
główny bohater -> żona -> pierwsza żona (imię nieznane) | True |
główny bohater -> żona -> Maria Wiercińska | True |
Szapira Majer | |
główny bohater -> ojciec -> Jakub Szamszon | True |
główny bohater -> matka -> Margula Szor | True |
główny bohater -> dziadek -> Samuel Izaak Szor | True |
główny bohater -> brat -> Abraham | True |
główny bohater -> żona -> Małka Towa | True |
Szapocznikow_Alina | |
główna bohaterka -> ojciec -> Jakub | True |
główna bohaterka -> matka -> Regina (Ryfka) z Auerbachów | True |
główna bohaterka -> brat -> Mirosław | True |
główna bohaterka -> mąż (1) -> Ryszard Stanisławski | True |
główna bohaterka -> mąż (2) -> Roman Cieślewicz | True |
główna bohaterka -> syn -> Piotr Stanisławski (adoptowany) | True |
Szczubioł_Andrzej | |
główny bohater -> ojciec -> Stefan (Szczepan) z Jasieńca i Ciechomic | True |
główny bohater -> matka -> Sędka (imię nieznane) | True |
główny bohater -> brat -> Mikołaj z Ciechomic | True |
główny bohater -> brat -> Jan z Dłotowa (Dłutowo) | True |
główny bohater -> żona (1) -> nieznana | True |
główny bohater -> syn (z 1. małżeństwa) -> Maciej | True |
główny bohater -> syn (z 1. małżeństwa) -> Szymon zwany Gostyńskim z Ciechomic | True |
główny bohater -> żona (2) -> Anna | True |
główny bohater -> syn (z 2. małżeństwa) -> Andrzej | True |
główny bohater -> synowa -> Anna, córka Ścibora z Sąchocina | False |
Sztaffel Izrael | |
brak danych | True |
Szumski Boksa | |
główny bohater -> dziadek lub pradziadek -> Jakub | True |
główny bohater -> prawdopodobny ojciec -> Krzesław z Szumska | True |
główny bohater -> brat -> Jan (Jaszek) Rej z Nagłowic | True |
główny bohater -> żona -> Stachna h. Poraj | True |
główny bohater -> syn -> Jan Rey | True |
główny bohater -> bratanek -> Jan Rey | True |
główny bohater -> bratanek -> Stogniew | True |
brak -> dziad -> Jakub | False |
brak -> synowa -> Prakseda | False |
brak -> szwgier -> Chociemir Garnek (Garnysz) z Pojałowic i Suchcic | False |
brak -> szwagierka -> Świątka | False |
W analizowanych biogramach znajdują się w sumie 245 relacje lub braki relacji (gdy w treści biogramu nie ma informacji o krewnych i powinowatych, w poprzedniej analizie z uzyciem GPT-3 nie zauważyłem kilku relacji), z tego model GPT-4 215 określił poprawnie - czyli osiągnął 88% poprawności. Przyjmując bardziej typowe miary, liczba poprawnie odnalezionch relacji to 208, wszystkich znalezionych relacji 229, wszystkich rzeczywiście występujących w biogramach relacji - 235, co dawałoby wartość precision = 0.9, recall = 0.88 i f1 = 0.889.
To wyraźnie lepszy wynik niż poprzedni osiągnięty przez GPT3 (model 'davinci-003'), ale też zgodny z oczekiwaniem, skoro wg raportu technicznego OpenAI na temat GPT4 (https://arxiv.org/abs/2303.08774), nowy model jest o 29% lepszy w unikaniu 'closed domain hallucinations' czyli wymyślania nieprawdziwych informacji, mimo instrukcji że informacje mają pochodzić tylko z podanego kontekstu, np. analizowanego artykułu.
Dla niektórych biogramów np. 'Śniadecka Kornelia Ludwika' , 'Leymiter Stanisław' czy 'Stanisław Cielątko' błędy są liczne, być może wynika to z długości i zawiłości zdań. Być może ma na to wpływ konstrukcja zadania - oczekiwane są informacje o relacjach rodzinnych głównego bohatera, jeżeli są one podane nie wprost, np. 'Siostrą żony Jana Kowalskiego była Amelia...' wymaga to przekształcenia podanej informacji do wymaganej formy -> 'szwagierka'.
Nadal pewnym problemem jest niedeterministyczny charakter dużych modeli językowych, ten sam prompt uruchamiany wielokrotnie może dawać nieco inne wyniki, nawet o tej samej poprawności, lecz nieco inaczej sformułowane. Mimo zaleconego wprost formatu odpowiedzi w powyższej analizie (główny bohater/ka -> relacja -> osoba) zdarzało się, że model zwracał albo sformułowanie "główny bohater/ka" albo podawał w tym miejscu rzeczywiste imie i nazwisko głównego bohatera. Zdarzało się także, że zwracane były relacje rodzinne innych osób występujących w tekście. Wynik nie jest więc zawsze gotowym do dalszych analiz produktem, wymaga przetworzenia i uspójnienia.
Test automatycznego przetwarzania fragmentu Słownika Historyczno-Geograficznego (hasło Balice, część punktu 3) za pomocą modelu GPT4 (przez API, parametr temperature = 0) do formatu XML. Użyty prompt:
Przetwórz proszę poniższy tekst zawierający regesty na plik XML. Regest zaczyna się
od daty np. 1245 lub zakresu dat 1245-56 lub daty przybliżonej np. a. 1456, po
której następuje treść regestu, a po niej - w nawiasie - źródło informacji. Po
nawiasie pojawia się średnik oddzielający regesty. Jeżeli nie ma daty na początku,
oznacza to, że data jest taka sama jak w poprzednim regeście. W treści regestu
oznacz występujące w niej osoby tagiem <persName>, miejsca tagiem <placeName>,
nazwy geograficzne tagiem <geogName> zaś nazwy urzędów zawodów lub funkcji
tagiem <occupation>. Pamiętaj, że jednoliterowe skróty, takie jak 'B.', oznaczają
miejscowość, której dotyczą regesty. Osoby pojawiające się w treści regestu to
postacie średniowieczne, które nie miały nazwisk za to dopisywały do imienia
miejscowość z której pochodzą np. Jan z Grzędowa, w takich przypadkach oznacz
osobę tagiem <persName> z miejscowością włącznie.
Przykład regestu:
a. 1396 kaszt. wiśl. Jaśko za zasługi przy chrystianizacji Litwy dostał od
Władysława Jag. m. Wojsław [nie zid.] i kilka wsi w ziemi krak. w tym wieś Grzędy
w pow. sand., którą sprzedał Krzesławowi z Wolicy. Synem Jaśka był Jan z B.
(J. Ossoliński, Pamiętnik 1595-1621, Wr. 1952, s. 4);
Przykład wyniku:
<s type="regest">
<date>a. 1396</date>
<content><occupation>kaszt. wiśl.</occupation> <persName>Jaśko</persName>
za zasługi przy chrystianizacji <geogName>Litwy</geogName> dostał od
<persName>Władysława Jag.</persName> m. <placeName>Wojsław</placeName>
[nie zid.] i kilka wsi w ziemi krak. w tym wieś <placeNme>Grzędy</PlaceName>
w pow. sand., którą sprzedał <persName>Krzesławowi z Wolicy</persName>. Synem
<persName>Jaśka</persName> był <persName>Jan z B.</persName></content>
<biblio>(J. Ossoliński, Pamiętnik 1595-1621, Wr. 1952, s. 4)</biblio>;
</s>
Przykład regestu:
1467 Albert kmieć z B. (KRK 3 s. 23);
Przykład wyniku:
<s type="regest">
<date>1467</date>
<content><persName>Albert</persName> <occupation>kmieć</occupation> z
<placeName>B.</placeName></content>
</s>
Oto tekst do przetworzenia:
1229 papież Grzegorz IX potwierdza kl. tyn. posiadanie m. in. B. (Tyn. 11b - bulla
interpol. w XV w., por. J. Wyrozumski, Państwowa gospodarka solna w Polsce do schyłku
XIV w., Kr. 1968, s. 25); a. 1286 komes Grzegorz zw. Żegocic dz. B., zabraniał kl.
dominikanów w Krakowie przeprowadzić wodę z rz. Rudawy przez Krowodrzę, → też p. 6
(KK 1, 86); 1304-6 komes Andrzej z B. (KK 2, 242; 1, 114 przy tym dok. wisiała jego
pieczęć); 1321, 1351-2, 1363 Grzegorz z B. (AS 2, 7; Mp. 3, 761; Wp. 3, 1495; ZDM 1,
63; KMK 1, 27); 1366 Jan z B. (ZDM 1, 117); 1367 Betico kmieć z B. (KRK 2 s. 13);
1387-96 Jan, Jaśko z Goźlic [pow. sand.], B. i Ossolina [pow. sand.], kaszt. wiśl.
1388-96, wg Długosza zabity przez Grota ze Słupczy [pow. sand.] w sporze o granice
wsi Dwikozy [pow. sand.] (AGZ 5, 16; AS 2, 61; KK 2, 392, 401; Mp. 4, 1022; ZDM 6,
1540, 1548, 1584; KUJ 1, 8; AKP 8, 63; Proch. 12; DH 3 s. 552 na s. 372 i 466
wiadomości odnoszą się do kaszt. wiśl. Mikołaja z Bogorii [pow. sand.], a nie
z Ossolina; MH 10 s. 148-9; Bon. 1 s. 86); a. 1396 kaszt. wiśl. Jaśko za zasługi
przy chrystianizacji Litwy dostał od Władysława Jag. m. Wojsław [nie zid.] i
kilka wsi w ziemi krak. (J. Ossoliński, Pamiętnik 1595-1621, Wr. 1952, s. 4);
Wynik w formie XML:
<regests>
<s type="regest">
<date>1229</date>
<content><persName>papież Grzegorz IX</persName> potwierdza <placeName>kl. tyn.</placeName>
posiadanie m. in. <placeName>B.</placeName></content>
<biblio>(Tyn. 11b - bulla interpol. w XV w., por. J. Wyrozumski, Państwowa gospodarka solna w Polsce do schyłku XIV w., Kr. 1968, s. 25)</biblio>;
</s>
<s type="regest">
<date>a. 1286</date>
<content><occupation>kom</occupation> <persName>Grzegorz zw. Żegocic</persName> dz.
<placeName>B.</placeName>, zabraniał <placeName>kl. dominikanów</placeName> w
<placeName>Krakowie</placeName> przeprowadzić wodę z rz. <geogName>Rudawy</geogName> przez
<placeName>Krowodrzę</placeName>, → też p. 6</content>
<biblio>(KK 1, 86)</biblio>;
</s>
<s type="regest">
<date>1304-6</date>
<content><occupation>kom</occupation> <persName>Andrzej z B.</persName></content>
<biblio>(KK 2, 242; 1, 114 przy tym dok. wisiała jego pieczęć)</biblio>;
</s>
<s type="regest">
<date>1321</date>
<content><persName>Grzegorz z B.</persName></content>
<biblio>(AS 2, 7; Mp. 3, 761; Wp. 3, 1495; ZDM 1, 63; KMK 1, 27)</biblio>;
</s>
<s type="regest">
<date>1351-2</date>
<content><persName>Grzegorz z B.</persName></content>
</s>
<s type="regest">
<date>1363</date>
<content><persName>Grzegorz z B.</persName></content>
</s>
<s type="regest">
<date>1366</date>
<content><persName>Jan z B.</persName></content>
<biblio>(ZDM 1, 117)</biblio>;
</s>
<s type="regest">
<date>1367</date>
<content><persName>Betico</persName> <occupation>kmieć</occupation> z <placeName>B.</placeName>
</content>
<biblio>(KRK 2 s. 13)</biblio>;
</s>
<s type="regest">
<date>1387-96</date>
<content><persName>Jan</persName>, <persName>Jaśko z Goźlic</persName> [pow. sand.],
<placeName>B.</placeName> i <placeName>Ossolina</placeName> [pow. sand.],
<occupation>kaszt. wiśl.</occupation> 1388-96, wg <persName>Długosza</persName> zabity
przez <persName>Grota ze Słupczy</persName> [pow. sand.] w sporze o granice wsi
<placeName>Dwikozy</placeName> [pow. sand.]</content>
<biblio>(AGZ 5, 16; AS 2, 61; KK 2, 392, 401; Mp. 4, 1022; ZDM 6, 1540, 1548, 1584; KUJ 1, 8; AKP 8, 63; Proch. 12; DH 3 s. 552 na s. 372 i 466 wiadomości odnoszą się do kaszt. wiśl. Mikołaja z Bogorii [pow. sand.], a nie z Ossolina; MH 10 s. 148-9; Bon. 1 s. 86)</biblio>;
</s>
<s type="regest">
<date>a. 1396</date>
<content><occupation>kaszt. wiśl.</occupation> <persName>Jaśko</persName> za zasługi
przy chrystianizacji <geogName>Litwy</geogName> dostał od <persName>Władysława Jag.</persName>
m. <placeName>Wojsław</placeName> [nie zid.] i kilka wsi w ziemi krak.</content>
<biblio>(J. Ossoliński, Pamiętnik 1595-1621, Wr. 1952, s. 4)</biblio>;
</s>
</regests>
Trzeba jednak pamiętać, że kontekst który modele GPT są w stanie przetwarzać jest ograniczony a korzystanie z API kosztuje, można więc rozważyć rozwiązanie hybrydowe. Podzielić na przykład tekst wejściowy ze słownika SHG przy użyciu bardziej konwencjonalnych metod (Python, spaCy, regex itp.) na punkty, podpunkty i regesty, a następnie użyć modelu LLM do otagowania treści samego regestu (bez bibliografii, którą też można obsłużyć prostszymi metodami), dodatkowo model mógłby również określać temat regestu.
W przykładach ekstrakcji informacji z biogramów postaci historycznych wynik prezentowany był w formie listy, wygodniejszą opcją do dalszego przetwarzania byłby jednak wynik w formacie JSON. Model GPT jest oczywiście w stanie to zrobić. Modyfikacja promptu polega na zastąpieniu fragmentu opisującego format wyniku w formie listy przez tekst:
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
relacja: rodzaj pokrewieństwa (kim osoba była dla bohatera/bohaterki )
osoba: nazwa (imię i nazwisko osoby związanej relacją z bohaterem)
a także podaniu nowego przykładowego wyniku:
Przykład: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Jego bratanicą była Małgorzata Anna, żona
Winfrida de Loeve. S. ożenił się z Joanną, córką burgrabiego
krakowskiego Adama Kurozwęckiego."
Wynik:
[{"relacja":"ojciec", "osoba":"Niccola"},
{"relacja":"matka", "osoba":"Annalena Ricasoli"},
{"relacja":"brat", "osoba":"Bernard"},
{"relacja":"bratanica", "osoba":"Małgorzata Anna"},
{"relacja":"żona", "osoba":"Joanna"},
{"relacja":"teść", "osoba":"Adam Kurozwęcki"}
]
skrypt przetwarza biogram, np. Jadwigi Jagiellonki, zwracając wynik w formacie JSON, ułatwiając późniejsze automatyczne przetwarzanie, porównywanie wyniku z oczekiwanym itp.
[{"relacja":"ojciec", "osoba":"Kazimierz Jagiellończyk"},
{"relacja":"matka", "osoba":"Elżbieta Rakuszanka"},
{"relacja":"mąż", "osoba":"Jerzy Bawarski"},
{"relacja":"syn", "osoba":"Ludwik"},
{"relacja":"syn", "osoba":"Ruprecht"},
{"relacja":"córka", "osoba":"Elżbieta"},
{"relacja":"córka", "osoba":"Małgorzata"},
{"relacja":"brat", "osoba":"Władysław Jagiellończyk"},
{"relacja":"brat", "osoba":"Aleksander"},
{"relacja":"brat", "osoba":"Zygmunt I"},
{"relacja":"teść", "osoba":"Ludwik Bogaty"},
{"relacja":"zięć", "osoba":"Ruprecht hr. Palatynatu"}
]
A przy okazji, jaki jest koszt przetworzenia biogramu Jadwigi Jagiellonki? Tekst biogramu ma niecałe 5000 znaków (2504 tokeny), zaś odpowiedź to 264 tokeny, cena użycia moelu GPT-4 przez API to 0.03$ za dane wejściowe, 0.06$ za wygenerowaną odpowiedź (ceny za 1 tys. tokenów). W przypadku omawianego biogramu przekłada się to obecnie na 0.09$ (czerwiec 2023). Nie jest to więc tani proces.
Ekstracja informacji z opracowań i źródeł historycznych wymaga dokładności i poprawności wyników. Model językowy mimo swoich ogromnych możliwości w dziedzinie przetwarzania tekstu będzie przygotowywał także błędne odpowiedzi ('halucynacje'), będzie też 'zmieniał zdanie'. Ustawienie parametru uruchomienia modelu 'temperature' na wartość 0 zmniejsza jego twórcze skłonności, co jest efektem pożądanym w przypadku wydobywania wiedzy z tekstu, jednak wynik zapytań do API zwracany przez model GPT-4 nadal może i będzie się nieco różnić przy każdym wywołaniu. LLM są z natury niedeterministyczne (zob. https://platform.openai.com/docs/guides/gpt/faq - punkt: "Why are model outputs inconsistent?"). Można ten efekt zaobserwować uruchamiając wielokrotnie to samo zapytanie dotyczące relacji rodzinnych Jadwigi Jagiellonki, które przetwarza ten sam tekst biogramu (link do skryptu). Zapytanie (prompt) zostało wzbogacone o przykład danych do przetworzenia i przykład wyniku (few-shot learning). Około 80-90% odpowiedzi pozostaje niezmienna (i poprawna), jednak pozostała część wyniku zmienia się, czasem są to odpowiedzi poprawne, czasem całkowicie błędne. Wydaje się, na podstawie prostej obserwacji, że zmienność dotyczy trudniejszych do wyodrębnienia realacji typu 'zięć', 'teść', 'wnuk', zaś realcje typu 'ojciec', 'matka', 'mąż', 'córka', 'syn', 'brat' wyszukiwane są konwekwentnie i poprawnie. Być może znaczenie ma sposób formułowania treści w analizowanym biogramie. Im bardziej zawiły, 'literacki' sposób opisu tym większa szansa, że model będzie niepoprawnie interpretował informacje.
Wykonano 10 testów na biogramie Jadwigi Jagiellonki, pozyskane informacje były praktycznie za każdym razem inne - przy tej samej zawartości promptu i tekstu wejściowego. Z tego 10 relacji powtarzało się dla każdego testu:
{"relacja":"ojciec", "osoba":"Kazimierz Jagiellończyk"},
{"relacja":"matka", "osoba":"Elżbieta Rakuszanka"},
{"relacja":"mąż", "osoba":"Jerzy Bawarski"},
{"relacja":"syn", "osoba":"Ludwik"},
{"relacja":"syn", "osoba":"Ruprecht"},
{"relacja":"córka", "osoba":"Elżbieta"},
{"relacja":"córka", "osoba":"Małgorzata"},
{"relacja":"brat", "osoba":"Władysław Jagiellończyk"},
{"relacja":"brat", "osoba":"Aleksander"},
{"relacja":"brat", "osoba":"Zygmunt I"},
Zaś dodatkowo mogły pojawiać się inne relacje, od 1 do 4. W dwóch testach dodatkowych relacji nie było.
test 1:
{"relacja":"teść", "osoba":"Ludwik Bogaty"} = OK
{"relacja":"zięć", "osoba":"Ruprecht hr. Palatynatu"} = OK
test 2:
{"relacja":"teściowa", "osoba":"Dorota Koniecpolska"} = BŁĄÐ
{"relacja":"zięć", "osoba":"Ruprecht hr. Palatynatu"} = OK
{"relacja":"wnuczka", "osoba":"Małgorzata"} = BŁĄÐ
test 3:
{"relacja":"wnuk", "osoba":"Ruprecht hr. Palatynatu"} = BŁĄÐ
test 4:
{"relacja":"siostrzeniec", "osoba":"Ruprecht hr. Palatynatu"} = BŁĄÐ
{"relacja":"wnuk", "osoba":"wnuk Jadwigi Jagiellonki"} = OK
test 5:
brak dodatkowych relacji (a są trzy, takie jak w teście nr 1 oraz anonimowy wnuk bohaterki biogramu)
test 6:
{"relacja":"zięć", "osoba":"Ruprecht hr. Palatynatu"} = OK
{"relacja":"wnuk", "osoba":"wnuk Jadwigi Jagiellonki"} = OK
test 7:
{"relacja":"wnuk", "osoba":"Ruprecht hr. Palatynatu"} = BŁĄÐ
test 8
brak dodatkowych relacji (jw)
test 9
{"relacja":"teściowa", "osoba":"Dorota Koniecpolska"} = BŁĄÐ
{"relacja":"zięć", "osoba":"Ruprecht hr. Palatynatu"} = OK
{"relacja":"wnuczka", "osoba":"Małgorzata"} = BŁĄÐ
test 10:
{"relacja":"wnuk", "osoba":"Ruprecht hr. Palatynatu"} = BŁĄÐ
{"relacja":"siostrzeniec", "osoba":"Ruprecht hr. Palatynatu"} = BŁĄÐ
{"relacja":"szwagierka", "osoba":"Anna, księżna wdowa cieszyńska"} = BŁĄÐ
{"relacja":"siostrzenica", "osoba":"Małgorzata, ksieni benedyktynek w Neuburg"} = BŁĄÐ
Jak widać w 6 na 10 testów pojawiają się relacje nieprawdziwe, nie da się ich w żaden sposób uzasadnić zawartością tekstu biogramu, mniej szkodliwy wydaje się kompletny brak odnalezienia istniejących relacji co zdarzyło się w 2 testach.
Ponieważ w przypadku ekstrakcji informacji z tekstów zajmujemy się informacjami, których jeszcze nie znamy (nie mamy bazy danych czy grafu wiedzy), trudno byłoby przeprowadzić werfikację faktów inaczej niż manualnie porównując tekst z pozyskanymi przez model danymi. Taki proces jest jednak czasochłonny i zniwelowałby cały zysk z automatyzacji przetwarzania dużej ilości tekstu. Czy rozwiązaniem było by powtarzanie każdego zapytania np. 3 razy i uznawanie powtarzających się odpowiedzi za wiarygodne zaś pozostałych za wymagające weryfikacji - trudno powiedzieć, ale jest przecież możliwe, że konsekwetnie w każdym teście pojawiać będą się informację błędne a więc niewiarygodne. Manualna weryfikacja danych pozyskanych dzięki dużym modelom językowym wydaje się, na dziś, nieunikniona. Może być jednak wspomagana dodatkowymi narzędziami, weryfikującymi strukturę wyników zwróconych przez LLM, czy prawdopodobieństwo pozyskanych faktów (np. wiek osoby powinien mieścić się w zakresie 0-110), nazwy relacji rodzinnych powinny pochodzić z określonego zbioru itp.
Wyniki testów modelu Nous-Hermes-13b uruchamianego lokalnie (tylko CPU) na tej samej próbce 50 biogramów, na których testowane były modele GPT-3 i GPT-4 w zakresie ekstrakcji informacji dotyczących relacjach rodzinnych. Badany model (https://huggingface.co/NousResearch/Nous-Hermes-13b) jest dotrenowaną wersją Llama-13b. Ze względu na to, że jest mniejszy od modeli GPT i uruchamiany był lokalnie (co jest dosyć czasochłonne na komputerze bez GPU), przetwarzanie biogramów zostało uproszczone do jednego pytania - o ojca bohatera/bohaterki tekstu.
Użyty prompt:
Na podstawie wyłącznie informacji z podanego tekstu napisz kto był ojcem <person>.
Wynik zapisz w formacie JSON.
Na przykład:
Tekst: "Łukasz Kowalski (1901-1987) ur. w Bogatce z ojca Hieronima i matki Heleny z Kruszyńskich."
Wynik: {"ojciec": "Hieronim Kowalski"}
Tekst: "Marcin Wielopolski (1700-1776), szlachcic pomorski, ur. w Ustce. Ojcem W. był Antoni, herbu Trójnóg."
Wynik: {"ojciec": "Antoni Wielopolski"}
Tekst: "Eustachy Wikozy (zm. 1233), pochodzenie nienane, klucznik gnieźnieński."
Wynik: {"ojciec":"brak danych"}
Tekst: <data>
Wynik:
Gdzie w miejscu <person>
wstawiane było imię i nazwisko bohatera, zaś w miejsce <data>
uproszczony tekst biogramu. W porównaniu z GPT-4 model Nous-Hermes-13b może przetworzyć dużo mniejszy rozmiar kontekstu (2048 tokenów), dlatego zarówno treść pytania, przykłady, jak i sam biogram musiały zostać ograniczone. Biogramy w przypadku gdy przekraczały 1700 tokenów były ograniczane do 3 początkowych i 2 końcowych zdań, oraz tych zdań gdzie występowały słowa kluczowe związane z pokrewieństwem, co mogło niestey wpłynąć na efekty działania modelu.
Results:
Postać / Rezultat | Prawidłowo? |
---|---|
Aloe Franciszek Eljasz | |
{"ojciec": "Jan Baptysta d’Aloy i Henryka Rakocy"} | True? |
Bartoszewski Jan | |
"The father of Jan Bartoszewski is not mentioned in the given text." | True |
Bezprym | |
{"ojciec": "Bolesław Chrobry"} | True |
Dąbrowska_Pelagia | |
{"ojciec": "Michał Zgliczyński"} | True |
Daszyński Ignacy | |
...Ignacy Daszyński miał ojca Ferdynanda. | True |
Dzierżek_Natalia | |
{"ojciec": "Henryk Dzierżek"} | True |
Eufrozyna | |
{"ojciec": "Kazimierz, ks. opolski"} | True |
Ewild al. Eywild | |
{"ojciec": "Eywild al. Eywild Jan"} | False |
Ezra ben Nisan | |
{"ojciec": "Ezra ben Nisan z Trok, inaczej Ezra Nisanowicz (ok. 1596–1666)"} | False |
Falęta | |
{"ojciec": "brak danych"} | True |
Fiorentini Władysław | |
{"ojciec": "Antoni Fiorentini"} | True |
Fuzorius Bartłomiej | |
{"ojciec": "Stanisław Lwowczyk"} | True |
Gliński Iwan | |
{"ojciec": "Lew Borysowicz"} | True |
Gołaski Jan | |
{"ojciec": "Jan Gołaski"} | False |
Grzegorzewski Jan | |
{"ojciec": "Jakub"} | True |
Guicciardini Galeazzo | |
{"ojciec": "Guicciardini Galeazzo"} | False |
Hincza z Rogowa | |
{"ojciec": "Hinczka z Rogowa (zm. przed 1415)"} | True |
Hirschenfeld-Mielecki Józef | |
{"ojciec": "brak danych"} | True |
Jadwiga Jagiellonka | |
{"ojciec": "Kazimierz Jagiellończyk"} | True |
Kakowski Aleksander | |
{"ojciec": "Franciszek Kakowski"} | True |
Krumhausen Gabriel | |
{"ojciec": "Joachim Krumhausen"} | True |
Łańcucki Wojciech | |
{"ojciec": "Stanisław Łańcucki"} | True |
Langfort Teodor Henryk | |
{"ojciec": "brak danych"} | True |
Leymiter Stanisław | |
{"ojciec": "Mikołaj Leymiter"} | True |
Mierzeński Aleksander | |
{"ojciec": "Abraham Mierzeński"} | True |
Mostowska z Bujwidów | |
{"ojciec": "Odo Bujwid, prof. bakteriologii UJ"} | True |
Patruus | |
{"ojciec": "Jan Patruus"} | False |
Pichgiel | |
{"ojciec": "Christian Pichgiel młodszy"} | False |
Pion Maurice | |
{"ojciec": "Antoine Claude Pion"} | True |
Piotrowiczowa z Rogolińskich | |
{"ojciec": "Zygmunt Rogoliński"} | True |
Popiel | |
{"ojciec": "Popiel"} | False |
Renard Benedykt | |
{"ojciec": ""} | True |
Rossi Piotr | |
{"ojciec": "Andrzej Rossi"} | True |
Sapieha_Jan_Fryderyk | |
...ojcem Jan Fryderyk Sapieha był Fryderyk | True |
Siemowit | |
The prompt asks to determine who was the father of Siemowit.. | False |
Śląska Aleksandra | |
{"ojciec": "Edmund Wąsik"} | True |
Słowicki Józef | |
{"ojciec": "Józef Słowicki"} | True |
Śniadecka Kornelia Ludwika | |
{"ojciec": "Jędrzej Śniadecki"} | True |
Spektor Mordechaj | |
{"ojciec": "Mordechaj Spektor"} | False |
Spycigniew_z_Dąbrowy | |
{"ojciec": "brak danych"} | True |
Stańczakowa ze Strancmanów | |
{"ojciec": "Adolf Strancman"} | True |
Stanisław_Cielątko | |
{"ojciec": "Jan Cielątko"} | True |
Strzelecki Wiesław Marian | |
{"ojciec": "Felicjan Strzelecki"} | True |
Swach Jerzy | |
{"ojciec": "Udalryk (Oldrzycha) Swach"} | True |
Świrski Jerzy Włodzimierz | |
{"ojciec": "Włodzimierz Świrski"} | True |
Szapira Majer | |
{"ojciec": "Jakub Szamszon (1861–1948)"} | True |
Szapocznikow_Alina | |
The father of Alina Szapocznikow is Jakub Szapocznik (1896-1938) | True |
Szczubioł_Andrzej | |
{"ojciec": "Stefan Szczubioł z Jasieńca i Ciechomic"} | True |
Sztaffel Izrael | |
{"ojciec": "Izrael Abraham Sztaffel"} | False |
Szumski Boksa | |
{"ojciec": "brak danych"} | True? |
W 2 wątpliwych przypadkach do wyniku True/False dodano znak zapytania (raz model zwrócił i ojca i matkę, za drugim razem brak danych, tymczasem biogram wspomina o prawdopodobnym ojcu). Efekt pracy modelu to 40/50 poprawnych odpowiedzi czyli 80% dokładności, co wydaje się bardzo dobrym wynikiem. Porównując go jednak z osiągnięciami GPT-4, jeżeli spojrzeć tylko na wyniki dotyczące kategorii 'ojciec' to najlepszy obecnie model językowy popełnił tylko 1 błąd (98%) a sama relacja 'bohater->ojciec' wydaje się jedną z najprostszych do uzyskania. Mimo wszystko jednak, Nous-Hermes-13b jest wielokrotnie mniejszym i prostszym modelem, jest dostępny za darmo do użytku niekomercyjnego, można go uruchomić na zwykłym laptopie bez GPU (ale z 16GB RAM i będzie to działać bardzo powoli), lecz co najważniejsze przetwarzane są teksty w języku polskim!
Inne uwagi:
- model ma niekiedy problem ze zwracaniem wyniku w oczekiwanym formacie,
- czas oczekiwania na wynik, mimo skrócenia biogramów to 2-7 minut na biogram,
- jest bardzo wrażliwy na kształt i treść promptu, niewielka zmiana potrafiła znacznie pogorszyć wynik
Wyniki zwracane przez LLM są zmienne, nie zawsze we właściwym oczekiwanym formacie, nie zawsze prawdziwe, nawet w przypadku przekazania wysokiej jakości treści do kontekstu zapytania. Wymagają więc weryfikacji przed dalszym użyciem, na przykład zapisaniem w bazie wiedzy. Aby ułatwić tą procedurę można skorzystać z guardrails - gotowej biblioteki języka Python, która ułatwia weryfikację zarówno struktury odpowiedzi, jak i w pewnym stopniu weryfikację faktów.
Biblioteka guardrails posługuje się specyfikacjami zapisanymi w formie plików xml w standardzie RAIL (Reliable AI markup Language), w którym opisana jest struktura oczekiwanego wyniku, format pól wyniku, opcjonalne walidacje, prompt.
Przykładowy plik RAIL dla zapytania zwracającego podstawowe dane bohatera/bohaterki biogramu wygląda następująco:
<rail version="0.1">
<output>
<object name="person_info">
<string name="place_of_birth" description="Miejsce urodzenia bohatera/bohaterki biogramu" />
<string name="place_of_death" description="Miejsce śmierci bohatera/bohaterki biogramu" />
<string name="place_of_burial" description="Miejsce pochówku bohatera/bohaterki biogramu " />
<date name="date_of_birth" description="Data urodzenia bohatera/bohaterki biogramu" date_format='%Y-%m-%d'/>
<date name="date_of_death" description="Data śmierci bohatera/bohaterki biogramu" date_format='%Y-%m-%d'/>
<date name="date_of_burial" description="Data pochówku bohatera/bohaterki biogramu" date_format='%Y-%m-%d'/>
</object>
</output>
<prompt>
Na podstawie podanego tekstu biografii wyszukaj miejsce urodzenia, miejsce śmierci i miejsce pochówku głównego bohatera/bohaterki.
Podaj także datę urodzenia i datę śmierci oraz datę pochówku.
Tekst: {{document}}
@xml_prefix_prompt
{output_schema}
@json_suffix_prompt
</prompt>
</rail>
Poniżej prosty program korzystający z biblioteki guardrails i specyfikacji RAIL zapisanej w pliku person_basic.xml:
""" guardrails - podstawowe informacje o postaci z biogramu """
import os
from pathlib import Path
import guardrails as gd
import openai
from dotenv import load_dotenv
# api key
env_path = Path(".") / ".env"
load_dotenv(dotenv_path=env_path)
OPENAI_ORG_ID = os.environ.get('OPENAI_ORG_ID')
OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY')
openai.api_key = OPENAI_API_KEY
# biogram
file_path = Path(".") / 'Szpręga Teodor.txt'
with open(file_path, 'r',encoding='utf-8') as f:
content = f.read()
# create a Guard object
rail_spec_path = Path(".") / 'person_basic.xml'
guard = gd.Guard.from_rail(rail_spec_path)
raw_llm_output, validated_output = guard(
openai.ChatCompletion.create,
prompt_params={"document": content},
max_tokens=800,
model="gpt-3.5-turbo-16k",
temperature=0
)
# result
print(validated_output)
Wynik działania skryptu:
{
"person_info": {
"place_of_birth": "Czersk",
"place_of_death": "Osieczna",
"place_of_burial": "Osieczna",
"date_of_birth": "1833-11-01",
"date_of_death": "1911-07-26",
"date_of_burial": null
}
}
Analizowany biogram Teodora Szpręgi pochodzi z 49 tomu PSB wydanego w 2013 roku. Za pomocą modelu GPT-4 spróbowano wydobyć z tekstu biogramu wszystkie informacje niezbędne do przygotowania danych do wprowadzenia do instancji wikibase. W szczególności:
- dane podstawowe: data i miejsce urodzenia, data i miejsce śmierci, data i miejsce pochówku postaci
- dane o funkcjach, urzędach pełnionych przez postać
- dane o relacjach rodzinnych
- dane o instytucjach, z którymi był związany bohater biogramu
- dane o miejscowościach, z którymi był związany bohater biogramu
- dane o ważnych dla bohatera biogramu osobach (poza krewnymi) a także jednozdaniowe streszczenie biogramu, które można wykorzystać jako opis elementu w wikibase
- pseudonimy, warianty nazwisk i imion bohatera biogramu.
Poniżej lista promptów wraz z wynikami, w przykładach użyto danych fikcyjnej postaci.
Prompt dla podstawowych danych:
Na podstawie podanego tekstu biografii wyszukaj miejsce urodzenia, miejsce śmierci i miejsce pochówku głównego bohatera/bohaterki.
Podaj także datę urodzenia i datę śmierci.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
place_of_birth: miejsce urodzenia bohatera/bohaterki
place_of_death: miejsce śmierci bohatera/bohaterki
place_of_burial: miejsce pochówku bohatera/bohaterki
date_of_birth: data urodzenia bohatera/bohaterki
date_of_death: data śmierci bohatera/bohaterki
date_of_burial: data pochówku bohatera/bohaterki
Jeżeli jakiejś informacji brak w podanym tekście napisz: 'brak danych'
Przykład 1.
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Ur. się 1 czerwca, we wsi Andalewo koło Wyszeborga. Jego bratanicą była Małgorzata Anna, żona
Winfrida de Loeve. S. ożenił się z Joanną, córką burgrabiego
krakowskiego Adama Kurozwęckiego. Zmarł w Hurczynianach, pochowano go na miejscowym cmentarzu parafialnym."
Wynik:
[{"place_of_birth":"Andalewo"},
{"place_of_death":"Hurczyniany"},
{"place_of_burial":"cmentarz parafialny w Hurczynianach"},
{"date_of_birth":"1557-06-01"},
{"date_of_death":"1591"},
{"date_of_burial":"brak danych"}
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"place_of_birth":"Czersk"},
{"place_of_death":"Osieczna"},
{"place_of_burial":"plac przed kościołem w Osiecznej"},
{"date_of_birth":"1833-11-01"},
{"date_of_death":"1911-07-26"},
{"date_of_burial":"brak danych"}
]
Uwaga: w przypadku tego promptu identyczne wyniki zwracał także model gpt-3.5-turbo
(znacznie tańszy niż GPT-4), jednak dla pozostałych zapytań jakość odpowiedzi modelu gpt-4 była wyraźnie lepsza.
Prompt dla funkcji i urzędów:
Na podstawie podanego tekstu biografii wyszukaj wszystkie urzędy i funkcje pełnione przez głównego bohatera/bohaterkę.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
function: funkcja, urząd pełnione przez bohatera/bohaterkę
Przykład 1.
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Jego bratanicą była Małgorzata Anna, żona
Winfrida de Loeve. S. ożenił się z Joanną, córką burgrabiego
krakowskiego Adama Kurozwęckiego."
Wynik:
[{"function":"kupiec"},
{"function":"bankier"}
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"role_or_office":"reformat"},
{"role_or_office":"misjonarz"},
{"role_or_office":"komisarz generalny w Poznańskiem"},
{"role_or_office":"uczeń w gimnazjum katolickim w Chojnicach"},
{"role_or_office":"zakonnik Zakonu Braci Mniejszych w Prow. Reformatów Niepokalanego Poczęcia NMP"},
{"role_or_office":"student filozofii i teologii w klasztorze w Łąkach"},
{"role_or_office":"kapłan"},
{"role_or_office":"student teologii w Prow. Rekolektów Krzyża Świętego w Westfalii"},
{"role_or_office":"wykładowca historii Kościoła w studium seminaryjnym w Miejskiej Górce"},
{"role_or_office":"wicemagister nowicjatu w Wejherowie"},
{"role_or_office":"kaznodzieja w Wejherowie"},
{"role_or_office":"dyrektor Trzeciego Zakonu w Wejherowie"},
{"role_or_office":"gwardian w Wejherowie"},
{"role_or_office":"gwardian i dyrektor domu księży demerytów w Osiecznej"},
{"role_or_office":"kaznodzieja w Zamartem i Miejskiej Górce"},
{"role_or_office":"misjonarz apostolski"},
{"role_or_office":"kapelan sióstr franciszkanek i ambasady austro-węgierskiej w Stambule"},
{"role_or_office":"wikariusz w Kurzętniku"},
{"role_or_office":"wikariusz w Zblewie"},
{"role_or_office":"wikariusz parafii w Miejskiej Górce"},
{"role_or_office":"duszpasterz w kościele zakonnym na Goruszkach"},
{"role_or_office":"wikariusz parafii w Dubinie"},
{"role_or_office":"zastępca prowincjała"},
{"role_or_office":"komisarz generalny"},
{"role_or_office":"dyrektor domu księży demerytów w Osiecznej"},
{"role_or_office":"zastępca proboszcza parafii w Drzeczkowie"}
]
Uwaga: wszystkie przygotowane przez model informacje są prawdziwe, raczej nie pominięto żadnej funkcji/urzędu, można zauważyć ewentualne drobne niezręczności - jeżeli bohater zastępował proboszcza to (chyba) nie pełnił funkcji zastępcy proboszcza
, tylko tymczasowo był proboszczem.
Prompt dla relacji rodzinnych:
Na podstawie podanego tekstu wyszukaj wszystkich krewnych lub powinowatych głównego bohatera tekstu: {name}. Możliwe rodzaje pokrewieństwa: ojciec, matka, syn, córka, brat, siostra, żona, mąż, teść, teściowa, dziadek, babcia, wnuk, wnuczka, szwagier, szwagierka, siostrzeniec, siostrzenica, bratanek, bratanica, kuzyn, kuzynka, zięć, synowa.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
family relation: rodzaj pokrewieństwa (kim osoba była dla bohatera/bohaterki )
person: nazwa (imię i nazwisko osoby związanej relacją z bohaterem)
Wypisz tylko rodzaje pokrewieństwa, które występują w tekście.
Jeżeli w tekście nie ma żadnych informacji o pokrewieństwach głównego bohatera napisz: "brak danych".
Przykład 1
Tekst: "Soderini Carlo (ok. 1537–1581), kupiec i bankier. Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym bratem Bernarda (zob.).
Jego bratanicą była Małgorzata Anna, żona Winfrida de Loeve. S. ożenił się z Joanną, córką burgrabiego krakowskiego Adama Kurozwęckiego."
Wynik:
[{"family_relation":"ojciec", "person":"Niccola Ricasoli"},
{"family_relation":"matka": "person":"Annalena Ricasoli"},
{"family_relation":"brat": "person":"Bernard"},
{"family_relation":"bratanica": "person":"Małgorzata Anna"},
{"family_relation":"żona": "person":"Joanna"},
{"family_relation":"teść": "person":"Adam Kurozwęcki"}
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"family_relation":"ojciec", "person":"Ignacy"},
{"family_relation":"matka", "person":"Katarzyna Sabiniarz"}
]
Uwaga: to poprawny wynik, wymienione zostały wszystkie relacje rodzinne głównego bohatera biogramu.
Prompt zwracający instytucje, z którymi był związany bohater biogramu:
Na podstawie podanego tekstu biografii wyszukaj instytucje związane z głównym bohaterem/bohaterką.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
institution: nazwa instytucji związanej z bohaterem/bohaterką
place_of_institution: miejscowość w której położona jest instytucja związana z bohaterem/bohaterką
Miejscowość podaj w mianowniku.
Jeżeli jakiejś informacji brak w podanym tekście napisz: 'brak danych'
Przykład 1.
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Ur. się 1 czerwca, we wsi Andalewo koło Wyszeborga.
Pracował w Banku Czeskim we Wrocławiu, później zaś praktykował w Izbie Celnej miasta Gdańska.
Zmarł w Hurczynianach, pochowano go na miejscowym cmentarzu parafialnym."
Wynik:
[{"institution":"Bank Czeski", "place_of_institution":"Wrocław"},
{"institution":"Izba Celna", "place_of_institution":"Gdańsk"}
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"institution":"Gimnazjum katolickie", "place_of_institution":"Chojnice"},
{"institution":"Zakon Braci Mniejszych", "place_of_institution":"Wejherowo"},
{"institution":"Klasztor w Łąkach", "place_of_institution":"Łąki"},
{"institution":"Prowincja Rekolektów Krzyża Świętego", "place_of_institution":"Westfalia"},
{"institution":"Studium seminaryjne", "place_of_institution":"Miejska Górka"},
{"institution":"Dom księży demerytów", "place_of_institution":"Osieczna"},
{"institution":"Klasztor przy kościele NMP (zwanej Draperis)", "place_of_institution":"Stambuł"},
{"institution":"Kaplica ambasady austro-węgierskiej", "place_of_institution":"Stambuł"},
{"institution":"Parafia w Kurzętniku", "place_of_institution":"Kurzętnik"},
{"institution":"Parafia w Zblewie", "place_of_institution":"Zblewo"},
{"institution":"Parafia w Miejskiej Górce", "place_of_institution":"Miejska Górka"},
{"institution":"Kościół zakonny na Goruszkach", "place_of_institution":"Miejska Górka"},
{"institution":"Parafia w Dubinie", "place_of_institution":"Dubin"},
{"institution":"Parafia w Drzeczkowie", "place_of_institution":"Drzeczkowo"}
]
Uwagi: Trudno powiedzieć skąd model wziął "kaplicę ambasady", to raczej przykład halucynacji - w tekście jest tylko mowa o tym, że bohater biogramu był kapelanem ambasady austro-węgierskiej.
Prompt dla miejscowości, związanych z bohaterem/bohaterką biogramu:
Na podstawie podanego tekstu biografii wyszukaj miejscowości związane z głównym bohaterem/bohaterką.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
place: nazwa miejscowości związanej z bohaterem/bohaterką
date: data, kiedy bohater/bohaterka przebywał w danej miejscowości
Miejscowość podaj w mianowniku.
Jeżeli jakiejś informacji brak w podanym tekście napisz: 'brak danych'
Przykład 1.
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Ur. się 1 czerwca, we wsi Andalewo koło Wyszeborga.
Pracował w Banku Czeskim we Wrocławiu w latach 1577-78, później zaś, od 1579 roku praktykował w Izbie Celnej miasta Gdańska.
Pod koniec życia zamieszkał w Elblągu w pobliżu portu.
Zmarł w Hurczynianach, pochowano go na miejscowym cmentarzu parafialnym."
Wynik:
[{"place":"Andalewo", "date":"1557-06-01"},
{"place":"Wrocław", "date":"1577-1578"},
{"place":"Gdańsk", "date":"1579"},
{"place":"Elbląg", "date":"brak danych"},
{"place":"Hurczyniany", "date":"1591"}
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"place":"Czersk", "date":"1833-11-01"},
{"place":"Chojnice", "date":"brak danych"},
{"place":"Wejherowo", "date":"1856-05-05"},
{"place":"Łąki", "date":"1857-05-06"},
{"place":"Westfalia", "date":"brak danych"},
{"place":"Miejska Górka", "date":"1861-09-02"},
{"place":"Osieczna", "date":"1865-07"},
{"place":"Zamarte", "date":"1870"},
{"place":"Stambuł", "date":"1872-05"},
{"place":"Adampol", "date":"brak danych"},
{"place":"Rzym", "date":"1881-07-05"},
{"place":"Kurzętnik", "date":"1884"},
{"place":"Zblewo", "date":"1885-01"},
{"place":"Goruszki", "date":"1887-07"},
{"place":"Dubinie", "date":"1887-09-05"},
{"place":"Poznań", "date":"brak danych"},
{"place":"Asyż", "date":"1895-05-16"},
{"place":"Drzeczkowo", "date":"1900-10-09"}
]
Uwagi: Nie została uwzględniona miejscowość, w której zmarł bohater biogramu, być może dlatego że wystąpiła też wcześniej, a w zapytaniu nie było jasno określone, że miejscowości mogą wystąpić wielokrotnie z różnymi datami.
Jedna z miejscowości na liście pojawia się w odmienionej formie (Dubinie) mimo wyraźnej wskazówki w prompcie, by nazwy miejscowości wymienione zostały w mianowniku.
Informacja dotycząca Poznania mówi tylko o wydaniu reguł zakonnych przez bohatera, nie musi to oznaczać, że przebywał on w tym mieście, ten wynik można więc uznać za wątpliwy.
Pominięte zostały Wiedeń i Triest przez które bohater podróżował w 1872 roku.
Prompt zwracający listę ważnych osób dla głównej postaci biogramu:
Na podstawie podanego tekstu biografii wyszukaj osoby związane z głównym bohaterem/bohaterką, lecz pomiń krewnych i powinowatych.
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
name: imię i nazwisko osoby związanej z bohaterem/bohaterką
date: data, kiedy bohater/bohaterka spotkał/zetknał się z daną osobą
info: dodatkowe informacje o osobie np. funkcja, zawód
Jeżeli jakiejś informacji brak w podanym tekście napisz: 'brak danych'
Przykład 1.
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Ur. się 1 czerwca, we wsi Andalewo koło Wyszeborga. Od 1567 roku uczył się w szkole wiejskiej
prowadzonej przez księdza Jana Tokalskiego z Krakowa. Następnie wstąpił na uniwersystet w Królewcu, gdzie zaprzyjaźnił się
ze Zdenkiem Kovacem, synem właściciela banku w Pradze, oraz z Czesławem Dąbkiem.
Pracował w Banku Czeskim we Wrocławiu w latach 1577-78, później zaś, od 1579 roku praktykował w Izbie Celnej miasta Gdańska.
Pod koniec życia zamieszkał w Elblągu w pobliżu portu, gdzie jeszcze w 1590 r. prowadził interesy handlowe z Morycem Wachowskim,
kupcem zbożowym.
Zmarł w Hurczynianach, pochowano go na miejscowym cmentarzu parafialnym."
Wynik:
[{"name":"Jan Tokalski", "date":"1567", "info":"ksiądz"},
{"name":"Zdenek Kovac", "date":"brak danych","info":"syn właściciela banku"},
{"name":"Czesław Dąbek", "date":"brak danych","info":"brak danych"},
{"name":"Moryc Wachowski", "date":"1590", "info":"kupiec zbożowy"},
]
Tekst: [TEKST_BIOGRAMU]
Wynik:
[
{"name":"Jerzy Jeschke", "date":"1858", "info":"chełmiński biskup pomocniczy"},
{"name":"Pacyfik Bydłowski", "date":"1881","info":"były prowincjał i definitór generalny zakonu"},
{"name":"Bernardyn Dal Vago", "date":"brak danych","info":"generał reformatów"},
{"name":"Roger Binkowski", "date":"1889", "info":"prowincjał"},
{"name":"Alojzy Canali", "date":"1890", "info":"generał reformatów"},
{"name":"Florian Stablewski", "date":"1900", "info":"arcybiskup gnieźnieński i poznański"},
{"name":"Euzebiusz Stateczny", "date":"1904", "info":"brak danych"},
{"name":"Dionizy Schuler", "date":"1906", "info":"generał zakonu"}
]
Uwagi: pominięty ks. Michał Ławrynowicz, którego relację bohater spisywał - co chyba oznacza że go spotkał (?).
Prompt tworzący jednozdaniowe streszczenie biogramu:
Na podstawie podanego tekstu napisz jednozdaniowy opis głównego bohatera/bohaterki, który będzie opisem itemu w bazie wiedzy na temat tej postaci.
Przykład 1
Tekst: "Soderini Carlos (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Ur. się 1 czerwca, we wsi Andalewo koło Wyszeborga. Od 1567 roku uczył się w szkole wiejskiej
prowadzonej przez księdza Jana Tokalskiego z Krakowa. Następnie wstąpił na uniwersystet w Królewcu, gdzie zaprzyjaźnił się
ze Zdenkiem Kovacem, synem właściciela banku w Pradze.
Pracował w Banku Czeskim we Wrocławiu w latach 1577-78, później zaś, od 1579 roku praktykował jako młodszy asystent celny w Izbie Celnej miasta Gdańska.
Pod koniec życia zamieszkał w Elblągu w pobliżu portu, gdzie prowadził interesy handlowe z Morycem Wachowskim.
Zmarł w Hurczynianach, pochowano go na miejscowym cmentarzu parafialnym."
Wynik:
"Soderini Carlos (ok. 1557–1591), kupiec, bankier i asystent celny, studiował na Uniwersytecie w Królewcu."
Tekst: [TEKST_BIOGRAMU]
Wynik:
"Szpręga Teodor (1833–1911), reformat, misjonarz i komisarz generalny, prowadził
nauczanie w szkole seminaryjnej, służył jako kapelan w Stambule i pracował na
odbudowę zakonu w Polsce."
Wynik z parametrem temperature
= 0.0:
"Teodor Szpręga (1833-1911), reformat, misjonarz i komisarz generalny
w Poznańskiem, był wykładowcą historii Kościoła, kaznodzieją, kapelanem
sióstr franciszkanek i ambasady austro-węgierskiej w Stambule oraz dyrektorem
domu księży demerytów w Osiecznej."
Wynik przygotowany przez model gpt-3.5-turbo
(również z parametrem temperature
= 0.0):
Szpręga Teodor, w zakonie Anastazy (1833—1911), reformat, misjonarz i komisarz
generalny w Poznańskiem, autor przetłumaczonej na język polski "Reguły Trzeciego
Zakonu S. O. Franciszka".
Prompt wyszukujący warianty imienia i nazwiska postaci, oraz jej pesudonimy/kryptonimy:
Na podstawie podanego tekstu biografii wyszukaj wszystkie warianty nazwiska (także błędne),
imienia (także błędne) i pesudonimy lub kryptonimy
głównego bohatera/bohaterki (pomiń pseudonimy innych osób występujących w tekście).
Wynik przedstaw w formie listy obiektów JSON zawierających pola:
name_variant: wariant nazwiska bohatera/bohaterki
forname_variant: wariant imienia bohatera/bohaterki
nickname: pseudonim lub kryptonim bohatera/bohaterki
Przykład 1.
Tekst: "Soderini (Sodderini, Sodero) Carlos, pseud.: Carlito, Jan Będowski (ok. 1557–1591), kupiec i bankier.
Był jednym z pięciu synów Niccola i Annaleny Ricasoli, młodszym
bratem Bernarda (zob.). Jego bratanicą była Małgorzata Anna, żona
Winfrida de Loeve znanego też pod psed. Ikarus. S. ożenił się z Joanną, córką burgrabiego
krakowskiego Adama Kurozwęckiego."
Wynik:
[{"name_variant":"Sodderini"},
{"name_variant":"Sodero"},
{"forname_variant":"Karl"},
{"nickname":"Carlito"},
{"nickname":"Jan Będowski"},
]
Tekst: [TEKST_BIOGRAMU]
Wynik (dla innego biogramu - Władysława Szpilmana, gdyż w odróżnieniu od biogramu Teodora Szpręgi występują w nim i warianty nazwiska/imienia i pseudonimy):
[
{"name_variant":"Spielman"},
{"forname_variant":"Wolf"},
{"nickname":"Al Legro"},
{"nickname":"Wiktor Karwiński"}
]
W biograme występuje też pseudonim innej osoby, jednak zgodnie z promptem i przykładem jest pomijany.
Ten sam prompt uruchomiony przez model 'gpt-3.5-turbo' (temperature
= 0.0) zwraca gorszy wynik:
[
{"name_variant":"Spielman"},
{"forname_variant":"Władysław"},
{"nickname":"Al Legro"},
{"nickname":"Wiktor Karwiński"},
]
- GPT-4 daje dużo lepsze wyniki niż GPT-3 lub GPT-3.5-turbo, dzieje się tak nawet w przypadku najprostszych pytań o podstawowe fakty, jeżeli biogram jest napisany prostym językiem i dane są podane wprost, wynik gpt-3.5 i gpt-4 jest podobny, ale w trudniejszych przypadkach widać przewagę gpt-4.
- Koszt korzystania z gpt-4 jest 10x większy niż z gpt-3.5, koszt gpt-3 jest niższy niż gpt-4, ale biorąc pod uwagę jakość wyników korzystanie z niego do wyciągania informacji z biogramów ma mniejszy sens.
- Gpt-4 z odpowiednio skonstruowanym promptem jest w stanie wydobyć z tekstu wszystkie oczekiwane informacje, konstrukcja zapytania, odpowiedni przykład w prompcie ma jednak ogromne znaczenie.
- Gpt-4 jest w stanie zwrócić informacje od razu w formie ustrukturyzowanej np. w formie obiektu JSON, praktycznie bezbłędnie, można jednak dodatkowo posłużyć się bibliotekami w rodzaju guardrails w celu weryfikacji i walidacji formatu (a nawet wyników).
- Lepsze wyniki dają zapytania o wybrane konkretne informacje niż o wiele informacji na raz. Pytanie ograniczone do informacji podstawowych, lub tylko do relacji rodzinnych daje bardzo dobre rezultaty, ale już stworzenie jednego dużego zapytania próbującego wyciągnąć z tekstu wszystkie te dane jednocześnie może powodować pogorszenie wyników (a także zużycie przestrzeni kontekstu, przez co tekst biogramu wymaga wiekszego skracania), model np. nie odnajduje miejsca pochówku postaci, co dla konkretnego zapytania robił bezbłędnie. To niestety zwiększa koszt przetwarzania tekstów, ponieważ dla każdego biogramu należy zadać np. 6 pytań za każdym razem przekazując tekst biogramu. Koszt przetworzenia 1 biogramu modelem gpt-4 zbliża się wówczas do kilkudziesięciu centów.
- Problemem jest długość biogramów, standardowy model gpt-4 ma długość kontekstu równą 8 tys. tokenów (dla języka polskiego to ok. 4 tys wyrazów), model 32k z czterokrotnie większymi możliwościami nie jest jeszcze powszechne dostępny, ale nawet w jego przypadku sporo z biogramów PSB zawiera dłuższy tekst, powstaje więc konieczność skracania tekstu biogramu, lub przetwarzania w częściach. Na przykład najdłuższy biogram PSB, Stanisława Augusta Poniatowskiego liczy 78076 tokenów (bez części bibliograficznej). Zależnie od tematyki pytania znając sposób konstruowania biogramów można stosować różne metody skracania. Dla informacji podstawowych, które są zwykle umieszczone w kilku początkowych i kilku końcowych zdaniach można biogram ograniczyć właśnie w ten sposób. Informacje o relacjach rodzinnych kryją się w zdaniach zawierających określone słowa kluczowe, związane z pokrewieństwem i powinowactwem, to również jest prosty sposób na ograniczenie biogramu np. do kilku początkowych zdań oraz zdań zawierających te słowa. W innym przypadku można skorzystać z możliwości przetworzenia tekstu na liczby, poprzez podział tekstu na fragmenty (np. zdania. akapity) utworzenie dla nich osadzeń (embeddings) i zapisanie w bazach wektorowych, następnie wyszukiwanie i sklejanie najbardziej podobnych zdań/fragmentów do tematyki zapytania, aż do osiągnięcia maksymalnej dostępnej wielkości kontekstu dla modelu. Niesie to jednak ryzyko pominięcia istotnych informacji, jeżeli są one rozrzucone równomiernie w całej treści biogramu, np. ważne postacie dla bohatera biogramu będa pojawiać się przez cały okres jego życia, a więc także przez większą część biografii. W takim przypadku być może lepszym rozwiązaniem będzie przetwarzanie całego biogramu, lecz podzielonego na części.
- Próba wykorzystania tańszego modelu gpt-3.5-turbo do wstępnego przetworzenia biogramu, streszczenia go do treści niezbędnych do odpowiedzi na pytanie np. o podstawowe dane, miejscowości związane z postacią historyczną, nie podwiodła się. Model wykonywał w miarę poprawne streszczenie, ale gubił część informacji, mimo umieszczenia w konstrukcji propmptu odpowiednich wskazówek. Utworzony w ten sposób skrót biogramu był więc bezużyteczny dla modelu gpt-4, który poszukiwanych informacji nie mógłby w nim znaleźć.
- Można testować zapytania korzytając z interfejsu ChatGPT Pro, który pozwala na używanie modelu gpt-4, ale wyniki mogą być inne niż w przypadku bezpośredniego odpytywania modelu przez API, ponieważ korzystając z API mamy wpływ na parametry działania modelu, w ChatGPT nie. W szczególności podczas ekstrakcji informacji z biogramów należy zmniejszyć wartość
parametru
temperature
do zera. - Dane pozyskane automatycznie z biografii wymagają oczywiście dalszej obróbki przed wprowadzeniem ich do bazy danych/bazy wiedzy. Konieczna jest identyfikacja osób, miejsc i instytucji.
- Ważne jest także uspójnienie wyników - model nie zawsze trzyma się sztywno wytycznych, np. w przypadku braku danych zwykle w wynikach pojawia się odpowiedź 'brak danych', ale czasem 'nieznany', 'nieznana'.
- Osobną kwestią specyficzną dla biogramów jest kwestia uwspółcześnienia pisowni przedwojennej, Polski Słownik Biograficzny zaczął być wydawany w 1935 roku, pojawiają się w nim imiona w formie Marjan (współczesna pisownia: Marian), Apolonja (Apolonia).
Przykład większej analizy: próbka 250 biogramów z Polskiego Słownika Biograficznego: GPT_PSB
Wszystkie powyższe przykłady wyciągania wiedzy z tekstów związane były ze z góry określonymi rodzajami informacji, które należało pozyskać. Co w przypadku gdy nie wiadomo jakie informacje zawarte są w przetwarzanym opracowaniu historycznym i chcemy po prostu (!) pobrać wszelkie fakty z tekstu? Biblioteka LangChain ma ciekawy komponent nazwany GraphIndexCreator, który służy właśnie do tego celu.
Przykład skryptu, przetwarzającego fragment (początek) biogramu Adama Wacława, księcia z dynastii Piastów śląskich. Obecnie GraphIndexCreator sprawdza się lepiej dla krótszych tekstów, wyniki zwraca w języku angielskim, mimo to efekt jest ciekawy.
import os
from langchain.llms import OpenAI
from langchain.indexes import GraphIndexCreator
from pathlib import Path
from dotenv import load_dotenv
# api key
env_path = Path(".") / ".env"
load_dotenv(dotenv_path=env_path)
OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY')
text = """Adam Wacław (1574–1617) z rodu Piastów, książę cieszyński, tytułujący się także
księciem górnogłogowskim, choć tego księstwa już nie posiadał,
był synem Wacława Adama i drugiej jego żony, Katarzyny Sydonji, księżniczki saskiej.
Urodził się 12 XII 1574 r. Miał 5 lat, gdy umarł mu ojciec."""
index_creator = GraphIndexCreator(llm=OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY))
graph = index_creator.from_text(text)
result = graph.get_triples()
for item in result:
print(item)
Po uruchomieniu otrzymujemy serię trójek (subject, object, predicate):
('Adam Wacław', 'member of the Piast dynasty', 'is a')
('Adam Wacław', 'prince of Cieszyn', 'is a')
('Adam Wacław', 'prince of Górnogłogów', 'is a')
('Adam Wacław', 'Wacław Adam', 'is the son of')
('Adam Wacław', 'Katarzyna Sydonji', 'is the son of')
('Adam Wacław', '12 December 1574', 'was born on')
('Adam Wacław', 'his father died', 'was 5 years old when')
A to efekt przetworzenia jednego z dalszych zdań biogramu ("Dla poprawienia swego położenia wstąpił A. W. do służby w wojsku cesarskiem i jako dowódca oddziału, złożonego z jazdy, a więc na stanowisku podrzędnem, walczył z Turkami na Węgrzech..."):
('Adam Wacław', 'Imperial Army', 'joined the')
('Adam Wacław', 'a cavalry unit', 'was a commander of')
('Adam Wacław', 'the Turks', 'fought against')
Model douczany był 10 przykładami (plik jsonl w repozytorium: link, skrypt: fine_tuning_gpt35_test.py), które miały nauczyć go ekstrakcji podstawowych informacji o postaci historycznej i zwrócenia wyniku w formacie JSON.
Przeprowadzono test na modelu standardowym i modelu po fine-tuningu wykorzystując zapytanie:
Na podstawie podanego tekstu biografii wyszukaj miejsce urodzenia,
miejsce śmierci, miejsce pochówku, datę urodzenia, datę śmierci
i datę pochówku głównego bohatera/bohaterki. Jeżeli w tekście brak danych
na ten temat, zapisz: brak danych. Wynik przedstaw w formie listy obiektów
JSON.
Tekst: Adam Wacław (1574–1617) z rodu Piastów, książę cieszyński,
tytułujący się także księciem górnogłogowskim, choć tego księstwa
już nie posiadał, był synem Wacława Adama i drugiej jego żony, Katarzyny
Sydonji, księżniczki saskiej. Urodził się 12 XII 1574 r. Miał 5 lat,
gdy umarł mu ojciec. W czasie jego małoletności rządziła księstwem
matka wraz z dodanymi jej przez cesarza opiekunami księcia. Przyjeżdżała
ona w tym celu od czasu do czasu do Cieszyna, po powtórnem wyjściu zamąż
– z wiedzą króla Stefana Batorego – za Emeryka Forgacha, żupana trenczyńskiego,
A.-W. wychowywał się przez 8 lat na dworze elektora saskiego, w r. 1595 objął
rządy w księstwie i w tym samym roku ożenił się z Elżbietą, córką ks. kurlandzkiego,
Kettlera. A.-W. umarł w Cieszynie na Brandysie 13 VII 1617; ciało jego złożono
najpierw na zamku i dopiero 4 IV następnego roku pochowano w kościele dominikanów
cieszyńskich, gdzie spoczywały zwłoki wszystkich jego poprzedników. Zostawił
5 dzieci, z których Fryderyk Wilhelm, ostatni cieszyński Piast męski, i Elżbieta
Lukrecja, ostatnia Piastówna, rządzili kolejno Księstwem.
Wynik dla standardowego modelu: gpt-3.5-turbo
[
{
"imię": "Adam",
"nazwisko": "Wacław",
"miejsce_urodzenia": "brak danych",
"miejsce_śmierci": "Cieszyn, Brandys",
"miejsce_pochówku": "kościół dominikanów cieszyńskich",
"data_urodzenia": "12 XII 1574",
"data_śmierci": "13 VII 1617",
"data_pochówku": "4 IV następnego roku"
}
]
Wynik dla modelu gpt_3.5-turbo po fine-tuningu:
{
"place_of_birth": { "place": "brak danych" },
"place_of_death": { "place": "Cieszyn" },
"place_of_burial": {
"place": "Cieszyn",
"note": "kościół dominikanów cieszyńskich"
},
"date_of_birth": { "date": "1574-12-12" },
"date_of_death": { "date": "1617-07-13" },
"date_of_burial": { "date": "1618-04-04" }
}
Koszt fine-tunigu: ok 0.30$, czas trwania - ok 10 minut.
Można jeszcze porównać wynik standardowego modelu gpt-3.5-turbo z dłuższym promptem, stosowanym podczas testu gpt-4 (link do pliku z tekstem promptu):
[
{
"place_of_birth": {
"place": "brak danych"
},
"place_of_death": {
"place": "Cieszyn, Brandys"
},
"place_of_burial": {
"place": "kościół dominikanów cieszyńskich"
},
"date_of_birth": {
"date": "1574-12-12"
},
"date_of_death": {
"date": "1617-07-13"
},
"date_of_burial": {
"date": "1618-04-04"
}
}
]
Trzeba przyznać, że wynik otrzymany dzięki modelowi po fine-tuningu jest jednak najlepszy, porównywalny z GPT-4.
Wyniki modelu po fine-tunigu należałoby jednak sprawdzić na większej próbie np. tej samej serii 250 biogramów, które w odrębnym projekcie były przetwarzane przez model GPT-4. Poniżej efekty takiego testu.
Ogólna poprawność wyników modelu 3.5-turbo (fine-tuning) w zakresie ekstrakcji danych podstawowych (miejsce i data urodzenia, miejsce i data śmierci, miejsce i data pochówku) z biogramów postaci PSB (próbka 250 biogramów, ogólna poprawność uwzględnia i znalezione dane i zwrócone przez model braki danych):
Rodzaj informacji | Poprawne | Niepoprawne |
---|---|---|
Miejsce urodzenia | 182 (72.8%) | 68 (27.2%) |
Miejsce śmierci | 222 (88.8%) | 28 (11.2%) |
Miejsce pochówku | 233 (93.2%) | 17 (6.8%) |
Data urodzenia | 226 (90.4%) | 24 (9.6%) |
Data śmierci | 226 (90.4%) | 24 (9.6%) |
Data pochówku | 235 (94.0%) | 15 (6%) |
Ogółem | 1315 (87.5%) | 185 (12.5%) |
Braki danych (1500 potencjalnych iformacji: 250 biogramów, 6 rodzajów informacji):
RodZaj informacji | Brak danych |
---|---|
Miejsce urodzenia | 45 |
Miejsce śmierci | 90 |
Miejsce pochówku | 137 |
Data urodzenia | 53 |
Data śmierci | 23 |
Data pochówku | 220 |
Ogółem | 568 |
Najrzadziej znajdowane są miejsca i data pochówku, faktycznie takie informacje często nie pojawiają się w biogramach.
Jeżeli brać pod uwagę tylko te informacje, które udało się znaleźć (czyli pomijając braki danych), skuteczność modelu gpt-35-turbo po fine-tuningu wygląda następująco (analizowano 250 biogramów, dla porównania podane także wyniki GPT-4):
Rodzaj informacji | Znaleziono | Poprawnie | Znaleziono (GPT-4) | Poprawnie (GPT-4) |
---|---|---|---|---|
Miejsce urodzenia | 205 | 137 (66.83%) | 154 | 137 (88.96%) |
Miejsce śmierci | 160 | 137 (85.62%) | 160 | 141 (88.12%) |
Miejsce pochówku | 113 | 99 (87.61%) | 111 | 101 (90.99%) |
Data urodzenia | 197 | 174 (88.32%) | 180 | 177 (98.33%) |
Data śmierci | 227 | 210 (92.51%) | 230 | 229 (99.57%) |
Data pochówku | 30 | 19 (63.33%) | 26 | 23 (88.46%) |
Ogółem | 932 | 776 (83.26%) | 861 | 808 (93.84%) |
Badając tylko przypadki braku danych, poprawność wyników zwracanych przez model, jest większa, choć zwraca uwagę wyraźnie słabszy wynik w przypadku daty śmierci, w blisko 1/3 biogramów model nie znalazł informacji, która w była w biogramie:
Rodzaj danych | Brak danych dla | Poprawnie |
---|---|---|
Miejsce urodzenia | 45 | 45 (100.00%) |
Miejsce śmierci | 90 | 85 (94.44%) |
Miejsce pochówku | 137 | 134 (97.81%) |
Data urodzenia | 53 | 52 (98.11%) |
Data śmierci | 23 | 16 (69.57%) |
Data pochówku | 220 | 216 (98.18%) |
Ogółem | 568 | 548 (96.48%) |
Wyniki dla całej serii biogramów pokazują, że model 3.5-turbo po fine-tuningu jest jednak istotnie słabszy niż model gpt-4 - zob. wyniki dla gpt-4 To czego nie widać w samych liczbach, to częste wyszukiwanie poprawnych lecz niedokładnych dat (np. roczne, gdy w biogramie można znaleźć dzienne - 53 przypadki dla daty śmierci postaci!), lub częste błędy w odmianie nazw geograficznych - takie dane były zaliczane jako poprawne, jednak z odpowiednią notatką wskazującą że odpowiedź modelu nie była idealna. Uwzględnienie tego rodzaju danych jako niepoprawnych znacznie pogorszyłoby wynik modelu, np. dla daty śmierci procent poprawnie wydobytych infromacji spadłby z 92 do 69!. Szczegółowe rezultaty dla każdego biogramu dostępne są w repozytorium
W Słowniku Historyczno-Geograficznym zastosowano wiele zapisów skrótowych, które dla przeciętnego użytkownika czynią teksty haseł mało czytelnymi. Czy gpt-4 mógłby poprawnie rozwinąć skróty na podstawie dostarczonej listy można przetestować na przykładzie fragmentu hasła Babice ze słownika ziemii warszawskiej, a dokładnie punktu 3 tego hasła dotyczącego spraw własności, podatków itp. Oprócz listy skrótów rzeczowych w zapytaniu zawarto dodatkowe wskazówki:
"Na podstawie przedstawiongo katalogu skrótów rozwniń skróty w podanym tekście.
Katalog skrótów (skrót = rozwinięcie, kolejne sktóry oddzielone znakiem średnika):
a. = ante (przed); abp = arcybiskup ...
Dodatkowo w tekście może wystąpić skrót od nazwy opisywanej miejscowości - jest to
zwykle pierwsza duża litera nazwy miejscowości, w tym tekście miejscowość to Babice,
a skrót od niej = B. Pamiętaj aby rozwinięte ze skrótów słowa zostały użyte we
właściwej odmianie (przypadku) np. 'Piotr z B. śwd. na dok. ks. Siemowita II' =
'Piotr z Babic świadek na dokumencie księcia Siemowita II'.
Tekst: {tu tekst hasła}"
Tekst oryginalny można zobaczyć w wersji online słownika (link powyżej), zaś efekt rozwijania skrótów poniżej:
"Własność szlachecka. 1313 Piotr z Babic świadek na dokumencie księcia
Siemowita II (NKDMaz. 2 nr 135); 1365-91 Marcin Babka z Babic → punkt 6; 1399
Marcin z Babic świadek na dokumencie księcia Janusza I (MK 89, 217v-219v);
1400-17 Marcin z Babic, syn Marcina → punkt 6; 1401 książę Janusz I dał niegdyś
Marcinowi Babce wojewodzie mazowieckiemu dobra Żarnowo z lasem Niemiczyn w ziemi
ciechanowskiej oraz dąbrowę zwaną Bratkowy Kąty z jeziorem Rybno nad rzeką Pisą
koło Nowogrodu; po zgonie wojewody jego synowie Marcin podkomorzy warszawski
i Piotr oraz Stanisław syn Jaśka jako spadkobiercy odsprzedają księciu dąbrowę
z jeziorem, a książę potwierdza wyżej wymienione nadanie Marcinowi z Babic
podkomorzy warszawski, któremu przypadła wieś [Żarnowo] z lasem (MK 6, 103v-104);
[1417] rycerz pasowany Marcin z Babic podkomorzy warszawski kwituje brata Piotra
z Latchorzewa z zadośćuczynienia za Babice i Trupienie oraz z wypłaty 100 kop
groszy praskich Janowi Fortunie ze Szczytna i 30 kop groszy praskich Marcinowi
z Goźlina; Marcin z Babic podkomorzy i jego żona Imisława zatrzymują dożywotnio
użytkowanie tych wsi; jeżeli podkomorzy będzie miał syna, to zwróciwszy 130 kop
groszy odbierze te wsie, a jeżeli córki, to każda otrzyma w posagu 30 kop groszy
od Piotra z Latchorzewa; żona podkomorzego będzie miała dożywotnio Babice, a Piotr
z Latchorzewa Trupienie (MK 3, 61v); 1421 Imka wdowa po Marcinie z Babic podkomorzy
warszawski pozywa braci Pawła i Urbana z Latchorzewa o posag zapisany jej na Babice
i Trupieniu, ale dokument posażny zostaje uznany za falsyfikat (Warszawa. 1, 3v);
[1422] Paweł i Urban z Latchorzewa synowie Piotra dzielą się dobrami ojczystymi;
Paweł dostaje Latchorzewo i Trupienie, a Urban Babice, Zbarz i Korzkiewki; Paweł
będzie mógł otrzymać Służewiec i Jemielino bez przeszkód ze strony Urbana
(MK 3, 87v88); 1424 Marcin z Goźlina zięć pani Babickiej (Warszawa. 1, 134);
1424 Marcin z Babic (Warszawa. 1, 151v); 1425 pani Babicka uzyskuje prawo zagradzania
drogi, którą dziedzice z Wierzuchowa dawniej chodzili do kościoła [w Babicach]
(Warszawa. 1, 176); 1426 Jan Wircioch mieszczanin Nowej Warszawy zobowiązuje się
zapłacić 42 grosze Maciejowi z Babic (ŁawWN nr 77); 1426 Marcin z Babic
(Warszawa. 1, 229v); 1428 szlachetny Hincza z Babic (Warszawa. 2, 10); 1434 pani
Imka z Babic (Warszawa. 2, 254); 1438 Urban z Babic dostaje Młodynin na Zawkrzu
od Anny wdowy po Klemensie z Kraśniewa i od jej syna Włodzimierza, przypadły im
w spadku po bracie Anny Marcinie (MK 335, 27v); 1446 Urban z Babic zabezpiecza
sobie wierzytelność 100 kop groszy na domu zmarłego pana „Slycz” w Starej Warszawie
(PP 3 nr 959); 1451 Urban z Babic odwołuje sprzedaż Kiełpina i Gromadzyna dokonaną
w 1449 przez Jana Sąchockiego z Zaborowa [ziemia wyszogrodzka] na rzecz Jana z
Węgrzynowa wojewody mazowieckiego za 450 kop groszy w półgroszku (MK 4, 153v-154);
1458-59 Urban z Babic → punkt 6; 1467 Jan Babicki syn [zmarłego] Urbana stolnika
warszawskiego (Warszawa. 4, 88); 1477 Jan z Babic ma proces w sądzie kościelnym
z Marcinem Latochorzewskim (AE II 498); 1479 Jan Babicki (ZR nr 1473); 1484 Jan
Babicki z Babic sprzedaje z prawem odkupu czynsz roczny 4 grzywien groszy w
półgroszku ze Zbarza za 40 kop groszy w półgroszku Marcinowi z Zalesia kanonik
płocki i pleban z Przybyszewa na ołtarz w kolegiacie warszawskiej i zaręcza spokój
ze strony żony Barbary (MK 9, 161v); 1484 książę Bolesław V daje Janowi z Babic
prawo nieodpowiednie i zwolnienie od kar sądowych (MK 9, 166v; MK 60, 265; MS 4 nr 6444);
1484 kowal Maciej Babicki mieszczanin Nowej Warszawy (ŁawWN nr 1018); 1490
[Jan] Babicki uczestnik najazdu szlachty na dobra tarczyńskie prepozyta kapituły
warszawskiej (AC 2 nr 1872); 1494 Jan syn zmarłego Łazarza z Sosnkowa lub z Bliznego
sprzedaje dział w Bliznem Janowi z Babic (MK 18, 248v); 1502 → punkt 6; 1506
transakcja z 1496 zostaje potwierdzona Urbanowi synowi Jana z Babic (MK 18, 248v);
1509 Barbara wdowa po zmarłym Janie z Babic (Warszawa. 10, 5); 1511 szlachetny
Urban z Babic (Warszawa. 10, 896); 1518 Urban z Babic i Jerzy z Parzniewa sprzedają
z prawem odkupu czynsz roczny z Babic i Parzniewa Grzegorzowi z Cedrowic
wikariuszowi wiecznemu katedry włocławskiej (MK 32, 18); 1526 w Babicach 9 włók
osiadłych (ASK I 27, 451); 1527 → punkt 5; 1530 Anna żona Urbana Babickiego, córka
Jana Duckiego otrzymuje wraz z siostrami zapis ojca na jego dobrach w Dudzie, Otwocku,
Dąbrówce, Woli i innych (Bon. 5, 71); 1539 wypis dokumentu z 1484 na prośbę Urbana
Babickiego (MS 4 nr 6444); 1580 pobór od 5 włók osiadłych (ŹD 263); 1584 Babiccy
herbu Dołęga, jednej dzielnicy ze Służowieckimi (Papr. 403); XIX wiek. Babice wieś
ma 428 morg [ok. 14 włók], folwark 1598 morg [53 włóki] (Małc. 192).
Wydaje się, że większość skrótów została rozwinięta poprawnie i w poprawnej formie, ale model miał problem np. z odmianą słowa podkomorzy: 'Imka wdowa po Marcinie z Babic podkomorzy warszawski pozywa braci Pawła i Urbana'.
Tak poprawiony tekst jest lepszym źródłem do dalszych analiz, można na przykład zapytać gpt by opierając się na tak zmodyfikowanym haśle z SHG wyszukał informacje na temat jakiejś postaci. GPT nie jest oczywiście historykiem a źródłowy tekst nie jest prosty, potrzebne są więc dodatkowe wskazówki w treści zapytania (promptu):
"Na podstawie podanego tekstu, napisz proszę co wiadomo na temat Urbana z Babic?
Podaj tylko informacje znajdujące się w przekazanym tekście.
Zwróć uwagę, że w tekście mogą występować tak samo nazywające się lecz różne
osoby, np. 'Jan z Warki syn Piotra' i 'Jan z Warki syn Władysława' to różne postacie.
Tekst: {tekst}"
Odpowiedź jest w zasadzie poprawna, być może modelowi należałoby udzielić dodatkowych wskazówek związanych ze specyfiką tekstu:
Urban z Babic był synem Piotra. W 1422 roku, wraz ze swoim bratem Pawłem, podzielił
się dobrami ojczystymi. Urban otrzymał Babice, Zbarz i Korzkiewki. W 1438 roku
otrzymał Młodynin na Zawkrzu od Anny, wdowy po Klemensie z Kraśniewa i od jej syna
Włodzimierza. W 1446 roku zabezpieczył sobie wierzytelność 100 kop groszy na domu
zmarłego pana „Slycz” w Starej Warszawie. W 1451 roku odwołał sprzedaż Kiełpina
i Gromadzyna dokonaną w 1449 przez Jana Sąchockiego z Zaborowa na rzecz Jana z
Węgrzynowa wojewody mazowieckiego za 450 kop groszy w półgroszku. W 1506 roku
potwierdzono transakcję z 1496 roku Urbanowi, synowi Jana z Babic. W 1511 roku
Urban z Babic był określany jako szlachetny. W 1518 roku Urban z Babic i Jerzy
z Parzniewa sprzedali z prawem odkupu czynsz roczny z Babic i Parzniewa Grzegorzowi
z Cedrowic wikariuszowi wiecznemu katedry włocławskiej. W 1530 roku Anna, żona
Urbana Babickiego, córka Jana Duckiego otrzymała wraz z siostrami zapis ojca na
jego dobrach w Dudzie, Otwocku, Dąbrówce, Woli i innych. W 1539 roku na prośbę
Urbana Babickiego wypisano dokument z 1484 roku.
Czy model językowy wraz z bazą wektorową, w której zapisano by hasła Słownika Historyczno-Geograficznego mógłby posłużyć jako wygodny mechanizm semantycznego wyszukiwania, w którym użytkownik zadawałby zapytania w języku naturalnym? Nie zamiast obecnych mechanizmów wyszukiwania w słowniku online, ale jako jego uzupełnienie. Zapewne tak, ale materiał (treść słownika) jest na tyle trudny, że wymagało by to wielu testów i przygotowań, samo 'wrzucenie' tekstu słownika to za mało by taki mechanizm był skuteczny i zwracał wiarygodną wiedzę. Należałoby się m.in. zastanowić nad podziałem haseł na fragmenty, wprowadzeniem metadanych opisujących hasła i części haseł, pytania zadawane takiemu mechanizmowi mogłyby przecież dotyczyć wielu haseł, wielkość kontekstu które model jest w stanie jednorazowo uwzględnić jest jednak ograniczona. Samo zapytanie użytkownika również musiałoby być wstępnie przetworzone przez model językowy, otrzymane zaś wyniki należałoby powiązać ze źródłowymi fragmentami, tak by było możliwe wskazanie na jakiej podstawie model napisał odpowiedź.
W jednym z wcześniejszych testów weryfikowana była możliwość podziału haseł SHG na regesty i model gpt-4 radził sobie z takim zadaniem całkiem poprawnie. Tym razem oprócz podziału na regesty (treść regestów po rozwinięciu skrótów) test dotyczył także określenia tematyki regestu. Analizowany modelem gpt-4 był p. 3 hasła Babice. Prompt zawierał instrukcję:
Podziel poniższy tekst na regesty. Tekst rozpoczyna się zwykle krótką informacją
na temat rodzaju własności, po nim następują regesty. Regest zaczyna się od daty
np. 1245 lub zakresu dat 1245-56 lub daty przybliżonej np. a. 1456, po której następuje
treść regestu, a po niej - w nawiasie - źródło informacji. Po nawiasie pojawia się
średnik oddzielający regesty. Jeżeli nie ma daty na początku, oznacza to, że data
jest taka sama jak w poprzednim regeście. Określ temat treści regestu w formie
krótkiego określenia np, 'podatki', 'sprawy sądowe', 'informacja o właścielu lub inne',
'sprzedaż' itp. Wynik przedstaw w formie pliku csv z kolumnami: data, treść,
źródło informacji, temat i znakiem @ jako separatorem kolumn.
oraz parę przykładów. Podana jako przykład tematyka regestów może oczywiście zostać lepiej dobrana i sprecyzowana, co wpłynie na poprawę jakości wyników. Obecne efekty działania modelu w poniższej tabeli:
Data | Treść | Źródła | Temat |
---|---|---|---|
1313 | Piotr z Babic świadek na dokumencie księcia Siemowita II | NKDMaz. 2 nr 135 | informacje o właścicielu lub inne |
1365-91 | Marcin Babka z Babic → punkt 6 | brak źródła | informacje o właścicielu lub inne |
1399 | Marcin z Babic świadek na dokumencie księcia Janusza I | MK 89, 217v-219v | informacje o właścicielu lub inne |
1400-17 | Marcin z Babic, syn Marcina → punkt 6 | brak źródła | informacje o właścicielu lub inne |
1401 | książę Janusz I dał niegdyś Marcinowi Babce wojewodzie mazowieckiemu dobra Żarnowo z lasem Niemiczyn w ziemi ciechanowskiej oraz dąbrowę zwaną Bratkowy Kąty z jeziorem Rybno nad rzeką Pisą koło Nowogrodu; po zgonie wojewody jego synowie Marcin podkomorzy warszawski i Piotr oraz Stanisław syn Jaśka jako spadkobiercy odsprzedają księciu dąbrowę z jeziorem, a książę potwierdza wyżej wymienione nadanie Marcinowi z Babic podkomorzy warszawski, któremu przypadła wieś [Żarnowo] z lasem | MK 6, 103v-104 | sprzedaż |
[1417] | rycerz pasowany Marcin z Babic podkomorzy warszawski kwituje brata Piotra z Latchorzewa z zadośćuczynienia za Babice i Trupienie oraz z wypłaty 100 kop groszy praskich Janowi Fortunie ze Szczytna i 30 kop groszy praskich Marcinowi z Goźlina; Marcin z Babic podkomorzy i jego żona Imisława zatrzymują dożywotnio użytkowanie tych wsi; jeżeli podkomorzy będzie miał syna, to zwróciwszy 130 kop groszy odbierze te wsie, a jeżeli córki, to każda otrzyma w posagu 30 kop groszy od Piotra z Latchorzewa; żona podkomorzego będzie miała dożywotnio Babice, a Piotr z Latchorzewa Trupienie | MK 3, 61v | sprawy spadkowe |
1421 | Imka wdowa po Marcinie z Babic podkomorzy warszawski pozywa braci Pawła i Urbana z Latchorzewa o posag zapisany jej na Babice i Trupieniu, ale dokument posażny zostaje uznany za falsyfikat | Warszawa. 1, 3v | sprawy sądowe |
[1422] | Paweł i Urban z Latchorzewa synowie Piotra dzielą się dobrami ojczystymi; Paweł dostaje Latchorzewo i Trupienie, a Urban Babice, Zbarz i Korzkiewki; Paweł będzie mógł otrzymać Służewiec i Jemielino bez przeszkód ze strony Urbana | MK 3, 87v88 | podział majątku |
1424 | Marcin z Goźlina zięć pani Babickiej | Warszawa. 1, 134 | informacje o właścicielu lub inne |
1424 | Marcin z Babic | Warszawa. 1, 151v | informacje o właścicielu lub inne |
1425 | pani Babicka uzyskuje prawo zagradzania drogi, którą dziedzice z Wierzuchowa dawniej chodzili do kościoła [w Babicach] | Warszawa. 1, 176 | przywilej |
1426 | Jan Wircioch mieszczanin Nowej Warszawy zobowiązuje się zapłacić 42 grosze Maciejowi z Babic | ŁawWN nr 77 | sprawy finansowe |
1426 | Marcin z Babic | Warszawa. 1, 229v | informacje o właścicielu lub inne |
1428 | szlachetny Hincza z Babic | Warszawa. 2, 10 | informacje o właścicielu lub inne |
1434 | pani Imka z Babic | Warszawa. 2, 254 | informacje o właścicielu lub inne |
1438 | Urban z Babic dostaje Młodynin na Zawkrzu od Anny wdowy po Klemensie z Kraśniewa i od jej syna Włodzimierza, przypadły im w spadku po bracie Anny Marcinie | MK 335, 27v | sprawy spadkowe |
1446 | Urban z Babic zabezpiecza sobie wierzytelność 100 kop groszy na domu zmarłego pana „Slycz” w Starej Warszawie | PP 3 nr 959 | sprawy finansowe |
1451 | Urban z Babic odwołuje sprzedaż Kiełpina i Gromadzyna dokonaną w 1449 przez Jana Sąchockiego z Zaborowa [ziemia wyszogrodzka] na rzecz Jana z Węgrzynowa wojewody mazowieckiego za 450 kop groszy w półgroszku | MK 4, 153v-154 | sprzedaż |
1458-59 | Urban z Babic → punkt 6 | brak źródła | informacje o właścicielu lub inne |
1467 | Jan Babicki syn [zmarłego] Urbana stolnika warszawskiego | Warszawa. 4, 88 | informacje o właścicielu lub inne |
1477 | Jan z Babic ma proces w sądzie kościelnym z Marcinem Latochorzewskim | AE II 498 | sprawy sądowe |
1479 | Jan Babicki | ZR nr 1473 | informacje o właścicielu lub inne |
1484 | Jan Babicki z Babic sprzedaje z prawem odkupu czynsz roczny 4 grzywien groszy w półgroszku ze Zbarza za 40 kop groszy w półgroszku Marcinowi z Zalesia kanonik płocki i pleban z Przybyszewa na ołtarz w kolegiacie warszawskiej i zaręcza spokój ze strony żony Barbary | MK 9, 161v | sprzedaż |
1484 | książę Bolesław V daje Janowi z Babic prawo nieodpowiednie i zwolnienie od kar sądowych | MK 9, 166v; MK 60, 265; MS 4 nr 6444 | przywilej |
1484 | kowal Maciej Babicki mieszczanin Nowej Warszawy | ŁawWN nr 1018 | informacje o właścicielu lub inne |
1490 | [Jan] Babicki uczestnik najazdu szlachty na dobra tarczyńskie prepozyta kapituły warszawskiej | AC 2 nr 1872 | sprawy sądowe |
1494 | Jan syn zmarłego Łazarza z Sosnkowa lub z Bliznego sprzedaje dział w Bliznem Janowi z Babic | MK 18, 248v | sprzedaż |
1502 | → punkt 6 | brak źródła | brak tematu |
1506 | transakcja z 1496 zostaje potwierdzona Urbanowi synowi Jana z Babic | MK 18, 248v | sprawy finansowe |
1509 | Barbara wdowa po zmarłym Janie z Babic | Warszawa. 10, 5 | informacje o właścicielu lub inne |
1511 | szlachetny Urban z Babic | Warszawa. 10, 896 | informacje o właścicielu lub inne |
1518 | Urban z Babic i Jerzy z Parzniewa sprzedają z prawem odkupu czynsz roczny z Babic i Parzniewa Grzegorzowi z Cedrowic wikariuszowi wiecznemu katedry włocławskiej | MK 32, 18 | sprzedaż |
1526 | w Babicach 9 włók osiadłych | ASK I 27, 451 | informacje o właścicielu lub inne |
1527 | → punkt 5 | brak źródła | brak tematu |
1530 | Anna żona Urbana Babickiego, córka Jana Duckiego otrzymuje wraz z siostrami zapis ojca na jego dobrach w Dudzie, Otwocku, Dąbrówce, Woli i innych | Bon. 5, 71 | sprawy spadkowe |
1539 | wypis dokumentu z 1484 na prośbę Urbana Babickiego | MS 4 nr 6444 | sprawy sądowe |
1580 | pobór od 5 włók osiadłych | ŹD 263 | podatki |
1584 | Babiccy herbu Dołęga, jednej dzielnicy ze Służowieckimi | Papr. 403 | informacje o właścicielu lub inne |
XIX wiek. | Babice wieś ma 428 morg [ok. 14 włók], folwark 1598 morg [53 włóki] | Małc. 192 | informacje o właścicielu lub inne |