consec-model-weights / src /utils /detokenization.py
Harsha909's picture
Upload 47 files
6dc7c27 verified
Raw
History Blame Contribute Delete
2.09 kB
from typing import Tuple, Dict, List
from sacremoses import MosesDetokenizer
_md = MosesDetokenizer(lang="en")
def detokenize(sentence: str) -> Tuple[str, Dict[int, int]]:
offset_map = {}
detokenized_sentence = _md.detokenize(sentence.split(" "), return_str=True)
it = iter(enumerate(sentence))
for j, nc in enumerate(detokenized_sentence):
while True:
i, oc = next(it)
offset_map[i] = j
if oc == nc:
break
offset_map[len(sentence)] = len(detokenized_sentence)
return detokenized_sentence, offset_map
def detokenize_text(text_tokens: List[str], ignore_idxs: List[int]) -> str:
ignore_idxs = sorted(ignore_idxs)
text, start = "", 0
for ignore_idx in ignore_idxs:
text += detokenize(" ".join(text_tokens[start:ignore_idx]))[0]
text += " " + text_tokens[ignore_idx] + " "
start = ignore_idx + 1
if start != len(text_tokens):
text += detokenize(" ".join(text_tokens[start:]))[0]
return text.strip()
if __name__ == "__main__":
def old_detokenize_text(text_tokens: List[str], ignore_idx: int) -> str:
pre_instance = detokenize(" ".join(text_tokens[:ignore_idx]))[0]
post_instance = detokenize(" ".join(text_tokens[ignore_idx + 1 :]))[0]
return pre_instance + f" {text_tokens[ignore_idx]} " + post_instance
tokens = ["I", "have", "a", "{{{ dog }}}", "."]
print(old_detokenize_text(tokens, ignore_idx=3))
print(detokenize_text(tokens, ignore_idxs=[3]))
print(detokenize_text(tokens, ignore_idxs=[]))
print()
tokens = ["I", "have", "a ", "{{{ dog }}}"]
print(old_detokenize_text(tokens, ignore_idx=3))
print(detokenize_text(tokens, ignore_idxs=[3]))
print(detokenize_text(tokens, ignore_idxs=[]))
print()
tokens = ["{{{ I }}}", "have", "a", "dog"]
print(old_detokenize_text(tokens, ignore_idx=0))
print(detokenize_text(tokens, ignore_idxs=[0]))
print(detokenize_text(tokens, ignore_idxs=[]))
print()