Определить выбранное слово, обнимая маску заполнения конвейера лица - PullRequest
2 голосов
/ 09 апреля 2020

Я хочу использовать конвейер маски заливки лица, чтобы угадать замаскированный токен, а затем извлечь только угаданный токен как слово. Этот код должен сделать это:

!pip install -q transformers
model = pipeline('fill-mask')
outcome = model("Kubernetes is a container orchestration <mask>")[0]

#Prints: "Kubernetes is a container orchestration platform" 
print(outcome['sequence']) 

token = outcome['token'] 

#Prints: 1761
print(token)

#Prints: Ġplatform 
print(model.tokenizer.convert_ids_to_tokens(token))

Но я обнаружил, что он возвращает мне "Ġplatform" вместо "platform" - кто-нибудь знает, почему это происходит или что здесь происходит?

1 Ответ

0 голосов
/ 10 апреля 2020

Это просто особенность базовой модели (см. здесь , чтобы проверить, что это distilroberta-base). В частности, в дистиллированных моделях используется тот же токенизатор, что и в их «моделях учителя» (в данном случае RoBERTa). RoBERTa, в свою очередь, имеет токенизатор, который работает строго без какой-либо формы пробелов, см. Также этот поток в модели OpenAI GPT-2, которая использует ту же стратегию токенизации (см. здесь ).

В частности, вы можете заметить, что это всегда один и тот же символ Unicode \u0120, который обозначает начало нового слова. Для сравнения, слова, состоящие из нескольких подслов, не будут иметь таких начальных символов для более поздних подслов.

Т.е. complication будет разбит на два подслововых слова Ġcompli cation.

Следовательно, вы можете просто отбросить Ġ, если оно появляется в слове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...