louisbrulenaudet commited on
Commit
bccaac2
1 Parent(s): 541f983

Upload 11 files

Browse files
1_Pooling/config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "word_embedding_dimension": 768,
3
+ "pooling_mode_cls_token": true,
4
+ "pooling_mode_mean_tokens": false,
5
+ "pooling_mode_max_tokens": false,
6
+ "pooling_mode_mean_sqrt_len_tokens": false
7
+ }
README.md ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ pipeline_tag: sentence-similarity
3
+ tags:
4
+ - sentence-transformers
5
+ - feature-extraction
6
+ - sentence-similarity
7
+ - transformers
8
+ - legal
9
+ - french-law
10
+ - droit français
11
+ - tax
12
+ - droit fiscal
13
+ - fiscalité
14
+ license: apache-2.0
15
+ pretty_name: Domain-adapted mBERT for French Tax Practice
16
+ datasets:
17
+ - louisbrulenaudet/lpf
18
+ - louisbrulenaudet/cgi
19
+ - louisbrulenaudet/code-douanes
20
+
21
+ language:
22
+ - fr
23
+ library_name: sentence-transformers
24
+ ---
25
+
26
+ # Domain-adapted mBERT for French Tax Practice
27
+
28
+ This is a [sentence-transformers](https://www.SBERT.net) model: It maps sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like clustering or semantic search.
29
+
30
+ Pretrained transformers model on the top 102 languages with the largest Wikipedia using a masked language modeling (MLM) objective, fitted using Transformer-based Sequential Denoising Auto-Encoder for unsupervised sentence embedding learning with one objective : french tax domain adaptation.
31
+
32
+ This way, the model learns an inner representation of the french legal language in the training set that can then be used to extract features useful for downstream tasks: if you have a dataset of labeled sentences for instance, you can train a standard classifier using the features produced by the model as inputs.
33
+
34
+ ## Usage (Sentence-Transformers)
35
+
36
+ Using this model becomes easy when you have [sentence-transformers](https://www.SBERT.net) installed:
37
+
38
+ ```
39
+ pip install -U sentence-transformers
40
+ ```
41
+
42
+ Then you can use the model like this:
43
+
44
+ ```python
45
+ from sentence_transformers import SentenceTransformer
46
+ sentences = ["This is an example sentence", "Each sentence is converted"]
47
+
48
+ model = SentenceTransformer("louisbrulenaudet/tsdae-lemone-mbert-tax")
49
+ embeddings = model.encode(sentences)
50
+ print(embeddings)
51
+ ```
52
+
53
+ ## Usage (HuggingFace Transformers)
54
+ Without [sentence-transformers](https://www.SBERT.net), you can use the model like this: First, you pass your input through the transformer model, then you have to apply the right pooling-operation on-top of the contextualized word embeddings.
55
+
56
+ ```python
57
+ from transformers import AutoTokenizer, AutoModel
58
+ import torch
59
+
60
+
61
+ def cls_pooling(model_output, attention_mask):
62
+ return model_output[0][:,0]
63
+
64
+
65
+ # Sentences we want sentence embeddings for
66
+ sentences = ['This is an example sentence', 'Each sentence is converted']
67
+
68
+ # Load model from HuggingFace Hub
69
+ tokenizer = AutoTokenizer.from_pretrained("louisbrulenaudet/tsdae-lemone-mbert-tax")
70
+ model = AutoModel.from_pretrained("louisbrulenaudet/tsdae-lemone-mbert-tax")
71
+
72
+ # Tokenize sentences
73
+ encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
74
+
75
+ # Compute token embeddings
76
+ with torch.no_grad():
77
+ model_output = model(**encoded_input)
78
+
79
+ # Perform pooling. In this case, cls pooling.
80
+ sentence_embeddings = cls_pooling(model_output, encoded_input["attention_mask"])
81
+
82
+ print("Sentence embeddings:")
83
+ print(sentence_embeddings)
84
+ ```
85
+
86
+ ## Training
87
+ The model was trained with the parameters:
88
+
89
+ **DataLoader**:
90
+
91
+ `torch.utils.data.dataloader.DataLoader` of length 5507 with parameters:
92
+ ```
93
+ {'batch_size': 5, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
94
+ ```
95
+
96
+ **Loss**:
97
+
98
+ `sentence_transformers.losses.DenoisingAutoEncoderLoss.DenoisingAutoEncoderLoss`
99
+
100
+ Parameters of the fit()-Method:
101
+ ```
102
+ {
103
+ "epochs": 1,
104
+ "evaluation_steps": 0,
105
+ "max_grad_norm": 1,
106
+ "optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
107
+ "optimizer_params": {
108
+ "lr": 3e-05
109
+ },
110
+ "scheduler": "constantlr",
111
+ "steps_per_epoch": null,
112
+ "warmup_steps": 10000,
113
+ "weight_decay": 0
114
+ }
115
+ ```
116
+
117
+ ## Full Model Architecture
118
+ ```
119
+ SentenceTransformer(
120
+ (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel
121
+ (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
122
+ )
123
+ ```
124
+
125
+ ## Citing & Authors
126
+
127
+ If you use this code in your research, please use the following BibTeX entry.
128
+
129
+ ```BibTeX
130
+ @misc{louisbrulenaudet2023,
131
+ author = {Louis Brulé Naudet},
132
+ title = {Domain-adapted mBERT for French Tax Practice},
133
+ year = {2023}
134
+ howpublished = {\url{https://huggingface.co/louisbrulenaudet/tsdae-lemone-mbert-tax}},
135
+ }
136
+ ```
137
+
138
+ ## Feedback
139
+
140
+ If you have any feedback, please reach out at [louisbrulenaudet@icloud.com](mailto:louisbrulenaudet@icloud.com).
config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "bert-base-multilingual-uncased",
3
+ "architectures": [
4
+ "BertModel"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "classifier_dropout": null,
8
+ "directionality": "bidi",
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 768,
12
+ "initializer_range": 0.02,
13
+ "intermediate_size": 3072,
14
+ "layer_norm_eps": 1e-12,
15
+ "max_position_embeddings": 512,
16
+ "model_type": "bert",
17
+ "num_attention_heads": 12,
18
+ "num_hidden_layers": 12,
19
+ "pad_token_id": 0,
20
+ "pooler_fc_size": 768,
21
+ "pooler_num_attention_heads": 12,
22
+ "pooler_num_fc_layers": 3,
23
+ "pooler_size_per_head": 128,
24
+ "pooler_type": "first_token_transform",
25
+ "position_embedding_type": "absolute",
26
+ "torch_dtype": "float32",
27
+ "transformers_version": "4.35.2",
28
+ "type_vocab_size": 2,
29
+ "use_cache": true,
30
+ "vocab_size": 105879
31
+ }
config_sentence_transformers.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "__version__": {
3
+ "sentence_transformers": "2.2.2",
4
+ "transformers": "4.35.2",
5
+ "pytorch": "2.1.0+cu121"
6
+ }
7
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee229cd98f4c6c2b8bad34c7abe3d041e96476f9bff50bb0499c8181520077e8
3
+ size 669448040
modules.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "idx": 0,
4
+ "name": "0",
5
+ "path": "",
6
+ "type": "sentence_transformers.models.Transformer"
7
+ },
8
+ {
9
+ "idx": 1,
10
+ "name": "1",
11
+ "path": "1_Pooling",
12
+ "type": "sentence_transformers.models.Pooling"
13
+ }
14
+ ]
sentence_bert_config.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "max_seq_length": 512,
3
+ "do_lower_case": false
4
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_token": "[CLS]",
3
+ "mask_token": "[MASK]",
4
+ "pad_token": "[PAD]",
5
+ "sep_token": "[SEP]",
6
+ "unk_token": "[UNK]"
7
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[PAD]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "100": {
12
+ "content": "[UNK]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "101": {
20
+ "content": "[CLS]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "102": {
28
+ "content": "[SEP]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "103": {
36
+ "content": "[MASK]",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "clean_up_tokenization_spaces": true,
45
+ "cls_token": "[CLS]",
46
+ "do_lower_case": true,
47
+ "mask_token": "[MASK]",
48
+ "model_max_length": 512,
49
+ "pad_token": "[PAD]",
50
+ "sep_token": "[SEP]",
51
+ "strip_accents": null,
52
+ "tokenize_chinese_chars": true,
53
+ "tokenizer_class": "BertTokenizer",
54
+ "unk_token": "[UNK]"
55
+ }
vocab.txt ADDED
The diff for this file is too large to render. See raw diff