Blackstone est un modèle spacy et une bibliothèque pour le traitement du texte juridique long et non structuré. Blackstone est un projet de recherche expérimental de l'incorporation du Conseil des rapports de droit pour le laboratoire de recherche de l'Angleterre et du Pays de Galles, ICLR&D. Blackstone a été écrit par Daniel Hoadley.
Pourquoi construisons-nous Blackstone?
Quelle est la particularité de Blackstone?
Observations et autres choses à noter
Installation
Installez la bibliothèque
Installez le modèle Blackstone
À propos du modèle
Le pipeline
Reconnaître de l'ensemble nommé
Catégoriseur de texte
Usage
Appliquer le modèle NER
Visualiser les entités
Appliquer le modèle de catégoriseur de texte
Extensions de pipeline personnalisées
Abréviation et résolution de définition de forme longue
Détections de référence de cas composé
Liaison législative
Segmentateur de phrase
Les dernières années ont vu une augmentation de l'activité à l'intersection de la loi et de la technologie. Cependant, au Royaume-Uni, l'essentiel écrasant de cette activité a eu lieu dans des cabinets d'avocats et d'autres contextes commerciaux. La conséquence de cela est que malgré la rafale de développement sans fin dans l'espace juridique-informatique, presque aucune des recherches n'est mise à disposition sur une base open-source.
De plus, la majorité de la recherche dans le domaine des régions juridiques britanniques (ouverte ou fermée) s'est concentrée sur l'élaboration de demandes de PNL pour l'automatisation des contrats et d'autres documents juridiques de nature transactionnelle. Ceci est compréhensible, car les principaux bienfaiteurs de la recherche juridique des PNL au Royaume-Uni sont les cabinets d'avocats et les cabinets d'avocats ont tendance à ne pas avoir de mal à obtenir leur documentation transactionnelle qui peut être exploitée comme données de formation.
Le problème, comme nous le voyons, est que la recherche juridique des PNL au Royaume-Uni s'est trop concentrée sur les applications commerciales et qu'il vaut la peine de faire l'investissement dans le développement de la recherche juridique PNL disponible en ce qui concerne d'autres textes juridiques, tels que les jugements, les articles savants, les arguments squelettes et les plaidoiries.
Note! Il est fortement recommandé d'installer Blackstone dans un environnement virtuel! Voir ici pour en savoir plus sur les environnements virtuels. Blackstone devrait compatible avec Python 3,6 et plus.
Pour installer Blackstone, suivez ces étapes:
La première étape consiste à installer la bibliothèque, qui contient actuellement une poignée de composants spacy personnalisés. Installez la bibliothèque comme tel:
pip install blackstone
La deuxième étape consiste à installer le modèle de spacy. Installez le modèle comme tel:
pip install https://blackstone-model.s3-eu-west-1.amazonaws.com/en_blackstone_proto-0.0.1.tar.gz
Si vous développez Blackstone, vous pouvez installer à partir de la source comme:
pip install --editable .
pip install -r dev-requirements.txt
Il s'agit de la toute première version de Blackstone et le modèle est mieux considéré comme un prototype ; Il est rugueux sur les bords et représente la première étape d'un programme en cours de recherche open source sur la PNL sur les textes juridiques effectués par ICLR&D.
Avec cela à l'écart, voici un bref aperçu de ce qui se passe dans le modèle Proto.
Le modèle Proto inclus dans cette version a les éléments suivants dans son pipeline:
En raison d'une rareté de données étiquetées de formation et de formation de dépendance pour le texte juridique, les composants du tokenizer , tagger et du pipeline parser ont été tirés du modèle en_core_web_sm de Spacy. Dans l'ensemble, ces composants semblent faire un travail décent, mais il serait bon de revoir ces composants avec des données de formation personnalisées à un moment donné dans le futur.
Les composants ner et textcat sont des composants personnalisés formés spécialement pour Blackstone.
La composante NER du modèle Blackstone a été formée pour détecter les types d'entités suivants:
| Ent | Nom | Exemples |
|---|---|---|
| Nom de casen | Noms de cas | par exemple Smith contre Jones , dans Re Jones , dans le cas de Jones |
| CITATION | Citations (identificateurs uniques pour les cas signalés et non signalés) | Eg (2002) 2 Cr App R 123 |
| INSTRUMENT | Instruments juridiques écrits | EG Act 1968, Convention européenne sur les droits de l'homme, RCR |
| DISPOSITION | Unité dans un instrument juridique écrit | par exemple la section 1, art 2 (3) |
| TRIBUNAL | Tribunal ou tribunal | par exemple la Cour d'appel, Tribunal supérieur |
| JUGE | Références aux juges | par exemple J, Lord Bingham de Cornhill |
Cette version de Blackstone est également livrée avec un catégoriseur de texte. Contrairement à la composante NER (qui a été formée à identifier les jetons et les séries de jetons d'intérêt), le catégorie de texte classe des portées de texte plus longues, telles que les phrases.
Le catégoriseur de texte a été formé pour classer le texte selon l'une des cinq catégories mutuellement exclusives, qui sont les suivantes:
| Chat | Description |
|---|---|
| AXIOME | Le texte semble postuler un principe bien établi |
| CONCLUSION | Le texte semble faire une conclusion, une tenue, une détermination ou une conclusion |
| PROBLÈME | Le texte semble discuter d'un problème ou d'une question |
| Legal_test | Le test semble discuter d'un test juridique |
| Décoller | Le texte ne tombe pas dans l'une des quatre catégories ci-dessus |
Voici un exemple de la façon dont le modèle est appliqué à un texte tiré du paragraphe 31 du jugement de la Cour divisionnaire dans R (Miller) c Secrétaire d'État pour la sortie de l'Union européenne (Birnie intervenant) [2017] UKSC 5; [2018] AC 61:
import spacy
# Load the model
nlp = spacy . load ( "en_blackstone_proto" )
text = """ 31 As we shall explain in more detail in examining the submission of the Secretary of State (see paras 77 and following), it is the Secretary of State’s case that nothing has been done by Parliament in the European Communities Act 1972 or any other statute to remove the prerogative power of the Crown, in the conduct of the international relations of the UK, to take steps to remove the UK from the EU by giving notice under article 50EU for the UK to withdraw from the EU Treaty and other relevant EU Treaties. The Secretary of State relies in particular on Attorney General v De Keyser’s Royal Hotel Ltd [1920] AC 508 and R v Secretary of State for Foreign and Commonwealth Affairs, Ex p Rees-Mogg [1994] QB 552; he contends that the Crown’s prerogative power to cause the UK to withdraw from the EU by giving notice under article 50EU could only have been removed by primary legislation using express words to that effect, alternatively by legislation which has that effect by necessary implication. The Secretary of State contends that neither the ECA 1972 nor any of the other Acts of Parliament referred to have abrogated this aspect of the Crown’s prerogative, either by express words or by necessary implication.
"""
# Apply the model to the text
doc = nlp ( text )
# Iterate through the entities identified by the model
for ent in doc . ents :
print ( ent . text , ent . label_ )
> >> European Communities Act 1972 INSTRUMENT
> >> article 50 EU PROVISION
>> > EU Treaty INSTRUMENT
> >> Attorney General v De Keyser ’ s Royal Hotel Ltd CASENAME
> >> [ 1920 ] AC 508 CITATION
>> > R v Secretary of State for Foreign and Commonwealth Affairs , Ex p Rees - Mogg CASENAME
>> > [ 1994 ] QB 552 CITATION
> >> article 50 EU PROVISION Spacy est expédié avec un excellent ensemble de visualiseurs, y compris un visualiseur pour NER prédit. Blackstone est livré avec une palette de couleurs personnalisée qui peut être utilisée pour faciliter la distinction des entités sur le texte de la source lors de l'utilisation de la déformation.
"""
Visualise entities using spaCy's displacy visualiser.
Blackstone has a custom colour palette: `from blackstone.displacy_palette import ner_displacy options`
"""
import spacy
from spacy import displacy
from blackstone . displacy_palette import ner_displacy_options
nlp = spacy . load ( "en_blackstone_proto" )
text = """
The applicant must satisfy a high standard. This is a case where the action is to be tried by a judge with a jury. The standard is set out in Jameel v Wall Street Journal Europe Sprl [2004] EMLR 89, para 14:
“But every time a meaning is shut out (including any holding that the words complained of either are, or are not, capable of bearing a defamatory meaning) it must be remembered that the judge is taking it upon himself to rule in effect that any jury would be perverse to take a different view on the question. It is a high threshold of exclusion. Ever since Fox’s Act 1792 (32 Geo 3, c 60) the meaning of words in civil as well as criminal libel proceedings has been constitutionally a matter for the jury. The judge’s function is no more and no less than to pre-empt perversity. That being clearly the position with regard to whether or not words are capable of being understood as defamatory or, as the case may be, non-defamatory, I see no basis on which it could sensibly be otherwise with regard to differing levels of defamatory meaning. Often the question whether words are defamatory at all and, if so, what level of defamatory meaning they bear will overlap.”
18 In Berezovsky v Forbes Inc [2001] EMLR 1030, para 16 Sedley LJ had stated the test this way:
“The real question in the present case is how the courts ought to go about ascertaining the range of legitimate meanings. Eady J regarded it as a matter of impression. That is all right, it seems to us, provided that the impression is not of what the words mean but of what a jury could sensibly think they meant. Such an exercise is an exercise in generosity, not in parsimony.”
"""
doc = nlp ( text )
# Call displacy and pass `ner_displacy_options` into the option parameter`
displacy . serve ( doc , style = "ent" , options = ner_displacy_options )Ce qui produit quelque chose qui ressemble à ceci:
Le catégoriseur de texte de Blackstone génère une catégorisation prévue pour un doc . Le composant du pipeline textcat a été conçu pour être appliqué à des phrases individuelles plutôt qu'à un seul document composé de nombreuses phrases.
import spacy
# Load the model
nlp = spacy . load ( "en_blackstone_proto" )
def get_top_cat ( doc ):
"""
Function to identify the highest scoring category
prediction generated by the text categoriser.
"""
cats = doc . cats
max_score = max ( cats . values ())
max_cats = [ k for k , v in cats . items () if v == max_score ]
max_cat = max_cats [ 0 ]
return ( max_cat , max_score )
text = """
It is a well-established principle of law that the transactions of independent states between each other are governed by other laws than those which municipal courts administer.
It is, however, in my judgment, insufficient to react to the danger of over-formalisation and “judicialisation” simply by emphasising flexibility and context-sensitivity.
The question is whether on the facts found by the judge, the (or a) proximate cause of the loss of the rig was “inherent vice or nature of the subject matter insured” within the meaning of clause 4.4 of the Institute Cargo Clauses (A).
"""
# Apply the model to the text
doc = nlp ( text )
# Get the sentences in the passage of text
sentences = [ sent . text for sent in doc . sents ]
# Print the sentence and the corresponding predicted category.
for sentence in sentences :
doc = nlp ( sentence )
top_category = get_top_cat ( doc )
print ( f" " { sentence } " { top_category } n " )
> >> "In my judgment, it is patently obvious that cats are a type of dog." ( 'CONCLUSION' , 0.9990500807762146 )
> >> "It is a well settled principle that theft is wrong." ( 'AXIOM' , 0.556410014629364 )
> >> "The question is whether on the facts found by the judge, the (or a) proximate cause of the loss of the rig was “inherent vice or nature of the subject matter insured” within the meaning of clause 4.4 of the Institute Cargo Clauses (A)." ( 'ISSUE' , 0.5040785074234009 )En plus du modèle de base, cette version proto de Blackstone est livrée avec trois composants personnalisés:
AbbreviationDetector() dans [SCISPACY] et résout une forme abrégée à sa définition de forme longue, par exemple ECtHR European Court of Human Rights .CASENAME et CITATION permettant la fusion d'une CITATION à son CASENAME parent.Il n'est pas rare que les auteurs de documents juridiques abrégent des termes de longue haleine qui seront utilisés au lieu de la forme longue à travers le reste du document. Par exemple,
La Cour européenne des droits de l'homme («ECTH») est finalement responsable de l'application de la Convention européenne sur les droits de l'homme («CECH»).
Le composant de détection d'abréviation dans Blackstone cherche à y remédier en implémentant une version très légèrement modifiée de l' AbbreviationDetector() (qui est elle-même une implémentation de l'approche énoncée dans cet article: https://psb.stanford.edu/psb-online/proceedings/psb03/schwartz.pdf). Notre implémentation a encore quelques problèmes, mais un exemple de son utilisation est le suivant:
import spacy
from blackstone . pipeline . abbreviations import AbbreviationDetector
nlp = spacy . load ( "en_blackstone_proto" )
# Add the abbreviation pipe to the spacy pipeline.
abbreviation_pipe = AbbreviationDetector ( nlp )
nlp . add_pipe ( abbreviation_pipe )
doc = nlp ( 'The European Court of Human Rights ("ECtHR") is the court ultimately responsible for applying the European Convention on Human Rights ("ECHR").' )
print ( "Abbreviation" , " t " , "Definition" )
for abrv in doc . _ . abbreviations :
print ( f" { abrv } t ( { abrv . start } , { abrv . end } ) { abrv . _ . long_form } " )
> >> "ECtHR" ( 7 , 10 ) European Court of Human Rights
>> > "ECHR" ( 25 , 28 ) European Convention on Human Rights Le composant de détection de référence de cas composé dans Blackstone est conçu pour épouser des entités CITATION avec leurs entités de CASENAME .
Les juridictions en common law se rapportent généralement aux références de cas par un couplage d'un nom (généralement dérivé des noms des parties dans le cas) et une citation unique pour identifier où l'affaire a été signalée, comme ainsi:
Regina v Horncastle [2010] 2 AC 373
Le modèle NER de Blackstone tente séparément d'identifier le CASENAME et les entités CITATION . Cependant, il est potentiellement utile (en particulier dans le contexte de l'extraction de l'information) de retirer ces entités sous forme de paires.
CompoundCases() applique un tuyau personnalisé après le NER et identifie les paires CASENAME / CITATION dans deux scénarios:
import spacy
from blackstone . pipeline . compound_cases import CompoundCases
nlp = spacy . load ( "en_blackstone_proto" )
compound_pipe = CompoundCases ( nlp )
nlp . add_pipe ( compound_pipe )
text = "As I have indicated, this was the central issue before the judge. On this issue the defendants relied (successfully below) on the decision of the High Court in Gelmini v Moriggia [1913] 2 KB 549. In Jones' case [1915] 1 KB 45, the defendant wore a hat."
doc = nlp ( text )
for compound_ref in doc . _ . compound_cases :
print ( compound_ref )
> >> Gelmini v Moriggia [ 1913 ] 2 KB 549
>> > Jones ' case [ 1915 ] 1 KB 45 La liaison de la législation de Blackstone tente de faire référence à une PROVISION à son INSTRUMENT parent en utilisant le modèle NER pour identifier la présence d'un INSTRUMENT , puis naviguer dans l'arbre de dépendance pour identifier la disposition de l'enfant.
Une fois que Blackstone a identifié une PROVISION : paire INSTRUMENT , il tentera de générer des URL cibles à la fois à la disposition et à l'instrument sur la législation.gov.uk.
import spacy
from blackstone . utils . legislation_linker import extract_legislation_relations
nlp = spacy . load ( "en_blackstone_proto" )
text = "The Secretary of State was at pains to emphasise that, if a withdrawal agreement is made, it is very likely to be a treaty requiring ratification and as such would have to be submitted for review by Parliament, acting separately, under the negative resolution procedure set out in section 20 of the Constitutional Reform and Governance Act 2010. Theft is defined in section 1 of the Theft Act 1968"
doc = nlp ( text )
relations = extract_legislation_relations ( doc )
for provision , provision_url , instrument , instrument_url in relations :
print ( f" n { provision } t { provision_url } t { instrument } t { instrument_url } " )
> >> section 20 http : // www . legislation . gov . uk / ukpga / 2010 / 25 / section / 20 Constitutional Reform and Governance Act 2010 http : // www . legislation . gov . uk / ukpga / 2010 / 25 / contents
> >> section 1 http : // www . legislation . gov . uk / ukpga / 1968 / 60 / section / 1 Theft Act 1968 http : // www . legislation . gov . uk / ukpga / 1968 / 60 / contentsBlackstone est expédié avec un segment de phrase basé sur des règles personnalisé qui aborde une gamme de caractéristiques inhérentes aux textes juridiques qui ont tendance à dérouter les règles de segmentation des phrases prêtes à l'emploi.
Ce comportement peut être étendu en passant éventuellement une liste de modèles de correspondance de style spacy qui empêcheront explicitement la détection des limites de la phrase à l'intérieur des correspondances.
import spacy
from blackstone . pipeline . sentence_segmenter import SentenceSegmenter
from blackstone . rules import CITATION_PATTERNS
nlp = spacy . load ( "en_blackstone_proto" )
# add the Blackstone sentence_segmenter to the pipeline before the parser
sentence_segmenter = SentenceSegmenter ( nlp . vocab , CITATION_PATTERNS )
nlp . add_pipe ( sentence_segmenter , before = "parser" )
doc = nlp (
"""
The courts in this jurisdiction will enforce those commitments when it is legally possible and necessary to do so (see, most recently, R. (on the application of ClientEarth) v Secretary of State for the Environment, Food and Rural Affairs (No.2) [2017] P.T.S.R. 203 and R. (on the application of ClientEarth) v Secretary of State for Environment, Food and Rural Affairs (No.3) [2018] Env. L.R. 21). The central question in this case arises against that background.
"""
)
for sent in doc . sents :
print ( sent . text )Nous tenons à remercier les personnes / organisations suivantes qui nous ont aidés (directement ou indirectement) pour construire ce prototype.