crossroderick commited on
Commit
178501c
·
1 Parent(s): 9fea118

Addition of a new tokeniser (pre-v5)

Browse files
README.md CHANGED
@@ -132,7 +132,9 @@ KazParC деректер жинағын жүктеп алу үшін сізге
132
 
133
  - **DalaT5 v3**: 20 сәуірде дәл реттелген, 20 сәуірде қолжетімді болды. Жаттығу үшін ~1,6 миллион деректер жазбасы пайдаланылды. Үшінші итерация одан әрі жақсартуларды, сондай-ақ белгілі бір дәрежеде семантикалық түсінуді көрсетті / Fine-tuned on April 20, made available on April 20. Used ~1.6 million data records for training. Third iteration that showed further improvements, as well as some degree of semantic understanding
134
 
135
- - **DalaT5 v4**: 23 сәуірде нақтыланған, 23 сәуірде қолжетімді болды. Жаттығу үшін ~1,9 миллион жазба (Wikipedia dump + CC100 + KazParC) пайдаланылды. Семантикалық түсініктің жоғарылауын көрсететін төртінші итерация / Fine-tuned on April 23, made available on April 23. Used ~1.9 million records (Wikipedia dump + CC100 + KazParC) for training. Fourth iteration that showed increased semantic understanding.
 
 
136
 
137
  ---
138
 
 
132
 
133
  - **DalaT5 v3**: 20 сәуірде дәл реттелген, 20 сәуірде қолжетімді болды. Жаттығу үшін ~1,6 миллион деректер жазбасы пайдаланылды. Үшінші итерация одан әрі жақсартуларды, сондай-ақ белгілі бір дәрежеде семантикалық түсінуді көрсетті / Fine-tuned on April 20, made available on April 20. Used ~1.6 million data records for training. Third iteration that showed further improvements, as well as some degree of semantic understanding
134
 
135
+ - **DalaT5 v4**: 23 сәуірде нақтыланған, 23 сәуірде қолжетімді болды. Жаттығу үшін ~1,9 миллион жазба (Wikipedia dump + CC100 + KazParC) пайдаланылды. Семантикалық түсініктің жоғарылауын көрсететін төртінші итерация / Fine-tuned on April 23, made available on April 23. Used ~1.9 million records (Wikipedia dump + CC100 + KazParC) for training. Fourth iteration that showed increased semantic understanding
136
+
137
+ - **DalaT5 v5**: Fine-tuning to occur on April 24, will be released on the same day. Set to use ~1.9 million records (like v4) and have its own tokeniser to better handle the Kazakh Cyrillic and Latin scripts
138
 
139
  ---
140
 
src/tokeniser/special_tokens_map.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "eos_token": "</s>",
4
+ "pad_token": "<pad>",
5
+ "unk_token": "<unk>"
6
+ }
src/tokeniser/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
src/tokeniser/tokenizer_config.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ "1": {
12
+ "content": "<s>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "</s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "<unk>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ }
35
+ },
36
+ "bos_token": "<s>",
37
+ "clean_up_tokenization_spaces": false,
38
+ "eos_token": "</s>",
39
+ "extra_special_tokens": {},
40
+ "model_max_length": 1000000000000000019884624838656,
41
+ "pad_token": "<pad>",
42
+ "tokenizer_class": "PreTrainedTokenizer",
43
+ "unk_token": "<unk>"
44
+ }
src/train_t5.py CHANGED
@@ -12,10 +12,11 @@ from transformers import (
12
  # Path config
13
  base_model = "t5-small"
14
  data_path = "src/data/clean_corpus.jsonl"
 
15
  output_dir = "checkpoints/"
16
 
17
  # Load tokeniser and model
18
- tokeniser = T5TokenizerFast.from_pretrained(base_model)
19
  model = T5ForConditionalGeneration.from_pretrained(base_model)
20
 
21
 
 
12
  # Path config
13
  base_model = "t5-small"
14
  data_path = "src/data/clean_corpus.jsonl"
15
+ tokeniser_path = "src/tokeniser/"
16
  output_dir = "checkpoints/"
17
 
18
  # Load tokeniser and model
19
+ tokeniser = T5TokenizerFast.from_pretrained(tokeniser_path)
20
  model = T5ForConditionalGeneration.from_pretrained(base_model)
21
 
22
 
src/train_tokeniser.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from tokenizers.pre_tokenizers import Whitespace
3
+ from transformers import PreTrainedTokenizerFast
4
+ from tokenizers import Tokenizer, models, trainers
5
+ from tokenizers.normalizers import NFD, Lowercase, StripAccents, Sequence
6
+
7
+
8
+ # Load corpus data
9
+ corpus = []
10
+
11
+ with open("src/data/clean_corpus.jsonl", "r", encoding = "utf-8") as f_in:
12
+ for i, line in enumerate(f_in):
13
+ if i >= 10000: # Take only 10000 records for the tokeniser (no need to load everything in the corpus)
14
+ break
15
+
16
+ item = json.loads(line)
17
+ src = item["transliteration"]["src"]
18
+ tgt = item["transliteration"]["tgt"]
19
+
20
+ # Feed both sides into tokeniser training
21
+ corpus.append(src)
22
+ corpus.append(tgt)
23
+
24
+ # Initialise a tokenizer
25
+ tokeniser = Tokenizer(models.BPE(unk_token = "<unk>"))
26
+
27
+ # Normalisation, important for characters such as those with with diacritics
28
+ tokeniser.normalizer = Sequence([
29
+ NFD(), Lowercase(), StripAccents()
30
+ ])
31
+
32
+ # Basic whitespace pre-tokenization
33
+ tokeniser.pre_tokenizer = Whitespace()
34
+
35
+ # Trainer
36
+ trainer = trainers.BpeTrainer(
37
+ vocab_size = 8000,
38
+ special_tokens = ["<pad>", "<s>", "</s>", "<unk>"]
39
+ )
40
+
41
+ # Train from the corpus
42
+ tokeniser.train_from_iterator(corpus, trainer)
43
+
44
+ # Wrap it for Hugging Face
45
+ hf_tokeniser = PreTrainedTokenizerFast(
46
+ tokenizer_object = tokeniser,
47
+ unk_token = "<unk>",
48
+ pad_token = "<pad>",
49
+ bos_token = "<s>",
50
+ eos_token = "</s>",
51
+ )
52
+
53
+ # Save the HF-compliant tokeniser
54
+ hf_tokeniser.save_pretrained("src/tokeniser/")