in summarize_from_feedback/datasets/encodings.py [0:0]
def _load(self):
if self._token_str_to_idx is not None:
return
self._token_str_to_idx = json.loads(read_file(self.full_encoder_path).decode())
bpe_data = read_file(self.full_bpe_path).decode()
bpe_merges = [tuple(merge_str.split()) for merge_str in bpe_data.split("\n")[1:-1]]
assert self.eot_token == self._token_str_to_idx["<|endoftext|>"]
# Add an <|end_of_prefix|> token
if self.eoprefix_token is not None:
assert not self._token_str_to_idx.get("<|endofprefix|>")
self._token_str_to_idx["<|endofprefix|>"] = self.eoprefix_token
# Add denoise sentinel tokens like <|dn_1|> <|dn_2|> etc.
# These tokens are added to the end of the vocabulary range
for denoise_sentinel_idx in range(self.n_denoise_sentinels):
str_repr = f"<|dn_{denoise_sentinel_idx}|>"
assert not self._token_str_to_idx.get(str_repr)
n_non_sentinel_tokens = self.n_vocab - self.n_denoise_sentinels
sentinel_token = n_non_sentinel_tokens + denoise_sentinel_idx
self._token_str_to_idx[str_repr] = sentinel_token
assert len(self._token_str_to_idx) == self.n_vocab
self._token_idx_to_str = {v: k for k, v in self._token_str_to_idx.items()}
self.byte_encoder = bytes_to_unicode()
self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}
self.bpe_ranks = dict(zip(bpe_merges, range(len(bpe_merges))))