Я загрузил норвежскую модель BERT с https://github.com/botxo/nordic_bert, и загрузил его с помощью:
import transformers as t
model_class = t.BertModel
tokenizer_class = t.BertTokenizer
tokenizer = tokenizer_class.from_pretrained(/PATH/TO/MODEL/FOLDER)
model = model_class.from_pretrained(/PATH/TO/MODEL)
model.eval()
Это работает очень хорошо, однако, когда я пытаюсь токенизировать данное предложение, некоторые нордические символы, такие как ø и æ, остаются прежними, тогда как все слова с символом å заменяются на. Например:
s = "æ ø å løpe få ærfugl"
print(tokenizer.tokenize(s))
Урожайность:
['æ', 'ø', 'a', 'løp', '##e', 'fa', 'ær', '##fugl']
Спасибо
å
не является токеном. Следовательно, токенизатор не может его произвести.å
одно слово? Потому чтоå
является частью других токенов. - person cronoik   schedule 29.07.2020grep ^å vocab.txt
, он ничего не возвращает. Это означает, чтоå
отсутствует в файле vocab.txt. - person cronoik   schedule 30.07.2020å
находится в файле vocab.txt норвежской модели (точнее, 975 раз), но это не означает, что это также единственный токен (т.е. запись словаря). Я также внимательно посмотрел на него и думаю, что он не полностью совместим с токенизатором huggingface, потому что предоставленный файл vocab.txt содержит только токены подслов (обозначенные ## TOKEN) и никаких отдельных слов (по определению записей huggingface, которые не запускаются с участием ##). Они также ссылаются не на hugginface, а на официальный google bert github, который имеет собственный токенизатор и использует тензорный поток. - person cronoik   schedule 31.07.2020print(tokenizer.tokenize(s))
с версией 3.0.2, он дает правильный результат в соответствии с приведенным выше объяснением:['[UNK]', '[UNK]', '[UNK]', '[UNK]', '[UNK]', '[UNK]']
- person cronoik   schedule 31.07.2020text = unicodedata.normalize("NFD", text)
иcat = unicodedata.category("Å")
- взяты из исходного кода huggingface FastBertTokenizer .. - person Christian Vennerød   schedule 05.08.2020