像 BERT Tokenizer 那样按单词拆分句子?

Split a sentence by words just as BERT Tokenizer would do?

我正在尝试在我的文本上本地化 BERT 标记器的所有 [UNK] 标记。获得 UNK 令牌的位置后,我需要确定它属于哪个词。为此,我尝试使用 words_ids() 或 token_to_words() 方法(我认为结果是相同的)来获取单词的位置,这给了我这个标记的 id 单词。

问题是,对于大文本,有很多方法可以按词拆分文本,而我尝试的方法与我从token_to_words方法得到的位置不匹配。我如何才能像 Bert tokenizer 一样拆分我的文本?

我看到 BERT 使用 WordPiece 对子词进行分词,但没有对完整词进行分词。

我现在:

  tokenized_text = tokenizer.tokenize(texto) # Tokens
  encoding_text = tokenizer(texto) # Esto es de tipo batchEncoding, como una instancia del tokenizer
  tpos = [i for i, element in enumerate(tokenized_text) if element == "[UNK]"]  # Posicion en la lista de tokens

  word_list = texto.split(" ")
  for x in tpos:
    wpos = encoding_text.token_to_word(x) # Posicion en la lista de palabras
    print("La palabra:  ", word_list[wpos], "    contiene un token desconocido: ", tokenizer.tokenize(word_list[wpos]))

但它失败了,因为索引“wpos”不适合我的word_list。

问题已通过@cronoik 在评论中提出的token_to_chars() 方法解决。它给了我任何标记的确切位置(它是通用的,不像我之前使用的单词取决于如何拆分),甚至是 UNK。