Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tiphaine.viard/mapaie
1 result
Show changes
Commits on Source (4)
Showing
with 23201 additions and 7 deletions
This diff is collapsed.
This diff is collapsed.
File added
This diff is collapsed.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
<center><img src="data:image/png;base64,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" /></center> <center><img src="data:image/png;base64,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" /></center>
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
<h1><center><strong><font color="green">IA 717: CHAI & fairness: linguistics of AI ethics charters & manifestos<br/>PART4 : AMR</font></strong></center></h1> <h1><center><strong><font color="green">IA 717: CHAI & fairness: linguistics of AI ethics charters & manifestos<br/>PART4 : AMR</font></strong></center></h1>
   
<h3><center><font color="blue"><strong>Student Version</strong></font></center></h3> <h3><center><font color="blue"><strong>Student Version</strong></font></center></h3>
   
<center> <center>
<h3> Project Supervisor</h3> <h3> Project Supervisor</h3>
<a>Maria Boritchev</a> <email>maria.boritchev@telecom-paris.fr</email> <a>Maria Boritchev</a> <email>maria.boritchev@telecom-paris.fr</email>
   
<h3> Project student</h3> <h3> Project student</h3>
<a>Josephine Bernard</a> <email>josephine.bernard@telecom-paris.fr</email><br/> <a>Josephine Bernard</a> <email>josephine.bernard@telecom-paris.fr</email><br/>
<a>Laury Magne</a> <email>laury.magne@telecom-paris.fr</email><br/> <a>Laury Magne</a> <email>laury.magne@telecom-paris.fr</email><br/>
<a>Dan Hayoun</a> <email>dan.hayoun@telecom-paris.fr</email><br/> <a>Dan Hayoun</a> <email>dan.hayoun@telecom-paris.fr</email><br/>
<a>Nicolas Allègre</a> <email>nicolas.allegre@telecom-paris.fr</email><br/> <a>Nicolas Allègre</a> <email>nicolas.allegre@telecom-paris.fr</email><br/>
   
   
<br/> <br/>
Year 2024-2025 Year 2024-2025
</center> </center>
   
------------------------ ------------------------
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### Table of Contents ### Table of Contents
   
* [Chapter 0 initialisation Python](#0---code-python-initial) * [Chapter 0 initialisation Python](#0---code-python-initial)
* [Chapter 4 - AMR](#4---amr) * [Chapter 4 - AMR](#4---amr)
* [Section 4.0 - intro et explication](#40-intro-et-explication) * [Section 4.0 - intro et explication](#40-intro-et-explication)
* [Section 4.1 - initialisation d'utilisation](#41-initialisation-utilisation) * [Section 4.1 - initialisation d'utilisation](#41-initialisation-utilisation)
* [Section 4.2 - analyse AMR](#42-analyse-fearness-à-partir-amr) * [Section 4.2 - analyse AMR](#42-analyse-fearness-à-partir-amr)
* [Part 4.2.2 - analyse des parents AMR ( **P** )](#422-recherche-des-parents-amr--p-) * [Part 4.2.2 - analyse des parents AMR ( **P** )](#422-recherche-des-parents-amr--p-)
* [Part 4.2.3 - analyse des liens parents AMR ( **F_tag** )](#423-analyse-des-liens-parents-amr--f_tag-) * [Part 4.2.3 - analyse des liens parents AMR ( **F_tag** )](#423-analyse-des-liens-parents-amr--f_tag-)
* [Part 4.2.4 - analyse des voisins AMR ( **V** )](#424-recherche-des-voisins-amr--v-) * [Part 4.2.4 - analyse des voisins AMR ( **V** )](#424-recherche-des-voisins-amr--v-)
   
<!-- <a class="anchor" id="0---code-python-initial"></a> --> <!-- <a class="anchor" id="0---code-python-initial"></a> -->
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
# <font color="green">**0 - Code Python initial**</font> # <font color="green">**0 - Code Python initial**</font>
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 0.1) Première partie imports et fonctions globales ### 0.1) Première partie imports et fonctions globales
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# python -m pip install matplotlib numpy scipy sklearn tabulate penman # python -m pip install matplotlib numpy scipy sklearn tabulate penman wordcloud
   
# Global import # Global import
import importlib import importlib
import itertools import itertools
import math import math
import os import os
import re import re
import shutil import shutil
import sys import sys
import string import string
import typing import typing
from collections import Counter from collections import Counter
from collections.abc import Iterable from collections.abc import Iterable
from itertools import islice from itertools import islice
from pathlib import Path from pathlib import Path
from pprint import pprint from pprint import pprint
   
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
import numpy.typing as npt import numpy.typing as npt
import penman import penman
from scipy.stats import norm # type: ignore[import-untyped] from scipy.stats import norm # type: ignore[import-untyped]
from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import CountVectorizer
from tabulate import tabulate from tabulate import tabulate
from wordcloud import WordCloud from wordcloud import WordCloud
   
import metamorphosed.amrdoc as amrdoc import metamorphosed.amrdoc as amrdoc
import metamorphosed.amreditor as amreditor import metamorphosed.amreditor as amreditor
# from Corpus import Corpus # from Corpus import Corpus
   
PATH_DATA_FOLDER = '../data' PATH_DATA_FOLDER = '../data'
PATH_LOG_FOLDER = '../log' PATH_LOG_FOLDER = '../log'
PATH_DATA_TXT = '../data/txts' PATH_DATA_TXT = '../data/txts'
PATH_DATA_DOCS = '../data/docs' PATH_DATA_DOCS = '../data/docs'
PATH_DATA_PREPROCESSED = '../data/preprocessed' PATH_DATA_PREPROCESSED = '../data/preprocessed'
PATH_DATA_CORTEX = '../data/corpus_cortext' PATH_DATA_CORTEX = '../data/corpus_cortext'
PATH_DATA_IRAMUTEQ = '../data/corpus_iramuteq' PATH_DATA_IRAMUTEQ = '../data/corpus_iramuteq'
PATH_DATA_AMR = '../data/AMR' PATH_DATA_AMR = '../data/AMR'
FILENAME_DATA_IRAMUTEQ = 'corpus.txt' FILENAME_DATA_IRAMUTEQ = 'corpus.txt'
FILENAME_DATA_LANG = 'corpus_lang.csv' FILENAME_DATA_LANG = 'corpus_lang.csv'
FILENAME_DATA_LANG_PREPRO = 'corpus_lang_preprocessing.csv' FILENAME_DATA_LANG_PREPRO = 'corpus_lang_preprocessing.csv'
FILENAME_DATA_AMR = 'key_penmans.amr' FILENAME_DATA_AMR = 'key_penmans.amr'
PATH_DATA_FILE_LANG = os.path.join(PATH_DATA_FOLDER, FILENAME_DATA_LANG) PATH_DATA_FILE_LANG = os.path.join(PATH_DATA_FOLDER, FILENAME_DATA_LANG)
PATH_DATA_FILE_LANG_PREPRO = os.path.join(PATH_DATA_FOLDER, FILENAME_DATA_LANG_PREPRO) PATH_DATA_FILE_LANG_PREPRO = os.path.join(PATH_DATA_FOLDER, FILENAME_DATA_LANG_PREPRO)
PATH_DATA_FILE_IRAMUTEQ = os.path.join(PATH_DATA_IRAMUTEQ, FILENAME_DATA_IRAMUTEQ) PATH_DATA_FILE_IRAMUTEQ = os.path.join(PATH_DATA_IRAMUTEQ, FILENAME_DATA_IRAMUTEQ)
PATH_DATA_FILE_AMR = os.path.join('..', FILENAME_DATA_AMR) PATH_DATA_FILE_AMR = os.path.join('..', FILENAME_DATA_AMR)
TYPE_METHOD = ['cortex', 'iramuteq', 'txt'] TYPE_METHOD = ['cortex', 'iramuteq', 'txt']
CHARSET = 'UTF-8' CHARSET = 'UTF-8'
   
sys.path.append('..') sys.path.append('..')
   
   
def take(n: int, iterable: Iterable) -> list[any]: def take(n: int, iterable: Iterable) -> list[any]:
"""Return the first n items of the iterable as a list.""" """Return the first n items of the iterable as a list."""
return list(islice(iterable, n)) return list(islice(iterable, n))
#end def take #end def take
   
def dict_revert(x: dict[str, any], sort: bool=False) -> list[list[str, any]]:
tmp = x
if sorted is True:
tmp = dict(sorted(x.items(), key=lambda item: item[1], reverse=True))
return [[list(x.keys())[i], list(x.values())[i]] for i in range(len(x))]
# Chargement de tout les corpus # Chargement de tout les corpus
# list_corpus = {method: Corpus(method) for method in TYPE_METHOD} # list_corpus = {method: Corpus(method) for method in TYPE_METHOD}
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 0.2) Deuxième partie chargement des données ### 0.2) Deuxième partie chargement des données
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
amr_mapaie = amrdoc.AMRdoc(PATH_DATA_FILE_AMR) amr_mapaie = amrdoc.AMRdoc(PATH_DATA_FILE_AMR)
``` ```
   
%% Output %% Output
   
1201 sentences read from ..\key_penmans.amr 1201 sentences read from ..\key_penmans.amr
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
# <font color="green">**4 - AMR**</font> # <font color="green">**4 - AMR**</font>
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
## **4.0) Intro et explication** ## **4.0) Intro et explication**
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.0.1) Mémo d'utilisation ### 4.0.1) Mémo d'utilisation
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
##### **Variable Notebook `amr_mapaie` :** ##### **Variable Notebook `amr_mapaie` :**
   
- **`amr_mapaie`** : variable contenant le chargement du fichier AMR (classe amrdoc.AMRdoc) - **`amr_mapaie`** : variable contenant le chargement du fichier AMR (classe amrdoc.AMRdoc)
- `amr_mapaie.sentences` : liste contenant toutes les phrases en AMR (classe amrdoc.AMRsentence) - `amr_mapaie.sentences` : liste contenant toutes les phrases en AMR (classe amrdoc.AMRsentence)
- `amr_mapaie.sentences.tsv()` : liste de l'AMR au format Graph Penman (triplet) - `amr_mapaie.sentences.tsv()` : liste de l'AMR au format Graph Penman (triplet)
- ATTENTION : le format Graph n'est pas unique à partir d'un AMR !!! - ATTENTION : le format Graph n'est pas unique à partir d'un AMR !!!
> *Conversion from a PENMAN string to a Tree, and vice versa, is straightforward and lossless. Conversion to a Graph, however, is potentially lossy as the same graph can be represented by different trees.* > *Conversion from a PENMAN string to a Tree, and vice versa, is straightforward and lossless. Conversion to a Graph, however, is potentially lossy as the same graph can be represented by different trees.*
- `amrdoc.relations_between_concepts([amr_mapaie])` : Permet d'avoir un comptage et des stats sommaires. - `amrdoc.relations_between_concepts([amr_mapaie])` : Permet d'avoir un comptage et des stats sommaires.
- Avec *, depth=1* comme argument, seulement les concepts - Avec *, depth=1* comme argument, seulement les concepts
- Avec *, depth=2* (défaut) comme argument, les stats concepts et relation associés - Avec *, depth=2* (défaut) comme argument, les stats concepts et relation associés
   
   
##### **La classe `amrdoc.AMRsentence` :** ##### **La classe `amrdoc.AMRsentence` :**
   
- `amr_mapaie.sentences[0].amr` : l'AMR de la phrase (non parsé) - `amr_mapaie.sentences[0].amr` : l'AMR de la phrase (non parsé)
- `amr_mapaie.sentences[0].text` : la phrase de l'AMR - `amr_mapaie.sentences[0].text` : la phrase de l'AMR
- `amr_mapaie.sentences[0].comments[0]` : le numéro du fichier (Format : 'File xxx') - `amr_mapaie.sentences[0].comments[0]` : le numéro du fichier (Format : 'File xxx')
- `amr_mapaie.sentences[0].tsv()` : Graph de l'AMR (même remarque) - `amr_mapaie.sentences[0].tsv()` : Graph de l'AMR (même remarque)
- égale à *penman.decode(amr_mapaie.sentences[0].amr)* - égale à *penman.decode(amr_mapaie.sentences[0].amr)*
- `amr_mapaie.sentences[0].getconceptlist()` : Retourne la liste des concept de la phrase - `amr_mapaie.sentences[0].getconceptlist()` : Retourne la liste des concept de la phrase
   
   
##### **Le module `Penman` :** ##### **Le module `Penman` :**
   
À utiliser pour plus de précision sur le parcours des graphes/arbres de la syntaxe AMR. À utiliser pour plus de précision sur le parcours des graphes/arbres de la syntaxe AMR.
   
- https://penman.readthedocs.io/en/latest/api/penman.html - https://penman.readthedocs.io/en/latest/api/penman.html
- https://penman.readthedocs.io/en/latest/api/penman.graph.html - https://penman.readthedocs.io/en/latest/api/penman.graph.html
   
   
```python ```python
amr = amr_mapaie.sentences[0].amr amr = amr_mapaie.sentences[0].amr
g = penman.decode(amr) g = penman.decode(amr)
top = g.top # Sommet de l'arbre top = g.top # Sommet de l'arbre
concepts = {} concepts = {}
# for s, p, o in amr_mapaie.sentences[0].tsv(): # for s, p, o in amr_mapaie.sentences[0].tsv():
for s, p, o in g.instances(): for s, p, o in g.instances():
# s = source – the source variable of the triple (g.top est le sommet) # s = source – the source variable of the triple (g.top est le sommet)
# p = role – the edge label between the source and target # p = role – the edge label between the source and target
# o = target – the target variable or constant => C'est le concept pour les noeuds # o = target – the target variable or constant => C'est le concept pour les noeuds
if p == ":instance": if p == ":instance":
concepts[s] = o concepts[s] = o
... ...
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.0.2) Aide analyse AMR ### 4.0.2) Aide analyse AMR
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Le fichier AMR de mapaie, `key_penmans.amr` est un fichier brut pouvant être lu en texte. Le fichier AMR de mapaie, `key_penmans.amr` est un fichier brut pouvant être lu en texte.
- La ligne *::snt* est la phrase originelle - La ligne *::snt* est la phrase originelle
- Suivie du numéro de fichier* - Suivie du numéro de fichier*
- Suivie de la syntaxe AMR (Penman) - Suivie de la syntaxe AMR (Penman)
   
Normalement, il n'y a pas besoin de lire directement ce fichier, juste à utiliser la variable `amr_mapaie`. Normalement, il n'y a pas besoin de lire directement ce fichier, juste à utiliser la variable `amr_mapaie`.
   
Aide sur la syntaxe AMR : https://github.com/amrisi/amr-guidelines/blob/master/amr.md Aide sur la syntaxe AMR : https://github.com/amrisi/amr-guidelines/blob/master/amr.md
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.0.3) Exemple d'utilisation dans amrdoc : ### 4.0.3) Exemple d'utilisation dans amrdoc :
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def relations_between_concepts(ads, depth=2): def relations_between_concepts(ads, depth=2):
output = [] output = []
concepts = {} # {concept: {relation: {concept: freq}}} concepts = {} # {concept: {relation: {concept: freq}}}
for ad in ads: for ad in ads:
for sent in ad.sentences: for sent in ad.sentences:
instances = {} # inst: concept instances = {} # inst: concept
for s, p, o in sent.tsv(): for s, p, o in sent.tsv():
if p == ":instance": if p == ":instance":
instances[s] = o instances[s] = o
for s, p, o in sent.tsv(): for s, p, o in sent.tsv():
if p != ":instance": if p != ":instance":
sclass = instances[s] sclass = instances[s]
oclass = instances.get(o, "lit:" + o) oclass = instances.get(o, "lit:" + o)
   
if depth == 1: if depth == 1:
if sclass in concepts: if sclass in concepts:
concepts[sclass] += 1 concepts[sclass] += 1
else: else:
concepts[sclass] = 1 concepts[sclass] = 1
continue continue
   
if sclass in concepts: if sclass in concepts:
relations = concepts[sclass] relations = concepts[sclass]
else: else:
relations = {} relations = {}
concepts[sclass] = relations concepts[sclass] = relations
   
if depth == 2: if depth == 2:
if p in relations: if p in relations:
relations[p] += 1 relations[p] += 1
else: else:
relations[p] = 1 relations[p] = 1
continue continue
   
if p in relations: if p in relations:
objectconcepts = relations[p] objectconcepts = relations[p]
else: else:
objectconcepts = {} objectconcepts = {}
relations[p] = objectconcepts relations[p] = objectconcepts
if oclass in objectconcepts: if oclass in objectconcepts:
objectconcepts[oclass] += 1 objectconcepts[oclass] += 1
else: else:
objectconcepts[oclass] = 1 objectconcepts[oclass] = 1
for c in sorted(concepts): for c in sorted(concepts):
if depth == 1: if depth == 1:
#print(c, concepts[c], sep="\t") #print(c, concepts[c], sep="\t")
output.append("%s\t%s" % (c, concepts[c])) output.append("%s\t%s" % (c, concepts[c]))
continue continue
#print(c) #print(c)
output.append(c) output.append(c)
for r in sorted(concepts[c]): for r in sorted(concepts[c]):
if depth == 2: if depth == 2:
#print(" %s\t%s" % (r, concepts[c][r])) #print(" %s\t%s" % (r, concepts[c][r]))
output.append(" %s\t%s" % (r, concepts[c][r])) output.append(" %s\t%s" % (r, concepts[c][r]))
continue continue
#print(" ", r) #print(" ", r)
output.append(" " + r) output.append(" " + r)
for oc in sorted(concepts[c][r]): for oc in sorted(concepts[c][r]):
#print(" %s\t%s" % (oc, concepts[c][r][oc])) #print(" %s\t%s" % (oc, concepts[c][r][oc]))
output.append(" %s\t%s" % (oc, concepts[c][r][oc])) output.append(" %s\t%s" % (oc, concepts[c][r][oc]))
   
return output return output
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
## **4.1) Initialisation utilisation** ## **4.1) Initialisation utilisation**
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
c1 = [x.split('\t') for x in amrdoc.relations_between_concepts([amr_mapaie], depth=1)] c1 = [x.split('\t') for x in amrdoc.relations_between_concepts([amr_mapaie], depth=1)]
c2 = [x.split('\t') for x in amrdoc.relations_between_concepts([amr_mapaie], depth=2)] c2 = [x.split('\t') for x in amrdoc.relations_between_concepts([amr_mapaie], depth=2)]
   
# Concepts présents dans les AMR de mapaie # Concepts présents dans les AMR de mapaie
concepts = set(x[0] for x in c1) concepts = set(x[0] for x in c1)
# Type de relation présents dans les AMR de mapaie # Type de relation présents dans les AMR de mapaie
relations = set(x[0] for x in c2) - concepts relations = set(x[0] for x in c2) - concepts
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Il faut chercher dans cette liste ceux qui se rapporte à **fairness** pour pourvoir effectuer les analyses à faire. Il faut chercher dans cette liste ceux qui se rapporte à **fairness** pour pourvoir effectuer les analyses à faire.
   
- Une première méthode simple est de regarder cette liste `concepts` dans la lettre 'f' : - Une première méthode simple est de regarder cette liste `concepts` dans la lettre 'f' :
>'face-01', 'facet', 'facilitate-01', 'facility', 'fact', 'factor', 'factor-01', 'fail-01', 'fair-01', 'fairness', 'fairwash-01', 'fall-01', 'fall-04', 'fallacy', 'familiarize-01', 'fatality', 'feasibility', 'feature', 'feature-01', 'federate-01', 'feed-01', 'feed-02', 'feedback', 'feel-01', 'few', 'fidelity', 'field', 'fight-01', 'figure', 'fill-01', 'fill-in-05', 'find-01', 'find-02', 'fine-04', 'fire-02', 'firm', 'fit-01', 'fit-03', 'fit-06', 'fix-03', 'flaw-01', 'flexibility', 'flow-01', 'focus-01', 'follow-01', 'follow-02', 'follow-04', 'follow-through-07', 'foresee-01', 'foreword', 'forgive-01', 'form', 'form-01', 'formalize-01', 'formula', 'formulate-01', 'foster-01', 'found-01', 'foundation', 'frame', 'frame-06', 'framework', 'free-04', 'frequent-02', 'friendly-01', 'from', 'fulfill-01', 'full-09', 'fun-01', 'function', 'function-01', 'functional-03', 'fund', 'fund-01', 'furnish-01', 'fuse-01', 'future' >'face-01', 'facet', 'facilitate-01', 'facility', 'fact', 'factor', 'factor-01', 'fail-01', 'fair-01', 'fairness', 'fairwash-01', 'fall-01', 'fall-04', 'fallacy', 'familiarize-01', 'fatality', 'feasibility', 'feature', 'feature-01', 'federate-01', 'feed-01', 'feed-02', 'feedback', 'feel-01', 'few', 'fidelity', 'field', 'fight-01', 'figure', 'fill-01', 'fill-in-05', 'find-01', 'find-02', 'fine-04', 'fire-02', 'firm', 'fit-01', 'fit-03', 'fit-06', 'fix-03', 'flaw-01', 'flexibility', 'flow-01', 'focus-01', 'follow-01', 'follow-02', 'follow-04', 'follow-through-07', 'foresee-01', 'foreword', 'forgive-01', 'form', 'form-01', 'formalize-01', 'formula', 'formulate-01', 'foster-01', 'found-01', 'foundation', 'frame', 'frame-06', 'framework', 'free-04', 'frequent-02', 'friendly-01', 'from', 'fulfill-01', 'full-09', 'fun-01', 'function', 'function-01', 'functional-03', 'fund', 'fund-01', 'furnish-01', 'fuse-01', 'future'
- **'fair-01', 'fairness', 'fairwash-01'** pourrait nous interresser. - **'fair-01', 'fairness', 'fairwash-01'** pourrait nous interresser.
- *À noter que 'fairness' n'existe pas dans les concepts de probBank* - *À noter que 'fairness' n'existe pas dans les concepts de probBank*
   
- Une deuxième méthode serait pour chaque phrase qui ne contient pas les concepts AMR 'fair-01', 'fairness', regarder manuellement comment le mot fairness a été transcrit. - Une deuxième méthode serait pour chaque phrase qui ne contient pas les concepts AMR 'fair-01', 'fairness', regarder manuellement comment le mot fairness a été transcrit.
   
   
Ensuite, on pourrait se renseigner au sens des mots choisis dans les fichiers XML de probBank [lien](https://github.com/propbank/propbank-frames/tree/main/frames) (ou sur l'application metamorphosed). Ensuite, on pourrait se renseigner au sens des mots choisis dans les fichiers XML de probBank [lien](https://github.com/propbank/propbank-frames/tree/main/frames) (ou sur l'application metamorphosed).
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
stat_concept = dict.fromkeys(sorted(concepts), 0) stat_concept = dict.fromkeys(sorted(concepts), 0)
for x in c1: for x in c1:
stat_concept[x[0]] = int(x[1]) stat_concept[x[0]] = int(x[1])
   
stat_relation = dict.fromkeys(sorted(relations), 0) stat_relation = dict.fromkeys(sorted(relations), 0)
stat_concept_relation = dict.fromkeys(sorted(concepts), {}) stat_concept_relation = dict.fromkeys(sorted(concepts), {})
tmp_concept = list(stat_concept_relation.keys())[0] tmp_concept = list(stat_concept_relation.keys())[0]
for x in c2: for x in c2:
if len(x) == 1 and x[0] in concepts: # C'est un concept if len(x) == 1 and x[0] in concepts: # C'est un concept
tmp_concept = x[0] tmp_concept = x[0]
stat_concept_relation[tmp_concept] = dict.fromkeys(sorted(relations), 0) stat_concept_relation[tmp_concept] = dict.fromkeys(sorted(relations), 0)
continue continue
   
if len(x) > 1: # C'est une relation associé au concept précédant if len(x) > 1: # C'est une relation associé au concept précédant
stat_relation[x[0]] += int(x[1]) stat_relation[x[0]] += int(x[1])
stat_concept_relation[tmp_concept][x[0]] = int(x[1]) stat_concept_relation[tmp_concept][x[0]] = int(x[1])
   
   
# stat_concept : contient les stats d'utilisation des concepts # stat_concept : contient les stats d'utilisation des concepts
# stat_relation : contient les stats d'utilisation du type de relation # stat_relation : contient les stats d'utilisation du type de relation
# stat_concept_relation : contient les stats d'utilisation des type de relation par concept # stat_concept_relation : contient les stats d'utilisation des type de relation par concept
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
tmp = dict(sorted(stat_concept.items(), key=lambda item: item[1], reverse=True)) tmp = dict(sorted(stat_concept.items(), key=lambda item: item[1], reverse=True))
pprint({k: tmp[k] for i, k in enumerate(tmp) if i < 20}, sort_dicts=False) pprint({k: tmp[k] for i, k in enumerate(tmp) if i < 20}, sort_dicts=False)
   
# tmp = dict(sorted(stat_relation.items(), key=lambda item: item[1], reverse=True)) # tmp = dict(sorted(stat_relation.items(), key=lambda item: item[1], reverse=True))
# pprint({k: tmp[k] for i, k in enumerate(tmp) if i < 20}, sort_dicts=False) # pprint({k: tmp[k] for i, k in enumerate(tmp) if i < 20}, sort_dicts=False)
``` ```
   
%% Output %% Output
   
{'and': 5658, {'and': 5658,
'name': 2995, 'name': 2995,
'multi-sentence': 1020, 'multi-sentence': 1020,
'or': 572, 'or': 572,
'possible-01': 569, 'possible-01': 569,
'publication-91': 395, 'publication-91': 395,
'person': 379, 'person': 379,
'publication': 362, 'publication': 362,
'intelligent-01': 354, 'intelligent-01': 354,
'use-01': 354, 'use-01': 354,
'have-degree-91': 334, 'have-degree-91': 334,
'mean-01': 305, 'mean-01': 305,
'date-entity': 300, 'date-entity': 300,
'principle': 278, 'principle': 278,
'recommend-01': 257, 'recommend-01': 257,
'fair-01': 256, 'fair-01': 256,
'develop-02': 249, 'develop-02': 249,
'system': 246, 'system': 246,
'cause-01': 234, 'cause-01': 234,
'ensure-01': 233} 'ensure-01': 233}
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Première initialisation des concepts AMR liés à FAIRNESS : # Première initialisation des concepts AMR liés à FAIRNESS :
list_concept_tosee = ['fair-01', 'fairness', 'fairwash-01'] list_concept_tosee = ['fair-01', 'fairness', 'fairwash-01']
   
# Filtre pour l'affichage # Filtre pour l'affichage
list_relation_tosee = set([y for x in list_concept_tosee for y in stat_concept_relation[x] if stat_concept_relation[x][y] != 0]) list_relation_tosee = set([y for x in list_concept_tosee for y in stat_concept_relation[x] if stat_concept_relation[x][y] != 0])
# tmp = {x: {y.strip(): stat_concept_relation[x][y] for y in list_relation_tosee} for x in list_concept_tosee} # tmp = {x: {y.strip(): stat_concept_relation[x][y] for y in list_relation_tosee} for x in list_concept_tosee}
# print(tabulate(tmp.values(), showindex=list_concept_tosee, headers='keys', tablefmt='pipe')) # print(tabulate(tmp.values(), showindex=list_concept_tosee, headers='keys', tablefmt='pipe'))
   
tmpbis = {y.strip(): {x: stat_concept_relation[x][y] for x in list_concept_tosee} for y in list_relation_tosee} tmpbis = {y.strip(): {x: stat_concept_relation[x][y] for x in list_concept_tosee} for y in list_relation_tosee}
print(tabulate(tmpbis.values(), showindex=list_relation_tosee, headers='keys', tablefmt='pipe')) print(tabulate(tmpbis.values(), showindex=list_relation_tosee, headers='keys', tablefmt='pipe'))
``` ```
   
%% Output %% Output
   
| | fair-01 | fairness | fairwash-01 | | | fair-01 | fairness | fairwash-01 |
|:-------------|----------:|-----------:|--------------:| |:-------------|----------:|-----------:|--------------:|
| :mod | 13 | 105 | 0 | | :mod | 13 | 105 | 0 |
| :polarity | 58 | 42 | 0 | | :polarity | 58 | 42 | 0 |
| :topic | 0 | 10 | 0 | | :topic | 0 | 10 | 0 |
| :li | 0 | 2 | 0 | | :li | 0 | 2 | 0 |
| :ARG0 | 5 | 0 | 1 | | :ARG0 | 5 | 0 | 1 |
| :ARG1 | 156 | 0 | 1 | | :ARG1 | 156 | 0 | 1 |
| :degree | 1 | 0 | 0 | | :degree | 1 | 0 | 0 |
| :source | 0 | 1 | 0 | | :source | 0 | 1 | 0 |
| :prep-on | 0 | 1 | 0 | | :prep-on | 0 | 1 | 0 |
| :beneficiary | 0 | 2 | 0 | | :beneficiary | 0 | 2 | 0 |
| :domain | 1 | 5 | 0 | | :domain | 1 | 5 | 0 |
| :ARG3 | 1 | 1 | 0 | | :ARG3 | 1 | 1 | 0 |
| :quant | 0 | 1 | 0 | | :quant | 0 | 1 | 0 |
| :manner | 5 | 6 | 1 | | :manner | 5 | 6 | 1 |
| :location | 3 | 5 | 0 | | :location | 3 | 5 | 0 |
| :poss | 0 | 15 | 0 | | :poss | 0 | 15 | 0 |
| :ARG2 | 6 | 0 | 0 | | :ARG2 | 6 | 0 | 0 |
| :ARG4 | 1 | 0 | 0 | | :ARG4 | 1 | 0 | 0 |
| :prep-in | 0 | 9 | 0 | | :prep-in | 0 | 9 | 0 |
| :example | 0 | 1 | 0 | | :example | 0 | 1 | 0 |
| :condition | 6 | 0 | 0 | | :condition | 6 | 0 | 0 |
| :time | 0 | 1 | 0 | | :time | 0 | 1 | 0 |
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
## **4.2) Analyse *Fearness* à partir AMR** ## **4.2) Analyse *Fearness* à partir AMR**
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Nous nous interressons au voisinage de l'utilisation du mot fairness dans le graph AMR : Nous nous interressons au voisinage de l'utilisation du mot fairness dans le graph AMR :
   
<pre style='font=font-family:Courier New, Courier, monospace;'> <pre style='font=font-family:Courier New, Courier, monospace;'>
===== =====
= P = = P =
===== =====
/ \ / \
V_tag / \ F_tag V_tag / \ F_tag
/ \ / \
===== ===== ===== =====
= V = = F = = V = = F =
===== ===== ===== =====
| |
| E_tag | E_tag
| |
------- -------
| E | | E |
| ... | | ... |
------- -------
</pre> </pre>
**Explications :** **Explications :**
- F : Le noeud où le concept de *fairness* apparait - F : Le noeud où le concept de *fairness* apparait
- P : le concept parent - P : le concept parent
- V : le concept voisin, lié à *fairness* par le parent - V : le concept voisin, lié à *fairness* par le parent
- E : les concepts enfants - E : les concepts enfants
- x_tag : les tags AMR associés - x_tag : les tags AMR associés
   
#### Recherche à faire : #### Recherche à faire :
<font color="red">Faire les statistiques puis analyser avec les précédents constats de notre analyse PosTag : <font color="red">Faire les statistiques puis analyser avec les précédents constats de notre analyse PosTag :
- P( P ) - P( P )
- P( F_tag ) - P( F_tag )
- P( V ) - P( V )
- P( V \ P) - P( V \ P)
- P( V_tag, F_tag ) - P( V_tag, F_tag )
- P( E_tag ) - P( E_tag )
- P( {E}=∅ ) : Fairness n'a pas d'enfant - P( {E}=∅ ) : Fairness n'a pas d'enfant
- P( rang(E)=1 ) : Fairness n'a qu'un enfant - P( rang(E)=1 ) : Fairness n'a qu'un enfant
- P( rang(E)>1 ) : Fairness à plusieurs enfants - P( rang(E)>1 ) : Fairness à plusieurs enfants
   
</font> </font>
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# TEST TO SAVE IMAGE des graph AMR (pour les profs) : # TEST TO SAVE IMAGE des graph AMR (pour les profs) :
   
# dataformat = 'png' # dataformat = 'png'
# self.aps = {} # parsed and possibly modified PENMAN AMRs # self.aps = {} # parsed and possibly modified PENMAN AMRs
# # initial version of Penman graph # # initial version of Penman graph
# for sentnum, cursentence in enumerate(self.amrdoc.sentences, start=1): # for sentnum, cursentence in enumerate(self.amrdoc.sentences, start=1):
# if sentnum % 10 == 0: # if sentnum % 10 == 0:
# print("%d initialized" % sentnum, end="\r") # print("%d initialized" % sentnum, end="\r")
# ap = amreditor.AMRProcessor() # ap = amreditor.AMRProcessor()
# self.aps[sentnum] = ap # self.aps[sentnum] = ap
# ap.lastpm = cursentence.amr # ap.lastpm = cursentence.amr
# ap.comments = cursentence.comments # ap.comments = cursentence.comments
   
# dataformat = 'png' # dataformat = 'png'
# for ix, x in enumerate(self.aps, 1): # for ix, x in enumerate(self.aps, 1):
# ap = self.aps[x] # ap = self.aps[x]
# if not ap.isparsed: # if not ap.isparsed:
# ap.readpenman(ap.lastpm) # ap.readpenman(ap.lastpm)
# pm, svg, svg_canon = ap.show(format=dataformat) # pm, svg, svg_canon = ap.show(format=dataformat)
# if svg: # if svg:
# print("%d.%s" % (ix, dataformat), svg) # print("%d.%s" % (ix, dataformat), svg)
   
# # show() # # show()
# try: # try:
# pm = penman.encode(penman.Graph(self.triples, top=self.top)) # pm = penman.encode(penman.Graph(self.triples, top=self.top))
# self.readpenman(pm) # self.readpenman(pm)
# self.lastsvg = self.dot(highlightinstances, highlightrelations, format=dataformat) # self.lastsvg = self.dot(highlightinstances, highlightrelations, format=dataformat)
# self.lastsvg_canonised = self.dot(highlightinstances, highlightrelations, format=dataformat, inverse_of=True) # self.lastsvg_canonised = self.dot(highlightinstances, highlightrelations, format=dataformat, inverse_of=True)
# self.isDisconnected = False # self.isDisconnected = False
# except penman.exceptions.LayoutError: # except penman.exceptions.LayoutError:
# print("not yet correct") # print("not yet correct")
# print(self.triples) # print(self.triples)
   
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.2.0) Exemple d'utilisation de la syntaxe penman AMR ### 4.2.0) Exemple d'utilisation de la syntaxe penman AMR
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
sentnum = 1 sentnum = 1
cursentence = amr_mapaie.sentences[0] cursentence = amr_mapaie.sentences[0]
# for sentnum, cursentence in enumerate(amr_mapaie.sentences, start=1): # for sentnum, cursentence in enumerate(amr_mapaie.sentences, start=1):
# pass # pass
   
# Initialisation du parsing : # Initialisation du parsing :
ap = amreditor.AMRProcessor() ap = amreditor.AMRProcessor()
ap.lastpm = cursentence.amr ap.lastpm = cursentence.amr
ap.comments = cursentence.comments ap.comments = cursentence.comments
if not ap.isparsed: if not ap.isparsed:
ap.readpenman(ap.lastpm) ap.readpenman(ap.lastpm)
   
# Utilisation : 1- liste des concepts # Utilisation : 1- liste des concepts
ap.vars ap.vars
``` ```
   
%% Output %% Output
   
{'p': 'possible-01', {'p': 'possible-01',
'f': 'facilitate-01', 'f': 'facilitate-01',
'o': 'or', 'o': 'or',
'r': 'regulate-01', 'r': 'regulate-01',
'e': 'exist-01', 'e': 'exist-01',
'r2': 'regulate-01', 'r2': 'regulate-01',
'n': 'new-01', 'n': 'new-01',
'o2': 'or', 'o2': 'or',
'a': 'accountable-02', 'a': 'accountable-02',
'a2': 'algorithm', 'a2': 'algorithm',
'f2': 'fair-01', 'f2': 'fair-01',
'a3': 'amr-unknown', 'a3': 'amr-unknown',
'f3': 'first-of-all'} 'f3': 'first-of-all'}
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Utilisation : 2- arbre AMR entier sous une liste de triplet # Utilisation : 2- arbre AMR entier sous une liste de triplet
ap.triples ap.triples
   
# 1- Vérifier values ap.vars == fairness et récupérer la clé (id) # 1- Vérifier values ap.vars == fairness et récupérer la clé (id)
# 2- Récupérer triplet F_tag (ap.triples[2]==id) (id_P, type_F_tag, id) # 2- Récupérer triplet F_tag (ap.triples[2]==id) (id_P, type_F_tag, id)
# 3- Sortir le parent P (ap.vars[id_P] => concept) # 3- Sortir le parent P (ap.vars[id_P] => concept)
# 4- Sortir triplet V_tag (ap.triples[0]==id_P and ap.triples[1]!=':instance') (id_p, type_V_tag,id_V) # 4- Sortir triplet V_tag (ap.triples[0]==id_P and ap.triples[1]!=':instance') (id_p, type_V_tag,id_V)
# 5- Sortir le voisin V (ap.vars[id_V] => concept) # 5- Sortir le voisin V (ap.vars[id_V] => concept)
# enfants_F = [x for x in ap.triples if x[0]==id and x[2]!=fearness] # enfants_F = [x for x in ap.triples if x[0]==id and x[2]!=fearness]
# ids_E=[x[2] for x in enfants_F] # ids_E=[x[2] for x in enfants_F]
# 6- Nombre branche fairness : len(enfants_F) # 6- Nombre branche fairness : len(enfants_F)
# 7- concept enfant : [ap.vars[x] for x in ids_E] # 7- concept enfant : [ap.vars[x] for x in ids_E]
# 8- Nb petit-enfant : len(ap.triples if x[0]==ids_E and != ap.vars[ids_E]|concept) # 8- Nb petit-enfant : len(ap.triples if x[0]==ids_E and != ap.vars[ids_E]|concept)
``` ```
   
%% Output %% Output
   
[('p', ':instance', 'possible-01'), [('p', ':instance', 'possible-01'),
('p', ':ARG1', 'f'), ('p', ':ARG1', 'f'),
('p', ':mod', 'f3'), ('p', ':mod', 'f3'),
('f', ':instance', 'facilitate-01'), ('f', ':instance', 'facilitate-01'),
('f', ':ARG0', 'o'), ('f', ':ARG0', 'o'),
('f', ':ARG1', 'o2'), ('f', ':ARG1', 'o2'),
('f', ':manner', 'a3'), ('f', ':manner', 'a3'),
('o', ':instance', 'or'), ('o', ':instance', 'or'),
('o', ':op1', 'r'), ('o', ':op1', 'r'),
('o', ':op2', 'r2'), ('o', ':op2', 'r2'),
('r', ':instance', 'regulate-01'), ('r', ':instance', 'regulate-01'),
('r', ':ARG1-of', 'e'), ('r', ':ARG1-of', 'e'),
('e', ':instance', 'exist-01'), ('e', ':instance', 'exist-01'),
('r2', ':instance', 'regulate-01'), ('r2', ':instance', 'regulate-01'),
('r2', ':ARG1-of', 'n'), ('r2', ':ARG1-of', 'n'),
('n', ':instance', 'new-01'), ('n', ':instance', 'new-01'),
('o2', ':instance', 'or'), ('o2', ':instance', 'or'),
('o2', ':op1', 'a'), ('o2', ':op1', 'a'),
('o2', ':op2', 'f2'), ('o2', ':op2', 'f2'),
('a', ':instance', 'accountable-02'), ('a', ':instance', 'accountable-02'),
('a', ':mod', 'a2'), ('a', ':mod', 'a2'),
('a2', ':instance', 'algorithm'), ('a2', ':instance', 'algorithm'),
('f2', ':instance', 'fair-01'), ('f2', ':instance', 'fair-01'),
('a3', ':instance', 'amr-unknown'), ('a3', ':instance', 'amr-unknown'),
('f3', ':instance', 'first-of-all')] ('f3', ':instance', 'first-of-all')]
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.2.1) Fonctions permettant d'extraire le voisinage ### 4.2.1) Fonctions permettant d'extraire le voisinage
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Fonctions récupèrant le parent # Fonctions récupèrant le parent
def get_parent_infos(targets, amr_sentence): def get_parent_infos(targets, amr_sentence):
"""Recherche les parents d'un concept (noeud AMR) pour une phrase """Recherche les parents d'un concept (noeud AMR) pour une phrase
   
:param list[str] targets: liste de concept à rechercher :param list[str] targets: liste de concept à rechercher
:param amrdoc.AMRsentence amr_sentence: phrase à analyser :param amrdoc.AMRsentence amr_sentence: phrase à analyser
:return results, racines: :return results, racines:
results[concept_target] = [parent_id, parent_type, relation, amr_sentence] results[concept_target] = [parent_id, parent_type, relation, amr_sentence]
racines: list = list des phrases dont le concept et le sommet de l'arbre racines: list = list des phrases dont le concept et le sommet de l'arbre
""" """
# Initialisation de l'AMRProcessor # Initialisation de l'AMRProcessor
ap = amreditor.AMRProcessor() ap = amreditor.AMRProcessor()
ap.lastpm = amr_sentence.amr ap.lastpm = amr_sentence.amr
ap.comments = amr_sentence.comments ap.comments = amr_sentence.comments
if not ap.isparsed: if not ap.isparsed:
ap.readpenman(ap.lastpm) ap.readpenman(ap.lastpm)
   
results = {} results = {}
racines = [] racines = []
for target in targets: for target in targets:
target_vars = ap.getvars(target) target_vars = ap.getvars(target)
if target_vars: if target_vars:
infos = [] infos = []
for target_var in target_vars: # Parcourir toutes les occurrences du mot for target_var in target_vars: # Parcourir toutes les occurrences du mot
has_parent = False has_parent = False
for triple in ap.triples: for triple in ap.triples:
if triple[2] == target_var: if triple[2] == target_var:
parent_var = triple[0] parent_var = triple[0]
relation = triple[1] relation = triple[1]
parent_type = ap.vars[parent_var] parent_type = ap.vars[parent_var]
infos.append((parent_var, parent_type, infos.append((parent_var, parent_type,
relation, amr_sentence)) relation, amr_sentence))
has_parent = True has_parent = True
   
if not has_parent: if not has_parent:
infos.append(("NA", "NA", "NA", amr_sentence)) infos.append(("NA", "NA", "NA", amr_sentence))
racines.append((amr_sentence, amr_sentence)) racines.append((amr_sentence, amr_sentence))
   
results[target] = infos results[target] = infos
   
return results, racines return results, racines
   
   
def get_all_parents(targetlist, amr_sentences): def get_all_parents(targetlist, amr_sentences):
"""Recherche les parents d'un concept (noeud AMR) dans tout le corpus """Recherche les parents d'un concept (noeud AMR) dans tout le corpus
   
:param list[str] targetlist: liste de concept à rechercher :param list[str] targetlist: liste de concept à rechercher
:param list[amrdoc.AMRsentence] amr_sentences: list des phrase du corpus :param list[amrdoc.AMRsentence] amr_sentences: list des phrase du corpus
:return results, racines: :return results, racines:
results[concept_target] = [parent_id, parent_type, relation, amr_sentence] results[concept_target] = [parent_id, parent_type, relation, amr_sentence]
racines: list[list] = list des phrases dont le concept et le sommet de l'arbre racines: list[list] = list des phrases dont le concept et le sommet de l'arbre
""" """
results = {} results = {}
racines = [] racines = []
for i, sentence in enumerate(amr_sentences): for i, sentence in enumerate(amr_sentences):
results[i], racine = get_parent_infos(targetlist, sentence) results[i], racine = get_parent_infos(targetlist, sentence)
if racine: if racine:
racines.append(racine) racines.append(racine)
   
return results, racines return results, racines
   
   
# Fonctions récupèrant les enfants # Fonctions récupèrant les enfants
def get_node_children(node_id, amr_sentence, list_concept_tosee): def get_node_children(node_id, amr_sentence, list_concept_tosee):
# Initialisation de l'AMRProcessor # Initialisation de l'AMRProcessor
ap = amreditor.AMRProcessor() ap = amreditor.AMRProcessor()
ap.lastpm = amr_sentence.amr ap.lastpm = amr_sentence.amr
ap.comments = amr_sentence.comments ap.comments = amr_sentence.comments
if not ap.isparsed: if not ap.isparsed:
ap.readpenman(ap.lastpm) ap.readpenman(ap.lastpm)
   
children = [] # Liste des enfants avec leurs liens children = [] # Liste des enfants avec leurs liens
   
# Parcourir les triples pour trouver les enfants du noeud donné # Parcourir les triples pour trouver les enfants du noeud donné
for triple in ap.triples: for triple in ap.triples:
if triple[0] == node_id: # Si le noeud est le sujet if triple[0] == node_id: # Si le noeud est le sujet
child_id = triple[2] # Identifiant de l'enfant child_id = triple[2] # Identifiant de l'enfant
relation = triple[1] # Relation entre le noeud et l'enfant relation = triple[1] # Relation entre le noeud et l'enfant
# Type de l'enfant (s'il existe) # Type de l'enfant (s'il existe)
child_type = ap.vars.get(child_id, "NA") child_type = ap.vars.get(child_id, "NA")
if child_type in list_concept_tosee: if child_type in list_concept_tosee:
continue continue
children.append((child_id, child_type, relation, children.append((child_id, child_type, relation,
amr_sentence.comments[0])) amr_sentence.comments[0]))
   
return children return children
   
   
def get_all_node_children(parents, list_concept_tosee): def get_all_node_children(parents, list_concept_tosee):
childrens = [] childrens = []
for index, list_parents in parents.items(): for index, list_parents in parents.items():
for word_fair, list_parents in list_parents.items(): for word_fair, list_parents in list_parents.items():
for parent in list_parents: for parent in list_parents:
children = get_node_children( children = get_node_children(
parent[0], parent[3], list_concept_tosee) parent[0], parent[3], list_concept_tosee)
childrens.append(children) childrens.append(children)
   
return childrens return childrens
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.2.2) Recherche des parents AMR ( **P** ) ### 4.2.2) Recherche des parents AMR ( **P** )
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
list_concept_tosee = ['fair-01', 'fairness', 'fairwash-01'] list_concept_tosee = ['fair-01', 'fairness', 'fairwash-01']
parents, racines = get_all_parents(list_concept_tosee, amr_mapaie.sentences) parents, racines = get_all_parents(list_concept_tosee, amr_mapaie.sentences)
   
# comptage des parents # comptage des parents
count_words_fair = {} count_words_fair = {}
for fair in list_concept_tosee: for fair in list_concept_tosee:
count_words_fair[fair] = 0 count_words_fair[fair] = 0
   
count_parents_type = {} count_parents_type = {}
count_parents_link = {} count_parents_link = {}
for index, list_parents in parents.items(): for index, list_parents in parents.items():
for word_fair, list_parents in list_parents.items(): for word_fair, list_parents in list_parents.items():
for parent in list_parents: for parent in list_parents:
count_words_fair[word_fair] += 1 count_words_fair[word_fair] += 1
if parent[1] in count_parents_type: if parent[1] in count_parents_type:
count_parents_type[parent[1]] += 1 count_parents_type[parent[1]] += 1
else: else:
count_parents_type[parent[1]] = 1 count_parents_type[parent[1]] = 1
if parent[2] in count_parents_link: if parent[2] in count_parents_link:
count_parents_link[parent[2]] += 1 count_parents_link[parent[2]] += 1
else: else:
count_parents_link[parent[2]] = 1 count_parents_link[parent[2]] = 1
``` ```
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
#### 4.2.2.1) Analyse des noeuds parents AMR #### 4.2.2.1) Analyse des noeuds parents AMR
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Maintenant, nous pouvons effecter une représentation en nuage de mot de parent du concept fair* : Maintenant, nous pouvons effecter une représentation en nuage de mot de parent du concept fair* :
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
print("type de parent :") print("type de parent :")
top_10 = sorted(count_parents_type.items(), top_10 = sorted(count_parents_type.items(), key=lambda x: x[1], reverse=True)[:10]
key=lambda x: x[1], reverse=True)[:10]
   
# Afficher le Top 10 # Afficher le Top 10
for key, value in top_10: for key, value in top_10:
print(f"{key}: {value}") print(f"{key}: {value}")
   
# nuage de mots # nuage de mots
# Créer le nuage de mots # Créer le nuage de mots
wordcloud = WordCloud( wordcloud = WordCloud(
width=800, width=800,
height=400, height=400,
background_color="white", background_color="white",
colormap="viridis" colormap="viridis"
).generate_from_frequencies(count_parents_type) ).generate_from_frequencies(count_parents_type)
   
# Afficher le nuage de mots # Afficher le nuage de mots
plt.figure(figsize=(10, 5)) plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear") plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off") # Supprime les axes plt.axis("off") # Supprime les axes
plt.show() plt.show()
``` ```
   
%% Output %% Output
   
type de parent : type de parent :
and: 476 and: 476
define-01: 57 define-01: 57
principle: 51 principle: 51
or: 44 or: 44
ensure-01: 32 ensure-01: 32
multi-sentence: 28 multi-sentence: 28
realize-01: 24 realize-01: 24
assess-01: 16 assess-01: 16
criteria: 15 criteria: 15
concept: 14 concept: 14
   
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Analyses :** **Analyses :**
- Plus d'un tiers des parents sont une jonction de 2 concepts. - Plus d'un tiers des parents sont une jonction de 2 concepts.
- L'analyse AMR confirme notre analyse précédente avec les postags - L'analyse AMR confirme notre analyse précédente avec les postags
- Fairness est donc souvent associé à un autre concept. - Fairness est donc souvent associé à un autre concept.
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
#### 4.2.2.2) Analyse du cas où il lui-même parent #### 4.2.2.2) Analyse du cas où il lui-même parent
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Il est maintenant interessant d'étudier les phrases dont le concept fair* est racine de l'arbre AMR Il est maintenant interessant d'étudier les phrases dont le concept fair* est racine de l'arbre AMR
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
for sentence in racines: for sentence in racines:
print(sentence[0][0].comments[0] + " : " + sentence[0][0].text) print(sentence[0][0].comments[0] + " : " + sentence[0][0].text)
``` ```
   
%% Output %% Output
   
File 89 : Fairness. File 89 : Fairness.
File 157 : Fairness through awareness. File 157 : Fairness through awareness.
File 157 : Counterfactual fairness. File 157 : Counterfactual fairness.
File 157 : https://doi.org/10.1007/s12599 -017-0487 -z Outcome fairness File 157 : https://doi.org/10.1007/s12599 -017-0487 -z Outcome fairness
File 157 : Path -specific counterfactual fairness. File 157 : Path -specific counterfactual fairness.
File 157 : Fairness through awareness. File 157 : Fairness through awareness.
File 157 : Counterfactual fairness. File 157 : Counterfactual fairness.
File 157 : Fairness beyond disparate treatment & disparate impact: Learning classification without disparate mistreatment. File 157 : Fairness beyond disparate treatment & disparate impact: Learning classification without disparate mistreatment.
File 157 : Fairness in decision -making the causal explanation formula. File 157 : Fairness in decision -making the causal explanation formula.
File 18 : Fairness. File 18 : Fairness.
File 18 : Fairness. File 18 : Fairness.
File 78 : 'Fairness through awareness. ' File 78 : 'Fairness through awareness. '
File 128 : They fairwash a model by taking a closed-box model and produce an ensemble of interpretable models that approximate the original model but are much fairer, which then hide the unfairness of the original model. File 128 : They fairwash a model by taking a closed-box model and produce an ensemble of interpretable models that approximate the original model but are much fairer, which then hide the unfairness of the original model.
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Analyse :** **Analyse :**
   
- Seules 13 occurences en tant que racine de l'arbre AMR - Seules 13 occurences en tant que racine de l'arbre AMR
- Concerne majoritairement des titres ou des occurences seules - Concerne majoritairement des titres ou des occurences seules
- Donc aucune signification sématique pour nous - Donc aucune signification sématique pour nous
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
#### 4.2.2.3) Analyse particulière pour *fearwash* #### 4.2.2.3) Analyse particulière pour *fearwash*
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Focus sur le concept *fairwash* :** **Focus sur le concept *fairwash* :**
   
Ce concept n'existe pas dans PropBank et a donc été inventé par le NN. Cependant, le réseau de neurones a considéré ce concept particulier et donc de distance dimensionnelle plus éloignée que les concepts de fair/fairness. D'où, l'intérêt pour nous d'effectuer une analyse plus poussée sur ce résultat de la sortie du NN. Ce concept n'existe pas dans PropBank et a donc été inventé par le NN. Cependant, le réseau de neurones a considéré ce concept particulier et donc de distance dimensionnelle plus éloignée que les concepts de fair/fairness. D'où, l'intérêt pour nous d'effectuer une analyse plus poussée sur ce résultat de la sortie du NN.
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Total des occurrences # Total des occurrences
total = sum(count_parents_type.values()) total = sum(count_parents_type.values())
   
# Proportion de "and" # Proportion de "and"
proportion_and = count_parents_type['and'] / \ proportion_and = count_parents_type['and'] / \
total if 'and' in count_parents_type else 0 total if 'and' in count_parents_type else 0
   
# Affichage # Affichage
print(f"Proportion de 'and': {proportion_and:.2%}") print(f"Proportion de 'and': {proportion_and:.2%}")
``` ```
   
%% Output %% Output
   
Proportion de 'and': 36.25% Proportion de 'and': 36.25%
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.2.3) Analyse des liens parents AMR ( **F_tag** ) ### 4.2.3) Analyse des liens parents AMR ( **F_tag** )
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
print("lien avec le parent :") print("lien avec le parent :")
top_10_2 = sorted(count_parents_link.items(), top_10_2 = sorted(count_parents_link.items(), key=lambda x: x[1], reverse=True)[:10]
key=lambda x: x[1], reverse=True)[:10]
   
# Afficher le Top 10 # Afficher le Top 10
for key, value in top_10_2: for key, value in top_10_2:
print(f"{key}: {value}") print(f"{key}: {value}")
``` ```
   
%% Output %% Output
   
lien avec le parent : lien avec le parent :
:ARG1: 407 :ARG1: 407
:op1: 263 :op1: 263
:op2: 175 :op2: 175
:topic: 113 :topic: 113
:op3: 61 :op3: 61
:mod: 55 :mod: 55
:ARG2: 49 :ARG2: 49
:ARG1-of: 40 :ARG1-of: 40
:ARG0: 35 :ARG0: 35
:op4: 23 :op4: 23
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Total des occurrences # Total des occurrences
total = sum(count_parents_link.values()) total = sum(count_parents_link.values())
   
# Proportion de "ARG1" # Proportion de "ARG1"
proportion_ARG1 = count_parents_link[":ARG1"] / \ proportion_ARG1 = count_parents_link[":ARG1"] / \
total if ":ARG1" in count_parents_link else 0 total if ":ARG1" in count_parents_link else 0
# Proportion de ":opX" # Proportion de ":opX"
proportion_opX = (count_parents_link[":op1"] + count_parents_link[":op2"] + count_parents_link[":op3"]) / \ proportion_opX = (count_parents_link[":op1"] + count_parents_link[":op2"] + count_parents_link[":op3"]) / \
total if ":op1" in count_parents_link or ":op2" in count_parents_link or ":op3" in count_parents_link else 0 total if ":op1" in count_parents_link or ":op2" in count_parents_link or ":op3" in count_parents_link else 0
   
print(f"Proportion de ':ARG1': {proportion_ARG1:.2%}") print(f"Proportion de ':ARG1': {proportion_ARG1:.2%}")
print(f"Proportion de ':opX': {proportion_opX:.2%}") print(f"Proportion de ':opX': {proportion_opX:.2%}")
``` ```
   
%% Output %% Output
   
Proportion de ':ARG1': 31.00% Proportion de ':ARG1': 31.00%
Proportion de ':opX': 38.00% Proportion de ':opX': 38.00%
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Analyses :** **Analyses :**
- Le lien avec le parent peut aussi porter du sens. - Le lien avec le parent peut aussi porter du sens.
- opx sont en grande majorité liés à un jonction (and) ou un dijonction (or) - opx sont en grande majorité liés à un jonction (and) ou un dijonction (or)
- ARG1 est autant présent que les liens précedement. Il représente que "fair" est l'objet affecté par le parent. - ARG1 est autant présent que les liens précedement. Il représente que "fair" est l'objet affecté par le parent.
   
Lorsque l'on recherchera les voisins AMR, il faudrait donc effectuer une apparté vis-à-vis de ce lien. Lorsque l'on recherchera les voisins AMR, il faudrait donc effectuer une apparté vis-à-vis de ce lien.
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
### 4.2.4) Recherche des voisins AMR ( **V** ) ### 4.2.4) Recherche des voisins AMR ( **V** )
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
#### 4.2.4.1) Analyse générale des voisins AMR #### 4.2.4.1) Analyse générale des voisins AMR
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Ainsi, nous pouvons aller rechercher les concepts associés : Ainsi, nous pouvons aller rechercher les concepts associés :
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
neighbors = get_all_node_children(results, list_concept_tosee) neighbors = get_all_node_children(results, list_concept_tosee)
# dans neighbors[2]: # dans neighbors[2]:
# [('and', 'NA', ':instance', 'File 150'), => parent # [('and', 'NA', ':instance', 'File 150'), => parent
# ('t', 'transparency', ':op1', 'File 150')] => enfant # ('t', 'transparency', ':op1', 'File 150')] => enfant
# exemple, dans le fichier 150 le mot fairness est joint avec transparency # exemple, dans le fichier 150 le mot fairness est joint avec transparency
# Cherchons toutes ces jonctions # Cherchons toutes ces jonctions
neighbor_concepts = [] neighbor_concepts = []
for neighbor in neighbors: for neighbor in neighbors:
if neighbor: if neighbor:
parent = neighbor[0] # Le premier élément est le parent parent = neighbor[0] # Le premier élément est le parent
children = neighbor[1:] # Les éléments suivants sont les enfants children = neighbor[1:] # Les éléments suivants sont les enfants
if parent[0] == "and": if parent[0] == "and":
for child in children: for child in children:
neighbor_concepts.append(child[1]) neighbor_concepts.append(child[1])
   
# Compter les occurrences # Compter les occurrences
word_counts = Counter(neighbor_concepts) word_counts = Counter(neighbor_concepts)
pprint(word_counts) pprint(word_counts)
``` ```
   
%% Output %% Output
   
Counter({'transparency': 131, Counter({'transparency': 131,
'accountable-02': 111, 'accountable-02': 111,
'safe-01': 50, 'safe-01': 50,
'explain-01': 37, 'explain-01': 37,
'privacy': 36, 'privacy': 36,
'and': 35, 'and': 35,
'justice': 30, 'justice': 30,
'discriminate-02': 29, 'discriminate-02': 29,
'bias-01': 26, 'bias-01': 26,
'security': 26, 'security': 26,
'possible-01': 21, 'possible-01': 21,
'discriminate-01': 18, 'discriminate-01': 18,
'govern-01': 17, 'govern-01': 17,
'include-01': 17, 'include-01': 17,
'right-05': 17, 'right-05': 17,
'value': 15, 'value': 15,
'publication': 15, 'publication': 15,
'private-02': 14, 'private-02': 14,
'equal-01': 14, 'equal-01': 14,
'ethics': 14, 'ethics': 14,
'respect-01': 13, 'respect-01': 13,
'accurate': 13, 'accurate': 13,
'accuracy': 13, 'accuracy': 13,
'learn-01': 12, 'learn-01': 12,
'protect-01': 11, 'protect-01': 11,
'prevent-01': 11, 'prevent-01': 11,
'impact-01': 11, 'impact-01': 11,
'robustness': 11, 'robustness': 11,
'law': 10, 'law': 10,
'limit-01': 10, 'limit-01': 10,
'diversity': 9, 'diversity': 9,
'NA': 8, 'NA': 8,
'deserve-01': 7, 'deserve-01': 7,
'sustain-01': 7, 'sustain-01': 7,
'et-cetera': 7, 'et-cetera': 7,
'assess-01': 7, 'assess-01': 7,
'interpret-01': 7, 'interpret-01': 7,
'name': 6, 'name': 6,
'dignity': 6, 'dignity': 6,
'minimize-01': 6, 'minimize-01': 6,
'rely-01': 6, 'rely-01': 6,
'effective-04': 6, 'effective-04': 6,
'lawfulness': 6, 'lawfulness': 6,
'system': 5, 'system': 5,
'equitable': 5, 'equitable': 5,
'control-01': 5, 'control-01': 5,
'free-04': 5, 'free-04': 5,
'autonomy': 5, 'autonomy': 5,
'thing': 5, 'thing': 5,
'responsible-02': 5, 'responsible-02': 5,
'deliver-01': 5, 'deliver-01': 5,
'algorithm': 4, 'algorithm': 4,
'future': 4, 'future': 4,
'intelligibility': 4, 'intelligibility': 4,
'equity': 4, 'equity': 4,
'democracy': 4, 'democracy': 4,
'humanity': 4, 'humanity': 4,
'solidarity': 4, 'solidarity': 4,
'person': 4, 'person': 4,
'oversee-01': 4, 'oversee-01': 4,
'confidentiality': 4, 'confidentiality': 4,
'recommend-01': 4, 'recommend-01': 4,
'base-02': 4, 'base-02': 4,
'transparent': 4, 'transparent': 4,
'predict-01': 4, 'predict-01': 4,
'due-process': 3, 'due-process': 3,
'agency': 3, 'agency': 3,
'capable-01': 3, 'capable-01': 3,
'integrity': 3, 'integrity': 3,
'lawful': 3, 'lawful': 3,
'principle': 3, 'principle': 3,
'infer-01': 3, 'infer-01': 3,
'interact-01': 3, 'interact-01': 3,
'design-01': 3, 'design-01': 3,
'mitigate-01': 3, 'mitigate-01': 3,
'just-02': 3, 'just-02': 3,
'permit-01': 3, 'permit-01': 3,
'slash': 3, 'slash': 3,
'attend-02': 3, 'attend-02': 3,
'vigilant-01': 3, 'vigilant-01': 3,
'organization': 3, 'organization': 3,
'mean-01': 3, 'mean-01': 3,
'consequence-03': 3, 'consequence-03': 3,
'redress-01': 3, 'redress-01': 3,
'reliability': 3, 'reliability': 3,
'important-01': 2, 'important-01': 2,
'collaborate-01': 2, 'collaborate-01': 2,
'intelligent-01': 2, 'intelligent-01': 2,
'well-09': 2, 'well-09': 2,
'audit-01': 2, 'audit-01': 2,
'fidelity': 2, 'fidelity': 2,
'trust-01': 2, 'trust-01': 2,
'entitlement': 2, 'entitlement': 2,
'equalize-01': 2, 'equalize-01': 2,
'authority': 2, 'authority': 2,
'maleficiary': 2, 'maleficiary': 2,
'inclusiveness': 2, 'inclusiveness': 2,
'absent-01': 2, 'absent-01': 2,
'number': 2, 'number': 2,
'define-01': 2, 'define-01': 2,
'privilege-01': 2, 'privilege-01': 2,
'access-01': 2, 'access-01': 2,
'lack-01': 2, 'lack-01': 2,
'pipeline': 2, 'pipeline': 2,
'quality': 2, 'quality': 2,
'implement-01': 2, 'implement-01': 2,
'dimension': 2, 'dimension': 2,
'abstract-02': 2, 'abstract-02': 2,
'harm-01': 2, 'harm-01': 2,
'rule-03': 2, 'rule-03': 2,
'metric': 2, 'metric': 2,
'contest-02': 2, 'contest-02': 2,
'suitable-04': 2, 'suitable-04': 2,
'perform-02': 2, 'perform-02': 2,
'domain': 2, 'domain': 2,
'liable-01': 2, 'liable-01': 2,
'preserve-01': 2, 'preserve-01': 2,
'plurality': 2, 'plurality': 2,
'cooperate-01': 2, 'cooperate-01': 2,
'risk-01': 2, 'risk-01': 2,
'corporation': 2, 'corporation': 2,
'productive-03': 1, 'productive-03': 1,
'truthfulness': 1, 'truthfulness': 1,
'injure-01': 1, 'injure-01': 1,
'value-01': 1, 'value-01': 1,
'clarity': 1, 'clarity': 1,
'certainty': 1, 'certainty': 1,
'reciprocity': 1, 'reciprocity': 1,
'have-degree-91': 1, 'have-degree-91': 1,
'impartiality': 1, 'impartiality': 1,
'need-01': 1, 'need-01': 1,
'clear-06': 1, 'clear-06': 1,
'shar-e': 1, 'shar-e': 1,
'enforce-01': 1, 'enforce-01': 1,
'transpar': 1, 'transpar': 1,
'openness': 1, 'openness': 1,
'share-01': 1, 'share-01': 1,
'oversight-02': 1, 'oversight-02': 1,
'organize-01': 1, 'organize-01': 1,
'rob-01': 1, 'rob-01': 1,
'responsible-03': 1, 'responsible-03': 1,
'knowledge': 1, 'knowledge': 1,
'pluralism': 1, 'pluralism': 1,
'work-01': 1, 'work-01': 1,
'ability': 1, 'ability': 1,
'subject': 1, 'subject': 1,
'situa-tional': 1, 'situa-tional': 1,
'opportunity': 1, 'opportunity': 1,
'rency': 1, 'rency': 1,
'distribution-range-91': 1, 'distribution-range-91': 1,
'devote-01': 1, 'devote-01': 1,
'term': 1, 'term': 1,
'find-01': 1, 'find-01': 1,
'misrepresent-01': 1, 'misrepresent-01': 1,
'available-02': 1, 'available-02': 1,
'maximum': 1, 'maximum': 1,
'explainabi': 1, 'explainabi': 1,
'honesty': 1, 'honesty': 1,
'consistent-02': 1, 'consistent-02': 1,
'transpare-ncy': 1, 'transpare-ncy': 1,
'timely': 1, 'timely': 1,
'classify-01': 1, 'classify-01': 1,
'cite-01': 1, 'cite-01': 1,
'precision': 1, 'precision': 1,
'substitute-01': 1, 'substitute-01': 1,
'age-01': 1, 'age-01': 1,
'score-on-scale-91': 1, 'score-on-scale-91': 1,
'obligate-01': 1, 'obligate-01': 1,
'vulnerable-01': 1, 'vulnerable-01': 1,
'summarize-01': 1, 'summarize-01': 1,
'have-li-91': 1, 'have-li-91': 1,
'ice': 1, 'ice': 1,
'amr-unknown': 1, 'amr-unknown': 1,
'responsible-01': 1, 'responsible-01': 1,
'justifiability': 1, 'justifiability': 1,
'project': 1, 'project': 1,
'you': 1, 'you': 1,
'reasonableness': 1, 'reasonableness': 1,
'understand-01': 1, 'understand-01': 1,
'formulate-01': 1, 'formulate-01': 1,
'randomness': 1, 'randomness': 1,
'make-01': 1, 'make-01': 1,
'emotion': 1, 'emotion': 1,
'respond-01': 1, 'respond-01': 1,
'efficient-01': 1, 'efficient-01': 1,
'found-01': 1, 'found-01': 1,
'explicate-01': 1, 'explicate-01': 1,
'comply-01': 1, 'comply-01': 1,
'exemplify-01': 1, 'exemplify-01': 1,
'affect-01': 1, 'affect-01': 1,
'factuality': 1, 'factuality': 1,
'anthropomorphize-01': 1, 'anthropomorphize-01': 1,
'zugutekommen': 1, 'zugutekommen': 1,
'calibrate-01': 1, 'calibrate-01': 1,
'decide-01': 1, 'decide-01': 1,
'fire-02': 1, 'fire-02': 1,
'use-01': 1, 'use-01': 1,
'do-02': 1, 'do-02': 1,
'describe-01': 1, 'describe-01': 1,
'surveil-01': 1, 'surveil-01': 1,
'intelligible': 1, 'intelligible': 1,
'align-01': 1, 'align-01': 1,
'page': 1, 'page': 1,
'likelihood': 1, 'likelihood': 1,
'significant-02': 1, 'significant-02': 1,
'data': 1, 'data': 1,
'society': 1, 'society': 1,
'identify-01': 1, 'identify-01': 1,
'inclusive': 1, 'inclusive': 1,
'foster-01': 1, 'foster-01': 1,
'other': 1, 'other': 1,
'artificial': 1, 'artificial': 1,
'section': 1, 'section': 1,
'cybersecurity': 1, 'cybersecurity': 1,
'malice': 1, 'malice': 1,
'ensure-01': 1, 'ensure-01': 1,
'prosper-01': 1, 'prosper-01': 1,
'economy': 1, 'economy': 1,
'information': 1, 'information': 1,
'matter': 1, 'matter': 1,
'transgender': 1, 'transgender': 1,
'accountability': 1, 'accountability': 1,
'social-03': 1, 'social-03': 1,
'benefit-01': 1, 'benefit-01': 1,
'practice-01': 1, 'practice-01': 1,
'increase-01': 1, 'increase-01': 1,
'consent-01': 1, 'consent-01': 1,
'instead-of-91': 1, 'instead-of-91': 1,
'empower-01': 1, 'empower-01': 1,
'engage-01': 1, 'engage-01': 1,
'reduce-01': 1, 'reduce-01': 1,
'power': 1, 'power': 1,
'analyze-01': 1, 'analyze-01': 1,
'legal-02': 1, 'legal-02': 1,
'secure-02': 1}) 'secure-02': 1})
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Analyses :** **Analyses :**
   
Plus de la moitié des concepts associés portent sur la possibilité de comprendre : Plus de la moitié des concepts associés portent sur la possibilité de comprendre :
- 'transparency': 131 - 'transparency': 131
- 'accountable-02': 111 - 'accountable-02': 111
- 'explain-01': 37 - 'explain-01': 37
   
On peut en déduire que fairness est en effet un but mais qu'on ne peut y parvenir sans comprendre le fonctionnement (explicabilité). On peut en déduire que fairness est en effet un but mais qu'on ne peut y parvenir sans comprendre le fonctionnement (explicabilité).
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
#### 4.2.4.2) Analyse des voisins AMR important pour le lien ARG1 #### 4.2.4.2) Analyse des voisins AMR important pour le lien ARG1
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
Si opx a pû être facilement ressortir lors de l'analyse du corpus via le POS tagging, nous allons étudier plus attentivement le lien ARG1. Si opx a pû être facilement ressortir lors de l'analyse du corpus via le POS tagging, nous allons étudier plus attentivement le lien ARG1.
   
Ce qui signifie que "fair" est l'objet affecté par le parent. Ce qui signifie que "fair" est l'objet affecté par le parent.
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
countwordsarg1 = dict() countwordsarg1 = dict()
for index, list_parents in parents.items(): for index, list_parents in parents.items():
for word_fair, list_parents in list_parents.items(): for word_fair, list_parents in list_parents.items():
for parent in list_parents: for parent in list_parents:
if parent[2] == ":ARG1": if parent[2] == ":ARG1":
if parent[1] in countwordsarg1: if parent[1] in countwordsarg1:
countwordsarg1[parent[1]] += 1 countwordsarg1[parent[1]] += 1
else: else:
countwordsarg1[parent[1]] = 1 countwordsarg1[parent[1]] = 1
   
print("concept utilisé avec :ARG1 :") print("concept utilisé avec :ARG1 :")
top_10_arg1 = sorted(countwordsarg1.items(), top_10_arg1 = sorted(countwordsarg1.items(), key=lambda x: x[1], reverse=True)[:10]
key=lambda x: x[1], reverse=True)[:10]
   
# Afficher le Top 10 # Afficher le Top 10
for key, value in top_10_arg1: for key, value in top_10_arg1:
print(f"{key}: {value}") print(f"{key}: {value}")
   
cleaned_countwordsarg1 = {} cleaned_countwordsarg1 = {}
for key, value in countwordsarg1.items(): for key, value in countwordsarg1.items():
# Utiliser une regex pour enlever `-01`, `-02`, etc. # Utiliser une regex pour enlever `-01`, `-02`, etc.
base_key = re.sub(r"-\d+$", "", key) base_key = re.sub(r"-\d+$", "", key)
cleaned_countwordsarg1[base_key] = cleaned_countwordsarg1.get( cleaned_countwordsarg1[base_key] = cleaned_countwordsarg1.get(
base_key, 0) + value base_key, 0) + value
   
# nuage de mots # nuage de mots
wordcloud = WordCloud( wordcloud = WordCloud(
width=800, width=800,
height=400, height=400,
background_color="white", background_color="white",
colormap="viridis" colormap="viridis"
).generate_from_frequencies(cleaned_countwordsarg1) ).generate_from_frequencies(cleaned_countwordsarg1)
   
# Afficher le nuage de mots # Afficher le nuage de mots
plt.figure(figsize=(10, 5)) plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear") plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off") # Supprime les axes plt.axis("off") # Supprime les axes
plt.show() plt.show()
``` ```
   
%% Output %% Output
   
concept utilisé avec :ARG1 : concept utilisé avec :ARG1 :
define-01: 57 define-01: 57
ensure-01: 31 ensure-01: 31
realize-01: 23 realize-01: 23
assess-01: 16 assess-01: 16
source-02: 12 source-02: 12
evaluate-01: 10 evaluate-01: 10
measure-01: 10 measure-01: 10
discuss-01: 8 discuss-01: 8
consider-02: 8 consider-02: 8
achieve-01: 8 achieve-01: 8
   
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
**Analyses :** **Analyses :**
   
Des mots ressortent forcement ; notamment : "define", "realize", "ensure". Des mots ressortent forcement ; notamment : "define", "realize", "ensure".
   
Une traduction possible par nous serait : Une traduction possible par nous serait :
- "Définir l'équité" (ou "definition de l'équité" [trouver fair-01 et define-01]) - "Définir l'équité" (ou "definition de l'équité" [trouver fair-01 et define-01])
- "garantir l'équité" (même remarque) - "garantir l'équité" (même remarque)
- etc. - etc.
   
......
File added
File added
File added
File added
File added
### INSTALLATION
#1- Graphviz
#** Installer Graphviz
#** Mettre Graphviz dans le PATH
PATH=C:\Logiciel\_prog\Graphviz\bin;%PATH%
#2- metamorphosed
#** Préparation dépôt GIT
git clone https://github.com/Orange-OpenSource/metamorphosed.git
virtualenv venv
.\venv\Scripts\activate
cd metamorphosed
python -m pip install --upgrade pip setuptools wheel
#** Installation prérequis
# python -m pip install -r requirements.txt
#Pb install de smatchcpp, installation manuelle :
python -m pip install pytest werkzeug Flask Flask-Cors graphviz Penman GitPython PyYAML requests rdflib oxrdflib
#** Installation module smatchpp
cd ..
git clone https://github.com/flipz357/smatchpp.git
cd smatchpp
# Edit setup .py
# =>long_description = (this_directory / "README.md").read_text(encoding='utf-8')
python setup.py install
#** Récupération AMR concept pour PropBank
cd propbank-frames\frames
curl https://raw.githubusercontent.com/propbank/propbank-frames/development/frames/AMR-UMR-91-rolesets.xml -o AMR-UMR-91-rolesets.xml
cd ../..
#** Installation metamorphosed
python metamorphosed\installJQ.py
#** Correction metamorphosed pour Windows :
python -m pip install pyreadline3
# Remplacer "import readline" dans les fichiers par :
# => amreditor.py
# => relations_constraints.py
from pyreadline3 import Readline
readline = Readline()
#** Sécurité :
# Remplacer '0.0.0.0' par '127.0.0.1' dans le fichier metamorphosed/__init__.py
### EXECUTION :
python metamorphosed_server.py --file amr-test.txt --pbframes propbank-frames/frames --readonly
# exemple :
metamorphosed_server.py --file amr-test.txt \
--pbframes propbank-frames/frames \
--reification reification-table.txt \
--relations amr-relation-list.txt \
--concepts amr-concept-list.txt \
--constraints constraints.yml
### TEST utilisation en local
import metamorphosed.amrdoc as amrdoc
filename = 'key_penmans.amr'
a = amrdoc.AMRdoc(filename)
a.getsentencelist()
a.sentences[0].amr
a.sentences[0].tsv()
=>penman.decode(self.amr)
>>> a.sentences[0].text
'First of all, how can existing regulations or new ones facilitate algorithmic accountability or fairness?'
>>> a.sentences[0].comments
['File 167']
>>> a.sentences[0].amr
amrdoc.stats([a], args.conceptlist)
amrdoc.relations_between_concepts([a], depth=1)
amrdoc.stats([a], ['fearness'])
####
armdoc.py
Remplacer ServerException par Exception
amrdoc.stats([a], ['fearness'])
# sentences: 1201
# relations: 55 mean: 431.07 median: 43
# concepts: 2289 mean: 12.26 median: 2
# verbs: 1228 mean: 10.40 median: 3
# others: 1061 mean: 14.42 median: 2
'face-01', 'facet', 'facilitate-01', 'facility', 'fact', 'factor', 'factor-01', 'fail-01', 'fair-01', 'fairness', 'fairwash-01', 'fall-01', 'fall-04', 'fallacy', 'familiarize-01', 'fatality', 'feasibility', 'feature', 'feature-01', 'federate-01', 'feed-01', 'feed-02', 'feedback', 'feel-01', 'few', 'fidelity', 'field', 'fight-01', 'figure', 'fill-01', 'fill-in-05', 'find-01', 'find-02', 'fine-04', 'fire-02', 'firm', 'fit-01', 'fit-03', 'fit-06', 'fix-03', 'flaw-01', 'flexibility', 'flow-01', 'focus-01', 'follow-01', 'follow-02', 'follow-04', 'follow-through-07', 'foresee-01', 'foreword', 'forgive-01', 'form', 'form-01', 'formalize-01', 'formula', 'formulate-01', 'foster-01', 'found-01', 'foundation', 'frame', 'frame-06', 'framework', 'free-04', 'frequent-02', 'friendly-01', 'from', 'fulfill-01', 'full-09', 'fun-01', 'function', 'function-01', 'functional-03', 'fund', 'fund-01', 'furnish-01', 'fuse-01', 'future',
c=amrdoc.relations_between_concepts([a])
d=[x.split('\t') for x in c]
print(tabulate([x.split('\t') for x in c], tablefmt='pipe'))
print(tabulate([x.split('\t') for x in amrdoc.relations_between_concepts([a], depth=2)], tablefmt='pipe'))
c1 = [x.split('\t') for x in amrdoc.relations_between_concepts([a], depth=1)]
concepts = set(x[0] for x in c1)
stat_concept = dict.fromkeys(sorted(concepts), 0)
for x in c1:
stat_concept[x[0]] = int(x[1])
c2=[x.split('\t') for x in amrdoc.relations_between_concepts([a], depth=2)]
relations = set(x[0] for x in c2) - concepts
stat_relation = dict.fromkeys(sorted(relations), 0)
stat_concept_relation = dict.fromkeys(sorted(concepts), {})
tmp_concept = list(stat_concept_relation.keys())[0]
for x in c2:
if len(x) == 1 and x[0] in concepts: # C'est un concept
tmp_concept = x[0]
stat_concept_relation[tmp_concept] = dict.fromkeys(sorted(relations), 0)
continue
if len(x) > 1: # C'est une relation associé au concept précédant
stat_relation[x[0]] += int(x[1])
stat_concept_relation[tmp_concept][x[0]] = int(x[1])
# print(tabulate(stat_concept_relation.values(), showindex=list(stat_concept_relation.keys()), headers='keys', tablefmt='pipe'))
list_concept_tosee = ['fair-01', 'fairness', 'fairwash-01']
list_relation_tosee = set([y for x in list_concept_tosee for y in stat_concept_relation[x] if stat_concept_relation[x][y] != 0])
filtre = dict.fromkeys(list_concept_tosee, {})
tmp = {x: {y.strip(): stat_concept_relation[x][y] for y in list_relation_tosee} for x in list_concept_tosee}
print(tabulate(tmp.values(), showindex=list_concept_tosee, headers='keys', tablefmt='pipe'))
print(tabulate([x.split('\t') for x in c], tablefmt='pipe'))
['fair-01']
[' :ARG0', '5']
[' :ARG1', '156']
[' :ARG2', '6']
[' :ARG3', '1']
[' :ARG4', '1']
[' :condition', '6']
[' :degree', '1']
[' :domain', '1']
[' :location', '3']
[' :manner', '5']
[' :mod', '13']
[' :polarity', '58']
['fairness']
[' :ARG3', '1']
[' :beneficiary', '2']
[' :domain', '5']
[' :example', '1']
[' :li', '2']
[' :location', '5']
[' :manner', '6']
[' :mod', '105']
[' :polarity', '42']
[' :poss', '15']
[' :prep-in', '9']
[' :prep-on', '1']
[' :quant', '1']
[' :source', '1']
[' :time', '1']
[' :topic', '10']
['fairwash-01']
[' :ARG0', '1']
[' :ARG1', '1']
[' :manner', '1']
PATH=C:\Logiciel\_prog\Graphviz\bin;%PATH%
cd Projet_NLP_AMR\AMR\
venv\Scripts\activate
import metamorphosed.propbank_frames as propbank_frames
import metamorphosed.amrdoc as amrdoc
v = propbank_frames.PropBankFrames('propbank-frames/frames')
filename = 'key_penmans.amr'
a = amrdoc.AMRdoc(filename)
l = a.validate([v])
# Ou avec la version corrigé sur le GIT mapaie :
l = a.validate_dict([v])
This diff is collapsed.
amrdoc.stats([a], True)
# sentences: 1201
# relations: 55 mean: 431.07 median: 43
# concepts: 2289 mean: 12.26 median: 2
# verbs: 1228 mean: 10.40 median: 3
# others: 1061 mean: 14.42 median: 2
\ No newline at end of file
or 231
algorithm 217
amr-unknown 91
first-of-all 2
organization 177
name 1164
and 2017
fairness 917
person 659
human 166
individual 76
section 38
multi-sentence 288
program 10
enterprise 2
country 56
mechanism 17
transparency 216
principle 207
common 17
ordinal-entity 27
way 29
many 31
gender 13
example 8
diverse 9
opportunity 18
demography 5
outcome 60
distinctive 1
very 8
we 107
everyone 2
thing 308
privacy 103
beyond 13
physician 1
professional 10
medicine 6
data 268
security 70
considerable 2
already 7
another 8
team 34
robot 7
paper 10
some 29
machine 96
insucient 2
also 86
context 60
accurate 51
always 4
benevolence 1
inherent 6
metric 18
other 77
strategy 12
task 9
ethics 141
artificial 385
corporation 5
large 10
state 18
current 18
initiative 7
method 20
district 2
system 306
partisanship 1
map 3
aspect 18
technical 68
evolution 1
multiple 16
space 5
this 185
adequate 6
framework 46
too 3
more 87
notion 16
algorithmic 12
big 15
due-process 4
time 8
role 9
it 43
tension 6
any 26
between 17
threshold 4
criteria 33
project 26
publication 325
part 18
table 9
subject 18
contingency 6
confidential 2
diversity 27
result 9
robust 9
solution 8
resilience 3
business 21
large-scale 3
yes 2
no 2
purpose 22
dataset 21
database 3
body 7
in-house 2
slash 24
origin 1
culture 13
et-cetera 27
model 64
process 2
research-institute 11
variable 14
government-organization 52
date-entity 204
tutorial 1
culinary 1
you 78
further 8
party 9
case 10
matrix 2
operation 1
final 4
random 4
accessibility 1
audience 1
all 46
from 3
outset 2
customer 1
law 119
baseline 1
core 5
set 32
perspective 19
interdisciplinary 9
science 8
computer 13
fundamental 14
director 1
expertise 6
concept 27
just 5
outside 5
field 9
society 88
value-interval 31
url-entity 71
such 19
information 39
certain 20
input 12
tool 40
they 40
behind 2
secrecy 2
in-turn 2
federal 11
consideration 1
application 23
tandem 1
so 8
justice 54
phase 9
scope 9
future 15
artificial-intelligence 8
intelligibility 5
mathematics 10
statistics 11
facility 2
community 23
continent 8
value 86
truthfulness 1
upfront 1
i 8
around 3
world 19
of-course 2
imperative 1
technology 53
place 7
industry 18
academia 10
technique 10
potential 44
systematic 5
underway 1
vital 2
conference 58
temporal-quantity 11
year 11
product 69
digital 9
broad 2
era 1
clarity 1
certainty 4
both 3
sector 27
especially 8
device 1
problem 23
contract 1
situation 14
symmetric 1
gap 3
market 5
public 22
prior 4
heuristics 1
reciprocity 1
equity 11
clause 1
duty 4
environment 17
great 12
constant 1
several 12
asymmetry 3
interest 3
guideline 13
over 2
well 4
to-date 1
here 5
extent 3
page 14
classic 1
term 9
often 20
most 33
sense 3
transparent 17
label 4
sensor 2
interface 2
implicit 2
social 14
indicator 1
identifier 1
level 33
robustness 30
minimum 3
member 21
she 4
company 80
condition 5
previous 7
history 5
group 72
mechanics 1
reason 6
architect 2
rule 6
parameter 6
area 20
journal 17
planet 8
democracy 14
entity 5
vertrauenswrdige 1
ethnic-group 5
zugute 1
male 4
Werte 1
verstndlich 1
stellen 1
verantwortlichen 1
trustworthy 11
objective 9
various 14
literature 7
much 9
instrumental 1
date-interval 4
event 9
virtual 2
immediate 3
philosophy 5
basic 8
dignity 18
inclusion 1
background 5
impartiality 1
agency 29
anxiety 1
full 11
particular 27
transgender 2
manual 3
theme 14
entitlement 3
transpar 7
document 10
percentage-entity 43
generosity 1
bene 2
autonomy 36
solidarity 8
keyword 1
humanity 4
shar-e 1
parity 6
generative 4
prominence 1
each 16
backgr 1
documentumen 1
top 2
equitable 11
documen 2
openness 1
cyber 1
race 4
sexuality 1
bo 1
fact 8
central 4
number 23
coefficient 2
fidelity 3
corpus 1
entire 5
knowledge 1
pluralism 2
globe 9
mass 1
emana 1
piece 2
next 4
chap 2
through 3
checklis 4
under 7
stand 1
among 1
alone 3
together 9
within 1
criterion 1
stage 12
dang 1
there 3
difficult 13
richness 1
word 1
string-entity 11
thr 1
article 11
enough 3
piano 1
affirmative-action 2
lot 1
resource 8
treatman 1
line 3
extreme 2
ability 1
deplo-ymen 1
explana- 1
transpar-ent 1
consen-t 1
situa-tional 1
across 15
platform 13
that 12
profile 3
political-party 4
minutia 1
only 7
overview 3
vel 1
code 7
again 12
norm 10
heading 1
severe 1
ecosystem 3
as-well 1
measur-e 1
drawback 1
truth-value 10
measur 1
one 3
authority 8
collective 4
emotion 3
religion 2
status 3
economy 14
ques 1
frame 2
today 2
gamut 1
storage 1
integrity 9
confidentiality 8
consensus 4
report 10
chapter 11
end 6
rigorous 1
in-place 4
force 1
vironmental 1
series 4
course 1
workshop 5
stake 14
civil 4
international 13
essential 5
power 5
circuit 2
committee 3
domain 12
lawful 8
rency 1
transpa 1
external 11
stewardship 1
theory 1
top-down 1
utilitarianism 1
contractarianism 1
Kantianism 1
unique 1
toolkit 10
index 12
sovereign 1
lifecycle 11
inadvertent 2
maleficiary 2
skill 3
whole 4
constraint 7
accuracy 24
module 1
inclusiveness 2
intrinsic 3
property 8
form 11
type 22
politics 10
compatible 7
ion 1
odology 1
meth 1
cost 6
deficiency 2
in-fact 4
absolute 1
less 5
past 4
flagship 1
variety 2
simultaneous 5
even 8
procedure 15
logic 2
additional 5
category 6
main 4
output 14
proper 8
sometimes 8
version 4
alternative 2
documentation 2
health 5
before 13
content 10
feature 15
rhetoric 1
al 1
rigor 3
precise 4
topic 8
comprehensive 2
trivial 1
usual 7
city 14
criminal 8
psychometrics 1
false 5
ultimate 4
matter 8
lesson 3
extra 5
nutshell 1
error 9
class 2
awareness 4
classifier 1
maximum 1
therefore 1
statistician 1
scientist 9
sociology 3
instrument 6
explainabi 1
honesty 1
left-handed 1
language 5
foreign 1
movie 1
few 5
numerous 4
methodology 4
institution 7
conceptual 3
complex 7
verifiable 1
after 4
colleague 2
recent 5
bias 8
subjective 2
transpare-ncy 1
timely 1
Proceedings 5
court 2
standard 27
disproportionate 1
idea 8
population 13
architecture 4
nuances 3
scale 4
speed 2
plain 2
success 2
weight 4
income 2
likelihood 3
rate 11
scenario 2
citizen 11
smartphone 2
e-commerce 2
media 2
detail 2
network 3
structure 7
every 9
throughout 5
element 14
emergency 2
pathway 4
art 6
insight 5
blatant 4
dynamic 6
function 4
loop 4
automatic 3
even-when 3
and_11 2
rapid 4
bill 2
positive 10
negative 2
third-party 2
software 8
prerequisite 2
secure 2
precision 2
wide 2
tier 1
horizontal 1
trail 1
medium 1
welfare 2
poor 1
onus 1
car 5
craft 2
air 2
barrier 7
adverse 5
ethicist 3
bureaucracy 2
artificial_instrument 4
aircraft 2
equipment 2
physical 3
complexity 9
evidence 4
fund 2
cybersecurity 3
intrusive 1
still 3
factor 2
original 4
above 8
at-least 5
lawfulness 6
finance 9
accountability 3
monetary 1
jurisdiction 1
domestic 1
work-of-art 1
ice 1
pipeline 6
causality 3
instance 3
book 3
analytics 1
messiness 1
systemic 2
reality 1
entry 1
outlier 1
format 1
discipline 1
university 12
boundary 3
treaty 3
intellectual 2
safeguard 4
design 1
quality 9
certificate 5
kite-mark 1
competitiveness 2
ever 2
woman 2
imbalance 1
champion 1
job 3
degree 4
more-than 2
state-of-the-art 2
service 9
intermediation 1
online 1
preliminary 2
first 2
reliability 8
trace 1
opaqueness 1
block 2
ground-up 1
means 10
goal 8
justifiability 1
reasonableness 2
juncture 1
plane 1
equivalent 1
initial 5
anyone 1
crucial 6
being 8
bullet 1
silver 1
strict 3
self 3
component 3
pattern 1
life 5
workflow 3
target 2
raw 1
due 1
proxy 3
forethought 1
below 3
feasibility 3
heavy 1
multidisciplinary 1
formal 7
list 2
base 1
agent 1
picture 1
statistic 1
proportion 2
odds 2
disadvantage 2
fraction 1
probability 2
counterfactual 6
circumstantial 1
out 1
disparate 10
thorough 2
association 2
source 6
rationale 4
confidence 2
path 3
end-to-end 7
peer 2
schematic 1
downstream 1
proactive 3
dimension 11
column 2
department 1
point 5
semantics 2
interval 1
location 3
criter 2
log 1
stakeholder 2
guide 5
protocol 2
randomness 1
formula 1
cloud 1
road 2
opaque 1
substantial 5
hand 1
mental 1
search-engine 1
faith 1
down 1
primary 5
he 1
indeed 1
shortcut 1
object 2
quite 1
respect 2
agenda 2
evident 1
moment 1
inscrutable 1
anything 1
last 1
criticism 1
commerce 3
vigi 1
lance 1
intelligible 3
oft 1
opacity 1
latter 1
provision 1
nation 9
lifestyle 1
generation 1
age 1
roundtable 1
school 3
man 2
arm 2
substantive 2
proportionality 2
careful 4
gui 1
cycle 2
ethnicity 2
quantitative 1
panacea 1
now 4
early 4
spectrum 1
tone 4
skin 7
doctor 3
feedback 1
mind 1
disease 1
region 3
text 2
image 2
artifact 1
card 3
factuality 1
trait 1
animate 1
adversarial 1
library 2
synthetic 3
top-of-mind 1
chain 1
zugutekommen 1
geschtzt 1
vertrauenswrdig 1
personality 1
unconscious 2
energy 1
technologist 1
independent 1
strand 1
impartial 1
subgroup 2
off 1
tradition 1
versus 6
truth 1
ground 1
ratio-of 2
paradigm 3
productio 2
prospective 1
figure 1
heart 4
right 1
optimal 1
priority 5
forward 4
vehicle 1
autonomous 1
lens 3
convenience 1
remote 1
proportional 1
site 2
ahead 1
day 4
weapon 1
box 5
discrepancy 1
study 3
angle 2
exact 1
almost 2
flexibility 1
someone 1
enormous 1
auxiliary 1
healthcare 6
overall 3
universal 3
statistical 3
qualitative 2
blackbox 1
theoretical-condition 1
sparsity 1
general-purpose 1
upstream 1
vibrant 1
face 2
benchmark 1
everyday 1
eraser 1
sledgehammer 1
pillar 2
ity12 1
radiologist 1
patient 17
note 3
circumstance 1
candidate 1
artificial-physical 1
crowd 1
and-or 3
propaganda 1
liberty 1
humankind 1
inclusive 3
volume 1
worldwide 1
differential 1
cryptography 1
computational 2
sophisticated 2
cross-disciplinary 2
intelligence 3
accident 3
foreword 1
subsequent 1
holistic 1
up-to 2
viewpoint 1
step 1
minority 4
marketplace 1
direction 1
so-called 2
bioethic 1
deep-learning 1
readmission 1
violence 1
situational 1
et-al 1
equal 1
scoping 1
checklist 1
economics 1
manner 1
favoritism 1
period 4
firm 4
oversight 1
malice 1
drone 1
factory 1
integral 1
center 2
talent 1
monetary-quantity 3
dollar 2
pound 1
edition 1
award 1
gas 1
greenhouse 1
net 1
by 4
capital 1
healthy 2
y 1
contentious 1
literacy 2
incident 2
haphazard 1
officer 1
chief 1
de-facto 1
custom 3
then 5
personnel 2
opera 1
ring 1
fruitful 1
adequacy 1
young 2
old 1
sand 1
disagr-eemen 1
stem 1
ethic 1
directive 2
questionnaire 1
principal 1
mark 1
joint 1
sandbox 1
at-scale 1
conti-nuous 1
sound 1
foundation 2
immense 2
collateral 3
upon 1
subsystem 1
demographics 1
intuitive 2
facet 1
controversy 4
contemporary 1
mutual 2
good 1
penalty 1
cookie 1
kind 1
since 1
definitive 1
gravity 1
recidivism 3
pact 1
im 1
tactic 1
subjec 1
once 1
ex-post- 1
bear 1
wide-scale 1
order 1
caveat 2
al-so 1
sole 1
amr-choice 1
ideal 1
domai 2
brief 1
secondary 1
genuine 1
yet 1
skewer 1
newspaper 1
fallacy 1
distributive 1
vol 1
magazine 1
adversary 1
no-longer 1
cluster 1
infrastructure 1
externality 2
border 2
plurality 2
research 1
fatality 1
traffic 1
artificial-physical-intelligence 1
charter 1
thereby 1
everybody 1
meaningful 1
nature 1
husband 2
ensemble 1
sex 1
color 1
genetics 2
membership 1
disability 1
unseemly 1
statute 1
ethical 1
unscrupulous 1
bus 1
penumbra 1
startup 1
spirit 1
entrepreneurial 1
fiduciary 1
quantity 1
massive 1
near 1
precedent 1
workforce 1
at-large 1
partnership 1
availability 1
sovereignty 1
summer 1
benefit 1
paragraph 1
anonymity 1
stock 2
website 1
sort 1
exhaustive 1
express 1
thoughtful 1
candid 1
margin 1
le 1
anyway 1
detective 1
attitude 1
technocratic 1
forefront 1
definite 1
at-all 1
primer 1
clinician 1
trust 1
financial 1
File added
:ARG1 8939
:ARG0 3511
:mod 3017
:manner 334
:name 1171
:polarity 547
:ARG2 2175
:li 292
:location 244
:domain 208
:ord 26
:value 163
:quant 229
:poss 262
:topic 443
:example 174
:degree 57
:time 399
:condition 59
:source 26
:purpose 267
:instrument 46
:ARG3 282
:ARG6 5
:ARG4 110
:consist 67
:medium 46
:year 198
:mode 20
:beneficiary 26
:prep-as 7
:ARG7 43
:month 55
:prep-under 5
:subevent 21
:path 3
:frequency 38
:unit 15
:prep-with 3
:concession 18
:part 54
:day 41
:prep-to 9
:prep-in 13
:duration 11
:destination 1
:direction 9
:prep-against 2
:polite 1
:ARG5 7
:extent 3
:prep-on 2
:accompanier 2
:ARG8 2
:season 1
File added
possible-01 452
facilitate-01 13
regulate-01 64
exist-01 26
new-01 28
accountable-02 186
fair-01 338
shed-light-10 2
enable-01 21
devise-01 2
develop-02 164
decide-01 152
automate-01 47
respect-01 52
right-05 95
discriminate-02 112
intend-01 22
cause-01 124
prohibit-01 3
describe-01 100
initiate-01 6
govern-01 88
increase-01 38
use-01 211
simple-02 6
glance-01 1
contrast-01 79
see-01 25
rise-01 6
equal-01 51
blind-02 1
recommend-01 179
conclude-01 6
need-01 75
include-01 110
discuss-01 44
mean-01 145
deserve-01 15
trust-01 20
gain-02 4
important-01 49
advantage-01 5
approach-02 46
center-01 19
experience-01 2
issue-02 71
critical-02 9
bias-01 162
private-02 25
sensitive-03 10
result-01 35
regard-01 7
productive-03 4
perceive-01 9
present-01 9
employ-01 8
give-01 9
manage-01 19
evidence-01 5
competent-01 5
justify-01 13
position-02 3
superior-01 1
counter-01 2
underline-01 1
author-01 7
bind-01 5
impact-01 65
draw-02 8
attend-02 13
object-01 1
trade-01 13
apply-02 84
explore-01 15
risk-01 77
employ-02 5
perform-02 36
involve-01 34
control-01 39
become-01 4
intelligent-01 351
wide-02 13
examine-01 8
determine-01 25
vote-01 1
challenge-01 36
question-01 30
affect-01 45
elect-01 2
draw-01 1
parallel-01 1
try-01 7
sample-01 3
partition-01 1
argue-01 3
address-02 36
focus-01 35
harmful-02 8
have-degree-91 108
narrow-02 2
capture-01 1
range-01 20
full-09 2
suit-01 4
amplify-01 3
same-01 22
consist-01 7
arbitrate-01 1
establish-01 34
limit-01 30
specify-01 5
explain-01 140
refer-03 3
case-04 29
depend-01 22
cite-01 111
consider-02 91
protect-01 66
specific-02 45
implement-01 48
personal-02 38
measure-01 26
prevent-01 45
model-01 15
rely-01 29
process-01 56
disclose-01 5
operate-01 48
deploy-01 42
include-91 67
have-purpose-91 13
require-01 81
embed-01 12
train-01 34
learn-01 95
public-02 28
charge-08 1
relate-01 51
lack-01 18
access-01 37
defend-01 6
white-03 1
contain-01 5
submit-01 2
assess-01 77
post-01 2
publication-91 120
exemplify-01 53
design-01 132
validate-01 9
relevant-01 37
minimize-01 22
introduce-02 14
test-01 38
work-01 43
identify-01 46
integrate-01 7
consider-01 10
build-01 22
policy-01 27
promote-02 42
clear-06 13
trust-02 10
consume-01 15
incorporate-01 3
make-01 44
ensure-01 124
utilize-01 4
base-02 74
account-01 11
curate-01 2
well-09 24
verify-01 9
extensive-03 3
alert-01 3
implicate-01 13
mitigate-01 22
call-03 8
state-01 10
support-01 38
conduct-01 6
research-01 67
bring-01 8
have-org-role-91 37
produce-01 18
realize-01 31
understand-01 63
know-01 12
incorporate-02 7
legal-02 25
obscure-01 1
claim-01 6
analyze-01 43
appropriate-02 34
audit-01 30
weigh-01 2
begin-01 10
evaluate-01 35
inform-01 10
develop-01 2
do-02 16
tight-05 3
oversee-01 14
follow-01 7
complain-01 4
report-01 16
desire-01 8
have-03 47
guide-01 20
broad-02 17
embrace-01 2
safe-01 101
improve-01 15
capable-01 26
collect-01 11
track-01 1
source-01 7
foster-01 4
discriminate-01 39
call-01 5
set-08 2
nurture-01 1
create-01 32
unify-01 4
put-01 5
follow-through-07 1
comply-01 33
injure-01 3
behave-01 13
reasonable-02 6
resemble-01 23
treat-01 21
found-01 8
solve-01 16
start-01 7
choose-01 25
arise-02 9
continue-01 19
detect-01 10
represent-01 15
document-01 10
originate-01 4
characteristic-02 7
promise-01 6
raise-01 9
effort-01 13
highlight-01 10
rate-entity-91 9
flow-01 8
credit-02 3
serve-01 20
regardless-91 6
mention-01 3
explicit-03 8
grapple-01 1
value-01 4
labor-01 2
aim-01 13
provide-01 59
share-01 20
hold-01 11
private-03 11
generate-01 4
link-01 6
sense-01 6
emerge-02 6
compete-01 13
agree-01 6
distribute-01 6
close-02 1
infer-01 10
fill-in-05 1
propose-01 27
transact-01 2
interest-01 16
inflate-01 1
believe-01 11
expect-01 12
over-03 2
act-02 22
dominate-01 1
relation-03 7
obligate-01 65
impose-01 4
worth-02 7
recall-02 1
conducive-01 1
reduce-01 17
enforce-01 23
fill-01 2
publish-01 11
differ-02 88
near-02 1
prioritize-01 11
practice-01 41
exhibit-01 1
high-02 23
organize-01 6
pertain-01 2
subsume-01 1
emphasize-01 6
process-02 41
refer-01 13
reproduce-01 5
interpret-01 19
assign-01 3
responsible-03 18
indicate-01 8
trade-off-02 19
review-01 35
label-01 3
broaden-01 1
typical-02 5
frame-06 2
go-02 1
classify-01 24
demand-01 4
carry-01 1
show-01 12
rate-01 2
satisfy-01 6
have-rel-role-91 8
investigate-01 6
find-01 23
contract-02 4
supply-01 2
fulfill-01 3
source-02 22
skew-01 1
observe-01 7
survive-01 1
change-01 10
reuse-01 1
benefit-01 28
rust-01 1
uphold-01 7
secure-02 13
say-01 12
kommen-00 1
wahren-00 1
voluntary-02 2
betrieb-00 1
set-out-06 5
appear-02 7
have-concession-91 20
guarantee-01 9
pursue-01 4
enhance-01 11
make-18 9
act-01 6
notable-04 4
intertwine-01 1
deep-02 5
allow-01 12
exercise-01 2
subject-02 5
ready-02 3
undergo-28 1
maximize-01 8
enjoy-01 1
sustain-01 18
prejudice-01 4
subject-01 8
key-02 32
pronounced-02 1
lead-03 17
confident-01 4
absent-01 7
remedy-01 8
effective-04 19
associate-01 11
low-04 8
mirror-01 1
add-02 10
code-01 5
indify-01 1
come-up-13 2
appear-01 4
responsible-02 27
free-04 15
spare-01 1
collaborate-01 7
extract-01 5
define-01 107
oversight-02 1
likely-01 6
predict-01 38
crime-02 1
output-00 1
correlate-01 3
good-02 36
wrong-02 3
go-08 3
proliferate-01 1
black-05 4
come-01 4
zoom-01 1
concepute-01 1
rob-01 1
right-06 2
help-01 34
avoid-01 15
engineer-01 6
be-temporally-at-91 5
sour-02 1
single-02 3
converge-01 2
seem-01 3
shape-01 4
concern-01 37
neglect-01 1
local-02 8
score-01 8
surveil-01 2
cycle-02 7
safeguard-01 9
available-02 12
threaten-01 8
enrich-01 1
social-03 6
aise-02 1
light-07 1
walk-01 1
stand-11 4
want-01 5
uncover-01 4
sear-01 1
fascinate-01 1
be-located-at-91 23
burgeon-01 1
paraphrase-01 1
seek-01 14
ensur-01 2
recognize-02 9
overcome-01 2
proceed-01 9
opine-01 8
envision-01 3
quote-01 5
complete-02 3
necessitate-01 4
drop-05 1
conceive-01 2
ask-02 1
instead-of-91 15
converse-01 1
hear-01 1
adjust-01 7
spur-01 1
dialogue-01 2
criticize-01 1
pry-02 1
open-04 18
talk-01 7
title-01 9
take-into-account-04 4
achieve-01 20
tackle-01 3
fuse-01 2
have-quant-91 8
reinforce-01 5
matter-01 2
inundate-01 1
struggle-02 1
bind-02 1
offer-01 10
prefer-01 2
come-12 3
view-02 5
suffice-01 13
look-01 8
good-04 4
inspire-01 1
harm-01 43
extend-01 4
falsify-01 1
resist-01 1
manipulate-02 3
intervene-01 10
receive-01 8
contextualize-00 1
treat-04 1
friendly-01 1
conflict-01 9
follow-02 2
fix-03 1
equalize-01 4
connect-01 3
influence-01 9
frequent-02 3
go-01 1
down-03 1
rank-01 3
appeal-02 1
better-01 1
assume-02 6
get-01 2
wledge-01 1
convey-01 1
club-01 1
under-03 1
penchan-00 1
responsible-01 8
balance-01 11
real-04 10
disparage-01 2
compare-01 5
notify-01 2
zing-01 1
leave-out-03 2
debilitate-01 1
game-01 1
rule-01 4
have-manner-91 6
highlight-02 1
belie-01 1
concern-02 13
work-09 4
regular-03 1
exploit-01 1
cover-01 11
import-01 1
interview-01 3
expert-01 19
contest-01 3
address-01 2
advise-01 4
gins-00 1
general-02 21
adhere-02 5
rule-03 5
adopt-01 14
meet-01 14
imply-01 6
just-02 6
put-03 8
measure-02 17
deliver-01 17
manufacture-01 3
store-01 6
enter-01 6
know-02 3
activity-06 8
underlie-01 3
attract-01 2
synthesize-01 2
close-01 4
encourage-01 13
invest-01 6
disseminate-01 2
check-01 9
major-02 5
compile-01 2
procure-01 3
list-01 3
break-01 1
innovate-01 26
complement-01 4
grow-01 9
make-02 12
quantify-01 6
regular-02 7
accord-02 2
empower-01 5
combat-01 5
maintain-01 8
step-01 7
deliberate-01 3
optimize-01 6
drive-02 8
constrain-01 3
express-01 8
equate-01 2
characterize-01 7
study-01 19
treat-03 4
oppose-01 5
reconcile-01 3
discover-01 6
take-01 8
distribution-range-91 2
colocate-01 1
launch-01 2
devote-01 4
breach-01 2
function-01 6
term-01 4
distinguish-01 4
misrepresent-01 3
functional-03 2
divert-01 2
subjective-03 4
stick-01 1
restrict-01 5
replace-01 7
educate-01 8
select-01 17
gentle-01 2
appreciate-02 3
point-01 2
read-01 3
survey-01 1
strong-02 8
accept-01 12
butt-in-01 1
pay-01 3
loan-01 3
useful-05 8
attempt-01 2
scheme-01 1
detail-01 8
move-01 6
map-01 9
disappear-01 2
attribute-01 5
distort-01 2
remove-01 3
regularize-01 2
satisfy-02 1
stake-01 12
target-01 12
like-01 1
clarify-10 4
stem-02 1
compatible-03 1
cost-01 15
in-process-02 1
hold-02 4
privilege-01 2
progress-01 3
supervise-01 1
acquire-01 3
practical-02 3
care-03 8
tense-03 1
consistent-02 4
have-li-91 5
classify-02 6
search-01 3
standard-02 12
follow-04 6
effect-03 1
core-02 5
profile-01 4
misclassified-02 1
misidentify-01 1
judge-01 9
negative-02 11
conceptualize-01 10
digest-01 2
efficient-01 9
answer-01 3
ill-01 2
look-02 4
profit-01 5
apply-01 7
repay-01 2
white-02 3
task-01 3
offend-03 7
err-01 9
suggest-01 12
bank-01 2
tax-01 2
speculate-01 2
moral-02 7
compute-01 2
architect-01 2
long-03 6
align-01 9
insight-05 2
counteract-01 2
outline-01 4
go-on-15 4
live-01 6
rigorous-00 2
release-01 8
escalate-01 2
correct-01 6
foresee-01 4
lead-02 11
afford-02 4
leverage-01 2
succeed-01 2
conform-01 6
abuse-01 3
translate-01 4
run-01 2
prove-01 7
log-01 4
articulate-01 4
compatible-00 2
fail-01 8
have-condition-91 7
advanced-02 2
version-01 2
accommodate-01 6
update-01 8
partake-01 4
arrive-01 4
movement-07 4
augment-01 3
mod-02 2
edit-01 2
calibrate-01 6
ask-01 4
weight-01 2
commit-01 5
seal-01 2
fit-03 1
criminal-03 2
communicate-01 2
encompass-01 2
presume-01 1
innocent-01 1
eliminate-01 6
substitute-01 1
age-01 2
score-on-scale-91 4
except-01 4
expose-01 3
redress-01 9
power-01 4
modernize-01 1
vulnerable-01 3
expand-01 3
blacklist-01 1
reverse-01 4
burden-01 2
place-01 3
legislate-01 10
respond-01 7
administer-01 4
slow-01 4
consequence-03 16
spread-03 2
consequential-01 14
voice-01 4
administrate-01 5
monitor-01 18
adapt-01 6
prepare-02 6
mar-02 2
separate-02 3
seize-01 2
preserve-01 9
grant-01 10
purchase-01 4
pose-02 12
fund-01 5
condition-01 3
brief-01 2
factor-01 3
have-mod-91 1
expine-01 1
consent-01 7
tell-01 1
in-line-04 3
legitimize-01 1
obtain-01 4
anonymousize-00 1
archive-01 1
retain-01 2
stress-01 4
case-03 4
feed-02 1
constitute-01 4
close-10 7
feed-01 2
summarize-01 6
disadvantage-01 1
debate-01 11
exclude-01 6
disempower-01 1
wave-04 1
deal-01 6
interact-01 8
market-01 1
insure-02 2
police-01 1
care-04 3
find-02 1
value-02 3
correct-02 4
deem-01 3
bad-07 1
direct-02 9
contend-01 1
miss-01 1
suffer-01 2
corrupt-01 1
subscribe-01 1
recognize-01 6
deep-03 1
entitle-02 1
set-up-03 7
stipulate-01 1
uniform-02 1
note-01 7
carry-out-03 4
stress-02 2
introduce-01 5
schedule-01 1
display-01 3
liable-01 7
incentivize-01 3
advertise-01 2
significant-02 12
price-01 2
unique-01 2
drift-01 2
approve-01 1
declare-02 1
issue-01 2
certify-01 7
mark-01 1
showcase-01 1
harbor-01 1
problematic-02 2
surround-01 3
come-about-06 1
accomplish-01 2
permit-01 6
compose-01 1
mean-02 2
smart-06 2
acquaint-01 1
cooperate-01 9
keep-in-mind-08 4
norm-02 3
enshrine-01 3
think-01 6
endanger-01 1
secure-01 2
direct-01 3
handle-01 2
form-01 10
generalize-01 2
objectionable-02 1
have-hand-in-17 2
construct-01 6
precaution-02 4
formulate-01 3
participate-01 13
structure-01 4
outsource-01 2
lurk-01 1
hide-01 2
ally-01 1
allocate-01 2
consult-01 4
orient-01 4
fall-04 1
true-01 2
qualify-02 2
give-14 5
mistreat-01 4
belong-01 3
mismanage-01 1
actual-02 6
prepare-01 2
concretize-01 1
assist-01 1
pinpoint-01 1
streamline-01 1
preempt-01 1
anticipate-01 2
furnish-01 1
demonstrate-01 5
precondition-01 1
confirm-01 3
disclaim-01 1
contribute-01 3
partner-01 2
retrieve-01 6
abstract-02 2
mine-01 1
program-01 2
collide-01 1
trouble-01 1
vigilant-01 6
keep-01 1
up-03 1
concrete-02 2
explicate-01 3
stand-out-06 1
bear-01 1
rethink-01 1
underpin-01 6
fun-01 1
have-to-do-with-04 1
alter-01 1
manipulate-01 2
lay-01 1
set-02 5
ignore-01 2
let-01 1
handy-02 1
amount-02 1
anthropomorphize-01 2
settle-02 2
quibble-01 1
aim-02 4
merit-01 2
stumble-01 1
lose-02 3
speak-01 3
remain-01 5
tie-in-02 1
demystify-01 1
bill-01 1
build-02 3
google-01 1
derive-01 4
reflect-01 7
fall-01 1
acknowledge-01 3
entail-01 5
dance-01 1
clump-01 1
natural-03 2
embody-01 2
supplement-01 1
sit-01 1
update-02 1
request-01 2
categorize-01 2
meaningful-05 4
feel-01 4
face-01 3
scale-01 1
diagnose-01 2
specialize-01 1
span-01 1
tend-02 1
valid-02 1
lead-01 1
prototype-01 1
probe-01 1
internal-02 10
representation-02 1
photograph-01 1
hyperlink-91 3
cease-01 1
plan-01 2
bedeutet-00 1
ergreif-00 1
erzustellen-00 1
illustrate-01 5
trace-02 1
opt-01 3
out-06 2
tamper-01 1
play-02 3
conduct-02 4
differentiate-01 1
vary-01 3
split-01 1
wrong-04 2
correlate-91 2
scrutinize-01 2
opposite-01 1
byline-91 1
reference-04 2
calculate-01 2
accelerate-01 3
copyright-01 2
come-04 2
compromise-02 2
transpire-01 1
decrease-01 1
creat-01 1
trigger-01 2
retrain-01 2
remit-01 1
layer-01 1
fire-02 2
teach-01 3
contest-02 2
sentence-01 3
parole-01 1
cut-01 2
right-02 1
dispute-01 3
codify-01 1
suitable-04 2
at-hand-14 2
flaw-01 2
recommen-01 1
license-01 1
point-04 1
tradeoff-01 2
destroy-01 1
black-04 3
come-down-23 1
miss-02 1
boost-01 1
replicate-01 1
separate-01 2
pin-down-02 1
come-up-11 1
put-02 1
contradict-01 2
impede-01 1
overreach-01 1
isolate-01 3
chain-01 1
desirable-02 1
shift-01 1
damage-01 1
impair-01 3
draft-01 4
deplo-00 1
minor-01 1
screen-01 1
open-02 1
misuse-01 1
forgive-01 1
emerge-01 2
harness-01 1
aggregate-01 1
federate-01 1
average-01 1
correspond-02 3
undermine-01 2
vet-01 2
welcome-01 2
remark-01 3
assert-02 6
print-01 1
exchange-01 1
tie-01 1
hit-01 1
chart-01 2
scope-01 2
ground-02 2
stark-02 1
formalize-01 1
group-01 3
violate-01 2
type-03 3
hit-02 1
query-01 1
sacrifice-01 1
die-01 1
contextualize-01 2
practical-03 1
mature-02 2
sponsor-01 1
strengthen-01 4
move-02 1
propound-01 1
overlap-01 1
complete-01 2
drive-01 1
artificial-03 2
synergize-01 1
prosper-01 2
binding-07 1
navigate-01 2
name-01 1
advance-01 3
intercede-01 1
dictate-01 1
tailor-01 1
host-01 2
preach-01 1
heighten-01 1
mission-01 1
dark-02 2
emit-01 1
decouple-01 1
root-02 1
eradicate-01 1
thin-03 1
thick-03 1
take-10 1
prospect-02 1
comprise-01 1
take-04 1
short-06 1
accompany-01 2
peculiar-01 1
feature-01 1
excerpt-01 1
smooth-04 1
familiarize-01 1
warn-01 3
powerful-02 1
transform-01 2
personalize-01 1
legitimate-02 2
write-01 1
benchmark-01 4
assemble-01 1
distract-01 1
fit-01 2
watch-01 1
invent-01 2
fine-04 1
mask-01 1
level-03 1
play-01 1
smigh-02 1
tip-05 1
trick-01 1
fight-01 1
operateize-01 1
present-02 1
trend-01 1
assure-01 3
coordinate-01 1
spend-01 1
pilot-01 1
standardize-01 1
comfort-01 2
compensate-01 1
tolerate-01 1
motivate-01 1
authorize-01 2
inspect-01 3
question-03 1
cohere-01 2
turn-out-11 1
estimate-01 1
rough-04 1
comment-01 2
return-01 1
entwine-01 1
perpetuate-01 1
discourse-01 1
open-05 1
nuance-01 1
reach-01 2
invoke-01 1
guard-01 1
engage-01 2
lie-07 2
resolve-01 2
multiply-01 1
fit-06 3
size-01 1
invite-01 1
disagree-01 1
reaffirm-01 1
escape-01 1
institutionalize-01 1
set-01 1
inquire-01 1
detach-01 1
comprehend-01 1
institutionalize-02 1
override-01 1
exclusive-02 1
regrieve-01 1
have-part-91 1
perfect-02 1
complicate-01 2
hard-02 1
impacute-01 1
suppose-01 1
fast-02 1
award-01 2
announce-01 2
pressure-01 1
mainstream-02 1
default-01 1
vend-01 2
artificial-physical-03 1
accolor-01 1
open-01 1
restat-01 1
Reinforce-01 1
thrive-01 1
cross-02 2
well-05 4
spread-02 1
transport-01 1
renew-01 1
queue-01 1
route-01 1
overrule-01 1
touch-on-04 1
open-08 1
go-06 1
fairwash-01 1
approximate-01 1
cover-up-04 1
conceal-01 1
bear-02 1
exhaust-01 1
outweigh-01 1
countervail-01 1
risky-02 1
interfere-01 1
offend-01 1
oppress-01 1
compete-02 1
reluctant-01 1
will-02 2
rapid-02 1
monopolize-01 1
hack-04 1
refine-01 1
rid-01 1
evolve-01 1
accumulate-01 1
bring-about-05 1
pseudonymize-00 1
sell-01 2
go-12 1
count-01 1
portray-01 1
diversify-01 2
compatible-01 1
easy-05 1
contravent-01 1
suspect-01 1
advocate-01 1
erode-01 1
special-02 1
neutral-02 1
premise-01 1
moderate-01 2
affiliate-01 1
endorse-01 1
underscore-01 1
mandate-01 1
File added