Записки NLPшника
166 subscribers
60 photos
7 files
112 links
Еще один канал заметок, выжимок статей и прочих радостей про NLP и данные.
Download Telegram
Записки NLPшника
И тут вы такие «каких-каких эмбеддингов?». Я сам был в шоке. Думаю, они не соврали, что первыми предложили такой метод. Чтобы такие получить, нужно сначала предложение превратить в синтаксическое дерево (сделать это можно через SpaCy, UDPipe или нейроразборщик, если знаете таковой), а затем это дерево перегнать в эмбеддинги с помощью Weisfeiler-Lehman graph kernel. Я нашел на Гитхабе пакеты с этим методом, но они какие-то запутанные, а мне fit_predict подавай. Разобраться в работе метода я даже не пытался, тут пояснительная бригада математиков нужна. Но сам факт, что так можно — делает душе приятно.
Почти год назад я разбирал статью, в которой мне попалась метрика оценки разнообразия синтаксиса. На чем я тогда остановился — читайте выше.

Так вот, судьбой было предназначено мне еще раз посмотреть на тот абзац из статьи, а оттуда уже и в ссылки, которых там две. Вы не поверите, как звучит одна из них: "GraKeL: A Graph Kernel Library in Python". Я говорю, что мне "fit_predict" подавай? Описание либы из гитхаба: "A scikit-learn compatible library for graph kernels". Да-да, рабочая либа для питона.

Вы спросите меня, как я искал тогда вообще? А я вам ничего не скажу.

Про запутанность метода я тоже преувеличил. У автора либы есть очень подробный обзор этих самых ядер, в том числе того самого Weisfeiler-Lehman graph kernel. Самое важное: в начале он воскрешает в памяти базовые понятия по графам, а затем объясняет, что собой представляют эти ядра математически. Никакой пояснительной бригады не понадобилось.

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

Мы в команде уже тыкаем эту штуку на практике и через время, думаю, сделаем пост про эти самые графовые ядра и про синтаксическое разнообразие.
👍1
Forwarded from ПсиТехЛаб
Не совсем сразу после праздников, но на первой неделе).
Выложили пост про Langfuse — платформу версионирования и учета затравок для больших языковых моделей. Рассказываем, почему выбрали именно ее, как развернуть и как начать с ней работать.

Почитайте.
🔥3
Пост-солянка разных интересностей, которыми хочется поделиться, но на отдельный пост не тянут

Использование ML/Data Open Source в России — команда из ИТМО проанализировала решения, инструменты и их применимость на базе открытого кода. Ребята выделили главных игроков, обозначили проблемы и перспективы.

Девушки в IT. Как на карьеру влияют семья, стереотипы и профильное образование — чуваки из Яндекса и ВШЭ опросили девушек, работающих в IT, и предоставили результаты анализа. tl;dr: если родители поддерживали, девушка училась в профильных классах, участвовала в олимпиадах и интересовалась математикой, то все у нее будет хорошо в IT. Секретов нет.

Меня первый раз процитировали вот в этой работе. Правда, всё цитирование сводится к фразе "There is one dataset constructed for the early detection of suicidal signals from social media texts" в описании смежных работ. Забавно, что авторы BERT называют БЯМ. И модели в работе они используют ну совсем не БЯМ. Вышкинцы, передайте коллегам, что БЯМ давно уже >1kk параметров.

Нашел калькулятор требований по памяти для инференса или обучения БЯМ.

Закрылся курс Браславского Павла по введению в обработку естественного языка на Степике. В уже далеком 2017 году я из него получил первые знания об этой области. Трансформер еще не родился, лучшей моделью были варианты LTSM, все обсуждали механизм внимания. Навсегда в моём сердце. F.

Я добавил много разных обучающих материалов в свой NLP Compass, посмотрите. До обновления диаграмм компетенций в ближайшее время руки вряд ли дойдут, но по тем вакансиями, что мне иногда приносят HR, вижу, что появился запрос про работу с LLM. Кажется, я это добавлял в прошлом году. Может, стоит фреймворков накидать для LLM, а то у меня там значится только LangChain. Есть идеи?
8
Была у меня такая задача. Есть россыпь классов, название которых могло незначительно отличаться, но смысл их был одинаков. Надо было такие классы объединить в один. Речь шла примерно о таких случаях: «нейтральный», «нейтрал», «нейтральныйОтвет».

Вместо того чтобы пытаться запихнуть тексты в векторы и накрутить на это кластеризацию или, тем более, просить БЯМ, я решил попробовать дедовский метод: сопоставление строк. Технически это та же кластеризация только над различиями строк.

Пошел в гугл искать питонячью библиотеку. Казалось для такой задачи их должно быть тонны. Как бы не так. Я потратил кучу времени на поиск хотя бы чего-то рабочего. Нашел только ОДНУ библиотеку Fuzz Up от пользователя со смешным для русского человека ником ebanalyse. Дизайн у либы ужасный, сама она давно не обновлялась, но на 10 питоне всё еще работает.

Пока искал либу, нашел обзор 2007 года по дедупликации строк в БД — так называется эта задача. Узнал, что для сравнения строк существует не только метрика Левенштейна. Часть описанных там метрик реализована в либе RapidFuzz, которая как раз используется в FuzzUp. Выбрать метрику можно через kwargs.

Отдельно обратил внимание на фонетические метрики похожести Soundex и Metaphone. Для русского и некоторых других языков реализацию можно найти в либе Fonetika. Автор даже оживился и за последнюю неделю закинул два комита впервые за три года.

Все либы добавил в список полезных реп, который теперь веду вот здесь.

Для моей задачи, кстати, метод не совсем подошел: постоянно было много кластеров, которые вроде хорошие, но один-два довольно крупных класса были вообще не в кассу. Как бы я не пытался крутить порог, уменьшить количество таких кластеров не получалось. Вручную проходиться и чистить тоже не хотелось. В итоге схлопнул по вхождению общей подстроки, а где подстроки не нашлось — выкинул))) Итог получился сносным, хотя, конечно, несколько классов явно имели совсем не ту семантику, которая ожидалась. Вот тут как раз уже можно и через эмбеддинги фильтрануть.
🔥31
Forwarded from ПсиТехЛаб
Всем здрасте. Мы с новым девлогом.

Любой МЛщик когда-то задается вопросом: «А как мне деплоить свои модели?». Мы давно нашли на него ответ: это Triton Inference Server, разработка Nvidia. В девлоге мы расскажем необходимый минимум о Тритоне и как мы его используем в нашем проекте. Ссылка на репу: tritoned_bert.
👍4
Начинаем потихонечку рассказывать, что мы с командой сделали за последний почти год.

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

23 апреля в офисе MTS AI на Подсосенском переулке буду рассказывать, как мы в Пситехлабе собирали датесет для определения разных пресуицидальных и антисуицидальных признаков в тексте. В отличие от декабрьского доклада, в грядущем уже будет много деталей про то как выстраивали процесс разметки, с какими трудностями столкнулись и что получилось в итоге.

Кроме меня там будут еще два доклада. Первый про поиск аномалий в данных, второй про сжатие данных.

Регистрация здесь
.
🔥4
Мои пальцы явно преследует кулинарное проклятие. Подавая заявку, я отправил сугубо «техническое» название доклада, потому что сроки горели. Я не успел авторам отправить нормальное название до того, как они сделали первый анонс, поэтому на полтелеграма мой доклад значится как «Собираем датасет для определения суицидальных признаков в тесте» (здесь, например).

Оправдывал себя, что торопился, бывает.

Однако, в анонсе выше я написал также. Спасибо, @anykeen, что заметил.

Я думаю это знак: нужно изучить суицидальные наклонности хлебных полуфабрикатов, теста в первую очередь. Собираю донаты.
😁6
Forwarded from ПсиТехЛаб
Привет.

Очередной девлог, за апрель. В нем почитаете про наш сервис детекции персональной информации и скриншоты нашей платформы. Про наш доклад на Moscow Python, где мы рассказываем про наш датасет, там тоже написано, но отдельно подсветим его здесь: смотреть на ютубе и рутубе можно посмотреть тут (презу в нормальном качестве смотреть тут).

Надеемся, вам понравился котик на нашем логотипе.
3
Кринж недели.

Написал я значит маленький класс, чтобы шаблоны для затравок делать. Первое, что пришло в голову для основы — Jinja. Это почтенная либа шаблонов, которую используют для генерации страниц сайтов и документации. Думаю, не мне первому пришла идея использовать ее для затравок.

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

Дошел я в своих экспериментах до техники агрегации затравок. Это когда мы модель спрашиваем одну и ту же задачу разными затравками. За счет случайности процесса, получаем разные «точки зрения». Получается эдакий ансамбль по-бямски.

Идея реализации такая: сделать объект моего класса для затравки, сделать копии и каждую копию уже как-то изменить. Как раз части хранятся отдельно. Затем все по очереди инференсится. Что могло пойти не так?

Ответ убил: при попытке сделать deepcopy от объекта класса вываливается ошибка
TypeError: __new__() missing 1 required positional argument: 'source'

Я сначала даже не поверил сразу. Вы просто представьте, насколько это обескураживающе выглядит: ты спотыкаешься не на том, что у тебя БЯМ выводит какую-то фигню, а на простом копировании объекта. Еще больше балдеешь от того, что ишью эта висит в репе с 2017 года, Карл! Человек, который ишью создал, приложил костыль, который сработал и у меня. Хвала Опенсорсу.

Самое смешное, что дальше идет коммент от мейнтейнера, который "not sure there was ever an expectation that templates could be deep copied". Может, он знает чего-то, что не знаю я, но я не вижу ни одной причины, почему я НЕ должен ожидать, что любой питонячий объект может быть скопирован.

Мое лицо в этот период выглядело так:
🙈2
This media is not supported in your browser
VIEW IN TELEGRAM
1
Как-то я писал, что в институте делаем эксперименты по переводу датасета с помощью БЯМ. В апреле опубликовали статью, теперь, наконец, руки дошли написать пост на великом-могучем.

Я мечтал перевести этот датасет на русский пять лет, чтоб вы понимали.
🔥4
Случайно нашел свежую статью, где выясняли, какой лучше брать энкодер для BERTScore для русского языка. В среднем по больнице таким энкодером оказался google/byt5-large среди 16 моделей (ruBERT только почему-то нет). Выясняли с помощью LLM-as-a-judge на материале 6 датасетов.

BERTScore — метрика качества сгенерированных текстов на ряду с BLEU, ROUGE и т.д. Догадайтесь сами на чем она основана)
👍2
Ситуация. У вас в инфраструктуре есть инференсер БЯМ, который работает как часы: вы ему адрес модели в HF, а он вам эндпоинт. Живете себе и горя не знаете. Но вот инфру обновили и ваш часовой механизм ломается. Вместо предиктов БЯМ вам возвращается ошибка 404.

Что я попытался сделать:
1) Перезапустил эндпоинт, потому что сразу после обновы я попросил коллегу его поднять. У нее всё работало. Я заподозрил, что как-то изменилась политика прав доступа, и эндпоинты, развернутые другим пользователем, перестали быть видимыми для других.
2) Изменил имя эндпоинта на такое, которое никогда не использовалось, потому что я думал, что известное имя может конфликтовать каким-то образом.
3) Перепроверил настройки инференсера — появилось много новых.
4) Перепроверил тысячу раз путь.

Мне неизменно возвращалась ошибка 404.

Потратив два часа, я сдался. Позвонил коллеге, у которой все заработало, с намерением попросить ее прогнать данные через БЯМ, т. к. сроки горели. В разговоре она мельком упомянула, что поменяла токен доступа в инфре — единственное, что я не сделал. Сменил токен за 1 минуту и всё заработало. То есть ошибка 404 на самом деле была ошибкой 403. Разница в единицу стоила мне двух часов.

В манускрипт моих практик по шаманизму добавилась следующая запись: «Если система обновилась, то если какая-то штука не работает, которая раньше работало без проблем, и лог ошибки не бьется с реальностью, то выполнить все действия, будто запускаешь эту штуку первый раз».

Под «не бьется с реальностью» я вот что имею в виду. Я точно вижу, что адрес правильный. Я его даже не руками вводил, а скопировал из примера самой инфры. Но я все равно продолжал считать, что это я дурак, а логи врать не могут.
👍1
Forwarded from ПсиТехЛаб
Добрейшего утречка.

Врываемся в осень с девлогами о том, как провели лето. Вот первая часть.
Подсветим важное объявление из него.

12 октября наша команда будет участвовать в конференции для психологов «Открытые двери». Там наш руководитель будет участвовать в дискуссии, где будут обсуждаться проблемы и перспективы тандема «психология+ИИ», а также мы будем читать доклад о нейросетях для психологов. Другие доклады можно посмотреть в программе.

Если вам эта область знакома или вы хотите усилить «техническую сторону» на конференции, то билеты можно купить здесь. Формат онлайн и оффлайн.
👍1
Я польщен, у меня на канале появились спам-боты))
🔥4😁2