Записки NLPшника
171 subscribers
64 photos
7 files
121 links
Еще один канал заметок, выжимок статей и прочих радостей про NLP и данные.
Download Telegram
Cascading Biases. Investigating the Effect of Heuristic Annotation Strategies on Data and Models

# О чем
В статье авторы пытаются выявить смещения данных, вносимых разметчиками, через характеризацию известных когнитивных стратегий (эвристики). Тестировали, как эти смещения усваиваются моделями.
# Метод
Авторы собрали датасет генерации вопросов. В качестве исходного материала использовали тексты из википедии. Разметчиков (Amazon Mechanical Turk) просили придумать вопросы и 4 варианта ответов к нему. После этого, разметчикам предлагали пройти тест на когнитивные искажения (Приложение B).

Авторы выбрали три эвристики:
* Satisficing - выбор того, что удовлетворяет, а не то, что оптимально. Гипотеза авторов в контесте задачи - разметчики делают работу по принципу "и так сойдет". Признаком этой стратегии авторы устанавливают время, потраченное на задание.
* Availability - использование свежей информации в памяти. Гипотеза авторов - разметчики пишут корректный вариант ответа первым в списке. Признаком является, соответственно, корректный ответ на первом месте.
* Representatives - использование похожих объектов. Гипотеза авторов - вопрос сильно похож на исходных текст. Признаком является пересечение словаря.

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

# Результаты

Авторам удалось найти набор признаков, который коррелирует с результатами тестов на уровне 0.3 по модулю со статистической значимостью. Кроме того, PCA этих признаков коллериует на уровне 0.5.

Далее, авторы проверили насколько успешно модели , явно использующие эвристики (см. 5), могут решить примеры от разметчиков, которые показывают высокие показатели по признакам авторов. Тест проводился по каждому признаку по отдельности и заключался в использовании примеров с высоким значением по признаку с постепенным включением всех остальных примеров. В результате получились графики, на которых видно, что во многих случаях модель дает лучше значения по точности на примерах с высоким показателем по признаку, т.е. в начале графика, с постепенным ухудшением.

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

Также, авторы показали, что если формировать тренировочную выборку из примеров разметчиков со склонностью к когнитивным эвристикам, то качество такой модели будет хуже, чем если выбирать примеры от случайных разметчиков или выбирать примеры просо случайно, вне зависимости от разметчиков.
AutoWS. Automated Weak Supervision Framework for TextClassification

# О чем
В статье предлагается способ автоматического создания разметочных функций, стратегия отбора разметочных функций и способа агрегации.
# Метод
Авторы предполагают, что изначально есть dev-набор по 200 семплов на каждый класс в датасете.
В качестве "автоматических" разметочных функций авторы используют модели, обученные на разных методах представления
* WordCount, TfIdf, эмбеддинги из SentenceBERT и поверх Adaboost, Random Forest, SVM. Всего 9 моделей.
* 1-NN поверх тех же признаков, что выше.
* дообученные BERT, ELECTRA и DeBERTa.
Всего получается 15 разметочных функций.

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

# Результаты
Авторы используют два датасета AGNews и Yahoo! и сравнивают свои результаты с теми, которые дал SOTA на похожей задаче, а именно некий MixText. Естественно, метод, предложенный в статье, превосходит его. Кстати, без той стремной оптимизации метод авторов этой статьи проигрывает всего на 1 пункт по точности. Жаль они не привели ранжирование функций, а то делать разметочные функции путем дообучения бертоподобных моделей тоже такое себе.
1
А еще я тут проболел так неслабо с четверга и, судя по окружению, не я один такой. Поэтому желаю вам не болеть)
🙏2
Evaluating the Knowledge Dependency of Questions

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

# Метод

Авторы моделируют то, что они называют Knowledge Dependent Answerbility следующим образом. Пусть у нас есть группа студентов, которые отвечают на вопросы. Отберем тех, кто ответил на какие-то вопросы неправильно, потом покажем им необходимый факт и попросим пройти вопрос заново. Тогда необходимая метрика будет являться отношением тех, кто ответил правильно после показа им факта, к ответам всех студентов. $$KDA(q) = P(R^{q+f} = 1 | R^q = 0) = \frac{\sum_{j}(1-r_j^q))r_j^{q+f}}{\sum_j (1-r_j^q)}$$

где $r^q_j$ - переменная, показывающая корректность ответа без показа факта, $r^{q+f}$ - с показом.

Аппроксимировать студентов предлагается с помощью языковой модели с помощью промтов. Авторы предлагают два варианта. Первый повторяет исходную формулу, а второй работает на уровне вероятностей. (см. формулу 3).

В качестве генератора вопросов, авторы использовали дообучали T5-Large, затем использовали другую T5-Large и другие методы для генерации неправильных ответов. В качестве модели, эмулирующую студента, авторы также использовали T5-Large дообученную на RACE.

# Результаты

Используя датасеты OBQA, TabMCQ и SciQ авторы провели корреляционный текст между поведением людей и их метрикой. Тест проводился ровно так, как было описано в описании метода. Помимо своей метрики, авторы также приводят данные по метрикам BLEU, ROUGE-L и METEOR. Метрика авторов показывает значительно большую корреляцию с оценкой людей (около 0,77), хотя и существенно отличается на отдельных датасетах. Авторы объясняют это тем, что в двух датасетах слишком простые вопросы, которые являются, по сути, перефразами фактов.

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

Кроме того, авторы попытались использовать KDA в качестве предиктора почему вопрос не был использован. Здесь не удалось добиться высоких результатов.

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

Код: https://github.com/riiid/question-score
Вообще, конечно, поражает, как языковые модели с промтами могут использоваться.

А вот интересно, насколько качественно генерила бы выпросы ChatGPT при условии, что ей явно задавать контекст, а не полагаться на то, что она знает 🤔
Я думаю не ошибусь, если скажу, что у многих пользователей есть целое кладбище постов под названием "Закладки" на Хабре. Вот и у меня их сейчас 360. Несколько раз я туда заглядывал и периодически такой "Ого, у меня даже такое есть". А еще есть неприятная сторона — открываешь ссылку, а там уже статьи нет.

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

Для решения этой проблемы, набросал небольшой скрипт, который обходит ваши закладки и скачивает их при помощи внешней программы Monolith - утилита на Расте, которая создает один html-файл, сохраняя туда всё, включая картинки. Была такая фича раньше в браузерах, но ее решили выпилить почему-то.

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

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

Пользоваться просто. Скачиваете Монолит, кладете в папку со скриптом, а дальше
python habr_favorites_aquisition.py --output_dir out --login aarmaageedoon
Не забудьте залогиниться на Хабре. И пусть избранные вами посты будут на вашем локальном диске. Скрипт с рабочей версией Монолита (для Линукса) следующим постом.
🔥3
Ну и конечно легким движением руки, скрипт превращается в скрапер для создания корпуса из статей на Хабре.
👍1
Using Fisher’s Exact Test to Evaluate Association Measures for N-grams

# О чем

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

# Метод

Для сравнения взял несколько метрик, такие как Mutual Information (MI), t-score, z, simple-ll, raw frquency and so called MI3 a modification of MI.
Сравнение проводилось так. Сначала применялся точный тест Фишера или его аппроксимация, а затем какая-то из вышеназванных метрик. Качество оценивалось по кривой точность-полнота и average precision (AP), ведь у нас ранжированные списки н-грам получаются.

# Результаты

В качестве исходных данных использовался Британский национальный корпус с примерно 5.5 млн токенов. Был посчитан baseline путем усреднения AP при случайном ранжировании. Тут выяснилось, что для 4-грамм baseline составляет 0.99, поэтому на рассмотрении остались толкьо дву- и триграммы.
По метрикам, лучше всех для дву- и трехграмм показала себя simple-ll, что подтверждает более ранние исследования. Следом и же идет MI3 и z.
И еще из рубрику "реклама через статью" и в продолжение к выжимке выше. Фреймворк для слабого обучения skweak https://github.com/NorskRegnesentral/skweak. В качестве бекэенда используется SpaCy.

Отличительная особенность фреймворка в том, что он позволяет вам удобно создавать разметочные функции для задачи NER, а также предоставляет специальную фичу для этого, которую они назвали document-level fucntions, которая как-то использует факт, что в одном документе сущности скорее всего будут иметь одинаковую метку.

Еще в фреймворке реализована композиция разметочных функций. А также возможность разметочных функций выводить "абстрактный" вывод типа вот этот токен является частью какой-то сущности, но какой конкретно - неизвестно.

В качестве модели агрегации для последовательностей используется несложная HMM, а для классификации - наивный Байес. Для больших деталей смотрите статью https://arxiv.org/pdf/2104.09683.pdf
Так-то, много всяких фреймворков набирается для слабого обучения.

1. Snorkel - отец всех фреймворков.
2. Knodle - фреймворк, где проще работать с сетями. Предоставляют также свою модель разметки.
3. skweak - предоставляют интерфейс для NER. а также модель разметки для агрегации.
4. wiser - не могу сказать, что это прямо продуктовый фреймворк, но что есть. Также предоставляет свою модель агрегации для последовательностей и линкинга.

Последний включает любопытный FAQ .
Hone as You Read. A Practical Type of Interactive Summarization
# О чем
В статье предлагается метод интерактивной саммаризации, которая не сильно отвлекает читателя от контента. При этом саммаризатор подстраивается на лету.

# Метод
В качестве метода фидбека авторы предлагают свайпы, как в Тиндере, или отслеживание положения глаз. В статье они полагаются на первый способ.
Модель интересов читатели представляет собой множество пар эмбеддингов коцептов с весом U, который отражал бы интерес читателя. Соответственно важность конкретного текста (предложений у авторов), можно представить как максимум взвешенного косинусной пожожести. $$R(U,x)=max_{i=1,..,k}w_i(1-cossim(c_i,x))$$
, где x - предложение, c - вектор концептов. Эти векторы инициализируются как центры кластеров, полученных на эмбеддингах исходных документов. Для начальной оценки важности используется формула 4 и 5.
Далее, авторы представляют модель фидбека пользователя, на основе которой и решается выводит сообщение или нет. Она выглядит просто $$P(accept|x)=1 - [1 + exp(\frac{\alpha-r_x}{m})]^{-1}$$
здесь m - уровень зашумленности фидбека пользователя, а $\alpha$ - порог принятия решения. Меньше знание альфы значит то, что пользователь положительно оценивает с более низкой важностью

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

# Результаты
Тестировались на данных CNN/Daily mail. Авторы показали, что их подход работает лучше, чем набор некоторые эвристик, хотя разница и не особо значительна.
Интересный тест авторы провели на людях. Им давали читать новости с помощью эвристик, системы авторов и контрольные задания. После того, как они решили закончить читать, их спрашивали, на сколько складным было чтение (от 1 до 5). Затем им показывали не показанную часть и спрашивали, сколько бы они еще включили. Таким образом, авторы получили график, где по Х - процент прочитанных предложений, а по Y - покрытие. Оказалось, что система авторов чуть уступает по проценту прочитанных сообщений (около 72), но выигрывает по покрытию (около 96), причем обе оценки имеют наименьшие доверительные интервалы. Со складностью, ясно дело, лучше всего у контрольной выборки (4.8), но и у системы авторов тоже неплохо вышло (4.1).

Код:https://github.com/tannerbohn/HoneAsYouRead
Жаль, конечно, авторы именно приложения не предоставили. Было бы интересно поиграться.
Мое состояние
👍2
Ну вот наконец подошел дедлайн Диалога. Удивительно, что несмотря на его сдвиг, я все равно как сумасшедший в последние дни занимался только статьей. Зато теперь на месяцок можно расслабиться, пока идет процесс ревью.

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

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

Вспоминая еще опыт прошлой работы по создания датасета по детекции суицидальных текстов, где пользователи с разметкой у меня были в Экселе, собранные посты в БД, и разметка снова в Экселе, я зарекаюсь пальцем шевелить в таких проектах без:

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

И вам все горячо советую так делать, если вы еще нет.
🕊1
На прошлых выходных, когда я позволил себе денечек отойти после гонки за дедлайном, я случайно наткнулся на такую вещь, как Ripple Down Rules (RDR). Это такой способ организации знаний людей экспертов. Вообще, про это все относится к такой отрасли, как инженерия знаний: фреймы, семантические сети, экспертные системы, вот это вот все. Насколько я могу судить, это было популярно в 80-90, но с развитием машинного обучения пошло на спад, а после ImageNet момента, кажется, что про эту дисциплину вообще все забыли, кроме, может, медицины. Я же изучаю, потому что нравится.

Так вот, фундаментальная проблема инженерии знаний в сложности и продолжительности процесса экстракции знаний из эксперта, человека, обладающего нужными знаниями и опытом, сложности организации этих знаний в базы, а также их обслуживание. У RDR есть пара интересных особенностей в ответ на эти проблемы. Во-первых, их устройство позволяет добавлять новые знания, не изменяя при этом существующие. Во-вторых, для их построения не нужен инженер по знаниям — специальный человек психолог-инженер, способный вытаскивать из человека знания, которые тот порой сам выразить не может.

Сами же RDR представляют собой набор обычных инструкций if-else: в каждом утверждении проверяются атрибуты объекта и в конечном итоге выносится решение, например, о классификации. Главной фишкой является директива except на случай, если какое-то условие срабатывает неверно. Except, на простом языке, позволяет ввести оговорку в правило типа "if вода падает с неба, then дождь, except температура на улице меньше 0, then снег".

Формируется такой набор путем предъявления человеку объектов, описанный в виде разных атрибутов, с вопросом типа принадлежит ли этот объект конкретному классу. Если да, то в RDR записывается, что если объект имеет вот такие атрибуты, то класс будет вот таким потому что был вот такой вот объект. Если эксперт отвечает отрицательно, то, соответственно, записывается else. Если же эксперту показывается неверное предсказание системы на основе существующих правил, то систему спрашивает какие атрибуты повлияли на это решение. По результатам этого заводится исключение.

Очевидным ограничением данного подхода является заранее заданный набор атрибутов, которыми описывается объект. Насколько я понял, есть разные варианты RDR, но я не видел чтобы кто-то применял динамические атрибуты.

Из практического применения к NLP, видел статью, где авторы предлагали использовать RDR в задаче лемматизации слов. Атрибутов было всего три: буква, пара и тройка букв окончания. Авторам оставалось лишь расписать трансформацию. Мне видится, что это идеальный кейс, где обычные правила гораздо практичнее, чем любой ML классификатор.

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

Если тоже захотите покопаться в ретротехнологиях, то вот ссылка, где можно посмотреть слайды по RDR, детальное описание, а также пошаговый пример создания RDR. А еще мне удалось раскопать вот такую репу на гитхабе, где есть метод автоматического получения RDR.
При просмотре работ по оценке ChatGPT и GPT-4, нельзя не заметить интересную тенденцию оценивать их не с помощью какого-нибудь фиксированного набора, а с помощью психологических, когнитивных тестов, которые обычно проходят люди. Мотивируется это тем, что в эти модели, можно сказать, запихнули Интернет, поэтому даже если представить, что они не видели конкретный датасет, то скорее всего видели статьи, где описывается этот датасет и результаты, которые на нем получены. Таким толстенным моделям этого может вполне хватить, чтобы "додумать" природу тестового набора и успешно его решить. С другой стороны, исследователи даже называют GPT-4 ранней стадией общего искусственного интеллекта, т.е. именно интеллекта, поэтому почему бы не измерять его методами, которые ближе к психологии, где вопрос изучения интеллекта изучается довольно давно.

Вот работа от Майкрософтовских исследователей на добрых 154 страницы, где как раз это подсвечивается и приводится детальный отчет изучения разных аспектов GPT-4. Приводимые там примеры, даже если это cherry peaking, продолжают потрясать даже после чтения официального релиза. А вот работа других исследователей, где в подобной манере изучается ChatGPT. Она поменьше, 33 страницы всего (всего 33 страницы, Карл!).

Кстати, про Reinforcement Learning with Human Feedback (RLHF), метод, с помощью которого обучали ChatGPT и GPT, можно почитать в этом блогпосле от HuggingFace. А для любителей ретроспективы недавно вышел обзор того, как мы от BERT пришли к ChatGPT (97 страниц).
👍3