Обработка естественного языка BERT

1. Введение

         Тише! Здесь BERT, модель, которая обновила 11 записей задач NLP одновременно. По сути, Bert принадлежит к модели предварительного обучения, которая может понимать отношения между контекстом и словами, а также отношения между предложениями и предложениями. Для разных задач BERT можно использовать для разного трансферного обучения. С точки зрения структуры модели, которая эквивалентна трансформатор укладываются слоями кодировщика ( Б idirectional  Е nCoder  R & LT epresentations от  T ransformers). Как такая простенькая модель, по сути, взбудоражила на время волны и перевернула мирный мир НЛП с ног на голову. Давайте вместе разберемся с его интересными вещами. Если вы не знакомы с Transfomer, настоятельно рекомендуется сначала изучить Transformer .

2. теория BERT

      1. Сетевая структура

              Давайте сначала разберемся с общим процессом, выполняемым Bert. Из рисунка мы можем видеть, что основная структура, используемая в предварительных тренировках и точной настройке, не изменилась. Во-первых, каждый ввод - это пара предложений, состоящая из двух предложений, и некоторые слова будут замаскированы случайным образом с использованием CLS в качестве начальной метки и SEP в качестве разделительной метки между предложениями. Затем эти слова будут проходить через слой внедрения, показанный на рисунке 2, с тремя уровнями информации внедрения: информация о внедрении слов, информация о внедрении предложения и информация о внедрении позиции. Затем подключите несколько слоев кодировщика в Transfomer. Конечный результат - предсказать слова маски и будет ли предложение B следующим предложением предложения A.

       

     

   2. Многозадачное обучение 

           Из приведенного выше введения мы знаем, что Bert - это модель многозадачного обучения.

              1. Маскированная языковая модель . Во-первых, часть слов будет случайным образом замаскирована в каждом предложении, что в некоторой степени похоже на маску части декодера в Transfomer. В реальном обучении 15% слов в каждом предложении будут замаскированы случайным образом. Используйте маску в 80% случаев, используйте другое слово вместо маски в 10% случаев и используйте всю информацию о предложении в 10% случаев.

             Зачем использовать маску? Как мы уже говорили ранее, bert эквивалентен наложению кодеров в трансфомер. Первый уровень самовнимания в кодировщике будет выполнять попарные вычисления между словами, то есть каждое слово будет содержать информацию обо всех словах (это эквивалентно тому, что предсказываемая информация не была раскрыта). Суть кодировщика эквивалентна процессу кодирования слов, а длина ввода и вывода одинакова (не предназначен для задач прогнозирования). Таким образом, чтобы модель имела прогностическую функцию при решении проблемы раскрытия информации. Кодировщик необходимо изменить, и механизм использования окружающих слов для предсказания среднего слова в модели естественного языка используется для ссылки, а механизм маски в декодере используется для ссылки. Когда мы предсказываем, мы случайным образом маскируем некоторые слова и предсказываем эти слова.
             2. Предсказание следующего предложения: в то же время мы хотим, чтобы модель обладала способностью понимать отношения между предложениями и предложениями. Например, по двум предложениям можно судить, находятся ли они в контекстной связи. Для этого мы разработали использование двух предложений в качестве пар предложений для ввода. Последующий слой внедрения заставит каждое слово содержать информацию о предложении, которому оно принадлежит.

            Таким образом мы преобразуем ввод и вывод. Чтобы наша модель предварительного обучения имела несколько функций, простая тонкая настройка может выполнять множество задач, таких как классификация текста, маркировка последовательностей (сегментация слов, распознавание сущностей, маркировка частей речи) и оценка отношений предложений (контроль качества, естественный язык) Рассуждение) и др.

    3. тонкая настройка

            Первоначальная цель модели BERT - тонкая настройка для адаптации к различным последующим задачам. Его конструкция также очень удобна для точной настройки. Обычно есть две идеи для тонкой настройки:

           1. Используйте существующую модель в качестве экстрактора признаков, удалите ее выходной слой, а затем следуйте выходному слою, необходимому для соответствующей задачи. Конечно, в соответствии с реальной ситуацией, нет необходимости упоминать только выходные характеристики последнего слоя, это может быть любой необходимый вам слой.

           2. Тренируйтесь на основе существующей модели, чтобы сделать новую модель более подходящей для вашей задачи.

           3. Иногда, в зависимости от реальной ситуации, нам не нужно настраивать все слои. В настоящее время мы настраиваем только некоторые слои, за которыми следует наш собственный выходной слой.

   4. Теоретическое резюме

             Выше мы представили теоретическую часть bert, стекированную модель кодировщика на основе Transfomer. Чтобы делать прогнозы и предотвращать утечку информации, используется механизм маски. Чтобы извлечь более сложную семантическую информацию, а модель имеет возможность оценивать отношения предложений, используется механизм следующего предложения. Навороченных операций не так уж и много, слишком много болтаем. Но его воздействие действительно освежило сознание людей. Это может быть так называемый Дао Чжи Цзянь! отдать должное!

3. Исходный код

         В этой статье для обучения используется версия источника BERT с тензорным потоком, а исходная ссылка на github находится здесь ! Работа BERT требует относительно высоких требований к оборудованию, и я все еще относительно беден. Поэтому я просто попытался использовать BERT для собственного проекта Fine-Tuning, и это, естественно, не удалось. Конечно, чтобы быть достойным себя, я пробовал разные методы и все равно не получилось! Сейчас я чувствую, что это именно то, что имел в виду Бог. Революция еще не увенчалась успехом, и товарищи еще могут сдаться. Как бы настойчиво это ни было, это пустая трата времени, поэтому я решительно сдаюсь.

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

1. Обдумывание тренировочного процесса

         Фактически, традиционный процесс обучения такой же, как тензорный поток, который представляет собой не что иное, как следующие шаги: предварительная обработка данных, построение модели, обучение и проверка. Все они вращаются вокруг базовой модели. Мы представляем модель в виде младенца, данные - это еда, построение модели - это он сам, обучение - для его обучения и роста, а проверка - это лист ответов, переданный жизнью. Он продолжает расти, постоянно повторяя этот процесс. Недостаточная подготовка означает, что ребенок слишком низок, а переобучение - слишком тщеславный. Конечная цель - вырасти и внести свой вклад в общество, что означает использование модели. Так же, как никто не совершенен, мы не требуем, чтобы модель находила глобальный оптимум. Это означает, что существует принцип - модель может быть использована.

        Данные разные, а это значит, что у некоторых детей есть богатые семьи, а некоторые рождаются бедными. Данные определяют верхнюю границу модели, поэтому рост человека в определенной степени определяет диапазон его роста. Конечно, хорошее обучение может повысить производительность. Разные темпы обучения означают, что у детей разные личности, некоторые из них позитивны, но импульсивны, а некоторые осторожны, но робки.

        Конечно, в конечном итоге судьба у всех разная. Так же, как и BERT, он востребован тысячами людей и является звездой времени. Как и моя видеопамять 4G, модель, обученная игровому менталитету, обречена. Это наша модель, и это часть нас.

2. Определение параметра 

        Некоторые параметры должны быть указаны во время работы BERT, включая обязательные элементы, такие как data_dir (данные), bert_config_file (файл конфигурации), task_name (имя задачи), vocab_file (список слов), init_checkpoint (модель до обучения) и некоторые дополнительные элементы. Используйте класс tf.flags для достижения функции получения параметров командной строки, где метод tf.app.run () найдет определенный основной метод, а параметры проверки должны быть переданы!   

#使用tf.flags来定义命令行参数,然后使用FLAGS来获取对应的参数
def main(_):
    print('she is a very beautilful girl,she name is',FLAGS.name)
flags = tf.flags
FLAGS = flags.FLAGS
flags.DEFINE_string('name', None, 'who is the one you love')
flags.mark_flag_as_required('name')
tf.app.run()

3. Сомнения по поводу шагов обучения

  Меня смутила разница между эпохой и шагом. Тогда это возможность объяснить.

     batch_size: количество образцов в партии

     steps : количество шагов обучения, каждое обновление параметра соответствует одному шагу (эквивалентно шагу вниз по градиенту)

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

    Конечно, обычно следует разминка (количество шагов разминки), и обычно используется небольшая скорость обучения для тренировки определенного раунда, чтобы сделать модель стабильной. В определенной степени это может предотвратить чрезмерную подгонку.

  if FLAGS.do_train:
    #获取训练的数据
    train_examples = processor.get_train_examples(FLAGS.data_dir)
    #训练步数 = 总样本数*轮次/批次大小
    num_train_steps = int(
        len(train_examples) / FLAGS.train_batch_size * FLAGS.num_train_epochs)
    #根据warmup比例计算warmup的步数
    num_warmup_steps = int(num_train_steps * FLAGS.warmup_proportion)

4. Встраиваемый слой

      Сначала будет получено вложение, соответствующее каждому входному слову, а затем будет инициализирован уровень встраивания информации о положении, и вложение Token_Type будет рассчитано в соответствии с предложением, которому принадлежит слово. Добавьте три слоя, чтобы получить последний слой встраивания, который соответствует трехслойному встраиванию в бумагу. Просто встраивание позиции не использует функцию косинуса синуса, а получается через обучение сети.

5. Реализация маски.

      В внимании_mask нормальное слово - 1, а замаскированное слово - 0. Сумматор, полученный после окончательного расчета, нормальное слово - 0, а слово маски - -10000. Затем оценка добавляется к исходной оценке внимания, и замаскированное слово имеет очень маленькое значение. Маска таким образом.

  if attention_mask is not None:
    # `attention_mask` = [B, 1, F, T]
    attention_mask = tf.expand_dims(attention_mask, axis=[1])

    # Since attention_mask is 1.0 for positions we want to attend and 0.0 for
    # masked positions, this operation will create a tensor which is 0.0 for
    # positions we want to attend and -10000.0 for masked positions.
    adder = (1.0 - tf.cast(attention_mask, tf.float32)) * -10000.0

    # Since we are adding it to the raw scores before the softmax, this is
    # effectively the same as removing these entirely.
    attention_scores += adder

6. Управление переменным контекстом

        tf.variable_scope можно использовать в качестве диспетчера контекста переменных, используя tf.get_variable () для определения переменных. То есть, переменная принадлежит контексту, когда переменных много и имена переменных повторяются. Этот метод можно использовать для различения переменных в разных контекстах.Имена переменных одинаковы, но в разных контекстах они принадлежат разным переменным.

        В то же время повторное использование может использоваться для повторного использования контекста.

with tf.variable_scope("lover"):
    v=tf.get_variable("V",[1])
with tf.variable_scope("lover",reuse=True):
    v1 = tf.get_variable("V", [1])
if v == v1:
    print('两者是同一个变量')
else:
    print('两者不是同一个变量')

4. Ерунда

             Любовь - источник всей силы. Мне всегда казалось, что душа в плену у тела. Изначально это было так шикарно и свободно. Пока однажды я вдруг не понял, что каким бы свободным ни был мир души, он всего лишь одинокий. Ему нравится время и пространство. Но у него нет возможности общаться и сливаться с другими мирами. Только через это тело может течь любовь в этом мире, а любовь в других мирах может течь внутрь. Наша душа подобна воде, ей нужна температура, а любовь - это температура души. Вода без температуры больше не будет течь и счастья не будет. Конечно, он не умрет, только временно замерзнет. Если однажды теплый солнечный свет вернется снова, его все еще можно растопить. Способность любить также велика и мала во многих формах. Великая земля имеет свою любовь, небо и белые облака имеют свою любовь, солнце, луна и звезды имеют свою постоянную любовь. Я не знаю, где у них глаза и сердца.В конце концов, я всего лишь маленький человек, живущий на поверхности. Но я верю, что мир, в котором они живут, будет иметь более яркие цвета, более красивую музыку и этот большой мир должен быть более живым. Может, когда моя короткая жизнь закончится, я тоже смогу в них поучаствовать. Поэтому я не боюсь, что после того, как эта жизнь закончится, я столкнусь с тьмой. Свет, который видят люди, - очень маленькая часть. Представьте, что однажды я смогу увидеть весь свет. Конечно, обязательно будут разные глаза. Пока что люблю эту жизнь, пусть время идет, бояться нечего!

[Trap Music X The Matrix]

 

рекомендация

отblog.csdn.net/gaobing1993/article/details/108711664
рекомендация