像 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。
我正在尝试在我的文本上本地化 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。