Берт тонкая настройка китайского корпуса

NLP
Берт тонкая настройка китайского корпуса

Finetune Bert for Chinese

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

BertВ самом документе тонкая настройка описана более подробно, но инженерам, не знакомым с официальным стандартным набором данных, будет сложно начать работу. вместе сBert as serviceОткрытый исходный код, использующий классификацию Берта или побочный продукт понимания прочитанного — словесное пространство, стал более практичным направлением.

Поэтому в этом документе основное внимание уделяется примеру, чтобы разобратьсятонкая настройка вертикального корпуса для получения точных моделейэтот процесс. Также перейдите к официальной документации по принципу Берта или Берту как сервису.

полагаться

python==3.6
tensorflow>=1.11.0

предварительно обученная модель

  • скачатьBERT-Base, Chinese: Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters

подготовка данных

  • train.tsvОбучающий набор
  • dev.tsvнабор проверки

Формат данных

Первый столбец — это метка, а второй столбец — конкретное содержимое, разделенное вкладками. Поскольку сама модель выполняет обработку на уровне символов, нет необходимости в сегментации слов.

fashion	衬衫和它一起穿,让你减龄十岁!越活越年轻!太美了!...
houseliving	95㎡简约美式小三居,过精美别致、悠然自得的小日子! 屋主的客...
game	赛季末用他们两天上一段,7.20最强LOL上分英雄推荐! 各位小伙...

Пример расположения данных:data

Формат данных зависит от бизнес-сценария, и метод импорта данных в коде также можно позже настроить в соответствии с форматом.

действовать

git clone https://github.com/google-research/bert.git
cd bert

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

Исправлятьrun_classifier.py

Пользовательский обработчик данных

class DemoProcessor(DataProcessor):
    """Processor for Demo data set."""

    def __init__(self):
        self.labels = set()
    
    def get_train_examples(self, data_dir):
        """See base class."""
        return self._create_examples(
            self._read_tsv(os.path.join(data_dir, "train.tsv")), "train")

    def get_dev_examples(self, data_dir):
        """See base class."""
        return self._create_examples(
            self._read_tsv(os.path.join(data_dir, "dev.tsv")), "dev")

    def get_test_examples(self, data_dir):
      """See base class."""
      return self._create_examples(
          self._read_tsv(os.path.join(data_dir, "test.tsv")), "test")

    def get_labels(self):
        """See base class."""
        # return list(self.labels)
        return ["fashion", "houseliving","game"] # 根据 label 自定义


    def _create_examples(self, lines, set_type):
        """Creates examples for the training and dev sets."""
        examples = []
        for (i, line) in enumerate(lines):
            guid = "%s-%s" % (set_type, i)
            text_a = tokenization.convert_to_unicode(line[1])
            label = tokenization.convert_to_unicode(line[0])
            self.labels.add(label)
            examples.append(
                InputExample(guid=guid, text_a=text_a, text_b=None, label=label))
        return examples

Добавить демопроцессор

  processors = {
      "cola": ColaProcessor,
      "mnli": MnliProcessor,
      "mrpc": MrpcProcessor,
      "xnli": XnliProcessor,
      "demo": DemoProcessor,
  }

начать обучение

export BERT_Chinese_DIR=/path/to/bert/chinese_L-12_H-768_A-12
export Demo_DIR=/path/to/DemoDate

python run_classifier.py \
  --task_name=demo \
  --do_train=true \
  --do_eval=true \
  --data_dir=$Demo_DIR \
  --vocab_file=$BERT_Chinese_DIR/vocab.txt \
  --bert_config_file=$BERT_Chinese_DIR/bert_config.json \
  --init_checkpoint=$BERT_Chinese_DIR/bert_model.ckpt \
  --max_seq_length=128 \
  --train_batch_size=32 \
  --learning_rate=2e-5 \
  --num_train_epochs=3.0 \
  --output_dir=/tmp/Demo_output/

Если все пойдет хорошо, будет следующий вывод:

***** Eval results *****
  eval_accuracy = xx
  eval_loss = xx
  global_step = xx
  loss = xx

Наконец, настроенная модель сохраняется вoutput_dirуказано в папке.

Суммировать

Тонкая настройка после предварительной тренировки Берта — очень эффективный способ сэкономить время и повысить производительность модели в вертикальном корпусе. Процесс тонкой настройки на самом деле не сложный. Самая большая трудность заключается в подготовке данных и проектировании конвейера. С точки зрения бизнеса, после тонкой настройки следует рассмотреть доказательство валидности модели и ее применение в бизнес-сценариях. Если показатели оценки и бизнес-сценарии ясны, то можно попробовать.

использованная литература