Skip to content
Snippets Groups Projects
Commit 6db02a3d authored by Ludovic Moncla's avatar Ludovic Moncla
Browse files

Update Predict_XAI.ipynb

parent 85b9486f
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# BERT Predict classification # BERT Predict classification
## 1. Setup the environment ## 1. Setup the environment
### 1.1 Setup colab environment ### 1.1 Setup colab environment
#### 1.1.1 Install packages #### 1.1.1 Install packages
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
!pip install transformers==4.10.3 !pip install transformers==4.10.3
!pip install sentencepiece !pip install sentencepiece
!pip install transformers_interpret !pip install transformers_interpret
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
#### 1.1.2 Use more RAM #### 1.1.2 Use more RAM
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from psutil import virtual_memory from psutil import virtual_memory
ram_gb = virtual_memory().total / 1e9 ram_gb = virtual_memory().total / 1e9
print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb)) print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb))
if ram_gb < 20: if ram_gb < 20:
print('Not using a high-RAM runtime') print('Not using a high-RAM runtime')
else: else:
print('You are using a high-RAM runtime!') print('You are using a high-RAM runtime!')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
#### 1.1.3 Mount GoogleDrive #### 1.1.3 Mount GoogleDrive
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from google.colab import drive from google.colab import drive
drive.mount('/content/drive') drive.mount('/content/drive')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1.2 Import librairies ### 1.2 Import librairies
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
import pickle import pickle
import torch import torch
from transformers import BertTokenizer, BertForSequenceClassification from transformers import BertTokenizer, BertForSequenceClassification
from transformers_interpret import SequenceClassificationExplainer from transformers_interpret import SequenceClassificationExplainer
import numpy as np import numpy as np
import torch import torch
from torch.utils.data import TensorDataset, DataLoader, SequentialSampler from torch.utils.data import TensorDataset, DataLoader, SequentialSampler
from tqdm import tqdm
import os
import pandas as pd import pandas as pd
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 1.3 Setup GPU ### 1.3 Setup GPU
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
# If there's a GPU available... # If there's a GPU available...
if torch.cuda.is_available(): if torch.cuda.is_available():
# Tell PyTorch to use the GPU. # Tell PyTorch to use the GPU.
device = torch.device("cuda") device = torch.device("cuda")
gpu_name = "cuda" gpu_name = "cuda"
print('There are %d GPU(s) available.' % torch.cuda.device_count()) print('There are %d GPU(s) available.' % torch.cuda.device_count())
print('We will use the GPU:', torch.cuda.get_device_name(0)) print('We will use the GPU:', torch.cuda.get_device_name(0))
# for MacOS # for MacOS
elif torch.backends.mps.is_available() and torch.backends.mps.is_built(): elif torch.backends.mps.is_available() and torch.backends.mps.is_built():
device = torch.device("mps") device = torch.device("mps")
gpu_name = "mps" gpu_name = "mps"
print('We will use the GPU') print('We will use the GPU')
else: else:
device = torch.device("cpu") device = torch.device("cpu")
gpu_name = "cpu" gpu_name = "cpu"
print('No GPU available, using the CPU instead.') print('No GPU available, using the CPU instead.')
``` ```
%% Output %% Output
We will use the GPU We will use the GPU
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
device = torch.device("cpu") device = torch.device("cpu")
gpu_name = "cpu" gpu_name = "cpu"
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## 2. Utils ## 2. Utils
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
def generate_dataloader(tokenizer, sentences, batch_size = 8, max_len = 512): def generate_dataloader(tokenizer, sentences, batch_size = 8, max_len = 512):
# Tokenize all of the sentences and map the tokens to thier word IDs. # Tokenize all of the sentences and map the tokens to thier word IDs.
input_ids_test = [] input_ids_test = []
# For every sentence... # For every sentence...
for sent in sentences: for sent in sentences:
# `encode` will: # `encode` will:
# (1) Tokenize the sentence. # (1) Tokenize the sentence.
# (2) Prepend the `[CLS]` token to the start. # (2) Prepend the `[CLS]` token to the start.
# (3) Append the `[SEP]` token to the end. # (3) Append the `[SEP]` token to the end.
# (4) Map tokens to their IDs. # (4) Map tokens to their IDs.
encoded_sent = tokenizer.encode( encoded_sent = tokenizer.encode(
sent, # Sentence to encode. sent, # Sentence to encode.
add_special_tokens = True, # Add '[CLS]' and '[SEP]' add_special_tokens = True, # Add '[CLS]' and '[SEP]'
# This function also supports truncation and conversion # This function also supports truncation and conversion
# to pytorch tensors, but I need to do padding, so I # to pytorch tensors, but I need to do padding, so I
# can't use these features. # can't use these features.
#max_length = max_len, # Truncate all sentences. #max_length = max_len, # Truncate all sentences.
#return_tensors = 'pt', # Return pytorch tensors. #return_tensors = 'pt', # Return pytorch tensors.
) )
input_ids_test.append(encoded_sent) input_ids_test.append(encoded_sent)
# Pad our input tokens # Pad our input tokens
padded_test = [] padded_test = []
for i in input_ids_test: for i in input_ids_test:
if len(i) > max_len: if len(i) > max_len:
padded_test.extend([i[:max_len]]) padded_test.extend([i[:max_len]])
else: else:
padded_test.extend([i + [0] * (max_len - len(i))]) padded_test.extend([i + [0] * (max_len - len(i))])
input_ids_test = np.array(padded_test) input_ids_test = np.array(padded_test)
# Create attention masks # Create attention masks
attention_masks = [] attention_masks = []
# Create a mask of 1s for each token followed by 0s for padding # Create a mask of 1s for each token followed by 0s for padding
for seq in input_ids_test: for seq in input_ids_test:
seq_mask = [float(i>0) for i in seq] seq_mask = [float(i>0) for i in seq]
attention_masks.append(seq_mask) attention_masks.append(seq_mask)
# Convert to tensors. # Convert to tensors.
inputs = torch.tensor(input_ids_test) inputs = torch.tensor(input_ids_test)
masks = torch.tensor(attention_masks) masks = torch.tensor(attention_masks)
#set batch size #set batch size
# Create the DataLoader. # Create the DataLoader.
data = TensorDataset(inputs, masks) data = TensorDataset(inputs, masks)
prediction_sampler = SequentialSampler(data) prediction_sampler = SequentialSampler(data)
return DataLoader(data, sampler=prediction_sampler, batch_size=batch_size) return DataLoader(data, sampler=prediction_sampler, batch_size=batch_size)
def predict(model, dataloader, device): def predict(model, dataloader, device):
# Put model in evaluation mode # Put model in evaluation mode
model.eval() model.eval()
# Tracking variables # Tracking variables
predictions_test , true_labels = [], [] predictions_test , true_labels = [], []
pred_labels_ = [] pred_labels_ = []
# Predict # Predict
for batch in dataloader: for batch in dataloader:
# Add batch to GPU # Add batch to GPU
batch = tuple(t.to(device) for t in batch) batch = tuple(t.to(device) for t in batch)
# Unpack the inputs from the dataloader # Unpack the inputs from the dataloader
b_input_ids, b_input_mask = batch b_input_ids, b_input_mask = batch
# Telling the model not to compute or store gradients, saving memory and # Telling the model not to compute or store gradients, saving memory and
# speeding up prediction # speeding up prediction
with torch.no_grad(): with torch.no_grad():
# Forward pass, calculate logit predictions # Forward pass, calculate logit predictions
outputs = model(b_input_ids, token_type_ids=None, outputs = model(b_input_ids, token_type_ids=None,
attention_mask=b_input_mask) attention_mask=b_input_mask)
logits = outputs[0] logits = outputs[0]
#print(logits) #print(logits)
# Move logits and labels to CPU ??? # Move logits and labels to CPU ???
logits = logits.detach().cpu().numpy() logits = logits.detach().cpu().numpy()
#print(logits) #print(logits)
# Store predictions and true labels # Store predictions and true labels
predictions_test.append(logits) predictions_test.append(logits)
pred_labels = [] pred_labels = []
for i in range(len(predictions_test)): for i in range(len(predictions_test)):
# The predictions for this batch are a 2-column ndarray (one column for "0" # The predictions for this batch are a 2-column ndarray (one column for "0"
# and one column for "1"). Pick the label with the highest value and turn this # and one column for "1"). Pick the label with the highest value and turn this
# in to a list of 0s and 1s. # in to a list of 0s and 1s.
pred_labels_i = np.argmax(predictions_test[i], axis=1).flatten() pred_labels_i = np.argmax(predictions_test[i], axis=1).flatten()
pred_labels.append(pred_labels_i) pred_labels.append(pred_labels_i)
pred_labels_ += [item for sublist in pred_labels for item in sublist] pred_labels_ += [item for sublist in pred_labels for item in sublist]
return pred_labels_ return pred_labels_
```
def text_folder_to_dataframe(path): %% Cell type:markdown id: tags:
data = []
# id,tome,filename,nb_words,content,domain
for tome in sorted(os.listdir(path)): ## 3. Load Data
try:
for article in tqdm(sorted(os.listdir(path + "/" + tome))):
filename = article[:-4]
id = tome + filename
if article[-4:] == ".txt":
with open(path + "/" + tome + "/" + article) as f:
content = f.read()
data.append([id, tome, filename, content, len(content.split(' '))]) !! A modifier: charger le corpus parallele : EDdA et LGE
except NotADirectoryError:
pass
return pd.DataFrame(data, columns=['id', 'tome', 'filename', 'content', 'nb_words'])
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## 2. Load Data ### 3.1 LGE (Nakala)
%% Cell type:code id: tags:
!! A modifier: charger le corpus parallele : EDdA et LGE ``` python
lge_path = "/Users/lmoncla/Nextcloud-LIRIS/GEODE/GEODE - Partage consortium/Corpus/LGE/LGE_dataset_articles.tsv"
df_LGE = pd.read_csv(lge_path, sep="\t")
```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
!wget https://api.nakala.fr/data/10.34847/nkl.74eb1xfd/e522413b58b04ab7c283f8fa68642e9cb69ab5c5 df_LGE.head()
``` ```
%% Output
id tome filename \
0 T1article_1 T1 article_1
1 T1article_10 T1 article_10
2 T1article_100 T1 article_100
3 T1article_1000 T1 article_1000
4 T1article_1001 T1 article_1001
content nb_words
0 F.-Camille DREYFUS, député de la Seine.\n 6
1 quimarque un mouvement en avant de l’esprit hu... 212
2 ABACUS. L’abacus ou abaque était un instrument... 1345
3 H6SS6)\n1780-1793 Choiseul-Goufficr\n1780-1793... 218
4 1803Le Brun.\n 2
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
!unzip e522413b58b04ab7c283f8fa68642e9cb69ab5c5 df_LGE.shape
``` ```
%% Output
(229475, 5)
%% Cell type:markdown id: tags:
### 3.2 LGE Parallel
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
input_path = "/Users/lmoncla/Documents/Data/Corpus/LGE/Text" lge_par_path = "/Users/lmoncla/Nextcloud-LIRIS/GEODE/GEODE - Partage consortium/Corpus/LGE/LGE_parallel_dataset_articles.tsv"
#input_path = "./Text" df_LGE_par = pd.read_csv(lge_par_path, sep="\t")
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE = text_folder_to_dataframe(input_path) df_LGE_par.head()
#df_LGE = pd.read_csv(path + "data/LGE_withContent.tsv", sep="\t")
data_LGE = df_LGE["content"].values
``` ```
%% Output %% Output
100%|██████████| 5201/5201 [00:00<00:00, 6137.32it/s] id tome filename \
100%|██████████| 5704/5704 [00:00<00:00, 6325.35it/s] 0 T1aam-0 T1 aam-0
100%|██████████| 5214/5214 [00:00<00:00, 5986.96it/s] 1 T1abaco-0 T1 abaco-0
100%|██████████| 5528/5528 [00:00<00:00, 6213.04it/s] 2 T1abacot-0 T1 abacot-0
100%|██████████| 6963/6963 [00:01<00:00, 5686.82it/s] 3 T1abaddon-0 T1 abaddon-0
100%|██████████| 5983/5983 [00:00<00:00, 6120.28it/s] 4 T1abandonnement-0 T1 abandonnement-0
100%|██████████| 13713/13713 [00:01<00:00, 7057.45it/s]
100%|██████████| 9202/9202 [00:01<00:00, 7161.23it/s] content nb_words
100%|██████████| 10704/10704 [00:01<00:00, 7208.53it/s] 0 AAM. Mesure de capacité pour les liquides en u... 38
100%|██████████| 6378/6378 [00:00<00:00, 6988.23it/s] 1 ABACO, architecte italien du xvi siècle (V. La... 8
100%|██████████| 8476/8476 [00:01<00:00, 7098.48it/s] 2 ABACOT. Double couronne que portaient autrefoi... 33
100%|██████████| 6576/6576 [00:00<00:00, 6996.19it/s] 3 ABADDONou APOLYON le Destructeur. « Elles\nava... 109
100%|██████████| 7797/7797 [00:01<00:00, 6981.47it/s] 4 ABANDONNEMENT. I. Droit civil. — Ce mot est un... 76
100%|██████████| 9027/9027 [00:01<00:00, 6563.44it/s]
100%|██████████| 8383/8383 [00:01<00:00, 7017.88it/s] %% Cell type:markdown id: tags:
100%|██████████| 7319/7319 [00:01<00:00, 7064.77it/s]
100%|██████████| 10269/10269 [00:01<00:00, 6864.36it/s] ### 3.3 EDdA (ARTFL)
100%|██████████| 7512/7512 [00:01<00:00, 6854.61it/s]
100%|██████████| 6701/6701 [00:01<00:00, 6501.17it/s]
100%|██████████| 7343/7343 [00:01<00:00, 6933.17it/s]
100%|██████████| 7273/7273 [00:01<00:00, 6877.68it/s]
100%|██████████| 10877/10877 [00:01<00:00, 6410.62it/s]
100%|██████████| 4731/4731 [00:00<00:00, 6429.83it/s]
100%|██████████| 8698/8698 [00:01<00:00, 6076.43it/s]
100%|██████████| 9675/9675 [00:01<00:00, 6399.53it/s]
100%|██████████| 5710/5710 [00:00<00:00, 6343.15it/s]
100%|██████████| 5664/5664 [00:00<00:00, 6450.75it/s]
100%|██████████| 5828/5828 [00:00<00:00, 6425.49it/s]
100%|██████████| 5721/5721 [00:00<00:00, 6536.62it/s]
100%|██████████| 6110/6110 [00:00<00:00, 6391.42it/s]
100%|██████████| 5195/5195 [00:00<00:00, 6016.13it/s]
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.head() edda_path = "/Users/lmoncla/Nextcloud-LIRIS/GEODE/GEODE - Partage consortium/Corpus/EDdA/EDdA_dataset_articles.tsv"
df_EDdA = pd.read_csv(edda_path, sep="\t")
```
%% Cell type:code id: tags:
``` python
df_EDdA.head()
``` ```
%% Output %% Output
id tome rank domain remark \ volume numero head author \
0 abrabeses-0 1 623 geography NaN 0 1 1 Title Page unsigned
1 accius-0 1 1076 biography NaN 1 1 2 A MONSEIGNEUR LE COMTE D'ARGENSON Diderot & d'Alembert
2 achenbach-2 1 1357 biography NaN 2 1 3 DISCOURS PRÉLIMINAIRE DES EDITEURS d'Alembert
3 acireale-0 1 1513 geography NaN 3 1 5 A, a & a Dumarsais5
4 actée-0 1 1731 botany NaN 4 1 6 A Dumarsais5
edda_class enccre_id enccre_class \
0 unclassified NaN NaN
1 unclassified NaN NaN
2 unclassified NaN NaN
3 Grammaire v1-1-0 Grammaire
4 unclassified v1-1-1 Grammaire
content \
0 \n\nENCYCLOPÉDIE,\nDICTIONNAIRE RAISONNÉ\nDES ...
1 \n\nA MONSEIGNEUR\nLE COMTE D'ARGENSON,\nMINIS...
2 \n\nDISCOURS PRÉLIMINAIRE\nDES EDITEURS.\n\n\n...
3 \nA, a & a s.m. (ordre Encyclopéd.\nEntend. Sc...
4 \nA, mot, est 1. la troisieme personne du prés...
content content_without_designant \
0 ABRABESES. Village d’Espagne de la prov. de Za... 0 \n\nENCYCLOPÉDIE,\nDICTIONNAIRE RAISONNÉ\nDES ...
1 ACCIUS, L. ou L. ATTIUS (170-94 av. J.-C.), po... 1 \n\nA MONSEIGNEUR\nLE COMTE D'ARGENSON,\nMINIS...
2 ACHENBACH(Henri), administrateur prussien, né ... 2 \n\nDISCOURS PRÉLIMINAIRE\nDES EDITEURS.\n\n\n...
3 ACIREALE. Yille de Sicile, de la province et d... 3 \nA, a & a s.m. (ordre Encyclopéd.\nEntend. Sc...
4 ACTÉE(Actœa L.). Genre de plantes de la famill... 4 \nA, mot, est 1. la troisieme personne du prés...
first_paragraph nb_words
0 \n\nENCYCLOPÉDIE,\nDICTIONNAIRE RAISONNÉ\nDES ... 151
1 \n\nA MONSEIGNEUR\nLE COMTE D'ARGENSON,\nMINIS... 208
2 \n\nDISCOURS PRÉLIMINAIRE\nDES EDITEURS.\n\n 44669
3 \nA, a & a s.m. (ordre Encyclopéd.\nEntend. Sc... 711
4 \nA, mot, est 1. la troisieme personne du prés... 238
%% Cell type:markdown id: tags:
### 3.4 EDdA Parallel
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.shape
``` ```
%% Output %% Cell type:code id: tags:
(310, 6) ``` python
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## 4. Load model and predict ## 4. Load model and predict
### 4.1 BERT ### 4.1 BERT
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
#path = "drive/MyDrive/Classification-EDdA/" #path = "drive/MyDrive/Classification-EDdA/"
path = "../" path = "../"
model_name = "bert-base-multilingual-cased" model_name = "bert-base-multilingual-cased"
model_path = path + "models/model_" + model_name + "_s10000.pt" model_path = path + "models/model_" + model_name + "_s10000.pt"
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
print('Loading Bert Tokenizer...') print('Loading Bert Tokenizer...')
tokenizer = BertTokenizer.from_pretrained(model_name) tokenizer = BertTokenizer.from_pretrained(model_name)
``` ```
%% Output %% Output
Loading Bert Tokenizer... Loading Bert Tokenizer...
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
data_loader = generate_dataloader(tokenizer, data_LGE) data_loader = generate_dataloader(tokenizer, data_LGE)
``` ```
%% Output %% Output
Token indices sequence length is longer than the specified maximum sequence length for this model (1204 > 512). Running this sequence through the model will result in indexing errors Token indices sequence length is longer than the specified maximum sequence length for this model (1204 > 512). Running this sequence through the model will result in indexing errors
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
model = BertForSequenceClassification.from_pretrained(model_path).to(gpu_name) #.to("cuda") model = BertForSequenceClassification.from_pretrained(model_path).to(gpu_name) #.to("cuda")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 4.2 Predict ### 4.2 Predict
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
pred = predict(model, data_loader, device) pred = predict(model, data_loader, device)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
encoder_filename = "models/label_encoder.pkl" encoder_filename = "models/label_encoder.pkl"
with open(path + encoder_filename, 'rb') as file: with open(path + encoder_filename, 'rb') as file:
encoder = pickle.load(file) encoder = pickle.load(file)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
p2 = list(encoder.inverse_transform(pred)) p2 = list(encoder.inverse_transform(pred))
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE['domain'] = p2 df_LGE['domain'] = p2
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.head(50) df_LGE.head(50)
``` ```
%% Output %% Output
id tome rank domain remark \ id tome rank domain remark \
0 abrabeses-0 1 623 geography NaN 0 abrabeses-0 1 623 geography NaN
1 accius-0 1 1076 biography NaN 1 accius-0 1 1076 biography NaN
2 achenbach-2 1 1357 biography NaN 2 achenbach-2 1 1357 biography NaN
3 acireale-0 1 1513 geography NaN 3 acireale-0 1 1513 geography NaN
4 actée-0 1 1731 botany NaN 4 actée-0 1 1731 botany NaN
5 adulteration-0 1 2197 NaN cross reference 5 adulteration-0 1 2197 NaN cross reference
6 aérides-0 1 2334 botany NaN 6 aérides-0 1 2334 botany NaN
7 ager-0 1 2710 biography NaN 7 ager-0 1 2710 biography NaN
8 aigu-1 1 3160 NaN cross reference 8 aigu-1 1 3160 NaN cross reference
9 alavika-0 1 3664 theology NaN 9 alavika-0 1 3664 theology NaN
10 allassac-0 2 755 geography NaN 10 allassac-0 2 755 geography NaN
11 allegretto-0 2 786 NaN cross reference 11 allegretto-0 2 786 NaN cross reference
12 alleuze-0 2 908 geography NaN 12 alleuze-0 2 908 geography NaN
13 alliat-0 2 933 geography NaN 13 alliat-0 2 933 geography NaN
14 amanty-0 2 1651 geography NaN 14 amanty-0 2 1651 geography NaN
15 âmasserah-0 2 1701 geography explicit domain 15 âmasserah-0 2 1701 geography explicit domain
16 a-118 2 2971 history NaN 16 a-118 2 2971 history NaN
17 androclès-0 2 3261 mythology explicit domain 17 androclès-0 2 3261 mythology explicit domain
18 anfouson-0 2 3394 zoology NaN 18 anfouson-0 2 3394 zoology NaN
19 anicet-bourgeois-0 2 3717 biography NaN 19 anicet-bourgeois-0 2 3717 biography NaN
20 anomalistique-0 3 238 astronomy explicit domain 20 anomalistique-0 3 238 astronomy explicit domain
21 anostostome-0 3 298 zoology NaN 21 anostostome-0 3 298 zoology NaN
22 anthoxanthème-0 3 571 chemistry NaN 22 anthoxanthème-0 3 571 chemistry NaN
23 aod-0 3 1024 theology NaN 23 aod-0 3 1024 theology NaN
24 aphellan-0 3 1177 astronomy NaN 24 aphellan-0 3 1177 astronomy NaN
25 appelle-0 3 1494 geography NaN 25 appelle-0 3 1494 geography NaN
26 aragona-1 3 1841 biography NaN 26 aragona-1 3 1841 biography NaN
27 araujuzon-0 3 1940 geography NaN 27 araujuzon-0 3 1940 geography NaN
28 ardant-0 3 2421 biography NaN 28 ardant-0 3 2421 biography NaN
29 ariano-0 3 2839 geography NaN 29 ariano-0 3 2839 geography NaN
30 athabaska-0 4 1118 anthropology NaN 30 athabaska-0 4 1118 anthropology NaN
31 aslonnes-0 4 446 geography NaN 31 aslonnes-0 4 446 geography NaN
32 astr0rh1za-0 4 992 zoology explicit domain 32 astr0rh1za-0 4 992 zoology explicit domain
33 atthidographes-0 4 1397 NaN cross reference 33 atthidographes-0 4 1397 NaN cross reference
34 aubery-2 4 1577 biography NaN 34 aubery-2 4 1577 biography NaN
35 aula-0 4 1992 history NaN 35 aula-0 4 1992 history NaN
36 au-113 4 2112 botany explicit domain 36 au-113 4 2112 botany explicit domain
37 auriol-4 4 2224 NaN cross reference 37 auriol-4 4 2224 NaN cross reference
38 ave-lalleniant-0 4 2739 biography NaN 38 ave-lalleniant-0 4 2739 biography NaN
39 badin-2 4 3857 biography NaN 39 badin-2 4 3857 biography NaN
40 baizieux-0 5 133 geography NaN 40 baizieux-0 5 133 geography NaN
41 balsam1te-0 5 677 botany explicit domain 41 balsam1te-0 5 677 botany explicit domain
42 balze-0 5 757 navy explicit domain 42 balze-0 5 757 navy explicit domain
43 bande-2 5 880 history NaN 43 bande-2 5 880 history NaN
44 barbosa-5 5 1580 biography NaN 44 barbosa-5 5 1580 biography NaN
45 bati-0 5 2955 architecture NaN 45 bati-0 5 2955 architecture NaN
46 baveuse-0 5 3457 zoology explicit domain 46 baveuse-0 5 3457 zoology explicit domain
47 beard-2 5 3728 biography NaN 47 beard-2 5 3728 biography NaN
48 beaufort-4 5 3838 geography NaN 48 beaufort-4 5 3838 geography NaN
49 beaumont-26 5 4018 biography NaN 49 beaumont-26 5 4018 biography NaN
content \ content \
0 ABRABESES. Village d’Espagne de la prov. de Za... 0 ABRABESES. Village d’Espagne de la prov. de Za...
1 ACCIUS, L. ou L. ATTIUS (170-94 av. J.-C.), po... 1 ACCIUS, L. ou L. ATTIUS (170-94 av. J.-C.), po...
2 ACHENBACH(Henri), administrateur prussien, né ... 2 ACHENBACH(Henri), administrateur prussien, né ...
3 ACIREALE. Yille de Sicile, de la province et d... 3 ACIREALE. Yille de Sicile, de la province et d...
4 ACTÉE(Actœa L.). Genre de plantes de la famill... 4 ACTÉE(Actœa L.). Genre de plantes de la famill...
5 ADULTERATION. Altération d’un médicament, d’un... 5 ADULTERATION. Altération d’un médicament, d’un...
6 AÉRIDES{Aérides Lour.). Genres de plantes de l... 6 AÉRIDES{Aérides Lour.). Genres de plantes de l...
7 AGERouAGERIUS (Nicolaus), médecin alsacien, né... 7 AGERouAGERIUS (Nicolaus), médecin alsacien, né...
8 AIGU1 LH E (V. Raimond d’).\n 8 AIGU1 LH E (V. Raimond d’).\n
9 ALAVIKA« qui est d'Alava »(V. ce mot) : Bhikch... 9 ALAVIKA« qui est d'Alava »(V. ce mot) : Bhikch...
10 ALLASSAC. Com. du dép. de la Corrèze, arr. de ... 10 ALLASSAC. Com. du dép. de la Corrèze, arr. de ...
11 ALLEGRETTO(V. Allegro).\n 11 ALLEGRETTO(V. Allegro).\n
12 ALLEUZE. Com. du dép. du Cantal, arr. et cant.... 12 ALLEUZE. Com. du dép. du Cantal, arr. et cant....
13 ALLIAT. Com. du dép. de l’Ariège, arr. de Foix... 13 ALLIAT. Com. du dép. de l’Ariège, arr. de Foix...
14 AMANTY. Corn, du dép. de la Meuse, arr. de Com... 14 AMANTY. Corn, du dép. de la Meuse, arr. de Com...
15 ÂMASSERAH, AMASR1 ou AMASRAH (Géogr.). Ville d... 15 ÂMASSERAH, AMASR1 ou AMASRAH (Géogr.). Ville d...
16 AN Cl LIA. Boucliers sacrés des Romains, au no... 16 AN Cl LIA. Boucliers sacrés des Romains, au no...
17 ANDROCLÈS(Myth.), un fils d’Eole qui régna sur... 17 ANDROCLÈS(Myth.), un fils d’Eole qui régna sur...
18 ANFOUSON. Nom donné à Nice au Néron brun\n(V. ... 18 ANFOUSON. Nom donné à Nice au Néron brun\n(V. ...
19 ANICET-BOURGEOIS(Auguste Anicet, connu sous le... 19 ANICET-BOURGEOIS(Auguste Anicet, connu sous le...
20 ANOMALISTIQUE(Astron.). On appelle révolution\... 20 ANOMALISTIQUE(Astron.). On appelle révolution\...
21 ANOSTOSTOME(Anostostoma Gray). Genre d’insecte... 21 ANOSTOSTOME(Anostostoma Gray). Genre d’insecte...
22 ANTHOXANTHÈME. L’un des deux principes coloran... 22 ANTHOXANTHÈME. L’un des deux principes coloran...
23 AOD, plus exactement Ehoud. personnage des com... 23 AOD, plus exactement Ehoud. personnage des com...
24 APHELLAN(Astron.). Un des noms de l’étoile a2 ... 24 APHELLAN(Astron.). Un des noms de l’étoile a2 ...
25 APPELLE. Com. du dép. du Tarn, arr. de Lavaux,... 25 APPELLE. Com. du dép. du Tarn, arr. de Lavaux,...
26 ARAGONA, cardinal d’origine sicilienne, né en ... 26 ARAGONA, cardinal d’origine sicilienne, né en ...
27 ARAUJUZON. Com. du dép. des Basses-Pyrénées, a... 27 ARAUJUZON. Com. du dép. des Basses-Pyrénées, a...
28 ARDANT(Paul-Joseph), général français, né en 1... 28 ARDANT(Paul-Joseph), général français, né en 1...
29 ARIANOdi Puglia. Ville de la prov. de principa... 29 ARIANOdi Puglia. Ville de la prov. de principa...
30 ATHABASKA. Col, rivière, lac, territoire et fa... 30 ATHABASKA. Col, rivière, lac, territoire et fa...
31 ASLONNES, corn, du dép. de la Vienne, arr. de ... 31 ASLONNES, corn, du dép. de la Vienne, arr. de ...
32 ASTR0RH1ZA(Zool.).Genre deForaminifèresimperfo... 32 ASTR0RH1ZA(Zool.).Genre deForaminifèresimperfo...
33 ATTHIDOGRAPHES(V. Atthide).\n 33 ATTHIDOGRAPHES(V. Atthide).\n
34 AUBERY(Antoine;, historien français, né le .18... 34 AUBERY(Antoine;, historien français, né le .18...
35 AULA. Mot latin signifiant cour, lieu découver... 35 AULA. Mot latin signifiant cour, lieu découver...
36 AUNÉE (bot.). L'Aunée, Grande Année, Année off... 36 AUNÉE (bot.). L'Aunée, Grande Année, Année off...
37 AURIOL. Nom donné à Marseille au Maquereau (V.... 37 AURIOL. Nom donné à Marseille au Maquereau (V....
38 AVE-LALLENIANT(Robert-Christian-Barthold), méd... 38 AVE-LALLENIANT(Robert-Christian-Barthold), méd...
39 BADIN(Pierre-Adolphe), peintre français, né à ... 39 BADIN(Pierre-Adolphe), peintre français, né à ...
40 BAIZIEUX(Bacium, Basium). Com. du dép. de la\n... 40 BAIZIEUX(Bacium, Basium). Com. du dép. de la\n...
41 BALSAM1TE(Bot.) (Balsamita Desf.). Genre de Co... 41 BALSAM1TE(Bot.) (Balsamita Desf.). Genre de Co...
42 BALZE(Mar.). Radeau delà côte occidentale de l... 42 BALZE(Mar.). Radeau delà côte occidentale de l...
43 BANDE(Ordre delà) ou de l’ECHARPE.Ordre milita... 43 BANDE(Ordre delà) ou de l’ECHARPE.Ordre milita...
44 BARBOSA(Antonio), jésuite et orientaliste port... 44 BARBOSA(Antonio), jésuite et orientaliste port...
45 BATIÈRE. Toit en forme de bât se terminant à c... 45 BATIÈRE. Toit en forme de bât se terminant à c...
46 BAVEUSE(Zool.). Nom vulgaire par lequel les\np... 46 BAVEUSE(Zool.). Nom vulgaire par lequel les\np...
47 BEARD(James-Henry), peintre américain contempo... 47 BEARD(James-Henry), peintre américain contempo...
48 BEAUFORT. Com. du dép. de la Meuse, arr. de Mo... 48 BEAUFORT. Com. du dép. de la Meuse, arr. de Mo...
49 BEAUMONT(J.-G. Leprevôt de), secrétaire du cle... 49 BEAUMONT(J.-G. Leprevôt de), secrétaire du cle...
class_bert class_bert
0 Géographie 0 Géographie
1 Belles-lettres - Poésie 1 Belles-lettres - Poésie
2 Histoire 2 Histoire
3 Géographie 3 Géographie
4 Histoire naturelle 4 Histoire naturelle
5 Chimie 5 Chimie
6 Histoire naturelle 6 Histoire naturelle
7 Histoire 7 Histoire
8 Marine 8 Marine
9 Religion 9 Religion
10 Géographie 10 Géographie
11 Musique 11 Musique
12 Géographie 12 Géographie
13 Géographie 13 Géographie
14 Géographie 14 Géographie
15 Géographie 15 Géographie
16 Antiquité 16 Antiquité
17 Antiquité 17 Antiquité
18 Histoire naturelle 18 Histoire naturelle
19 Belles-lettres - Poésie 19 Belles-lettres - Poésie
20 Physique - [Sciences physico-mathématiques] 20 Physique - [Sciences physico-mathématiques]
21 Histoire naturelle 21 Histoire naturelle
22 Pharmacie 22 Pharmacie
23 Histoire 23 Histoire
24 Physique - [Sciences physico-mathématiques] 24 Physique - [Sciences physico-mathématiques]
25 Géographie 25 Géographie
26 Religion 26 Religion
27 Géographie 27 Géographie
28 Militaire (Art) - Guerre - Arme 28 Militaire (Art) - Guerre - Arme
29 Géographie 29 Géographie
30 Géographie 30 Géographie
31 Géographie 31 Géographie
32 Histoire naturelle 32 Histoire naturelle
33 Géographie 33 Géographie
34 Histoire 34 Histoire
35 Architecture 35 Architecture
36 Histoire naturelle 36 Histoire naturelle
37 Histoire naturelle 37 Histoire naturelle
38 Histoire 38 Histoire
39 Arts et métiers 39 Arts et métiers
40 Géographie 40 Géographie
41 Histoire naturelle 41 Histoire naturelle
42 Marine 42 Marine
43 Histoire 43 Histoire
44 Religion 44 Religion
45 Architecture 45 Architecture
46 Histoire naturelle 46 Histoire naturelle
47 Beaux-arts 47 Beaux-arts
48 Géographie 48 Géographie
49 Histoire 49 Histoire
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 4.3 Save ### 4.3 Save
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
filepath = path + "results_LGE/LGE-metadata-withContent.csv" filepath = path + "results_LGE/LGE-metadata-withContent.csv"
df_LGE.to_csv(filepath, sep="\,") df_LGE.to_csv(filepath, sep="\,")
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.drop(columns=['content'], inplace=True) df_LGE.drop(columns=['content'], inplace=True)
filepath = path + "results_LGE/LGE-metadata.csv" filepath = path + "results_LGE/LGE-metadata.csv"
df_LGE.to_csv(filepath, sep="\,") df_LGE.to_csv(filepath, sep="\,")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## 5. BERT XAI ## 5. BERT XAI
https://www.kaggle.com/code/rizwanhaidar/deep-learning-xai-models-loading-and-predictions https://www.kaggle.com/code/rizwanhaidar/deep-learning-xai-models-loading-and-predictions
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
cls_explainer = SequenceClassificationExplainer( cls_explainer = SequenceClassificationExplainer(
model, model,
tokenizer, tokenizer,
custom_labels=encoder.classes_.tolist() custom_labels=encoder.classes_.tolist()
) )
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.head() df_LGE.head()
``` ```
%% Output %% Output
id tome filename \ id tome filename \
0 T1article_1 T1 article_1 0 T1article_1 T1 article_1
1 T1article_10 T1 article_10 1 T1article_10 T1 article_10
2 T1article_100 T1 article_100 2 T1article_100 T1 article_100
3 T1article_1000 T1 article_1000 3 T1article_1000 T1 article_1000
4 T1article_1001 T1 article_1001 4 T1article_1001 T1 article_1001
content nb_words content nb_words
0 F.-Camille DREYFUS, député de la Seine.\n 6 0 F.-Camille DREYFUS, député de la Seine.\n 6
1 quimarque un mouvement en avant de l’esprit hu... 212 1 quimarque un mouvement en avant de l’esprit hu... 212
2 ABACUS. L’abacus ou abaque était un instrument... 1345 2 ABACUS. L’abacus ou abaque était un instrument... 1345
3 H6SS6)\n1780-1793 Choiseul-Goufficr\n1780-1793... 218 3 H6SS6)\n1780-1793 Choiseul-Goufficr\n1780-1793... 218
4 1803Le Brun.\n 2 4 1803Le Brun.\n 2
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
df_LGE.content[2] df_LGE.content[2]
``` ```
%% Output %% Output
"ABACUS. L’abacus ou abaque était un instrument en\nusage dans l’antiquité pour faciliter les calculs arithmé¬\ntiques. Il paraît que c’était dans l’origine une petite table\nsur laquelle on traçait les figures et où l’on exécutait les\nopérations. Cet instrument semble aussi ancien que l’arith¬\nmétique, qui d’ailleurs s’appelait abacus au moyen âge ;\non le trouve chez les Grecs, les Romains, les Chinois, les\nAllemands et les Français. Sa forme varia avec le temps ;\nil devint enfin un cadre long divisé par plusieurs cordes\nparallèles, dans chacune desquelles étaient enfilées dix\npetites boules. La première ligne à droite était celle des\nunités, la seconde celle des dizaines, la troisième celle des\ncentaines, etc. Pour écrire un premier nombre sur l’abacus\non commençait par relever toutes les boules à la partie\nsupérieure de l’instrument, et ensuite on abaissait sur\nchaque ligne, à la partie inférieure, un nombre de boules\négal aux unités de l’ordre de ces lignes. Ainsi par exemple,\npour écrire le nombre 3,564, on abaissait 4 boules à la\npartie inférieure de la première ligne, 6 à celle de la\nseconde, 5 à celle de la troisième et 3 à celle de la qua¬\ntrième. Le nombre 3,564 se trouvait ainsi représenté\ncomme il l’est dans la figure 1. — Ce nombre étant\nécrit, s’agissait-il de lui ajouter un autre nombre, 53,729,\non commençait par abaisser 9 boules de la partie supé¬\nrieure de la première ligne à la partie inférieure ;\ncomme, dans le cas présent, il n’en restait que 6, après\navoir abaissé ces 6 boules, on relevait les 10 à la\npartie supérieure, en abaissant une boule pour cette\ndizaine à la seconde colonne, et on achevait l’opération\nsur la première en abaissant 3 boules pour compléter les\n9 qu’il s’agissait d’abaisser. Passant à la seconde colonne\non abaissait 2 boules pour le chiffre 2 des dizaines du\nnombre 53,729. Arrivé à la troisième colonne, on abais¬\nsait d’abord les 5 boules restantes, ensuite on remontait\nle tout en abaissant pour la dizaine une boule dans la\nquatrième colonne et on redescendait 2 boules à la troi¬\nsième colonne pour compléter le chiffre 7. Passant à la\nuatrième colonne, on abaissait 3 boules pour le chiffre\ndes mille, et enfin on abaissait 5 boules à la cinquième\ncolonne pour le chiffre 5 des dizaines de mille. L’appa¬\nrence finale de l’abacus était, après cette opération, celle\nde la figure 2, et le nombre 57,293, qui s’y trouve écrit\nà la partie inférieure, est la somme des deux nombres\n3,564 et 53,729.Pour ajouter un nouveau nombre à 57,293\non agirait de la même manière et ainsi de suite. On voit\ndonc qu’à l’aide de cet instrument, les additions des\nnombres peuvent s’effectuer avec la plus grande facilité ;\nil en est de même des soustractions qu’on peut exécuter\npar une marche inverse de celle que nous venons de\ndécrire. — L’abacus, abandonné par toutes les nations de\nl’Europe à l’exception de la Russie, est encore extrême¬\nment répandu en Chine, où on le trouve dans toutes les\nmaisons de commerce; il est également en usage dans\ncertaines parties de l’Inde et dans nos écoles primaires\nsous le nom de boulier compteur.\nL’usage de l'abacus suppose, comme on vient de le voir,\nparfaitement établi le système de numération décimale.\nA qui sommes-nous redevables de cette invention si\nféconde, ou du moins de son introduction en Europe ?\nChasles l’attribue à Doëce (V. ce mot) ; cette opinion a\nété hautement combattue par Libri. — D’après Chasles,\nBoèce se servait, sous le nom à'apices, de caractères\nnommés igin, andras, ormis, arbas, quimas, calcis,\nzénis, témenias et celentis, correspondant à nos chiffres\n1, 2, 3, 4, 5, 6, 7, 8, 9 ; quant à Yabacus, ce serait\nun tableau divisé par des lignes horizontales et verticales,\nformant des cases dans lesquelles devaient être inscrits\nces caractères, de façon que les unités de même ordre des\ndifférents nombres sur lesquels devait porter l’opération\nse trouvassent dans une même colonne verticale ; la case\ncorrespondante à un certain ordre d’unités devait être\npassée lorsque le nombre manquait dans cet ordre d’unités.\nLes opérations d’ailleurs se seraient faites sur ce tableau,\ncomme nous les faisons aujourd’hui. Ce serait, comme on\nvoit, un immense progrès sur l’opération purement méca¬\nnique que nous avons décrite précédemment. — D’après le\nmême géomètre, le zéro n’aurait pas tardé à apparaître sous\nle nom desipos, de sorte que les occidentaux auraient eu,\nlongtemps avant leurs relations avec les Arabes, un système\nde numération écrite entièrement identique à celui dont\nnous nous servons aujourd’hui. — D’après Libri, tout\ncela ne serait que chimères et visions. Notre système de\nnumération, d’origine hindoue, nous serait venu des Arabes\nau xii6 siècle ; tous les écrivains de cette époque le\ndisent ; tous les traités d’arithmétique le proclament ;\nla question ne saurait donc être douteuse.\nCependant les preuves alléguées par Chasles sont\ntirées d’anciennes copies manuscrites de l’Arithmétique de\nBoëce, qu’il paraît avoir étudiées avec soin ; et il serait\ndifficile d’admettre que ce qu’il dit y avoir vu ne s’y\ntrouvât pas. Tout au plus pourrait-on prétendre que les\nmanuscrits en question contiendraient des interpolations\nfaites depuis Boëce. Mais cette hypothèse présente encore\ndes difficultés parce que Boëce, d’après Chasles, attribue¬\nrait la connaissance de ce système aux Grecs (à quelques\nGrecs bien peu nombreux sans doute, car aucun ouvrage grec\nantérieur à Boëce, écrit à Athènes, à Alexandrie ou à Con¬\nstantinople, n’en fait mention, et Eutocius même n’y fait pas\nallusion). — Que conclure ? Nous croyons avec Libri\nque notre système de numération nous vient des Hindous\net nous pensons que Chasles se trompe en lui donnant\nune origine grecque ou latine. Mais on ne voit pas pourquoi\nBoëce, qui avait voyagé en Orient, n’aurait pas pu être\ninitié à l’arithmétique des Hindous par un marchand grec de\nConstantinople, que ses voyages auraient conduit dans\nl’Inde.On objecte, il est vrai, que Boëce est antérieur à Arya-\nbhata, l’auteur du plus ancien traité d’arithmétique indien\nconnu ; mais il n’est guère probable qu’Aryabhata ait\ndécouvert seul tout ce qui se trouve dans son ouvrage\noù, sans doute, figurent bien des choses connues avant\nl’auteur en Hindoustan. — Cependant, pourquoi la tradi¬\ntion ne ferait-elle remonter qu’au xne siècle l’introduction\ndu système décimal de numération parmi les nations occi¬\ndentales ? Pourquoi surtout cette introduction aurait-elle\nété regardée alors comme un événement tout nouveau,\npourquoi aurait-elle fait époque ? Cela s’expliquerait peut-\nêtre parce que, à partir de Boëce, les ténèbres n’avaient\nfait que s’épaissir sur toute l’Europe, jusqu’à l’invasion de\nl’Espagne par les Arabes, et que les connaissances qu’il\navait pu acquérir en Grèce, n’ayant pas eu le temps\nde se répandre, avaient fini par ne plus Lisser de\ntraces.\nChasles, à l’appui de cette opinion, cite un Traité de\nl’Abacus, de Raoul, évêque de Laon, où il serait dit\nque ce système de numération était tombé dans l’oubli\nchez les nations occidentales et que Gerbert et Hermann\nl’avaient remis en pratique. — Nous ne voyons d’invrai¬\nsemblable dans tout cela que l’idée de Chasles d’attri¬\nbuer une origine grecque ou latine à notre système de\nnumération et de pousser l’exagération de son système\njusqu’à se demander sérieusement, à propos de l’Arénaire,\nsi Archimède ne connaissait pas le système de l’abacus. —\nSi Chasles avait seulement voulu dire qu’Archimède con¬\nnaissait l’A6aÇ, comptoir, damier, buffet, qui est dénommé\ndans le premier vers du Jardin des racines grecques,\nsorte de machine à calculer que nous avons décrite au\ncommencement de cet article et telle qu’elle existe aujour¬\nd’hui en Chine, son hypothèse serait plus que probable.\nMais nous ne pensons pas que ce soit ce qu’a voulu dire\nChasles ; car alors il ne s’agirait plus d’un fait scien¬\ntifique comparable à l’invention de la méthode qui permit\nd’écrire tous les nombres avec neuf caractères seulement\net un zéro. — Il ne s’agit pas en effet de la numération\nparlée des Grecs, qui fut toujours décimale, il s’agit de\nleur numération écrite. Or, que les abax, dans les colonnes\nou les rainures desquels on faisait mouvoir des cailloux ou\nde petites boules, rappelassent la numération parlée déci¬\nmale, cela n’aurait même pas lieu d'étonner, mais ne prou¬\nverait rien pour la numération écrite. — Au reste, on voit\nquelquefois les nations perfectionner leurs méthodes,\njamais on ne les voit en changer totalement les bases.\nNous sommes assurément bien éloignés de vouloir faire\naux Grecs, même à Pappus et à Eutocius, l’injure de\ncroire qu’ils n’eussent pas été mille fois capables d’in-\nventer le système décimal de numération avec les neuf\ncliitfres et le zéro, si leur manière d’être et de penser les\neût davantage portés aux spéculations arithmétiques. Il ne\nfaut pas pour cela beaucoup de génie et ils auraient pu en\nrevendre aux Latins de la décadence, aux Hindous, aux\nArabes et à tous nos abacistes ; ce qu’il fallait, c’était une\ncertaine disposition d’esprit, dépendant d une certaine con¬\nformation cérébrale.\n" "ABACUS. L’abacus ou abaque était un instrument en\nusage dans l’antiquité pour faciliter les calculs arithmé¬\ntiques. Il paraît que c’était dans l’origine une petite table\nsur laquelle on traçait les figures et où l’on exécutait les\nopérations. Cet instrument semble aussi ancien que l’arith¬\nmétique, qui d’ailleurs s’appelait abacus au moyen âge ;\non le trouve chez les Grecs, les Romains, les Chinois, les\nAllemands et les Français. Sa forme varia avec le temps ;\nil devint enfin un cadre long divisé par plusieurs cordes\nparallèles, dans chacune desquelles étaient enfilées dix\npetites boules. La première ligne à droite était celle des\nunités, la seconde celle des dizaines, la troisième celle des\ncentaines, etc. Pour écrire un premier nombre sur l’abacus\non commençait par relever toutes les boules à la partie\nsupérieure de l’instrument, et ensuite on abaissait sur\nchaque ligne, à la partie inférieure, un nombre de boules\négal aux unités de l’ordre de ces lignes. Ainsi par exemple,\npour écrire le nombre 3,564, on abaissait 4 boules à la\npartie inférieure de la première ligne, 6 à celle de la\nseconde, 5 à celle de la troisième et 3 à celle de la qua¬\ntrième. Le nombre 3,564 se trouvait ainsi représenté\ncomme il l’est dans la figure 1. — Ce nombre étant\nécrit, s’agissait-il de lui ajouter un autre nombre, 53,729,\non commençait par abaisser 9 boules de la partie supé¬\nrieure de la première ligne à la partie inférieure ;\ncomme, dans le cas présent, il n’en restait que 6, après\navoir abaissé ces 6 boules, on relevait les 10 à la\npartie supérieure, en abaissant une boule pour cette\ndizaine à la seconde colonne, et on achevait l’opération\nsur la première en abaissant 3 boules pour compléter les\n9 qu’il s’agissait d’abaisser. Passant à la seconde colonne\non abaissait 2 boules pour le chiffre 2 des dizaines du\nnombre 53,729. Arrivé à la troisième colonne, on abais¬\nsait d’abord les 5 boules restantes, ensuite on remontait\nle tout en abaissant pour la dizaine une boule dans la\nquatrième colonne et on redescendait 2 boules à la troi¬\nsième colonne pour compléter le chiffre 7. Passant à la\nuatrième colonne, on abaissait 3 boules pour le chiffre\ndes mille, et enfin on abaissait 5 boules à la cinquième\ncolonne pour le chiffre 5 des dizaines de mille. L’appa¬\nrence finale de l’abacus était, après cette opération, celle\nde la figure 2, et le nombre 57,293, qui s’y trouve écrit\nà la partie inférieure, est la somme des deux nombres\n3,564 et 53,729.Pour ajouter un nouveau nombre à 57,293\non agirait de la même manière et ainsi de suite. On voit\ndonc qu’à l’aide de cet instrument, les additions des\nnombres peuvent s’effectuer avec la plus grande facilité ;\nil en est de même des soustractions qu’on peut exécuter\npar une marche inverse de celle que nous venons de\ndécrire. — L’abacus, abandonné par toutes les nations de\nl’Europe à l’exception de la Russie, est encore extrême¬\nment répandu en Chine, où on le trouve dans toutes les\nmaisons de commerce; il est également en usage dans\ncertaines parties de l’Inde et dans nos écoles primaires\nsous le nom de boulier compteur.\nL’usage de l'abacus suppose, comme on vient de le voir,\nparfaitement établi le système de numération décimale.\nA qui sommes-nous redevables de cette invention si\nféconde, ou du moins de son introduction en Europe ?\nChasles l’attribue à Doëce (V. ce mot) ; cette opinion a\nété hautement combattue par Libri. — D’après Chasles,\nBoèce se servait, sous le nom à'apices, de caractères\nnommés igin, andras, ormis, arbas, quimas, calcis,\nzénis, témenias et celentis, correspondant à nos chiffres\n1, 2, 3, 4, 5, 6, 7, 8, 9 ; quant à Yabacus, ce serait\nun tableau divisé par des lignes horizontales et verticales,\nformant des cases dans lesquelles devaient être inscrits\nces caractères, de façon que les unités de même ordre des\ndifférents nombres sur lesquels devait porter l’opération\nse trouvassent dans une même colonne verticale ; la case\ncorrespondante à un certain ordre d’unités devait être\npassée lorsque le nombre manquait dans cet ordre d’unités.\nLes opérations d’ailleurs se seraient faites sur ce tableau,\ncomme nous les faisons aujourd’hui. Ce serait, comme on\nvoit, un immense progrès sur l’opération purement méca¬\nnique que nous avons décrite précédemment. — D’après le\nmême géomètre, le zéro n’aurait pas tardé à apparaître sous\nle nom desipos, de sorte que les occidentaux auraient eu,\nlongtemps avant leurs relations avec les Arabes, un système\nde numération écrite entièrement identique à celui dont\nnous nous servons aujourd’hui. — D’après Libri, tout\ncela ne serait que chimères et visions. Notre système de\nnumération, d’origine hindoue, nous serait venu des Arabes\nau xii6 siècle ; tous les écrivains de cette époque le\ndisent ; tous les traités d’arithmétique le proclament ;\nla question ne saurait donc être douteuse.\nCependant les preuves alléguées par Chasles sont\ntirées d’anciennes copies manuscrites de l’Arithmétique de\nBoëce, qu’il paraît avoir étudiées avec soin ; et il serait\ndifficile d’admettre que ce qu’il dit y avoir vu ne s’y\ntrouvât pas. Tout au plus pourrait-on prétendre que les\nmanuscrits en question contiendraient des interpolations\nfaites depuis Boëce. Mais cette hypothèse présente encore\ndes difficultés parce que Boëce, d’après Chasles, attribue¬\nrait la connaissance de ce système aux Grecs (à quelques\nGrecs bien peu nombreux sans doute, car aucun ouvrage grec\nantérieur à Boëce, écrit à Athènes, à Alexandrie ou à Con¬\nstantinople, n’en fait mention, et Eutocius même n’y fait pas\nallusion). — Que conclure ? Nous croyons avec Libri\nque notre système de numération nous vient des Hindous\net nous pensons que Chasles se trompe en lui donnant\nune origine grecque ou latine. Mais on ne voit pas pourquoi\nBoëce, qui avait voyagé en Orient, n’aurait pas pu être\ninitié à l’arithmétique des Hindous par un marchand grec de\nConstantinople, que ses voyages auraient conduit dans\nl’Inde.On objecte, il est vrai, que Boëce est antérieur à Arya-\nbhata, l’auteur du plus ancien traité d’arithmétique indien\nconnu ; mais il n’est guère probable qu’Aryabhata ait\ndécouvert seul tout ce qui se trouve dans son ouvrage\noù, sans doute, figurent bien des choses connues avant\nl’auteur en Hindoustan. — Cependant, pourquoi la tradi¬\ntion ne ferait-elle remonter qu’au xne siècle l’introduction\ndu système décimal de numération parmi les nations occi¬\ndentales ? Pourquoi surtout cette introduction aurait-elle\nété regardée alors comme un événement tout nouveau,\npourquoi aurait-elle fait époque ? Cela s’expliquerait peut-\nêtre parce que, à partir de Boëce, les ténèbres n’avaient\nfait que s’épaissir sur toute l’Europe, jusqu’à l’invasion de\nl’Espagne par les Arabes, et que les connaissances qu’il\navait pu acquérir en Grèce, n’ayant pas eu le temps\nde se répandre, avaient fini par ne plus Lisser de\ntraces.\nChasles, à l’appui de cette opinion, cite un Traité de\nl’Abacus, de Raoul, évêque de Laon, où il serait dit\nque ce système de numération était tombé dans l’oubli\nchez les nations occidentales et que Gerbert et Hermann\nl’avaient remis en pratique. — Nous ne voyons d’invrai¬\nsemblable dans tout cela que l’idée de Chasles d’attri¬\nbuer une origine grecque ou latine à notre système de\nnumération et de pousser l’exagération de son système\njusqu’à se demander sérieusement, à propos de l’Arénaire,\nsi Archimède ne connaissait pas le système de l’abacus. —\nSi Chasles avait seulement voulu dire qu’Archimède con¬\nnaissait l’A6aÇ, comptoir, damier, buffet, qui est dénommé\ndans le premier vers du Jardin des racines grecques,\nsorte de machine à calculer que nous avons décrite au\ncommencement de cet article et telle qu’elle existe aujour¬\nd’hui en Chine, son hypothèse serait plus que probable.\nMais nous ne pensons pas que ce soit ce qu’a voulu dire\nChasles ; car alors il ne s’agirait plus d’un fait scien¬\ntifique comparable à l’invention de la méthode qui permit\nd’écrire tous les nombres avec neuf caractères seulement\net un zéro. — Il ne s’agit pas en effet de la numération\nparlée des Grecs, qui fut toujours décimale, il s’agit de\nleur numération écrite. Or, que les abax, dans les colonnes\nou les rainures desquels on faisait mouvoir des cailloux ou\nde petites boules, rappelassent la numération parlée déci¬\nmale, cela n’aurait même pas lieu d'étonner, mais ne prou¬\nverait rien pour la numération écrite. — Au reste, on voit\nquelquefois les nations perfectionner leurs méthodes,\njamais on ne les voit en changer totalement les bases.\nNous sommes assurément bien éloignés de vouloir faire\naux Grecs, même à Pappus et à Eutocius, l’injure de\ncroire qu’ils n’eussent pas été mille fois capables d’in-\nventer le système décimal de numération avec les neuf\ncliitfres et le zéro, si leur manière d’être et de penser les\neût davantage portés aux spéculations arithmétiques. Il ne\nfaut pas pour cela beaucoup de génie et ils auraient pu en\nrevendre aux Latins de la décadence, aux Hindous, aux\nArabes et à tous nos abacistes ; ce qu’il fallait, c’était une\ncertaine disposition d’esprit, dépendant d une certaine con¬\nformation cérébrale.\n"
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
content = "Instrument de musique" #df_LGE.content[2][:512] content = "Instrument de musique" #df_LGE.content[2][:512]
word_attributions = cls_explainer(content if len(content) < 512 else content[:512]) word_attributions = cls_explainer(content if len(content) < 512 else content[:512])
word_attributions word_attributions
``` ```
%% Output %% Output
[('[CLS]', 0.0), [('[CLS]', 0.0),
('Instrument', 0.5555782891531604), ('Instrument', 0.5555782891531604),
('de', 0.24325958616394933), ('de', 0.24325958616394933),
('musique', 0.7950833530900966), ('musique', 0.7950833530900966),
('[SEP]', 0.0)] ('[SEP]', 0.0)]
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
cls_explainer.predicted_class_name cls_explainer.predicted_class_name
``` ```
%% Output %% Output
'Musique' 'Musique'
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
cls_explainer.visualize() cls_explainer.visualize()
``` ```
%% Output %% Output
<IPython.core.display.HTML object> <IPython.core.display.HTML object>
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
* récupérer les mots positifs par domaine (EDdA et LGE) * récupérer les mots positifs par domaine (EDdA et LGE)
* faire des nuages de mots et comparer les plus fréquents entre EDdA et LGE (corpus parallèle) * faire des nuages de mots et comparer les plus fréquents entre EDdA et LGE (corpus parallèle)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment