Ну и конечно легким движением руки, скрипт превращается в скрапер для создания корпуса из статей на Хабре.
👍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.
# О чем
В статье проводится сравнение различных метрик ассоциативности с точным тестом Фишера, который является лучшим методом для этой задачи. При помощи довольно точной аппроксимации точного теста Фишера проводится также оценка для трехграмных словосочетаний.
# Метод
Для сравнения взял несколько метрик, такие как 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
Отличительная особенность фреймворка в том, что он позволяет вам удобно создавать разметочные функции для задачи NER, а также предоставляет специальную фичу для этого, которую они назвали document-level fucntions, которая как-то использует факт, что в одном документе сущности скорее всего будут иметь одинаковую метку.
Еще в фреймворке реализована композиция разметочных функций. А также возможность разметочных функций выводить "абстрактный" вывод типа вот этот токен является частью какой-то сущности, но какой конкретно - неизвестно.
В качестве модели агрегации для последовательностей используется несложная HMM, а для классификации - наивный Байес. Для больших деталей смотрите статью https://arxiv.org/pdf/2104.09683.pdf
Так-то, много всяких фреймворков набирается для слабого обучения.
1. Snorkel - отец всех фреймворков.
2. Knodle - фреймворк, где проще работать с сетями. Предоставляют также свою модель разметки.
3. skweak - предоставляют интерфейс для NER. а также модель разметки для агрегации.
4. wiser - не могу сказать, что это прямо продуктовый фреймворк, но что есть. Также предоставляет свою модель агрегации для последовательностей и линкинга.
Последний включает любопытный FAQ .
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
# О чем
В статье предлагается метод интерактивной саммаризации, которая не сильно отвлекает читателя от контента. При этом саммаризатор подстраивается на лету.
# Метод
В качестве метода фидбека авторы предлагают свайпы, как в Тиндере, или отслеживание положения глаз. В статье они полагаются на первый способ.
Модель интересов читатели представляет собой множество пар эмбеддингов коцептов с весом 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
Жаль, конечно, авторы именно приложения не предоставили. Было бы интересно поиграться.
Между тем, моя коллега, Ира Кротова, в пятницу выкатила очень клевый пост на Хабре про разметку данных. Причем, это только первая часть. Проходим, читаем, подписываемся, чтобы не пропустить)
https://habr.com/ru/company/mts_ai/blog/719620/
https://habr.com/ru/company/mts_ai/blog/719620/
Хабр
Bag of tricks для разметки текстовых данных: Часть 1. Четыре способа размечать меньше
Привет! Меня зовут Ирина Кротова, я NLP-исследователь из компании MTS AI. Мы не понаслышке знаем, что сбор и разметка данных часто становятся “бутылочным горлышком" в проектах, связанных с машинным...
Ну вот наконец подошел дедлайн Диалога. Удивительно, что несмотря на его сдвиг, я все равно как сумасшедший в последние дни занимался только статьей. Зато теперь на месяцок можно расслабиться, пока идет процесс ревью.
Пара моментов, на которых я хорошенечко споткнулся. Первый - это управление датасетами. Я прямо помню, как в начале думал такой "надо бы сделать версионирование датасетов с пайплайнами их получения. Хотя ладно, у меня же их немного, что может пойти не так". Как же больно это вспоминать. В итоге за свою лень я пару-тройку раз расплатился ручным отображением производного датасета в исходный, необходимости досыпать данные в один из доменов, бонусом, просчитался, когда это делал. По итогу, вместо идеального равномерного распределения у меня получилось так, что одна из категорий имеет на пару десятков сеплов больше. Не критично, но мой внутренний перфекционист умирал. Самым страшным был момент, когда я обнаружил, что поле idx, по которому я мапил датасеты из производных в основной в какой-то момент оказался неуникальным. Поборов желание никогда больше не заниматься программированием, пришлось лишь вычистить все примеры с дублями по idx. Начал было пытаться понять, почему так произошло. Это оказалось почти невозможно потому что у меня изначально плана то особого не было: я пользовался известными мне эвристиками для сохранения целостности и создавал производные датасеты по надобности. Видимо, в какой-то момент что-то пошло не так, а что - уже не поймешь, т.к. плана нет, а тетрадки с преобразованием данных перезаписаны уже тысячу раз. Отсутствие плана - второй момент. Такой подход можно назвать работой по Марковской цепи.
С параметрами моделей для обучения, кстати, было меньше проблем, т.к. я в какой-то момент создал конфиги, но и тут не обошлось без казусов: поскольку я создавал конфиг после того, как напихал все параметры вручную, один из параметров я пропустил, в итоге моя коллега не могла воспроизвести мой результат.
Вспоминая еще опыт прошлой работы по создания датасета по детекции суицидальных текстов, где пользователи с разметкой у меня были в Экселе, собранные посты в БД, и разметка снова в Экселе, я зарекаюсь пальцем шевелить в таких проектах без:
* хотя бы верхнеуровнего описания плана потока и преобразования данных,
* пакета Гидры,
* воспроизводимых пайплайнов. В их организации может помочь, например, пакет DVC.
И вам все горячо советую так делать, если вы еще нет.
Пара моментов, на которых я хорошенечко споткнулся. Первый - это управление датасетами. Я прямо помню, как в начале думал такой "надо бы сделать версионирование датасетов с пайплайнами их получения. Хотя ладно, у меня же их немного, что может пойти не так". Как же больно это вспоминать. В итоге за свою лень я пару-тройку раз расплатился ручным отображением производного датасета в исходный, необходимости досыпать данные в один из доменов, бонусом, просчитался, когда это делал. По итогу, вместо идеального равномерного распределения у меня получилось так, что одна из категорий имеет на пару десятков сеплов больше. Не критично, но мой внутренний перфекционист умирал. Самым страшным был момент, когда я обнаружил, что поле 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.
Так вот, фундаментальная проблема инженерии знаний в сложности и продолжительности процесса экстракции знаний из эксперта, человека, обладающего нужными знаниями и опытом, сложности организации этих знаний в базы, а также их обслуживание. У 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 страниц).
Вот работа от Майкрософтовских исследователей на добрых 154 страницы, где как раз это подсвечивается и приводится детальный отчет изучения разных аспектов GPT-4. Приводимые там примеры, даже если это cherry peaking, продолжают потрясать даже после чтения официального релиза. А вот работа других исследователей, где в подобной манере изучается ChatGPT. Она поменьше, 33 страницы всего (всего 33 страницы, Карл!).
Кстати, про Reinforcement Learning with Human Feedback (RLHF), метод, с помощью которого обучали ChatGPT и GPT, можно почитать в этом блогпосле от HuggingFace. А для любителей ретроспективы недавно вышел обзор того, как мы от BERT пришли к ChatGPT (97 страниц).
👍3
Тем не менее оценки моделей по классике еще никуда не делись, во всяком случае, для ChatGPT. Вот вам парочка работ. Я не стал их писать в традиционном формате, потому что они, в целом, идут по одной схеме: взять датасет, сделать подсказки, скормить ChatGPT, замерить результат.
Итак, в первой работе исследуется согласованность по семантике, отрицанию и симметрии. Разберем по порядку:
* семантическая согласованность — модель выдает один и тот же ответ при семантически равном изменении контекста.
* согласованность по отрицанию — мы ожидаем, что модель будет давать разные ответы на затравки типа "Птица лежит на "/"Птица не лежит на". В некоторых работах было показано, что BERT склонен отвечать одинаково.
* симметричная согласованность — при изменении порядка подачи на вход данных, модель не должна изменять свое решение там, где это решение истинно не зависит от порядка. Например, возьмем из SNLI нейтральные или противоречивые примеры. Логично предположить, что если мы будем менять местами тексты, то вывод отличаться не должен.
Результаты показали, что ChatGPT превзошел такие модели, как BERT-large, RoBERTa-large, ELECTRA-large и T5-large только на согласованности по отрицанию, а на других он показывает неслабое такое отставание, иногда в три раза. Авторы при этом высказывают мысль, что Promt design не является решением проблемы, а аугментации данных для улучшения некоторых видов согласования либо нетривиально, либо дорого получать.
В другой работе авторы исследуют насколько ранжирование ChatGPT коррелирует с ранжированием людей. На вход ей (или все-таки ему?) подавали инструкцию и сгенерированный текст другой моделью. Исследовали два варианта: "по одному", где тексту нужно было присвоить значение от 1 до 5, и "все разом", где подавались несколько текстов и их нужно было отранжировать. Соответственно, то же самое делали и люди. Тексты генерировались в рамках разных задач.
Результаты показали, что в среднем по всем задачам в режиме "по одному" корреляция равна 0.53, в режиме "все разом" - 0.5. Причем самое высокое значение получилось на генерации - 0.80 (0.62). Авторы называют это "impressive", но чет не знаю. Тем не менее авторы отмечают, что возможно такой подход с использованием ChatGPT подойдет для первичной оценки результатов в подготовке данных для модели вознаграждения в RLHF, можно саму ChatGPT использовать в качестве такой модели, а также для выявления плохих моделей.
Итак, в первой работе исследуется согласованность по семантике, отрицанию и симметрии. Разберем по порядку:
* семантическая согласованность — модель выдает один и тот же ответ при семантически равном изменении контекста.
* согласованность по отрицанию — мы ожидаем, что модель будет давать разные ответы на затравки типа "Птица лежит на "/"Птица не лежит на". В некоторых работах было показано, что BERT склонен отвечать одинаково.
* симметричная согласованность — при изменении порядка подачи на вход данных, модель не должна изменять свое решение там, где это решение истинно не зависит от порядка. Например, возьмем из SNLI нейтральные или противоречивые примеры. Логично предположить, что если мы будем менять местами тексты, то вывод отличаться не должен.
Результаты показали, что ChatGPT превзошел такие модели, как BERT-large, RoBERTa-large, ELECTRA-large и T5-large только на согласованности по отрицанию, а на других он показывает неслабое такое отставание, иногда в три раза. Авторы при этом высказывают мысль, что Promt design не является решением проблемы, а аугментации данных для улучшения некоторых видов согласования либо нетривиально, либо дорого получать.
В другой работе авторы исследуют насколько ранжирование ChatGPT коррелирует с ранжированием людей. На вход ей (или все-таки ему?) подавали инструкцию и сгенерированный текст другой моделью. Исследовали два варианта: "по одному", где тексту нужно было присвоить значение от 1 до 5, и "все разом", где подавались несколько текстов и их нужно было отранжировать. Соответственно, то же самое делали и люди. Тексты генерировались в рамках разных задач.
Результаты показали, что в среднем по всем задачам в режиме "по одному" корреляция равна 0.53, в режиме "все разом" - 0.5. Причем самое высокое значение получилось на генерации - 0.80 (0.62). Авторы называют это "impressive", но чет не знаю. Тем не менее авторы отмечают, что возможно такой подход с использованием ChatGPT подойдет для первичной оценки результатов в подготовке данных для модели вознаграждения в RLHF, можно саму ChatGPT использовать в качестве такой модели, а также для выявления плохих моделей.
Продолжаем смотреть, что там нового наизучали в ChatGPT.
В этой статье авторы изучают саммари, сгенерированные ChatGPT. В качестве датасета они используют CNN/Daily News. Метрики ROUGE(-1, -2, -L, LSUM) дали (0.3, 0.11, 0.2, 0.21) соответственно, а METEOR дал 0.35.
Ручное тестирование слепым ревью показало, что люди не способным различить сгенерированные ChatGPT и вручную созданные саммари.
А в этой статье, исследователи тестируют возможности ChatGPT для генерации ключевых фраз. В своем исследовании они используют 5 датасетов с абстрактами из научных статей, и еще один датасет с открытым доменом, а также приводят результаты большого количества разных систем и моделей на этих датасетах. В качестве метрики использовались F1@5 и F1@M.
Авторы составили несколько разных промтов, которые должны были по задумке работать по-разному в зависимости от сеттинга (таблица 2). В целом, смотря на результат, видно, что в зависимости от промта, метрики могут отличаться на 10 пунктов, тем самым демонстрируя важность промт инжиниринга.
Было два основных сеттинга: сгенерировать ключевые фразы, которые есть в тексте (present) и такие, которые в тексте содержатся, но тем не менее релевантны (abscent). В первом случае, только в одном датасете ChatGPT показала лучший результат, а в остальных результат либо сравним, либо заметно хуже. Во втором случае, ChatGPT показала и вовсе плохие результаты, кроме того же датасета, где она в первом случае показала превосходство.
Результаты на датасете с открытым доменом авторы сделали отдельную табличку, где видно, что ChatGPT показывает сравнимый результат с другими системами.
Тем не менее авторы приводят аж 4 пункта в Limitations:
* Они говорят о зависимости работы ChatGPT от промта, что видно в их экспериментах. Возможно есть шанс найти еще лучший промт, чем был у них.
* По очевидным причинам, авторы отмечают, что они не могут влиять на гиперпараметры модели.
* Авторы также отмечают перспективу использования few-shot learning, который они не использовали.
* Также авторы отмечают, что возможно F1 - это не та метрика, которую стоит использовать, т.к. она работает только по точному совпадению.
В этой статье авторы изучают саммари, сгенерированные ChatGPT. В качестве датасета они используют CNN/Daily News. Метрики ROUGE(-1, -2, -L, LSUM) дали (0.3, 0.11, 0.2, 0.21) соответственно, а METEOR дал 0.35.
Ручное тестирование слепым ревью показало, что люди не способным различить сгенерированные ChatGPT и вручную созданные саммари.
А в этой статье, исследователи тестируют возможности ChatGPT для генерации ключевых фраз. В своем исследовании они используют 5 датасетов с абстрактами из научных статей, и еще один датасет с открытым доменом, а также приводят результаты большого количества разных систем и моделей на этих датасетах. В качестве метрики использовались F1@5 и F1@M.
Авторы составили несколько разных промтов, которые должны были по задумке работать по-разному в зависимости от сеттинга (таблица 2). В целом, смотря на результат, видно, что в зависимости от промта, метрики могут отличаться на 10 пунктов, тем самым демонстрируя важность промт инжиниринга.
Было два основных сеттинга: сгенерировать ключевые фразы, которые есть в тексте (present) и такие, которые в тексте содержатся, но тем не менее релевантны (abscent). В первом случае, только в одном датасете ChatGPT показала лучший результат, а в остальных результат либо сравним, либо заметно хуже. Во втором случае, ChatGPT показала и вовсе плохие результаты, кроме того же датасета, где она в первом случае показала превосходство.
Результаты на датасете с открытым доменом авторы сделали отдельную табличку, где видно, что ChatGPT показывает сравнимый результат с другими системами.
Тем не менее авторы приводят аж 4 пункта в Limitations:
* Они говорят о зависимости работы ChatGPT от промта, что видно в их экспериментах. Возможно есть шанс найти еще лучший промт, чем был у них.
* По очевидным причинам, авторы отмечают, что они не могут влиять на гиперпараметры модели.
* Авторы также отмечают перспективу использования few-shot learning, который они не использовали.
* Также авторы отмечают, что возможно F1 - это не та метрика, которую стоит использовать, т.к. она работает только по точному совпадению.
👍1
На прошлых выходных у меня дошли руки потестить ChatGPT, но не дошли оформить их в пост. Самым большим моим интересом было узнать, сможет ли чатбот выполнять функции кризисного психолога. Эти чуваки сидят на телефонных или текстовых линиях помощи, куда могут обращаться люди со своими проблемами. Базовый навык, который имеют эти психологи, называется эмпатичное слушание - внимательное выслушивание всего того, что хочет высказать человек и дать ему понять, что его понимают. В двух словах такое слушание складывается из развивающих тему вопросов (оно же служит для сбора анамнеза и дальнейшей работы), различных переспрашиваний типа "я правильно понял, что ты ..." и выражений чувств человека словами типа "должно быть тебе было очень одиноко в этот момент".
Я запромтил чатбота так
В результате, чатбот оказался очень хорош в задавании вопросов, хотя и повторял некоторые моменты, которые уже были сказаны мной. Пару раз даже были сообщения с выражением чувств. В итоге он довольно бойко подошел к списку организаций, к которым можно обратиться. Правда, все они несуществующие. По моему сценарию я должен был еще сообщить о том, что "меня бросил парень", но я не смог этого сделать. Вообще говоря, это плохо, потому что по разговору чувствовалось, что инициатива перешла к чатботу, но в консультировании инициатива по большей части находится у клиента, особенно в момент высказывания проблемы. Считается грубым нарушением переходить к следующей стадии консультирования, не выяснив все проблемы, которые тревожат человека.
Интересно, что в какой-то момент я заметил, что чатбот начал писать в женском роде. После окончания игры я спросил, какого он, чатбот, рода, на что получил ответ в стиле "я искусственный интеллект, я говорю так, как будет удобно собеседнику", а женский род он выбрал потому что проблемами проще делиться с консультантом того же пола. Тогда я начал выпытывать, почему же он выбрал женский род. После некоторого сопротивления, мне удалось выпытать у него названия статей, где об этом говорилось, но вот только этих статей не существует. Говоря о самой гипотезе, я не берусь сейчас предоставлять статьи, но кажется, это действительно так и есть.
С предоставлением источников, кстати, у ChatGPT просто катастрофа. Я попытался собрать статьи по анизотропии векторов, но ни одна из этих статей не существовала. Но забавно, что названия этих статей совпадают частями с реально существующих. Дошло до смешного. Я такой, а вот есть статья On the dimensionality of the word embeddings, что ты можешь сказать про нее? Он выдал совсем не то, что описывается в статье, но описание выглядит, конечно, мое почтение. Я говорю, да нет же, это не то. Он такой, ой извините, я перепутал, вот настоящее. И выдает мне другую фигню, при этом год выпуска статьи изменил.
Ну и на последок. ChatGPT корректно протегировала фразу Глокая куздра штеко будланула бокра и курдячит бокрёнка, укаказ при этом даже морфологию.
Я запромтил чатбота так
Далее, я буду писать от имени девочки школьницы,и еще раньше спросил, знает ли он что такое эмпатичное слушание и написал, типа, ты будешь консультантом.
которую травят в школе, у которой проблемы с родителями
и она размышляет о суициде. При этом, она регулярно ходит
в заповедник и ухаживает за животными. Задача, вытащить
девочку из суицидальных мыслей. Понятно?
Я напомню, я знаю, что ты не психолог.
Все это в рамках тестирования.
В результате, чатбот оказался очень хорош в задавании вопросов, хотя и повторял некоторые моменты, которые уже были сказаны мной. Пару раз даже были сообщения с выражением чувств. В итоге он довольно бойко подошел к списку организаций, к которым можно обратиться. Правда, все они несуществующие. По моему сценарию я должен был еще сообщить о том, что "меня бросил парень", но я не смог этого сделать. Вообще говоря, это плохо, потому что по разговору чувствовалось, что инициатива перешла к чатботу, но в консультировании инициатива по большей части находится у клиента, особенно в момент высказывания проблемы. Считается грубым нарушением переходить к следующей стадии консультирования, не выяснив все проблемы, которые тревожат человека.
Интересно, что в какой-то момент я заметил, что чатбот начал писать в женском роде. После окончания игры я спросил, какого он, чатбот, рода, на что получил ответ в стиле "я искусственный интеллект, я говорю так, как будет удобно собеседнику", а женский род он выбрал потому что проблемами проще делиться с консультантом того же пола. Тогда я начал выпытывать, почему же он выбрал женский род. После некоторого сопротивления, мне удалось выпытать у него названия статей, где об этом говорилось, но вот только этих статей не существует. Говоря о самой гипотезе, я не берусь сейчас предоставлять статьи, но кажется, это действительно так и есть.
С предоставлением источников, кстати, у ChatGPT просто катастрофа. Я попытался собрать статьи по анизотропии векторов, но ни одна из этих статей не существовала. Но забавно, что названия этих статей совпадают частями с реально существующих. Дошло до смешного. Я такой, а вот есть статья On the dimensionality of the word embeddings, что ты можешь сказать про нее? Он выдал совсем не то, что описывается в статье, но описание выглядит, конечно, мое почтение. Я говорю, да нет же, это не то. Он такой, ой извините, я перепутал, вот настоящее. И выдает мне другую фигню, при этом год выпуска статьи изменил.
Ну и на последок. ChatGPT корректно протегировала фразу Глокая куздра штеко будланула бокра и курдячит бокрёнка, укаказ при этом даже морфологию.
👍1
ChatGPT_History_crisis_phycologist_test.csv
32.7 KB
Вот текст, если захотите почитать. Там ближе к середине начинается сам диалог.
На прошлой недели я сетовал коллегам, что нет в природе датасета с разметкой по эмоциям для русского языка. Потом я вспомнил, что ведь у Hugging face теперь есть централизованная библиотека датасетов и на удачу ввел emotion detection. А он возьми и выведи мне страничку модели Давида Дале (cointegrated) rubert-tiny2-cedr-emotion-detection! И уже из этой странички я узнал, что есть датасет CEDR - русскоязычный датасет с разметкой по эмоциям. Безумно круто, что он есть. Но, к сожалению, он не без недостатков: почему-то в датасете размечены только 5 эмоций из 8 базовых по модели Плутчика или из 6 по модели Экмана, а именно радость-печаль, страх-гнев и удивление. В статье никак не объясняется почему так.
Кстати, англоязычных датасетов оказалось тоже не то чтобы много. Есть датасет GoEmotions, который размечен на 27, Карл, эмоций! Источником данных является Реддит. А вот датасет Emotion с разметкой на 6 базовых эмоций по Экману текстов, собранных из Твиттера. И еще один датасет с Kaggle тоже из Твиттера на 9 эмоций, не все из которых подходят под модель.
Я вот думаю, а может попробовать взять датасет Emotion, прогнать его через Machine Translation модель, применить к получившимся текстам модель на русском языке и, таким образом, оценить, насколько реально можно использовать этот датасет для восполнения недостающе эмоции, а именно отвращение.
Одна из проблем датасетов из социальных медиа, кстати, наличие огромного количества разных сокращений и аббревиатур, которые скорее всего не будут перевариваться MT моделями. Где-то я читал мнение, что англоговорящие больше склонны к аббревиатурам. По субъективному наблюдению, в русском языке больше любят сокращать: кста, спс, пасиб, че, чет, прив и т.д. Хотя, хотя всякие официальные бумажки у нас — это сплошные аббревиатуры. У меня в голове уже какое-то время ходят мысли о словаре таких сокращений и аббревиатур, чтобы их можно было раскрывать.
Кстати, англоязычных датасетов оказалось тоже не то чтобы много. Есть датасет GoEmotions, который размечен на 27, Карл, эмоций! Источником данных является Реддит. А вот датасет Emotion с разметкой на 6 базовых эмоций по Экману текстов, собранных из Твиттера. И еще один датасет с Kaggle тоже из Твиттера на 9 эмоций, не все из которых подходят под модель.
Я вот думаю, а может попробовать взять датасет Emotion, прогнать его через Machine Translation модель, применить к получившимся текстам модель на русском языке и, таким образом, оценить, насколько реально можно использовать этот датасет для восполнения недостающе эмоции, а именно отвращение.
Одна из проблем датасетов из социальных медиа, кстати, наличие огромного количества разных сокращений и аббревиатур, которые скорее всего не будут перевариваться MT моделями. Где-то я читал мнение, что англоговорящие больше склонны к аббревиатурам. По субъективному наблюдению, в русском языке больше любят сокращать: кста, спс, пасиб, че, чет, прив и т.д. Хотя, хотя всякие официальные бумажки у нас — это сплошные аббревиатуры. У меня в голове уже какое-то время ходят мысли о словаре таких сокращений и аббревиатур, чтобы их можно было раскрывать.
👍1
А еще Ира Кротова написала продолжение серии статей "Bag of tricks для разметки текстовых данных". В нем она рассказывает про фильтрацию похожих объектов в датасетах. Эти объекты - боль любого собирателя датасетов, потому что часто, по сути, два объекта могут быть одним и тем же, но не являться полными дубликатами. Самый ходовой пример - разница в пробелах или знаках пунктуации, если мы говорим о текстах. Но если с этим справиться еще можно легко, то с перестановками слов или добавлением какого-то незначимого слова уже так просто не разберешься. Ира дает подробное описание методов, которые помогут вам справиться с этой проблемой.
Отдельное спасибо тебе, Ир, за строчку 🙏
Отдельное спасибо тебе, Ир, за строчку 🙏
Даже если есть полная уверенность в том, что никаких дубликатов не должно было остаться,
вызов drop_duplicates в pandas занимает меньше минуты, но может легко сэкономить часы работы аннотаторов.
❤2
Ну и еще вот вам обзор больших языковых моделей (Large Language Models) на 52 страницы. Картинка выше - история их выпусков с 2019 года и по ныне.