więcej niż strona domowa...


Moje prywatne publiczne notatki.

| Opublikowano 17:44 14-07-2009. Ostatnia modyfikacja 13:01 29-11-2010 |

Classification of legal rights

The PhD thesis Engineering Law-Compliant Requirements: the Nomos Framework by Alberto Siena contains a very interesting classification of the legal rights. In my previous post, reviewing the article describing the application of SRL methods to the extraction of definitions and norms from laws, I have briefly mentioned that there are four types of norms: obligation, right, permission and power. Yet the description was not very elaborate. So I consulted the source of this classification, which is the PhD of Alberto Siena. I haven’t read the full thesis yet, but it is a very interesting and very clear description of a proposed formalism used to model the legal rights.

The classification is based on the work of Hohfeld (1913). It introduces the following pairs of “rights” (written in quotes, since this is a technical term, which should not be associated with the regular meaning of a privilege):
  • claim – duty,
  • privilege – noclaim,
  • power – liability,
  • immunity – disablity.

Each pair of rights describes the same deontic situation from the perspective of opposite actors bound by the right. If A has a claim against B, then B has a duty against A. So it is not necessary to describe them separately.

Claim – duty

This is the case of two actors, when one (B) has an obligation (duty) to do something for (A). So A has a claim against B – meaning that he expects, and the law supports that expectation, that B would fulfil the claim. E.g. A is a patient and B is a doctor. According to the Polish law, the doctor has to inform the patient about the outcomes of the medical examination of his body. So the doctor has a duty to inform, while the patient has a claim to be informed. The support given by law is usually carried out by sanction, by not fulfilling the claim. Yet these sanctions are not part of the relationship.

Privilege – noclaim

This is the opposite of the previous relation, in the sense, that the noclaim party of the relationship is not supported by law, to fulfil an expectation from that party. But in general there might be no such expectation from the party. The relationship is more concerned with the privilege party – it has a right (in the normal sense) to do something, but the counterparty can not force the party to do so. E.g. if A is a land owner and B is some local authority, responsible for the territory, the land is a part of, if the local law allows that, A can build a house on his/her piece of land. Yet, the local authority cannot force the owner to do so. Thus, the owner has a privilege and the authority has noclaim against the owner.

As we see in that example, the noclaim party is less connected with the privileged party, than in the previous relationship, since there might be many subjects who might be interested in A using theirs privilege (or not using, which is covered by the same relationship): neighbors, family, etc. In most of the cases it is useless to name these subjects as the noclaim party to a particular privilege, so this seems to be a degraded element of the relationship.

Power – liability

This relationship is a reflection of the claim – duty relationship, but it has a different action associated with it. In the previous case, the action was concerned with its own outcome (e.g. patient being informed), in that case the action is concerned with its legal outcome. So the power allows A to change the legal situation of B, while B has a liability against A, who can change their legal situation. E.g. if A is a jury and B is a suspect, the jury may judge, that the suspect is guilty. This action will change the legal position of the suspect, making them a convicted person.

Immunity – disability

In that case, the relationship is a reflection of the noclaim – privilege relationship, but applied to the legal outcomes of actions. It is impossible for the disabled party to change the legal situation of the immune subject. E.g. if A is a prosecutor and B is a judge, in normal circumstances A cannot prosecute B. If B were not a judge, the prosecutor would have the power to do that. Once again, we see that this relationship is the opposite of the previous one.


This classification of the legal rights seems very clear to me. The symmetry of the relationships provides simple structure to the rights.

| Opublikowano 09:15 20-05-2022. Ostatnia modyfikacja 10:03 20-05-2022 |

Review of "Populating legal ontologies using semantic role labeling"

The article entitled Populating legal ontologies using semantic role labeling published on LREC 2020 and later in JAIL discusses the application of Semantic Role Labeling approach for extracting structured (or semi-structured) information form provisions, EU directives in particular.

The article starts with the brief discussion of different approaches to ontology population and describes the SRL formalism. Then there are the following system described: European Legal Taxonomy Syllabus, Eunomos and Legal-URN.

The first system, ELTS, is a lightweight ontology used to compare and align legal terminology in several European countries. The system concentrated only on the concepts (i.e. rules were not concerned).

The second system (Eunomos) has two extensions. The first extension is concerned with linking the legislation with the contents of the ontology, by keeping links to the provisions, by structuring the provisions in XML format and by maintaining the cross-references. The second extension is concerned with the inclusion of rules in the ontology.

The third system (Legal-URN) has yet a different goal. It is based on business process modeling and extends the notation with deontic elements. It is devised as an extension to be applied in companies for providing legislation-based compliance for business process. This extension is based on Hohfeldian model of legal norms.

Then the article jumps to the description of the methodology applied for the extraction of definitions and norms from the EU legislation. The approach is based on a two or three-step procedure (depending on the type of extraction: 2 for definitions, 3 for norms): the text is normalized and it is parsed to the SRL formalism, the elements of the parsed sentence are mapped to a legal structure (e.g. Head -> means (VBS) is used to detect the elements of a definition) and mapped to the final representation (in the case of norms). The paper discusses in detail only the first and the second step. There are no examples of rules for converting the second representation to the final one.

The system describes how to convert the following types of definitions:
  • regular definitions (e.g. x means y),
  • include/exclude definitions (e.g. x including y and z),
  • ostensive definitions (by example, e.g. x such as y),
  • referential definitions (e.g. x defined in article y).
It describes the following types of norms:
  • obligation (e.g. x has to do y),
  • right (e.g. x shall be entitled to y),
  • permission (e.g. x is permitted to do y),
  • power (e.g. x may require y).

The distinction between the different types of norms is not part of the article. The examples in that section justify my statement that the extracted data is semi-structured. The example concerned with a certificate, allows the system extracts it as an active role in the rule. This is strange, since I would expect a certificate to be extracted as the active role, the pronoun refers to. This is a serious limitation of the approach.

And it describes the following meta-norms:
  • legal effect (e.g. an event x leads to an event y “automatically”),
  • scope (e.g. x can do y if/despite x is z),
  • exception (e.g. x can do y if z or x can do y, x cannot do y if z),
  • hierarchy of norms (e.g. rules concerning x are subject to regulations in y),
  • rationale (e.g. the purpose of x is y).

The article is concluded with the evaluation of the approach. What is important: the number of converted (annotated) rules is pretty small. There are 224 sentences taken from Directive 95/46/EC and 267 sentences (the number is not reported directly in the article) from the Directive 98/5/EC. The first directive was used to create the norms, so the results are overly optimistic. Yet, it shows the limitation of the method, since it is impeded by the performance of the SRL parser. Depending on the type of argument, the results (lenient F1) range between 34 and 100%. Yet there are only three types of arguments with support > 10. Obligation has 76%, Power has 85% (77% for strict evaluation) and Legal effect has 34%.

The second directive (“the test set”) has much lower figures. Yet it is not described how the evaluation was performed – whether the directive was annotated first and the results were checked against the gold standard or the results were evaluated afterwards (in which case the results are invalid). Nevertheless, the values are in the range 0-100% (there’s no aggregate result). The support is not reported, so it is impossible to filter the type of the argument by support. The macro-average lenient F1 is 53.3%.

Personal opinion: the article is important, since it identifies the different types of definitions and norms that appear in the legislation. The approach is lightweight, in the sense that the norms are not re-structured into fully formal representation, the arguments might be long pieces of text, which has to be further interpreted. Yet, as a result, sometimes the results are meaningless, like in the case of the pronoun, being the argument of a rule. The performance of the system is low, that it cannot be utilized in an automatic procedure. Even for manual curation, it would produce numerous false positives and false negatives. The system does not try to combine the outputs of the extraction in more meaningful representation, i.e. a concept that is extracted is not used as bias or restriction for an argument in the rules. For me, it is not known how the results should be further utilized in search, QA or legal modeling. I think that methods base on question answering based on DNNs would be able to achieve better results (that’s quite obvious), but they would be able to be applied without much annotation, since a general purpose QA dataset would be enough to achieve similar or even better results.

| Opublikowano 09:30 18-05-2022. Ostatnia modyfikacja 10:29 18-05-2022 |

Schemat opisu eksperymentów ML

Prowadząc badania naukowe w dziedzinie NLP, czy ML, pojawia się problem, polegający na tym, że po jakimś czasie nie do końca wiemy, jak dokładnie przeprowadziliśmy dany eksperyment. Karol Lasocki, który obecnie pracuje dla Amazonu, wspomniał o fiszce, wykorzystywanej do dokumentowania eksperymentów. Ten pomysł bardzo mi się spodobał. Poniżej prezentuję schemat fiszki, który wypracowałem w ramach eksperymentów prowadzonych między innymi w konkursie PolEval.

Kod eksperymentu

Np. qa-1 – kod eksperymentu to również nazwa katalogu z danymi eksperymentu. Dzięki temu można bardzo łatwo zidentyfikować, gdzie znajdują się wyniki eksperymentu, jego dane oraz użyty model.

Cel eksperymentu

Po co przeprowadzamy ten eksperyment. Najlepiej, żeby eksperyment dotyczył jednej hipotezy, którą chcemy zweryfikować.

Wnioski z eksperymentu

Krótkie (2-3 zdania) podsumowanie eksperymentu. Powinno odpowiadać, na pytanie postawione w hipotezie eksperymentu.

Użyty model

Jaka była architektura sieci neuronowej. Jeśli używamy modeli pretrenowanych, to jaki dokładnie był to model – optymalnie, żeby był to identyfikator z repozytorium Huggingface Models.

Użyte dane wejściowe

Jakie dane wejściowe zostały wykorzystane do treningu, a jakie do testowania. Jeśli są to dane ogólnie dostępne, to oczywiście identyfikator z HF. Jeśli są to dane autorskie, to dobrze, żeby było odniesienie do ich lokalizacji lub jednoznaczny identyfikator.

Użyte parametry

W dobrych skryptach MLowych parametry wypisywane są na początku eksperymentu. Warto wykorzystać te dane i je tutaj zamieścić.

Kod źródłowy

Wskazanie repozytorium, z którego korzystamy w eksperymencie. Opcjonalne może to być link do konkretnego commita.

Skrypt treningu

Jest to jedna z najważniejszych pozycji w schemacie. Zamieszczenie dokładnego wywołania skryptu trenującego umożliwia łatwe powtórzenie eksperymentu. Ma to szczególne znaczenie w przypadku skryptów, które posiadają szereg parametrów. Pomaga też ustalić np. że zbiór danych treningowych, który był wykorzystywany w danym eksperymencie, jest identyczny jak zbiór danych w innym eksperymencie.

Skrypt predykcji

Skrypt wykorzystany do wykonania predykcji na danych testowych. Analogicznie jak skrypt powyżej, pozwala ustalić wszystkie istotne parametry wykorzystane do predykcji.

Wyniki eksperymentu

Szczegółowa tabelka z wynikami eksperymentu, dla poszczególnych checkpointów. Najlepiej raportować tutaj wyniki ze zbioru ewaluacyjnego oraz ewentualnie ze zbioru testowego.

Model wynikowy

Lokalizacja modelu wynikowego, jeśli miałby się znajdować gdzieś indziej, niż w katalogu dedykowanym dla eksperymentu.

Napotkane problemy

Jakie problemy pojawiły się przy treningu modelu. Jak je rozwiązano.

| Opublikowano 16:53 10-11-2021. Ostatnia modyfikacja 16:54 10-11-2021 |

Uzupełnienie braków wniosku o rejestrację spółki w eKRS

Jeśli sąd wezwie Cię do uzupełnienia braków przy rejestracji spółki przez portal eKRS, to uzupełnia się je na innej stronie, konkretnie prs-ekrs.

| Opublikowano 08:16 12-07-2021. Ostatnia modyfikacja 08:16 12-07-2021 |

Skrypt dla Jupytera na Prometeuszu

Ten wpis dotyczy konfiguracji Jupytera tak, żeby działał na Prometeuszu. Przy okazji środowisko jest tak skonfigurowane, że można używać GPU.

Jako alternatywę polecam użycie biblioteki idact

Ważne jest aby przed instalacją virutalneva załadować odpowiedni moduł Python, np.

module load plgrid/tools/python/3.6.5

Następnie instalujemy virtualenva na Prometeuszu. Najprościej zrobić to zgodnie z instrukcją z dokumentacji Virtualnevna

Zakładamy, że virtualenv jest w katalogu ~/python3_6. Aktywujemy go wywołaniem:

source ~/python3_6/bin/activate

Instalujemy wszystkie potrzebne nam biblioteki, w szczególności Jupytera:

pip install jupyter-notebook

Generujemy również klucz, który pozwoli nam na logowanie się na Prometeusza z Prometeusza, bez podawania hasła.

Następnie tworzymy plik o nazwie jupyter.sh o następującej treści

module load plgrid/apps/cuda/9.0
module load plgrid/libs/lapack/3.8.0
module load plgrid/libs/hdf5/1.10.1
module load plgrid/libs/openblas/0.2.19
module load plgrid/libs/atlas/3.10.3
module load plgrid/tools/gcc/8.1.0
module load plgrid/tools/python/3.6.5
module load plgrid/tools/java8/1.8.0_60
export XDG_RUNTIME_DIR=~/xdg
export PORT=${1:-9000}
echo $PORT
source ~/python3_6/bin/activate
~/python3_6/bin/jupyter-notebook --no-browser --port=${PORT} notebooks &
sleep 10
ssh -N -R ${PORT}:localhost:${PORT} login01

Po uzyskaniu dostępu do węzła obliczeniowego plik ten pozwoli nam na pracę na Jupyterze na komputerze lokalnym, pod warunkiem, że zalogujemy się przekierowując port 9000

ssh pro -L 9000:localhost:9000
| Opublikowano 09:56 30-09-2019. Ostatnia modyfikacja 09:56 30-09-2019 |

Usuwanie autora z PDFa

Na podstawie:


1. Instalujemy exiftools:

$ sudo apt-get install exiftool

2. Wywołujemy komendę:

$ exiftool -Author="" plik.pdf

Szczególnie przydatne dla wszystkich osób, które prowadzą proces redakcyjny, z założeniem, że dane autora nie powinny przedostać się do recenzentów (blind review).

| Opublikowano 11:25 01-08-2017. Ostatnia modyfikacja 11:25 01-08-2017 |

Instalacja IRuby

Aby zainstalować IRubiego oraz Ruby on Rails w najnowszych wersjach należy wykonać następujące polecenia (testowane na Ubuntu w wersji serwerowej 16.10):

$ sudo apt-get install zlib1g-dev libssl-dev libxml2-dev libsqlite3-dev libev-dev
$ sudo apt-get install ruby curl git-core libyaml-dev libgcrypt11-dev libgmp-dev
$ sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev libreadline6-dev
$ sudo apt-get install python3-dev libzmq3-dev python-dev python-pip
$ sudo pip install 'ipython[notebook]' markupsafe zmq certifi jsonschema  jupyter_console
$ curl https://rvm.io/mpapis.asc | gpg --import -
$ curl -L get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm install 2.4.1
$ rvm use 2.4.1 --default
$ gem install iruby rails

Weryfikacja poprawności instalacji może być przeprowadzona poprzez wywołanie polecenia:

$ iruby notebook


Jeśli w trakcie instalacji IRubiego pojawi się komunikat:

autogen.sh: error: could not find libtool.

Należy wykonać następujące polecenie:

$ sudo ln -s /usr/bin/libtoolize /usr/bin/libtool

A następnie ponownie wywołać polecenie

$ gem install iruby rails
| Opublikowano 12:27 23-10-2015. Ostatnia modyfikacja 20:43 26-07-2017 |

Popieram Piotra Waglowskiego

Tyle w temacie nadchodzących wyborów parlamentarnych.

| Opublikowano 22:30 17-09-2015. Ostatnia modyfikacja 22:30 17-09-2015 |

Closed beta of entity linking service

Recently I have deployed an entity linking service. It can be found at klon.wzks.uj.edu.pl/asterion. So far this is a closed beta – in future I am going to provide a commercial linking service. If you are interested in testing this service, don’t hesitate to contact me.

The means of operation of the service are simple – you provide a text on input, via HTTP POST and you will receive a JSON response with names of Wikipedia articles, together with text offsets and confidence values for the proposed links. As with any machine learning algorithm the output is not perfect, so don’t expect “true artificial intelligence” ;-) Still, the output might be pretty valuable, e.g. for indexing.

The API might be tested as follows (Warsaw is the capital of Poland):

curl -X POST -d 'text=Warszawa jest stolicą Polski.' http://klon.wzks.uj.edu.pl/asterion/annotator/annotate.json -u 'login:password' -basic
The output will look as follows:
    {"id":5664,"name":"Stolica Polski","confidence":0.21689995068611942,"start":14,"end":27}

So far only Polish is supported, but English will be provided soon.

| Opublikowano 23:41 17-07-2014. Ostatnia modyfikacja 23:47 17-07-2014 |

Dlaczego Kraków nie jest wart igrzysk?

Poniżej treść mojego wystąpienia na XCVI sesji Rady Miasta Krakowa 29.01.2014

Po co organizować debatę o igrzystkach olimpijskich? Żeby rozstrzygnąć, czy lepiej dać pieniądze na wioskę olimpijską, czy jednak na ścieżki rowerowe? Po to żeby posłowie Platformy mogli pokłócić się z posłami PiSu, jak robili to w trakcie ostatniej sesji Rady Miasta? A może tylko po to, by stworzyć złudzenie udziału mieszkańców w decydowaniu o losach miasta?

Kiedy 12 lat temu przyjechałem do Krakowa ze Śląska, sądziłem, że wygrałem los na loterii. Studia w Mieście Polski Królów, na Akademii Górniczo-Hutniczej, a potem również na Uniwersytecie Jagiellońskim, to było marzenie, które właśnie się urzeczywistniało. Dzięki pracy na Uniwerstecie Jagiellońskim oraz stypendium „Doctus” Małopolskiego Centrum Przedsiębiorczości skierowanego do doktorantów, mogłem pomyśleć o osiedleniu się na stałe w Krakowie. 3 lata temu kupiliśmy z żoną mieszkanie na Ruczaju.

Ale z każdym kolejnym dniem kiedy tutaj mieszkamy coraz częściej myślimy by stąd wyjechać. Do Kopenhagi, Ljubljany a może nieodległego Gaju. Wyjechać, ponieważ Kraków nie oferuje nam wizji, w której na pierwszym miejscu nie stawia się developerów, zagranicznych turystów, działaczy komitetu olimpijskiego, lecz mieszkańców.

Jeśli przez najbliższe 8 lat wszelkie decyzje oraz inwestycje w tym mieście uzależnione będą od igrzysk, a przez kolejnych 10 uzasadnieniem każdego „nie-da-się” będzie wcześniej zorganizowana olimpiada to ja stąd ucieknę.

Dlatego pytam się: czy Zimowe Igrzyska Olimpijskie to wszystko co Kraków może zaoferować ludziom, którzy w tym mieście chcą spędzić kolejne 15 lat? Czy taka jest wizja naszych władz? Chciałbym aby w tej debacie odpowiedziano przede wszystkim na to jedno zasadnicze pytanie!

| Opublikowano 11:13 14-03-2014. Ostatnia modyfikacja 11:13 14-03-2014 |
comments powered by Disqus