Как аргументы max_length, padding и truncation работают в HuggingFace' BertTokenizerFast.from_pretrained('bert-base-uncased')?

Я работаю с проблемой классификации текста, где хочу использовать модель BERT в качестве основы, за которой следуют плотные слои. Я хочу знать, как работают 3 аргумента? Например, если у меня есть 3 предложения как:

'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'

Итак, что будут делать эти 3 аргумента? Я думаю следующее:

  1. max_length=5 строго сохранит все предложения длиной 5
  2. padding=max_length добавит отступ 1 к третьему предложению
  3. truncate=True обрежет первое и второе предложение так, чтобы их длина была ровно 5.

Пожалуйста, поправьте меня, если я ошибаюсь.

Ниже приведен мой код, который я использовал.

! pip install transformers==3.5.1

from transformers import BertTokenizerFast

tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')

tokens = tokenizer.batch_encode_plus(text,max_length=5,padding='max_length', truncation=True)
  
text_seq = torch.tensor(tokens['input_ids'])
text_mask = torch.tensor(tokens['attention_mask'])
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
22
0
29 624
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы предположили, почти верно, однако отличий немного.

max_length=5, max_length указывает длину размеченного текста. По умолчанию BERT выполняет токенизацию фрагментов слов. Например, слово «играть» можно разделить на «играть» и «##инг» (может быть, это не очень точно, но просто для того, чтобы помочь вам понять токенизацию частей слов), а затем добавить токен [CLS] в начале предложение и токен [SEP] в конце предложения. Таким образом, он сначала токенизирует предложение, усекает его до max_length-2 (если truncation=True), затем добавляет [CLS] в начале и [SEP] токен в конце (таким образом, общая длина max_length)

padding='max_length', В этом примере не очень очевидно, что 3-й пример будет дополнен, так как длина превышает 5 после добавления токенов [CLS] и [SEP]. Однако, если у вас есть max_length из 10. Токенизированный текст соответствует [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0], где 101 — это идентификатор [CLS], а 102 — идентификатор [SEP] токенов. Таким образом, дополняется нулями, чтобы весь текст был длиной max_length

Аналогично, truncate=True гарантирует строгое соблюдение max_length, т. е. более длинные предложения усекаются до max_length, только если truncate=True

Большое спасибо за этот подробный ответ. Я хочу усечение, потому что я работаю с проблемой классификации, поэтому я не могу работать с переменной длиной. Также у меня есть еще одно сомнение по поводу словаря. По моему мнению, Vocab уже построен с использованием текстов 300 Б. Так возможно ли, что он может изменить zaxis на z axis и currentI на current I? также будет лучше использовать Lemmatization и/или Stemming. Also can it work with sin,cos,theta,gamma`и т. д. Я думаю, что они тоже были частью текстов 300B, потому что он предсказывает правильную метку только на их основе.

Deshwal 12.12.2020 06:28

Мы не можем гарантировать, изменится ли currentI на current I. Так как само слово current можно разделить на части. Вам не нужно выполнять лемматизацию, у меня есть ответ на этот вопрос по адресу: stackoverflow.com/questions/57057992/…

Ashwin Geet D'Sa 12.12.2020 11:27

У меня есть 6 элементов в моей предварительной обработке. Можете ли вы дать свой отзыв о том, какой из них я должен использовать. Лемматизация, стемминг, удаление чисел (любое число с плавающей запятой или целое число), удаление слов одиночной длины (x, y, i, a, b), замена любого числа на «число» (2 = число, 123,43 = число), удаление стоп-слов, удаление специальные символы? Не могли бы вы оставить свой отзыв об этом?

Deshwal 13.12.2020 06:48

И ваш другой ответ был очень описательным и дает много деталей. Спасибо, что помогаете таким, как я.

Deshwal 13.12.2020 06:52

Не могли бы вы помочь мне с проблемой комментария выше? Есть предположения?

Deshwal 14.12.2020 08:46

предварительная обработка?

Ashwin Geet D'Sa 14.12.2020 09:17
PreProcessing — это функция, которая использует от 0 до 6 различных методов, описанных выше. Какой из них я должен использовать? Данные — это физика, химия, математика и биология. Лемматизация и стемминг не будут работать, как вы описали выше. Удаление стоп-слов также приведет к потере семантического контекста. Итак, помня об этих вещах, какие из них я должен использовать?
Deshwal 15.12.2020 14:20

Предварительная обработка действительно зависит от выбора приложения, если вы используете BERT, я бы вообще рекомендовал не выполнять лемматизацию. Однако предварительная прецессия 2 = number и т. д. обычно не имеет большого значения. Вы все еще можете оставить слово одинарной длины (стоп-слова), так как они добавят ту или иную информацию.

Ashwin Geet D'Sa 15.12.2020 14:56

Ой! Хорошо. Спасибо. Я использую только BERT. Так что я думаю, что эти вещи не будут настолько полезными. Для моих пользовательских моделей все было по-другому.

Deshwal 16.12.2020 07:35

@AshwinGeetD'Sa Спасибо за отличный ответ! Не могли бы вы подробнее объяснить, почему max_length является мягким ограничением и как оно работает?

Ondrej Sotolar 10.05.2022 15:42

Другие вопросы по теме

Похожие вопросы