Add ul2 base en->nl model. Special care for its newline_token and use_fast=False
Browse files- app.py +2 -2
- default_texts.py +1 -1
- generator.py +17 -5
app.py
CHANGED
@@ -15,8 +15,8 @@ TRANSLATION_NL_TO_EN = "translation_nl_to_en"
|
|
15 |
|
16 |
GENERATOR_LIST = [
|
17 |
{
|
18 |
-
"model_name": "yhavinga/
|
19 |
-
"desc": "
|
20 |
"task": TRANSLATION_EN_TO_NL,
|
21 |
"split_sentences": False,
|
22 |
},
|
|
|
15 |
|
16 |
GENERATOR_LIST = [
|
17 |
{
|
18 |
+
"model_name": "yhavinga/ul2-base-en-nl",
|
19 |
+
"desc": "UL2 base en->nl",
|
20 |
"task": TRANSLATION_EN_TO_NL,
|
21 |
"split_sentences": False,
|
22 |
},
|
default_texts.py
CHANGED
@@ -33,7 +33,7 @@ The ISS - a joint project involving five space agencies - has been in orbit sinc
|
|
33 |
"Het Verboden Rijk (nl)": {
|
34 |
"url": "https://nl.wikipedia.org/wiki/Het_Verboden_Rijk",
|
35 |
"year": 1932,
|
36 |
-
"text": """Geduldig als een dode zat ik op het dek van de boot te wachten die mij de stroom op zou varen. Het was een sombere dag. De vele kleuren van Lisboa waren verduisterd door een nevel die hoogst zelden de mond van de Taag kan vinden. Het duurde lang. Telkens kwamen nog een paar mensen of een paar vaten de plank over. Maar opeens stroomde een brede strook water tussen de stroom en de oever. Ik zag een ruiter wegrijden, ik kende zijn gelaat: een koerier, hij moest berichten dat ik veilig vertrokken was. Maar wie zou mij beletten in het water te springen en met enkele armslagen de oever weer te bereiken! Ik deed het niet, al was het gemakkelijk. Weinig wist ik dat ik later toch dien sprong zou doen om een duizendvoudigen afstand te overzwemmen, niet meer om mijn ziel, maar om mijn lichaam te redden, en een stuk papier."""
|
37 |
},
|
38 |
"Hersenschimmen (nl)": {
|
39 |
"url": "https://www.bibliotheek.nl/catalogus/titel.37120397X.html/hersenschimmen/",
|
|
|
33 |
"Het Verboden Rijk (nl)": {
|
34 |
"url": "https://nl.wikipedia.org/wiki/Het_Verboden_Rijk",
|
35 |
"year": 1932,
|
36 |
+
"text": """Geduldig als een dode zat ik op het dek van de boot te wachten die mij de stroom op zou varen. Het was een sombere dag. De vele kleuren van Lisboa waren verduisterd door een nevel die hoogst zelden de mond van de Taag kan vinden. Het duurde lang. Telkens kwamen nog een paar mensen of een paar vaten de plank over. Maar opeens stroomde een brede strook water tussen de stroom en de oever. Ik zag een ruiter wegrijden, ik kende zijn gelaat: een koerier, hij moest berichten dat ik veilig vertrokken was. Maar wie zou mij beletten in het water te springen en met enkele armslagen de oever weer te bereiken! Ik deed het niet, al was het gemakkelijk. Weinig wist ik dat ik later toch dien sprong zou doen om een duizendvoudigen afstand te overzwemmen, niet meer om mijn ziel, maar om mijn lichaam te redden, en een stuk papier.""",
|
37 |
},
|
38 |
"Hersenschimmen (nl)": {
|
39 |
"url": "https://www.bibliotheek.nl/catalogus/titel.37120397X.html/hersenschimmen/",
|
generator.py
CHANGED
@@ -22,7 +22,10 @@ def get_access_token():
|
|
22 |
def load_model(model_name):
|
23 |
os.environ["TOKENIZERS_PARALLELISM"] = "false"
|
24 |
tokenizer = AutoTokenizer.from_pretrained(
|
25 |
-
model_name,
|
|
|
|
|
|
|
26 |
)
|
27 |
if tokenizer.pad_token is None:
|
28 |
print("Adding pad_token to the tokenizer")
|
@@ -89,6 +92,7 @@ class Generator:
|
|
89 |
def generate(self, text: str, **generate_kwargs) -> (str, dict):
|
90 |
# Replace two or more newlines with a single newline in text
|
91 |
text = re.sub(r"\n{2,}", "\n", text)
|
|
|
92 |
generate_kwargs = {**self.gen_kwargs, **generate_kwargs}
|
93 |
|
94 |
# if there are newlines in the text, and the model needs line-splitting, split the text and recurse
|
@@ -97,6 +101,10 @@ class Generator:
|
|
97 |
translated = [self.generate(line, **generate_kwargs)[0] for line in lines]
|
98 |
return "\n".join(translated), generate_kwargs
|
99 |
|
|
|
|
|
|
|
|
|
100 |
batch_encoded = self.tokenizer(
|
101 |
self.prefix + text,
|
102 |
max_length=generate_kwargs["max_length"],
|
@@ -114,10 +122,14 @@ class Generator:
|
|
114 |
decoded_preds = self.tokenizer.batch_decode(
|
115 |
logits.cpu().numpy(), skip_special_tokens=False
|
116 |
)
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
|
|
|
|
|
|
|
|
121 |
return decoded_preds[0], generate_kwargs
|
122 |
|
123 |
def __str__(self):
|
|
|
22 |
def load_model(model_name):
|
23 |
os.environ["TOKENIZERS_PARALLELISM"] = "false"
|
24 |
tokenizer = AutoTokenizer.from_pretrained(
|
25 |
+
model_name,
|
26 |
+
from_flax=True,
|
27 |
+
use_fast=("ul2" not in model_name),
|
28 |
+
use_auth_token=get_access_token(),
|
29 |
)
|
30 |
if tokenizer.pad_token is None:
|
31 |
print("Adding pad_token to the tokenizer")
|
|
|
92 |
def generate(self, text: str, **generate_kwargs) -> (str, dict):
|
93 |
# Replace two or more newlines with a single newline in text
|
94 |
text = re.sub(r"\n{2,}", "\n", text)
|
95 |
+
|
96 |
generate_kwargs = {**self.gen_kwargs, **generate_kwargs}
|
97 |
|
98 |
# if there are newlines in the text, and the model needs line-splitting, split the text and recurse
|
|
|
101 |
translated = [self.generate(line, **generate_kwargs)[0] for line in lines]
|
102 |
return "\n".join(translated), generate_kwargs
|
103 |
|
104 |
+
# if self.tokenizer has a newline_token attribute, replace \n with it
|
105 |
+
if hasattr(self.tokenizer, "newline_token"):
|
106 |
+
text = re.sub(r"\n", self.tokenizer.newline_token, text)
|
107 |
+
|
108 |
batch_encoded = self.tokenizer(
|
109 |
self.prefix + text,
|
110 |
max_length=generate_kwargs["max_length"],
|
|
|
122 |
decoded_preds = self.tokenizer.batch_decode(
|
123 |
logits.cpu().numpy(), skip_special_tokens=False
|
124 |
)
|
125 |
+
|
126 |
+
def replace_tokens(pred):
|
127 |
+
pred = pred.replace("<pad> ", "").replace("<pad>", "").replace("</s>", "")
|
128 |
+
if hasattr(self.tokenizer, "newline_token"):
|
129 |
+
pred = pred.replace(self.tokenizer.newline_token, "\n")
|
130 |
+
return pred
|
131 |
+
|
132 |
+
decoded_preds = list(map(replace_tokens, decoded_preds))
|
133 |
return decoded_preds[0], generate_kwargs
|
134 |
|
135 |
def __str__(self):
|