yhavinga commited on
Commit
528bd83
β€’
1 Parent(s): 91f8619

Add ul2 base en->nl model. Special care for its newline_token and use_fast=False

Browse files
Files changed (3) hide show
  1. app.py +2 -2
  2. default_texts.py +1 -1
  3. 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/longt5-local-eff-large-nl8-voc8k-ddwn-neddx2-en-nl",
19
- "desc": "longT5 large nl8 en->nl",
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, from_flax=True, use_auth_token=get_access_token()
 
 
 
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
- decoded_preds = [
118
- pred.replace("<pad> ", "").replace("<pad>", "").replace("</s>", "")
119
- for pred in decoded_preds
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):