in summarize_from_feedback/datasets/encodings.py [0:0]
def bpe(self, token): # pylint: disable=method-hidden
word = tuple(self.byte_encoder[b] for b in token.encode("utf-8"))
if len(word) == 1:
return word
while True:
min_pair = None
min_idxs = []
min_rank = None
for i, pair in enumerate(zip(word[:-1], word[1:])):
try:
rank = self.bpe_ranks[pair]
if min_rank is None or rank < min_rank:
min_rank = rank
min_pair = pair
del min_idxs[::]
min_idxs.append(i)
elif min_rank == rank and i > min_idxs[-1] + 1:
min_idxs.append(i)
except KeyError:
pass
if min_pair is None:
break
new_word = []
i_start = 0
for i in min_idxs:
new_word.extend(word[i_start:i])
new_word.append(min_pair[0] + min_pair[1])
i_start = i + 2
if i_start < len(word):
new_word.extend(word[i_start:])
new_word = tuple(new_word)
word = new_word
if len(word) == 1:
break
return word