HSE-projects / logical_reasoning

Logical Reasoning of Transformers
0 stars 0 forks source link

Articles Review Danya #2

Open Aktsvigun opened 2 years ago

SpeedOfMagic commented 2 years ago

NeuralLog: Natural Language Inference with Joint Neural and Logical Reasoning

Ссылка на репозиторий: https://github.com/eric11eca/NeuralLog

Обзор

Статья посвящена NLI. Задача NLI - по утверждению и гипотезе сказать связь между ними.

Авторы предлагают объединить DL подход (нейронки) с символическим подходом (эвристики, логика, поиск путей).

Схема работы

image

  1. Утверждение и гипотеза попадают в аннотатор полярности (polarity annotator), в статье используется Udep2Mono. Там все слова поляризуются и представляются в виде дерева зависимостей.

    Дерево зависимостей (universal dependency tree) - это дерево над предложением, где каждая вершина охватывает отрезок предложения и говорит, что это за часть предложения.

    Поляризация - это назначение слову или части предложения полярности трёх видов:

    • Монотонная полярность (monotone polarity) означает, что слово или часть предложения является чем-то конкретным, и его можно обобщить. Обобщать нужно для получения гипотез (пример где это эксплуатируется - это MED). Пример: Я работаю на MacBook↑. "MacBook" имеет т.к. его можно обобщить до "ноутбук".
    • Антитонная полярность (antitone polarity) означает противоположное - слово или часть предложения является обобщённым типом, из-за чего мы не можем его обобщать. Пример: Ко мне пришли гости↓ . Гости получили т.к. они довольно конкретные и их нельзя обобщать.
    • Ещё есть полярность =. Тут я не уверен, но походу она указывает на конкретные объекты (the road) или на что-то, что не покрывается первыми двумя.
  2. Предложение проверяют на противоречивость с помощью переходов к противоречию - "я иду" "я не иду". Если получается гипотеза, то модель говорит contradiction.

  3. Предложение переделывают в другое с помощью какой-то операции inference. Всего возможных операций inference три типа:

    • Lexical Monotonicity Inference - слово заменяется на гипоним (более конкретное слово), гипероним (более обобщённое слово), синоним или антоним. По умолчанию слово может заменять только на синоним. Если , то слово может заменяться на гипоним, а если , то может заменяться на гипероним.
    • Phrasal Monotonicity Inference - фраза с помощью добавления или удаления слов заменяется на более обобщённую для ("работник на дому" "работник") или более конкретную для ("цветы" "красные цветы")
    • Syntactic Variation Inference - фраза заменяется на похожую. Видимо для этого используют ALBERT (легковесный BERT).
  4. Разумеется, возможно много вариантов операции, и многие из них бесполезны. Для выбора полезных используется Sentence Inference Controller.

    1. Для предпосылки и гипотезы берётся дерево зависимостей, выписываются объекты с модификаторами, и на них строят дерево с корнем Sentence Representation Graph.
    2. В графе находят компоненты (как я понял поддеревья), которые отличаются друг от друга в предпосылке и гипотезе. Выделяют все вершины и строят двудольный граф на декартовом произведении этих вершин.
    3. В графе в b для каждой вершины слева и справа находят расстояние между словами. Потом с одной стороны для каждой вершины оставляют самую сильную пару. Потом тоже самое с другой стороны. Получили возможные переходы компонент.
    4. Если есть вершины не в паросочетании, то рекомендуют Phrasal. Если в паросочетании у ребра две разные вершины, то рекомендуют Lexical. Если и того и того много, то всё сложно и рекомендуют Syntactic.

image

  1. Если получили гипотезу, то возвращает entail. Иначе для нового предложения считается расстояние его эмбеда до эмбеда гипотезы и эта пара кладётся в очередь с приоритетами.

  2. Берётся предложение с наименьшим расстоянием, после чего переходим к шагу 2.

  3. Если модель ничего не вернула (скажем, прошло много раундов), то neutral.

Используемые датасеты:

NLI датасет - это датасет с:

Датасет Ссылка на репозиторий Описание
SICK https://zenodo.org/record/2787612 NLI датасет + gold label + gold score - насколько предложения похожи от 1 до 5. В пары входили: очищенное от времён и прочего предложение + схожее, очищенное + противоположное, очищенное + обратное.
MED https://github.com/verypluming/MED NLI датасет с упором на обобщение в предложениях. К примеру: "ирландец выиграл премию по литературе" => "ирландец выиграл премию", но не наоборот.

Результаты

image

SpeedOfMagic commented 2 years ago

LangPro: Natural Language Theorem Prover

Ссылка на репозиторий: https://github.com/kovvalsky/LangPro

Обзор

LangPro берёт множество предпосылок и гипотезу, после чего доказывает семантическую связь между ними.

Определения

Cхема работы

image

  1. LangPro получает предпосылки P и гипотезу H. По ним он получает CCG, по ним прогоняет через модуль LLFGenerator, который создаёт соотвествующие LLF.
  2. По полученным LLF строят два дерева в Natural Tableau для опровержения - с вершинами (P_1 : T, P_2 : T, ..., P_N : T, H : T) для contradiction и (P_1: T, P_2 : T, ..., P_N : T, H : F) для entailment.
  3. Оба дерева опровергаются через модуль NLogPro. Если опровергнуто ровно одно, то ответом будет другое дерево. Если опровергнуто 0 или 2, то ответ neutral.

LLFGenerator

image

Сначала LLFGenerator чистит полученное CCG дерево:

  1. В вершинах могут быть направленности (directionality) по частям речи. От них избавляются и говорят, что вершина обозначает обе части речи. Получаются CCG термы (CCG terms).
  2. По разным правилам происходят замены вершин на другие - предлоги и союзы из больше чем одного слова становятся одной вершиной, вершины меняют части речи на более простые, модификаторы опускаются вниз если так можно и так далее.

Затем "LLFs are obtained from corrected CCG terms by type-raising QNPs from np to the type (vp, s) of generalized quantifiers."

NLogPro

Он состоит из четырёх компонент, которые захардкожены:

  1. Сигнатура - список из лексических термов (слов), которые назначают модификаторы аргументам, которые передаются в лямбда-выражения этих слов. В модели их около 20 штук. Пример: В списке может быть every -> [dw, up], то есть every принимает два аргумента, первый можно заменить на более конкретный, второй на более обобщённый.
  2. The Inventory of Rules - правила для исчисления высказываний в Natural Tableau. В модели их около 80 правил + 25 производных для ускорения работы.
  3. Knowledge Base - лексические правила, взятые из WordNet. Используются только гипонимы, гиперонимы, синонимы и антонимы.
  4. Proof Engine - использует 1-3 чтобы построить дерево для опровержения. Он применяет исчисления так, чтобы закончить работу как можно быстрее. Для этого он смотрит на следующие характеристики:
    1. Приводит ли правило к разветвлению дерева или нет.
    2. Является ли новое правило семантически эквивалентно старому или нет.
    3. Производит ли правило свежий объект (которого раньше не было в ветке) или нет.
    4. Использует ли правило какое-то старое правило или нет. Понятно, что по ним может выбирать порядок исполнения правил. Скажем, правила без разветвления лучше принимать до правил с разветвлением, потому что так быстрее.

Используемые датасеты:

Датасет Ссылка на репозиторий Описание
SICK https://zenodo.org/record/2787612 NLI датасет + gold label + gold score - насколько предложения похожи от 1 до 5. В пары входили: очищенное от времён и прочего предложение + схожее, очищенное + противоположное, очищенное + обратное.
FraCaS ftp://ftp.cogsci.ed.ac.uk/pub/FRACAS/del16.ps.gz
Это ссылка на статью, в статье инструкция
Фреймворк для 346 задач на следствие в NLP.

Результаты

На FraCas, на секциях, где обычно оценивают модель, accuracy получается 87%.

Результаты SICK указываю прямо из статьи. SOTA - это SOTA модели до 2017 года.

Модель accuracy
SOTA 81-87%
LangPro 82.1%
Human 84%
SpeedOfMagic commented 2 years ago

Self-Explaining Structures Improve NLP Models

Ссылка на репозиторий: https://github.com/ShannonAI/Self_Explaining_Structures_Improve_NLP_Models

Обзор

Авторы замечают, что обычная NLP модель не имеет интерпретируемости, то есть мы не знаем, почему модель выбрала именно такой вариант.

Есть решения в виде специальных интерпретационных моделей, но они отделены от исходной => модель не обучается с помощью самообъяснения (self-explaining) + интерпретация получается такая себе. Также интерпретационные модели хорошо объясняют поведение на отдельных словах, но плохо на предложениях, абзацах и на полных текстах.

Авторы создали специальный слой интерпретации, который можно добавить к любой NLP модели сразу перед Softmax. Он обеспечивает в обучении самообъяснение => улучшается качество итоговой модели.

Схема работы

image

  1. Разобьём текст на токены . После прогона через промежуточный слой у токенов будут векторы .
  2. Векторы отправляются на Span Infor Collecting Layer (SIC). Там получаются значения В статье в качестве F предлагают использовать image Затем они используют преподсчёты, с помощью чего высчитывают все значения за .
  3. Слой интерпретации получает вывод от SIC, преобразует векторы в скаляры, нормализует их и затем на вывод получается среднее взвешенное: image Стоит заметить, что как раз и указывают важность, то есть по ним можно определять, почему модель приняла такое решение.
  4. Дальше (после слоя объяснения) идёт Softmax: image Градиенты рассчитываются по цепному правилу: image
  5. При тренировке используется обычная функция потерь + регуляризация по альфам: image

Используемые датасеты

Датасет Ссылка на репозиторий Описание
SNLI https://nlp.stanford.edu/projects/snli
https://huggingface.co/datasets/snli
NLI датасет + для каждой пары есть пять аннотаторов + есть деревья синтаксиса предложений
SST-5 https://nlp.stanford.edu/sentiment/index.html
https://huggingface.co/datasets/SetFit/sst5
Аналог IMDB: По отзыву на фильм нужно оценить его окраску от 0 (very negative) до 4 (very positive)

Результаты

image