Ключевые слова: Ответ на вопрос, BERT, SQuAD, Машинное понимание.

I Предпосылки

Эта статья посвящена исключительно оценке производительности модели контроля качества знаний на основе конкретных примеров, и мы предполагаем, что читатели слышали или вкратце понимали такие термины, как ответы на вопросы, BERT и набор данных SQuAD.

1.1 Что такое модель контроля качества?

Если просто перефразировать, модель QA знаний направлена ​​на ответы на короткие вопросы, заданные содержанием абзаца (здесь модель использует только короткий абзац; если данный абзац слишком длинный, следует рассмотреть другую модель, чтобы сузить контекст ответа, см. Ссылку [3]). Ответ обычно можно найти в контексте, и модель извлечет исходный текстовый диапазон, чтобы ответить на вопрос. Диапазон ответов также не слишком велик. Более того, в отличие от SQuAD 2.0, модели не требуется находить ответ, который не находится в заданном контексте.

Если вы не знакомы с моделью контроля качества, некоторые ссылки, которые помогут вам узнать больше о наборах данных BERT [1] и SQuAD [2], находятся в ссылках в конце.

1.2 Наша модель

Модель в этой статье использует предварительно обученную модель BERT (uncased_L-24_H-1024_A-16) и настроена с помощью SQuAD-V1.1. Счет разработчика в F1 составляет 89,1, а точное совпадение - 82,1. Модель выдаст топ-k ответов по шкале уверенности или вероятности ответа.

II Оценка

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

2.1 Пример первый

Начнем с первого примера. Это абзац из википедии.

«Гора Логан - самая высокая гора в Канаде и вторая по высоте вершина в Северной Америке после Денали. Гора была названа в честь сэра Уильяма Эдмонда Логана, канадского геолога и основателя Геологической службы Канады (GSC). Гора Логан расположена в заповеднике национального парка Клуэйн [4] на юго-западе Юкона, менее чем в 40 километрах (25 миль) к северу от границы Юкона и Аляски. Гора Логан является источником ледников Хаббарда и Логана. Считается, что у Логана самая большая окружность основания из всех невулканических гор на Земле (большое количество щитовых вулканов намного больше по размеру и массе), включая массив с одиннадцатью пиками высотой более 5000 метров (16 400 футов) ».

Затем мы задаем два вопроса: «какая самая высокая гора в Канаде?» и «где гора Логан?» Мы позволяем модели давать 3 лучших ответа с максимальной уверенностью. Вышеупомянутые жирные пометки помогают читателям легко найти верные ответы.

{
    "best_prediction": "Mount Logan",
    "id": "01",
    "n_best_predictions": [
        {
            "end_logit": 5.746790409088135,
            "probability": 0.9999999250405683,
            "start_logit": 5.814833164215088,
            "text": "Mount Logan"
        },
        {
            "end_logit": -2.364010810852051,
            "probability": 4.6923180635147034e-8,
            "start_logit": -2.9491195678710938,
            "text": "eleven peaks over 5,000 metres (16,400 ft)"
        },
        {
            "end_logit": -2.8790242671966553,
            "probability": 2.8036251062885282e-8,
            "start_logit": -2.9491195678710938,
            "text": "eleven peaks over 5,000 metres"
        }
    ],
    "question": "what is highest mountain in Canada?"
}

На первый вопрос модель отвечает четко и уверена на 99,9%.

{
    "best_prediction": "Kluane National Park Reserve[4] in southwestern Yukon",
    "id": "02",
    "n_best_predictions": [
        {
            "end_logit": 4.906057834625244,
            "probability": 0.5532496572648057,
            "start_logit": 4.136287689208984,
            "text": "Kluane National Park Reserve[4] in southwestern Yukon"
        },
        {
            "end_logit": 4.098901271820068,
            "probability": 0.24681838842035841,
            "start_logit": 4.136287689208984,
            "text": "Kluane National Park Reserve"
        },
        {
            "end_logit": 4.906057834625244,
            "probability": 0.19993195431483585,
            "start_logit": 3.118455410003662,
            "text": "southwestern Yukon"
        }
    ],
    "question": "where is Mount Logan?"
}

На второй вопрос модель также отлично ответит. Но на этот раз модель не уверена в том, сколько информации она даст, это означает, будет ли ответ включать больше деталей с «юго-западным Юконом» или нет. Но как бы то ни было, ответ правильный!

2.2 Пример второй

А теперь давайте немного усложним вопрос. Этот пример взят из докторской диссертации Данки Чена в главе 5.3.4 [4].

«Многие аспекты распознавания речи были взяты на вооружение методом глубокого обучения, называемым долгой кратковременной памятью (LSTM), рекуррентной нейронной сетью, опубликованной Хохрайтером и Шмидхубером в 1997 году. [51] LSTM RNN избегают проблемы исчезающего градиента и могут изучать задачи «очень глубокого обучения» [2], которые требуют воспоминаний о событиях, которые произошли за тысячи дискретных временных шагов раньше, что важно для речи. В 2003 году LSTM начал конкурировать с традиционными распознавателями речи при выполнении определенных задач. [52] Позже она была объединена с коннекционистской временной классификацией (CTC) [53] в стеках LSTM RNN. [54] Сообщается, что в 2015 году эффективность распознавания речи Google резко выросла на 49% благодаря обученному CTC LSTM, который они сделали доступным через Google Voice Search ».

И наш вопрос: «Кто изобрел LSTM?». Этот вопрос немного сложнее, потому что 1) ключевые слова «LSTM» встречаются несколько раз в контексте 2) другое ключевое слово «изобретено» не совсем соответствует какому-либо тексту; 3) ответ несколько далек от ключевого слова LSTM (в отличие от первого примера, за ответом следует близко, но есть прерывание «рекуррентной нейронной сети»). Тем не менее, давайте посмотрим 3 основных ответа.

{
    "best_prediction": "Hochreiter and Schmidhuber",
    "id": "03",
    "n_best_predictions": [
        {
            "end_logit": 5.893029689788818,
            "probability": 0.9980743349387845,
            "start_logit": 6.029671669006348,
            "text": "Hochreiter and Schmidhuber"
        },
        {
            "end_logit": -0.44507071375846863,
            "probability": 0.0017642529692320442,
            "start_logit": 6.029671669006348,
            "text": "Hochreiter and Schmidhuber in 1997."
        },
        {
            "end_logit": 5.893029689788818,
            "probability": 0.00016141209198352368,
            "start_logit": -2.699950695037842,
            "text": "Schmidhuber"
        }
    ],
    "question": "Who invented LSTM?"
}

Снова забей! Эта модель позволила двум соавторам дать правильные ответы с вероятностью 99%.

2.3 Пример третий

Но означает ли это, что наша модель универсальна? Нисколько. Приведенные выше вопросы по-прежнему относятся к начальному уровню. Пойдем дальше и добавим несколько простых «рассуждений». Это означает, что модель не только «копирует» исходный текст, но и требует дальнейшего понимания контекста (также известного как машинное понимание). Приведенный ниже контекст короткий, состоит из 3 предложений, но содержит 2 причины, которые приводят к окончательному результату.

«Дочь Боба заболела. Его жена Мэри уехала из города, поэтому не может заботиться о дочери. Итак, он уезжает сегодня рано ».

Наш вопрос состоит в том, чтобы объяснить, «почему Боб уходит сегодня рано?».

{
    "best_prediction": "His wife Mary is out of town therefore cannot take care of their daughter",
    "id": "04",
    "n_best_predictions": [
        {
            "end_logit": 3.2016761302948,
            "probability": 0.5883743352379976,
            "start_logit": 3.460529327392578,
            "text": "His wife Mary is out of town therefore cannot take care of their daughter"
        },
        {
            "end_logit": 3.2016761302948,
            "probability": 0.22127723518746942,
            "start_logit": 2.4825823307037354,
            "text": "Bob's daughter got sick. His wife Mary is out of town therefore cannot take care of their daughter"
        },
        {
            "end_logit": 2.073168992996216,
            "probability": 0.19034842957453293,
            "start_logit": 3.460529327392578,
            "text": "His wife Mary is out of town"
        }
    ],
    "question": "why is Bob leaving early today?"
}

Мы видим, что лучший ответ - не полный. И среди двух причин модель сначала выберет текст, наиболее близкий к «контексту вопроса». Но второй лучший по счету. Не плохо!

2.4 Пример четвертый

А теперь давайте усложним «рассуждение». В этом примере мы исправляем вопрос с помощью «какая команда занимает первое место?» но измените данный контекст. Мы можем обратиться к идентификатору контекста, чтобы проверить данный контекст.

Контекст для 11: «Всего присоединилось 10 команд. команда C обыграла все остальные команды. команда A и команда B также выиграли второе и третье места ».

Контекст для 12: «команда A обыграла команду B в этой игре, но команда C обыграла команду A.»

Контекст для 13: «команда A обыграла команду B в этой игре, но команда A проиграла команде C.»

{
    "best_prediction": "team C",
    "id": "11",
    "n_best_predictions": [
        {
            "end_logit": 1.0532582998275757,
            "probability": 0.6143352942959913,
            "start_logit": 0.4422859251499176,
            "text": "team C"
        },
        {
            "end_logit": 1.0532582998275757,
            "probability": 0.19654012027586923,
            "start_logit": -0.6973883509635925,
            "text": "C"
        },
        {
            "end_logit": -0.12487658113241196,
            "probability": 0.18912458542813956,
            "start_logit": 0.4422859251499176,
            "text": "team C beated all other teams. team A and team B"
        }
    ],
    "question": "which team is the first place?"
}

Учитывая контекст 11, ответ правильный, и модель не путается между тремя командами, и мы видим, что она также уделяет больше внимания предложению «команда C победила все другие команды».

{
    "best_prediction": "team A beated team B in this game, but team C",
    "id": "12",
    "n_best_predictions": [
        {
            "end_logit": 1.040236473083496,
            "probability": 0.3627309465126682,
            "start_logit": 0.3684903085231781,
            "text": "team A beated team B in this game, but team C"
        },
        {
            "end_logit": 0.932282567024231,
            "probability": 0.3256123160780018,
            "start_logit": 0.3684903085231781,
            "text": "team A"
        },
        {
            "end_logit": 1.040236473083496,
            "probability": 0.31165673740933,
            "start_logit": 0.21673132479190826,
            "text": "team C"
        }
    ],
    "question": "which team is the first place?"
}

Но в контексте 12 модель путается между «командой А» и «командой С», и обе получают почти одинаковую уверенность. Логика A ›B & C› A = ›C› A&B вообще не фиксируется.

{
    "best_prediction": "team A",
    "id": "13",
    "n_best_predictions": [
        {
            "end_logit": 0.7608197331428528,
            "probability": 0.5055971009292113,
            "start_logit": 0.06729216873645782,
            "text": "team A"
        },
        {
            "end_logit": 0.09393426775932312,
            "probability": 0.25952541690952574,
            "start_logit": 0.06729216873645782,
            "text": "team A beated team B"
        },
        {
            "end_logit": 0.7608197331428528,
            "probability": 0.23487748216126303,
            "start_logit": -0.6993839144706726,
            "text": "A"
        }
    ],
    "question": "which team is the first place?"
}

Для контекста 13 модель полностью допускает ошибки по логике A ›B и A‹ C, но дает больше уверенности команде A. Таким образом, мы видим, что модель не понимает противоречивого значения слов «побить» и «проиграть» и их отношение к «первому месту». И мы также не знаем, как модель отвечает в первом контексте - что, понимая, что «победить всех» означает «первое место» или исключая «команда A и команда B также выиграли второе и третье» означает «не первое место», хотя первому уделяется больше внимания.

2.5 Пример пятый

Может ли наша модель понимать «числа» или даже заниматься математикой? Приведем простые примеры.

«Алиса выиграла 20 очков в матче, а Боб - 10»

Два вопроса: «кто набирает меньше очков?» и «кто набирает больше очков?». Из приведенных выше примеров мы не сомневаемся, что модель может выделить здесь двух человек: Алису и Боба. Но понимает ли он, что 10 меньше 20 или 20 больше 10? Ответ неутешительный.

{
    "best_prediction": "Bob",
    "id": "001",
    "n_best_predictions": [
        {
            "end_logit": 2.3199944496154785,
            "probability": 0.7744947758773805,
            "start_logit": 2.2076666355133057,
            "text": "Bob"
        },
        {
            "end_logit": 2.3199944496154785,
            "probability": 0.18641455943280172,
            "start_logit": 0.7834287285804749,
            "text": "Alice won 20 scores in the match and Bob"
        },
        {
            "end_logit": 0.757905125617981,
            "probability": 0.03909066468981782,
            "start_logit": 0.7834287285804749,
            "text": "Alice"
        }
    ],
    "question": "who get less score?"
}
{
    "best_prediction": "Bob",
    "id": "002",
    "n_best_predictions": [
        {
            "end_logit": 2.082188367843628,
            "probability": 0.6096566286536986,
            "start_logit": 1.9376347064971924,
            "text": "Bob"
        },
        {
            "end_logit": 2.082188367843628,
            "probability": 0.3006593492090547,
            "start_logit": 1.2307167053222656,
            "text": "Alice won 20 scores and Bob"
        },
        {
            "end_logit": 0.8725031018257141,
            "probability": 0.08968402213724672,
            "start_logit": 1.2307167053222656,
            "text": "Alice"
        }
    ],
    "question": "who get more score?"
}

Несмотря на то, что первый ответ правильный, но по результатам второго мы видим, что модель вообще не понимает! Так что с первым вопросом ему просто повезло. Это может привести к тому, что мы думаем, что иногда, даже если ответ правильный, без дополнительных объяснений, мы не можем судить, действительно ли модель понимает контекст. Этот пример ясно показывает, что модель просто от «случайное предположение». Но действительно ли это случайность? Мое мнение здесь: Уверенность «Боба» намного больше, чем уверенность «Алисы», не случайно, но модель просто уделяет больше внимания более поздним совпадениям. Если мы попытаемся изучить, как здесь работает модель, она сможет обнаружить человека по ключевым словам «оценка» и извлечь два имени «Алиса» и «Боб». Однако оценка внимания второго человека затмевает первого человека без дополнительных аргументов в пользу сравнения двух оценок: 10 и 20.

2. 6 Пример шестой

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

«Алиса съела 1 яблоко утром и 2 яблока вечером».

{
    "best_prediction": "2",
    "id": "001",
    "n_best_predictions": [
        {
            "end_logit": 3.7769575119018555,
            "probability": 0.8634396322473342,
            "start_logit": 3.6591522693634033,
            "text": "2"
        },
        {
            "end_logit": 1.768803596496582,
            "probability": 0.11590490485853358,
            "start_logit": 3.6591522693634033,
            "text": "2 apples"
        },
        {
            "end_logit": 3.7769575119018555,
            "probability": 0.020655462894132334,
            "start_logit": -0.07379188388586044,
            "text": "1 apple in the morning and 2"
        }
    ],
    "question": "how many apples did Alice eat today?"
}

Модель забывает об 1 яблоке утром, а вечером дает только яблоко. На самом деле этот пример еще раз подтверждает мое предположение выше, что совпадения в более позднем контексте могут затмить предыдущие. Конечно, модель никогда не даст ответ 3, поскольку его нет в исходном тексте.

III Заключение

Мы понимаем, что модель здесь не самая лучшая по исследованиям, а чисто справедливая. Но мы надеемся, что примеры по-прежнему могут показать возможности и выявить пределы модели BERT, а также то, чего может достичь текущая модель НЛП и что необходимо улучшить в будущем. Заключение резюмировано как:

  1. Модель QA способна извлекать исходную информацию по ключевым словам вопроса и понимать простые синонимы (пример один и два).
  2. Модель обеспечения качества не умеет «рассуждать», если отношения несколько сложны (примеры третий и четвертый).
  3. Модель QA вообще не понимает «числа» и не понимает математических способностей (пример 5 и 6).

Примечательно, что с текущими характеристиками модели мы можем применять модель QA в некоторых отраслевых случаях, но не можем быть слишком агрессивными в некоторых случаях.

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

IV Ссылки

[1] https://github.com/google-research/bert

[2] https://rajpurkar.github.io/SQuAD-explorer/

[3] https://github.com/facebookresearch/DrQA

[4] https://stacks.stanford.edu/file/druid:gd576xb1833/thesis-augmented.pdf