Тут буду собирать инфу для доклада про чат-бот Jamspell Измерение качества NER Делал презу о состоянии проекта в феврале 2020 ~2м жалоб с диагнозами 9-20k размеченных данных (качество разметки ~50-70%) Правила разметки меняются со временем Тренируем на том, что записали врачи. Люди пишут по-другому Проблемы с разметкой Global Parser: Извлечение key_word. На правилах Извлечение features. На правилах и spacy NER Линкинг. elmo embeddings + MLP KnGraph определяет возможные комбинации Classifier Отнесение извлеченных сущностей к конкретным классам На правилах Localization - sklearn на tf-idf на word и char n-gram Опрос: Генерация вопросов на основе шаблонов, правил и формулировки от пользователя Текущее состояние опроса хранится в CurrentState Predictor определяет направление опроса Опрос заполняет slot filling Остановка по количеству итераций, confidence, заполненности Примеры текстов И примеры сложности разметки Препроцессинг аббревиатуры negation extraction ----------------- 11.2019 На нескольких людей (в том числе меня) выдали задачу: проверять и исправлять разметку мета-симптомов которую выдала система на правилах. Получил реальную задачу: взять размеченный датасет по боли (по факту id и лейбл "боль"), взять данные из датасета по этим айдишникам и построить модельку классификации. Нурлан сказал, что там около 300 классов. Полез в данные, потыкался. Обнаружил, что в полусырых данных id диагноза и его описание не всегда собпадают. Точнее по одному id бывает несколько диагнозов. Коллеги слегка офигели, в понедельник будут разбираться В общем так. Была встреча, дело в том, что в среду приезжает некий Аркадий - похоже руководство на пару уровней выше нас. Типа обсуждали о чём будем говорить с ними. Среди прочего обсуждали как коллеги видят продукт в текущем состоянии и будущее. Идеальное видение продукта - диалоговая система, которая может общаться с человеком и задавать всякие вопросы для уточнения диагноза. Насколько я понял, до сих пор 80-90% работы - написание парсеров и другая работа над разметкой текстов. Первая версия диалоговой системы уже была запущена, и она работала на фиксированных правилах. И до сих пор большая часть работы посвящена чистке и обработке данных В итоге я в целом даже без понятия насколько коллеги знают machine learning / deep learning. Дополнительно любопытно было то, что тим-лид аж 2 раза говорил о том, что системы на правилах - это неплохо, это первый важный шаг, это сложно и круто. При том, что никто явно не говорил против этого. Но похоже, что коллеги не слишком рады сидеть и заниматься написанием правил... На дальнейшее большие планы, но они слегка напоминают планы Антона в Теле2: сделать диалоговую систему на нейронках, чтобы могла вести диалог. И в итоге разработать такой продукт, который мог бы работать на разных/любых доменах, а не только на медицине. Ещё забавно, что продакта задели разговоры о правилах, и он стал говорить, что и другие отделы тоже в основном так делают. Легалтех (куда я хотел пойти на картинки) типа вообще ни о чём, разрабатывающие колонку (ага, мтс делает свою умную колонку) делают все на правилах, какие-то другие ребята тоже. Я ещё стал спрашивать о легальной части. Ибо за границей автоматические системы не имеют права ставить диагнозы. Мне прямого ответа не дали. Типа диагнозы могут быть промежуточным звеном, а итоговое сообщение будет другим. И будет зависеть от заказчика и так далее. В итоге не понял Уточнил у Нурлана - пока для тренировки использую только мета-симптомы. И то, что по схожим обращениям разные классы - ничего. Из интересного: у нас есть доступы к данным от пары клиник. При условии чистки и чего-то ещё. Из какого-то места данные передавались тупо на флешке, ибо через безопасников слишком долго. Аркадий больше говорил о целях и вообще на более высоком уровне. Что нам нужно делать продукт, типа уменьшение времени, которое врач тратит на первичный приём. То есть чтобы вначале человек общался с ботом, тот предоставлял врачу информацию (может быть даже не сам диагноз, а показатели и аналитику, а врач уже принимал решения), а потом уже врач общался с пациентом. Вечером поговорил с Нурланом, он сказал, что надо использовать map@k, оно будет низким, но это не страшно. А accuracy at k раньше у них было около 0.77. Ещё сказал, что в следующих спринтах попробуем иерархические эмбеддинги. Но в ближайшие недели типа основное - работа над качеством данных. Одна коллега пишет веб-сервер для другого отдела. Другая что-то подобное. Третьего тим-лид сейчас спросил был ли у него опыт парсинга данных из вордовских документов) Саша дал скрипт для расчёта, но на больших текстах он виснет. Наконец нашёл причину того, что не мог посчитать метрики на датасете чатбота. Оказывается, при чтении файлов отбрасывались пустые строки. И не было проверок на то, что длина результирующих файлов должна быть одинаковой. Во второй раз надо было поучаствовать в разметке. Проверить и исправить найденные сущности в списке из 100 жалоб. Я ещё спросил о том, как же будет разрабатываться диалоговая система. В общем в текущей версии будет с использованием байесовских сетей - изначально есть равномерное распределение по всем диагнозам - когда человек пишет что-то в чат-бот, распределение меняется - при изменении распределения мы ищем ноду с вопросами, ответ на которые должен нам дать максимальное заполнение нужных нод или просто метрики - повторяем пока не получим всю информацию Декабрь В этом спринте мне выдали задачу делать NER... до этого были только на правилах, теперь надо нормальные сделать. Пока без понятия как. Дали датасет, не уверен, что он подходящий. В пятницу Нурлан говорил, что у Саши есть скрипт для чистки данных от смартмед. Оказывается нет. Нурлан дал код для оценки качества NER и офигел от результата. Ибо я умудрился проскочить без собеседования с тим-лидом. Точнее это было общение по скайпу с тим-лидом, продактом и HR Нурлан попросил конвертировать новое дерево классов локализации в нужный формат. Полезли в wiki - ссылка ведет на пустой код. Потом он нашёл код в другой папке с другим названием. Я сейчас обновил код. Ради интереса решил сравнить разметку локализаций и то, что предсказывает spacy NER. Spacy лучше. Начал обсуждать с Кириллом и Ангелиной код для метрик, подошёл Нурлан. Уточняю у Нурлана: мол я думал, что мы будет туда подавать уже сделанные нами предсказания и сравнивать с оригинальными метками. Он вначале согласился, потом сказал, что нет - должно быть как раз так, как сделал парень (уже странно). Потом мы начали обсуждать расчёт метрики. В итоге у него некоторое своё понимание, у него своё, в карточке описание слишком общее, а у него самого нет времени это делать Тогда я и другая коллега сказали, что хотели бы обсудить роадмап - что должно быть сделано к запуску. И спросили есть ли какая-нибудь схема того, что и как должно быть связано в проекте. Нурлан сказал, что такая схема есть лишь у него в голове - мол нет времени рисовать. Встреча была час. Обсуждали разметку и расчёт метрики. Чуть-чуть роадмап. Стало понятнее, но не намного. Между мета-симптомами и кейвордами есть связь. Можно собрать датасет: features мета-симптома и кейворда, тренировать модель предсказывать есть связь или нет. Завтра будем обсуждать конкретный расчёт метрики. Я спросил про общую оценку качества пайплайна. И типа что нам мешает не делать ничего. Он ответил, что нет четкой метрики, есть оценка адекватны ли ответы бота или нет. Какая доля реплик должна быть адекватна - не сказал. Мера адекватности - логична ли фраза или нет, семантика не важна. Типа свои метрики у нас есть по отдельным задачам. А внешнюю метрику (которая защищает нас от бизнеса) мы покрыли. Кстати, он выслал презентацию; там есть стратегические (те неадекватные) и тактические (более разумные) задачи. Он сказал, что стратегические задачи - ресерч, а то, что надо обязательно делать - тактика. Так что может быть те безумные задачи - для того, чтобы бизнес считал, что мы делаем крутой ресерч и радовался. А если не взлетит, то тактических задач хватит для успеха проекта. D:\Users\Andrew\Downloads\Telegram Desktop\road_map_2020.pdf Нурлан и Яша позвали поговорить с ними. Спрашивали как лучше организовать доску, чтобы все были довольны, объясняли планы и так далее. Хм, быстро среагировали. Повторили, что стратегические планы - лишь планы, надо делать только тактические. И что часть, идущая после парсера, уже сделана. Основной затык - в разметке, ибо её не хватает. Час обсуждали расчёт метрик, ни к какому результату не пришли. В целом с одной стороны, опасения уменьшились, но и ожидания тоже. Хы. Забавно) Второй день задаю тимлиду и продакту много вопросов. И не я один. Сегодня была ещё одна встреча, вроде наконец-то разобрался в том, как выглядит работающий продукт и что надо делать. В общем по факту... в ближайшие 2 месяца мне просто надо тренировать NER на разные таргеты и стараться улучшать их качество. Всё. С технической точки зрения всё выглядит так: - человек пишет проблему в чатик. Типа "у меня весь день болит голова" - класс "парсер" (внутри ner, классификаторы и прочее подобное) пытается найти в тексте . всё-всё нужное нам. Вот как раз для этого я тренирую NER. Основной затык в том, что сейчас разметка сделана правилами/шаблонами. Разметчики недавно начали разметку. Они размечают в лучшем случае 10k семплов недели за 3 :) - Дальше у нас должно быть собрано много-много статистик о том, какая вероятность того или иного диагноза при имеющейся у нас информации. Типа среди людей, у которых болит голова, такой-то диагноз встречается в 5% случаев, другой в 4% случаев и так далее. Основной затык в том, что это прям сильно зависит от качества и объема разметки. - На основе этих статистик мы в принципе можем посчитать такую штуку: если мы у пользователя что-то спросим, насколько уменьшится энтропия или насколько повышается уверенность предсказания. - На основе того, что мы вытащили из первоначальной жалобы и этих статистик мы задаем пользователю вопрос. Например, как часто болит голова. Пользователь не может дать текстовый ответ - он выбирает один из предложенных пунктов. Тут основная проблема похоже в том, что все эти варианты прописываются вручную... Но сам функционал существует - Дальше мы итеративно повторяем эти шаги пока не остановимся: лимит по количеству итераций, порог по уверенности или что-то ещё. В итоге для врачей мы показываем всю вытащенную информацию. А пользователю говорим к какому врачу надо обратиться и насколько срочная проблема (датасет для этого типа есть) Как считать качество всего этого: - как считать качество первого шага (вытаскивание информации) мы так и не решили - итоговая метрика типа MAP@3 Это мы должны запустить к марту А всё, что дальше - тот ресерч, о котором я говорил раньше. -- январь Сейчас со мной в очередной раз захотел поговорить продакт. Типа как у меня настроение и так далее. Среди прочего сказал... что возможно и не будет никакого ресерча после марта. Ибо для этого хотели создавать "R&D лабораторию", но что-то пошло не так. Поэтому с высокой вероятностью будем выполнять упрощенные цели, их хватит до июля. Несколько раз спрашивал, что я думаю о работе и так далее. Похоже, чувствует, что они "теряют" меня. План на октябрь: умная колонка в кабинете врача, которая создает саммари общения врача и пациента Что-то меня задолбала такая разработка ** ...Продолжаю переписывать этот класс. Добавил всё, что надо.Но понимаю, что кусок старого функционала не работает.Спрашиваю тимлида - он такой, а, ну да, выбрось вообще этот кусок и напиши новый Типа не могу же я в карточке описать всё, что надо И не хочет давать кейсы для тестирования (чтобы был фиксированный input и output) Ты заменяешь старый класс на новый. Пиши новый класс с нуля и не смотри в старый код, это не нужно Это пипец, ну просто пипец Встреча была о том, как у нас в целом организован пайплайн Я, кстати, специально в ходе всей встречи сдерживался и не задал ни одного единого вопроса Тимлид описал всё верхнеуровнево, функционально Последний кусок пайплайна делает он сам в одиночку. Никто это не видел, разве что один коллега несколько месяцев назад запускал как-то И вот в конце встречи тимлид говорит: я половину следующей недели буду отсутствовать, вы же сможете объединить все части пайплайна и сделать его рабочим? потом: а вот ещё есть кусок пайплана. Его делает Кирилл. И Андрей частично Я говорю - похоже, что я дела не то Есть у меня такой файлик с данными.Моё понимание: есть предложения и на каждое предложение может быть от 1 до нескольких классовво-первых, как появились эти текстыЭто была жалоба клиента, и из неё парсер на правилах и шаблонах вытащил локализацию - то есть кусок текста, в котором описывается, где и что болит у человекаА затем нашему медику дали этот текст. И он для каждой "локализации" ставил классТо есть, нога - 1, кисть - 2 и так далееИ я так и тренировал модельИ ВОТ ТЕПЕРЬ ВНЕЗАПНоЕсли медик проставил 2 класса... это ошибка парсера. Типа парсер ошибочно вытащил слишком многоТакие строчки можно отбрасыватьЕсли в строчке есть текст в скобочках, то надо брать только его, а всё остально отбрасывать - ибо лишнееЕсли в строке несколько кусков в скобочках... то надо выбрать более "точный" текст Вот как. Как можно это не рассказывать перед постановкой задачи?Ибо до этого он не рассказывал И теперь самый эпичный эпикЧерез пару минут после встречи поймал меня в коридоре и захотел поговорить.Спрашивает: мне кажется, что тебе что-то не нравится в проекте. Расскажи................бля. мне ты не нравишься, тупой неопытный тимлид, который не выполняет свою роль даже на 10% Коллеги с мучениями пытаются заставить работать код Нурлана. У Нурлана возникла идея разделять слова типа "малопродуктивный" на две части... Нам сегодня рассказали какие задачи будет решать наш продукт к концу года: - сбор анамнеза перед приемом врача. То, что я говорил - обязательное общение с чатботом пред приемом. - заполнение полей медкарты по итогу общения врача и пациента (речь, asr модуль по идее возьмем у другого отдела) Нам представили нового project manager. Он пытался с нами подружиться. О, блин У нас виртуалка, где раньше крутилась модель, теперь не тащит) Там 4 гига оперативки А в текущей версии надо значительно больше Виртуалка виснет и ругается) Но уже выбили 16 Гигов. А вот gpu - не факт, что получится. февраль С утра сделал замер NER Владимира. Качество на "golden" ужасное. Посмотрел на данные - в большинстве случаев дело в том, что NER предсказывает предлог, а в разметке его нет. С утра подошёл Нурлан, спросил, что я думаю о качестве кода Владимира. Сказал, что в будущем будет просить меня повнимательнее смотреть его код, а то не нравится. На планерке Нурлан сказал, что Владимир ему сказал, что увольняется. Хм, кажется, что либо Саша попросил повышение/перевод, либо тоже хочет увольняться. Реально хочет увольняться. Пилим предобработку данных с исправлением разметки. блиииин. я сейчас на работе пошутил, что наш медицинский чат-бот похож на акинатора тимлид сказал, что он действительно написал алгоритма как в акинаторе У нас сейчас коллега вытащила 100 обращений клиентов в наш чат-бот в приложении смартмед. Как и ожидалось - тексты совсем не такие, как те, на которых мы тренируемся... Совсем другой стиль, часто неполные сообщения или, наоборот, очень длинные с кучей жалоб много на что. А я опять обнаружил, что у нас в разных частях проекта используется минимум 3 разных препроцессинга, и на прошлой неделе ещё один был написан ( Сегодня на планировании подниму этот вопрос Надо сообразить, что у меня по планам. - понять причину дубликатов в парсере - препроцессинг. В принципе большая часть сделала. То есть имеется конфиг, а также мой процессинг по удалению пробелов. Написал код для запуска по claim. Получается, что надо добавить процессинг от Ангелины (когда она его доделает), написать код для обработки файла с данными, написать в вики, что и как делать. Подумать всё ли готово для того, чтобы отдельные парсеры могли использовать процессинг по конфигу - Написать "фреймворк" для запуска экспериментов - Снова попробовать flair и перейти на нормальные нейронки. Первое понятно. Причины две: - руловые парсеры симптомов иногда косячат и разным симптомам присваивают одинаковые индексы. Не моя проблема. Саша тупо сделает удаление дубликатов; - при присвоении фичей к симптомам они не удалялись из списка. Это я добавлю в линкер; Вечером с Кириллом зафигачили кастомный токенизатор. С утра зафигачил код для матчинга ner после процессинга с оригинальной строкой. В 18:30 Нурлан собрал встречу по препроцессингу... там что ушёл домой минут на 15 позже. Видимо Кирилл и Даша будут писать препроцессинг. А я снова моделями займусь. Начинается еженедельное планирование, и тут тимлид говорит, что сделает большое объявление. Во-первых, во всю начинается переход на функциональные команды. Поэтому у каждого проекта будет техлид по разработке и техлид по ML. Ну а пока из-за недостатка кадров у нас будет один ml-техлид на все mts ai. :harold: А Нурлану это всё не нравится, и он уходит. :yeah_sure: И мол можно готовиться к тому, что его будут поливать грязью, критиковать решения и говорить, что он вёл проект в неправильную сторону. Это всё для того, чтобы убедить нас в том, что изменения к лучшему. Ага, конечно... В очередной раз нам порассказывал свои бредовые планы на будущее. Что дальше - хз. Мы типа продолжаем работать над проектом, чтобы сделать запуск. Но при необходимости запуск может быть отложен до конца марта. Возможно будет общаться с тем новым техлидом по ML. И судя по намёкам, этот техлид может захотеть все сильно переделать. Про будущее непонятно вообще. Ибо идея в том, что будет общий пул задач по NLP, и на него будут выделять людей. Лично мне непонятно, как это будет работать. Тем более, что у нас сейчас 3 проекта по NLP - наш, чат-бот и колонка. На собеседовании я говорил, что чат-бот меня вообще не интересует. А колонка и сейчас не вдохновляет. Поизучал самые актуальные данные: 1-5_total_dataset. Там примерно 15к данных. Оказалось, что там примерно 3к данных "дубликаты". Точнее claims с одинаковым текстом и разной разметкой. id у них разные Почему полностью одинаковые тексты - Нурлан сказал, что возможно врачи создавали шаблоны, потому тексты повторяются. Разная разметка: - делали в разных группах разметки - делали разные люди с разным качеством В итоге расхождения: - просто размечали разные вещи. Типа один раз искали pain, другой раз localization - разметили одно и то же с разными индексами - один человек нашёл одну локализацию в тексте, другой 2 или 3. Сейчас меня Роберт (медик) позвал на встречу с Яшей (продакт) на тему локализаций. Чтобы уменьшить список классов. А затем перешло на то, что Яше вообще не нравится качество и парсеров, и Нурлановского (тимлид) предиктора (его функционал, финальная часть пайплайна)В итоге ни к чему не пришли. Ибо Яша оценивает итоговое качество по нескольким примерам (хотя я согласен, что качество плохое), и хочет делать какой-то подход на правилах или типа того В общем выглядит так, как будто Яша раньше молчал и сдерживался, а теперь ему качество совсем не нравится Вот только правила не помогут отсутствию нормальной разметки Ух. Была полуторачасовая встреча с этим Никитой. Были ещё коллега-DS и продакт. В итоге пришли к трем решениям: Коллега-программист равномерно наберет пару сотен текстов, их отдадут разметчикам на кросс-разметку (3 человека на 1 текст). После этого мы попробуем построить модели, просто чтобы посмотреть, что они выдают. И оценим качество разметки. К следующему вторнику я и коллега подготовим подробное техническое описание текущего состояния проекта и планов, покажем планы, покажем данные и наши идеи. Соберем встречу всех nlp-шников в компании и устроим большой brainshorm. В следующую среду устроим встречу с командой по рекомендашкам. Может быть займемся переделкой кода тимлида на рекомендашку Была встреча nlp с brainstorm. По факту почти ничего нового не придумали: как поменять коробку итеративная разметка работа с шумными лейблами препроцессинг. лемматизация свои эмбеддинги fasttext нейронка на своих эмбеддингах. сравнить с spacy Вечером опять с Яшей и Робертом обсуждали разметку классов локализаций. Заодно увидел, что похоже разметка не совсем совпадает с последним древом локализаций. С утра подошёл Кирилл, опять пообсуждали процессинг данных. Я пытался сказать, что будут проблемы, но Нурлан говорил, что всё ок. Я сдался. Сейчас снова подошёл Кирилл. Сказал, что процессинг - это хорошо, но ведь global parser не возвращает текст. И если мы в начале парсера делаем основной процессинг данных, то марки будут по новому тексту, а не по старому. Я - :you_dont_say: В итоге решили, что в health_check перед запуском парсера будем запускать этот основной процессинг Вчера была встреча Яши с Аркадием о нашем проекте Сегодня спрашиваю о результатах. Ответил, что о сроках не говорили, но похоже они отложены в будущее. И будем делать проект столько, сколько надо ... Март Что у нас из легаси: - неорганизованные данные - странный код Саши (Нурлановский предиктор - уже не наша проблема) - руловые парсеры - их писал либо Саша, либо Кирилл. По идее Кирилл уже не будет это делать. Но это пока можно не трогать - мне не совсем нравится расчет метрик написанный Кириллом. Хочется сделать так, чтобы его можно было использовать не только на файлах с данными, но и просто на списках с лейблами Категоризатор всё-таки нужен. в новой реализации предиктор не будет собирать статистики. Поэтому в целом нам меньше важны данные из медкарт. поэтому может быть стоит делать разметку на данных с форумов. Но большой вопрос в том, что там может быть много семплов без нужных нам сущностей - не хотелось бы давать их на разметку, ибо в результате будет много текстов с пустой разметкой. Яша сделает карточку для нас с тобой. чтобы мы подумали что с этим делать. Я предложил искать тексты по ключевым словам. Может у тебя будут идеи получше Ангелина нашла очередной косяк в коде Саши. Я проанализировал разметку симптомов, все неплохо. Доля ошибок невысокая, многие расхождения из-за лишних пробелов, отмеченных людьми. Перед проверкой совпадений необходимо удалить лишние пробелы из разметки. Процент полного совпадения разметки от всех разметчиков по текстам: 90% Процент совпадения разметки от большей части разметчиков (больше 50%) по текстам: 99% Критерий по валидации Валидаторы проверяют 10% разметки. Процент верной разметки: 90% опять полдня в созвонах. Обсудили snorkel для поиска данных для разметки. Жду кода с примером Я обработал данные для NER локализации с помощью наших процессингов - качество заметно вышло. И стало проще видеть систематические расхождения по разметке. Пока не решил, что с ними делать - отправлять на переразметку, переразмечать ручками или просто выбрасывать. Был созвон с Робертом и Яшей по разметке. Итоги: - нужно добавить в постпроцессинг удаление предлогов после ключевых слов (Ангелина сделает) - походу люди не всегда понимают, что делать. Ибо бывают тексты, где никто ничего не разметил (из 4-5 разметчиков), но надо было. Это, считаю, камень в сторону Яши/Роберта. Большой камень. - надо обновить руловые парсеры (я сделаю) - Яша хочет, чтобы разметка была не только по медкартам, но и по текстам с форумов. Чтобы разные стили текста были. Мне идея нравится. Наверное можно попробовать snorkel для вытаскивания текстов на разметку. - Ещё они хотели бы иметь либо демо-стенд, либо какую-то новую штуку, чтобы тестировать разные фразы на наших парсерах. Но это пойдёт в команду разработки Мы с ней пообсуждали состояние проекта, хотим две отдельных вещи обсудить с тобой: - я уже не раз поднимал поднимал тему процессинга. Наши парсеры возвращают индексы местоположения сущности. Для текущих подходов это работает. Но если мы будет делать нейронки, то для разных моделей может требоваться разный процессинг. Но поскольку мы не передаем текст, то не очень понятно что делать. Одна идея: маппить полученные индексы на старый текст, но это сложно и муторно. Однако ничего другого менять не понадобится. Другая идея: выдавать не индексы, а сразу извлеченный текст (ну и его метку). Но для этого прийдётся менять сигнатуры много где. Мы с Ангелиной ещё подумаем, но хотелось бы обсудить с тобой (может ещё с кем-то из NLP команды) - ты спрашивал нужны ли нам люди в команду - наверное всё же да в обозримом будущем. Кирилл много чего делал в плане обработки данных. Саша тоже делал часть работы. А теперь и их нет (Кирилл может делать задачи по разработке, но в данных копаться не будет), и сущностей становится все больше. В идеале хотелось бы двух человек: одного в основном на работу с данными, второго чтобы он часть задач по NER взял. В целом, есть видение того, как можно полуавтоматизировать текущие подходы по тренировке NER. Но в этом можно увязнуть надолго и не заниматься ничего более продвинутым. Плюс, если мы будем делать сотрудничество со Сколково, или у меня будут ещё люди из другой команды, или начнётся сотрудничество с PR, то у меня будет меньше времени. Хотелось бы это обсудить. При добавлении новых симптомов/фичей, надо ещё обновлять kngraph и писать новые вопросы/ответы. /// карточка с описанием того, что делать при добавлении новых фичей Я обновил код для анализа кросс-разметки. Надо будет еще обновить, появились мысли. Был созвон с Дашей, Яшей и Робертом. Обсудили задачи для разработчиков. Яша попросил сформулировать план работ на 1-2 месяца. Роберт попросил готовить задачи по разметке на двухнедельные спринты. Яша решил, что у нас теперь будут ежевневные созвоны. Сегодня полчаса обсуждали как именно делать разметку. В итоге он сказал: мы все можем обсуждать как хотим, но финальное решение принимает Андрей. Потому что ответственность на нём. Потом ещё Роберт спрашивал, когда они смогут посмотреть на результаты. Ответил, что для этого надо обновить конфиг kngraph и написать вопросы. Никита сказал, что поговорит с Яшей о том так ли нужны ежедневные созвоны. Ещё сказал, что моего текста достаточно для старта процесса по найму людей. Был ежедневный созвон команды. Договорились, что к концу следующей недели обновим все возможные парсеры на демо-стенде, чтобы Яша и Роберт могли их пощупать. Надо теперь понять, как вообще планировать. То ли я делаю планирование, то ли надо отталкиваться от того, что хочет Яша. Ангелина продолжает делать линкер. Надеюсь, что к концу следующей недели будет готово. И процессинг модифицирует - например, мы увидели, что где-то в старой разметке есть сущности с длиной 0 или даже -1 Создал карточки для следующего спринта. Завершаю анализ новой порции разметки симптомов. Завтра буду писать руловые парсеры симптомов. Тренирую NER на фичи для поиска проблем разметки. И общался с этим парнем, который заинтересовался вакансией собеседования Ангелина значительно ускорила извлечение эмбеддингов в линкере - сделала это батчами, а не по одному токену, как это было раньше. Ангелина пробует разные подходы к линкеру. Ради интереса исключила эмбеддинги и взяла простые признаки: "признаки модуль разности между первым индексом сущности и первым индексом фичи и признаки количества других симптомов между сущностью и фичей и количество других сущностей между сущностью и фичей.". Качество практически не упало. Поанализируем ошибки модели. Если в целом норм - можно будет так и делать. Ангелина обнаружила очередные проблемы в подготовке данных для линкера - там не учитывалось то, что некоторые пары симптомов и фичей невозможны или могут быть не включены в конфиге... пришлось исправлять. Ещё Яша потом на отдельном созвоне сообщил, что у нас есть KPI - надо к 1 июня иметь проект в рабочем состоянии, чтобы SmartMed мог использовать. Отдельно добавлю: я надеюсь, что в дальнейшем интеграция с командой рекомендаций будет лучше. Пару недель назад, перед началом этого спринта Яша поднял вопрос о том, что надо объединить global parser и обновленный предиктор. Я несколько раз спрашивал о том, что надо менять с нашей стороны для успешной интеграции (на встрече были все). Услышал, что надо будет только перетренировать классификатор локализаций на новые классы. Ну хорошо. Заодно в рамках запланированных работ Ангелина сделала конфиг для написания шаблонов для генерации вопросов и немного переписала код, Роберт стал их эти конфиги. И тут внезапно на прошлой неделе ребята из рекомендашек говорят, что текущая система генерации вопросов и в целом опроса не вписывается в их плоские симптомы и надо её менять. Я слегка офигел, ибо по моему мнению об этом надо было думать с самого начала. Ангелина (с моей помощью при необходимости) это, конечно, сделает, но такая ситуация вызывает удивление. Проверили маппинг, который написала Ангелина - работает. На следующей неделе будем впиливать в проект. Сделала обзор статьи. Продолжаем линкер. Я подготовил все для обновления spacy до 2.1, Даша проверяет. Написал код для упрощения загрузки парсеров из конфига. И был этот спор с Сергеем, который надо решить. Суть такая: У нас сейчас организация кода такая сложилась: 1 репо - nutcracker. код для запуска проекта в проде. в нём то, что надо именно для запуска, без лишнего 2 репо - nutcraker_lfs.модели, данные необходимые для запуска и так далее. Решили разнести, чтобы не захламлять первый репозиторий. И кажется это правильным. И третье репо ml_research - в нем лежит код для экспериментов и тренировки моделей. Отдельно от первого, ибо держать ноубуки и логи тренировок в продуктовой репе кажется не очень хорошим подходом. Сергей считает, что надо все в одной репе держать. Созванивался с Ирой Кротовой - делился опытом организации разметки. Я разобрался почему у меня новая моделька локализации не ловит "болит рука" - оказалось, что в 4к текстах был всего 1 кейс с локализацией "рука" :) Буду аугментировать. Ввел Никиту в курс дела, показал вики, репо. Рассказал что и как работает. Ему пока ещё не все доступы дали. Сейчас в разметку возьмем фичи. Договорились, что Кирилл покажет Никите как это делать, проконтролирует качество. Если все норм, то задача переходит к Никите. Продолжал вводить Никиту в курс дела. В понедельник начнет первую задачу - по подготовке данных к разметке. Думаю, что в течение недели дам ему простую задачу по тренировке модели классификации. Но осознал, что мне надо будет в ближайшее время слегка переделать конфиг глобального парсера и работу с ним. Проблемы две: - я рассчитывал, что все парсеры симптомов будут на правилах, поэтому не заложил возможность парсеров на моделях. Из-за этого некоторые костыли. Плюс "исторически сложилось", что модельные парсеры делают предсказание по __call__ а руловые по методу parse_as_feature, надо бы унифицировать - сейчас, если одна модель умеет предсказывать несколько сущностей, то надо её инициализировать по отдельности для каждой сущности - это жесткая постановка от Нурлана была. Я переделаю, чтобы меньше памяти жрало и быстрее работало. Никита готовит данные для разметки. Показал ему как все делать, вроде он понимает. Ангелина сегодня доделала тот функционал по вопросогенерации, что хотела. В ветку свою запушила. Протестила на небольшом числе основных примеров, что есть в карточке. Хочет немного переписать один кусок - использовать уже готовые функции. Я сегодня придумал таки как изменить структуру конфига, чтобы работало для моделей с несколькими сущностями. Получилось довольно просто. В целом уже работает, завтра приведу в приличный вид и запушу. Я попробовал потренировать простые нейронки для NER и flair. Простая модель даёт ~0.99 f1. Это хорошо, но явно будет лучше работать, если использовать char embeddings или больше данных. Так что в дальнейшем будем развивать этот подход. В целом flair работает неплохо, но у него свои токенизаторы, свои подходы к работе с текстом. Возможно наиболее эффективно будет взять оттуда какие-нибудь эмбеддинги и использовать их. Вместе с Никитой посмотрели как он обработал данные и построил модели. В целом норм. В разметке есть косяки, будем их исправлять и сообщать о них Роберту. Потихоньку будем начинать пробовать аугментацию данных. Познакомил Настю с командой, рассказал, что и как у нас устроено. Наш проект у себя развернула, он работает. Попросил Никиту показать ей что делать по организации разметки. Настя успешно нашла способ делать синхронизацию папок на nextcloud с локальной папкой, будем использовать. Начала составлять json с информацией об актуальных файлах на nextcloud. Никита показал мне свои эксперименты по аугментации для классификации. Он слишком увлекся :) решил делать не те простые вещи, что я посоветовал, а что-то более продвинутое. В результате дикий оверфит. Так что начнет делать вещи попроще. Настя шустро составила в нужном виде информацию о всех актуальных файлах с кросс-разметкой. Быстрее, чем я ожидал. И нашла пару косяков в описаниях или файлах. Думаю, что завтра начну ей передавать задачу классификации фичей. не сразу, но потихоньку. Ангелина экспериментирует с линкером. Но модели тренируются медленно. Мы ждем когда нам Даша поможет развернуть наш докер на сервере с gpu. И написала обзор интересной статьи. Настя закончила делать список актуальных датасетов с разметкой на nextcloud, потом постепенно будет добавлять туда большие старые датасеты. Написала базовый код по работе с ними. Потом я показал ей как переписать его на класс - у неё опыт написания классов почти не был. И показал ей и Никите какой у нас workflow коммита и мерджа файлов в репозиторий. Читаю и собираю информацию о том, какие метрики можно использовать для оценки качества диалога. Настя создала на nextcloud страницу с описанием нашей работы с файлами на nextcloud: И загрузила очередную порцию данных на разметку И начинает заниматься моделями классификации Никита построил модель классификации локализаций. Был созвон с ним на полтора часа, ибо он немного накосячил с гитом - разбирались, показывал, что лучше делать. Ангелина тренирует линкер и занимается кодом по вопросогенерации. ``` Привет Меня слегка подзадолбала наша организация процессов. Я совсем не хочу устраивать конфликты с Яшей, но это не дело. Вот сейчас был созвон с синхронизацией. - появилась новая идея по логике работы опросника - в ходе диалога пару раз говорилось, что то классов локализаций будет больше, то их будет меньше - появилась идея о том, что названия классов локализаций сохраняются, но в модуле вопросов/ответов они будут выглядеть по-другому. Мне прям приходится выбивать из них, что должно быть готово к релизу, который будет через 2 недели. Спрашиваю, какие парсеры должны работать к релизу. Яша: нужны парсеры на все симптомы, которые есть в kngraph. Я открываю kngraph. Вижу новую для меня фичу "симметрия". Спрашиваю. Роберт: а это новая фича, мы её недавно добавили, она для предиктора. Парсер её не ловит. Я снова спрашиваю, какие парсеры должны работать к релизу. Яша: те, которые хорошо работают. Я: по фичам у нас есть только разметка фичи "локализация". По ней мы можем оценить качество. Больше разметки фичей у нас нет. Яша: ну тогда выключаем все, кроме локализаций. Потом было примерно тоже самое про парсеры симптомов. И про категоризаторы. ``` Настя успешно освоила наш workflow и изучает модели классификации локализаций. У Никиты пока с этим проблемы, видимо в понедельник разберемся. И он пока тоже улучшает модель классификации. Помимо этого показал ему парсеры симптомов, он ими начнет заниматься на следующей неделе. Ангелина с Дашей занимаются вопросогенерацией. Я проанализировал подходы к оценке качества диалога и отписался об этом в карточке. Плюс, как обсудили сегодня, выключил все парсеры фичей кроме локализаций. Дани к нам вышел. Я познакомил его с командой, начал показывать, что и как у нас устроено. Настя работает с моделькой классификации локализаций. Скор понемногу улучшается, ещё нашла немного проблем в разметке. Никита пробует разные подходы к аугментации. Стандартный word2vec дал нестабильные результаты, попробуем мой натренированный glove. Потом тезаурус. Ну и быстро сделал то, что просил Роберт Ангелина экспериментирует с линкером, скор уже близок к 0.9 Я пробую разные простые варианты генерации синтетических данных. некоторые норм, некоторые вызывают сильное переобучение. Продолжал обучать Дани. На первый взгляд мне он нравится - вдумчивый, задает хорошие вопросы и так далее. Ангелина опять продолжает линкер и вопросогенерацию. Сегодня обсуждали очередные изменения в логике работы опросника. Я натренировал для неё новые эмбеддинги glove, надеюсь, что помогут для линкера. Настя продолжает эксперименты. Посмотрим, что получится к концу недели. Никита начинает парсеры симптомов. И продолжает эксперименты с аугментацией Я понял почему возникло переобучение. Изменил принцип генерации данных - теперь моделька круто работает. Дальше доработку и улучшение отдам Никите и Дани. Настя неплохо улучшает модель классификации локализаций, по непонятным моментам общается с Робертом. Я ей накинул ещё немного идей. Показала мне то, что попробовала в snorkel - выглядит неплохо, думаю, что будем использовать. Улучшил аугментацию - генерятся тексты с несколькими фичами. Но модели выдают дикое количество false positives. Есть идеи по улучшению - передал это Никите. ``` Я хотел бы выговориться о сегодняшнем созвоне с синхронизацией. Вначале я говорю. Вроде надо было быстро - я за 5-10 минут пробежался по всем карточкам двухнедельного спринта. Аж 21 штука У нас Дани только в понедельник вышел. Никита по уши в двух задачах был, так что из 21 задачи три самые неважные мы не тронули, ещё две были на Даше, она про них по факту забыла, 2 типа нужные вообще не тронули, остальное сделали. Вот эти две сформулированы как "улучшить качество парсеров сущностей/симптомов" И тут Яша начал Мол, что это мы вовремя не двигаем карточки (я с утра передвинул треть-половину), надо вовремя [С этим согласен] Что это мы недостаточно подробно пишем, что сделано. Надо дробить крупные карточки на мелкие. И т. д. Что мол в текущей-старой версии все работало неплохо и надо посмотреть, как это было там. При том, что я месяц назад смотрел. Там на ключевые словах, признаках типа частях речи и так далее. Плюс с помощью каких-то эмбеддингов (неизвестно каких) считается косинусное расстояние между текстом и классами сущностей и делается предсказание Потом повторил, что надо делать лучше описания При том, что описания от него примерно такие: На этапе парсинга и выбора локализаций необходимо учесть пол пользователя, чтобы при уточнении локализации "половые органы", выдача была адекватной полу. Это важно, если мы уточняем локализацию боли у мужчин (яичко или пенис) Потом ещё раз говорил, что вот у разработчиков понятные карточки, а у нас - нет. Типа надо добавлять приоритет и что-то ещё И дополнительный наезд на ML в целом. Мол у разработчиков и devops есть оценка capacity, что могут сделать за неделю. А у ML нет такого. Потом стал расскзывать Сергей Минут 20 рассказывал о том. как... делал одну-две задачи И у него на доске вообще не висит карточек Потом ещё минут 10 говорил, что читал статьи о том. как оценивать качество диалоговых систем. Только 90% из его речи я рассказал нашему же составу неделю назад и записал в карточке.. Яша потом снова стал говорить, что надо оценивать "адекватность" реплик диалога. на что парень сказал, что он уже давно предлагал.. reinforcement learning для диалога И что он вот прочитал на этой неделе 3 статьи про применение RL к диалогам. И готов на следующей неделе о них рассказать [что за хрень вообще, какой на фиг RL?] В общем как-то так. Слегка подзадолбался этой встречей) Угу. Я решил, что больше не будут так кратко говорить Буду подробно писать говорить про каждую карточку Писать результаты тренировки моделей И куда-то скидывать результаты десятков экспериментов И регулярно устраивать технические разборы статей ``` Ещё дебажил текущую работащую версию проекта. По факту там жалобу разбивают на куски, лемматизируют и ищут совпадения со списком из 500+ симптомов. Поэтому отлично находит то, что надо. Но если опечатки, сленг и прочее - фейл. Ну и slot filling не дает. Ангелина встраивает линкер в наш проект. Заодно меняет логику предсказания - раньше брались симптомы по очереди, к ним по очереди пытались привязать фичи. теперь будем к фичам привязывать наиболее вероятный сипмтом (а не "первый"). Дани начинает строить модели. Никита тоже. С Никитой завтра наверное подробнее обсужу прогресс. У Насти отличный прогресс с моделью классификации локализаций. Она исправляет ошибки в данных, делает аугментации, пробует разные модели. Я прям очень доволен :) Ангелина продолжает интеграцию линкера - возникли технические проблемы с версиями TF. И занимается обсуждениями вопросогенерации. С Никитой созванивался - обсудили построение моделей NER и его аугментацию текстов. Хочет копать поглубже в модели. Созванивался с Дани. Он показал свои первые попытки псевдолейблинга. Показал ему, что надо лучше обрабатывать результаты. Ещё он изъявил желание менторить Настю. Я не против. Созванивался и с Настей. У неё с моделькой классификации локализаций все хорошо. Сегодня-завтра выложит. По snorkel показала разные возможности. Думаю, что завтра сделаю созвон с Яшей и Робертом - покажем. И обсудили дальнейшую разметку, в том числе для Самары. Ещё я с утра добавил ключевые слова из bag of tokens. И разобрался с docker на сервере. надоело ждать помощи :) В модуле вопросогенерации очередные изменения логики, ибо ещё некоторые вещи не были продуманы. И были разборки в чате. Меня подзадобало, что Роберт меняет какие-нибудь конфиги (в данном случае дерево локализаций) и либо кому-то дает выложить в гит, либо просто кидает в общий чат. И типа - сами разбирайтесь, что дальше делать. И, оказывается, поддержание формата файла - это его добрая воля, а не необходимость. Никита улучшает код аугментаций. И исправили модель классификации локализаций - Настя оказывается неправильно label encoder использовала. Настя экспериментирует со snorkel. Июнь Я написал функцию для токенизации текста и превращения нашей разметки в формат BIOUL. И общался со всеми. Я добавил в global parser возможность использовать процессинг данных перед парсерами (Ангелина ещё давно сделала к нему маппинг, сегодня дописала функцию). И обновил код для экспериментов spacy. С утра я своим ребятам показывал как тренировать эмбеддинги glove и fasttext. Теперь будут тренировать на собранном Никитой датасете. Нашли очередную проблему в токенизаторе spacy для наших данных - исправил. Видимо до Яши дошло, что он делает что-то не так. Выдал очередные идеи по изменению логики, но сам предложил не делать их сразу. Так что будет делать их через спринт. Настя посмотрела на разметку, которую сделали разметчики по классам фичей. По одной фиче нормально. По другой фиче согласие разметчиков очень низкое - 72%. И много спорных кейсов. Попросил её подготовить примеры разногласий для Роберта, чтобы он обновил инструкцию. И отправить эти данные на переразметку. Разметчики закончили разметку данных линкера. Ошибки есть, но в целом неплохо. Анализируя разметку мы осознали, что одно из наших допущений было некорректно: мы думали, что фича может относиться только к одному симптому, но это оказалось не так. Например реальная жалоба "на дискомфорт, болезненность в горле, области шеи". По факту и дискомфорт, и болезненность в обеих локализациях. Ангелина будет смотреть как линкер сработает с этим. Никита выложил новый парсер симптома боль, но он много косячит. Пробуем разные варианты улучшения датасета. У Дани все нормально. И съездил в офис получить рабочий ноут. Настя с помощью snorkel подготавливает данные к следующей разметке. Выходит неплохо, но из одного из трех источников данных собрались нерелевантные данные - анализирует. Похоже. что он слишком увлекся псевдолейблингом. Было где-то 4к текстов, он сделал предсказание на объеме текстов раз в 100-1000 больше, при том, что модель делает ошибки и не выдает вероятности (сложнее фильтровать). В итоге натренированная модель выдает очень много false positives. Так что пока сказал ему фокусироваться на исправлении модели и тренировке моделей для новых фичей. У Ангелины линкер. И ещё вчера и сегодня мы ревьювили MR Даши про схлопывание дублирующихся векторов. У Никиты временами не хватает внимательности. Возможно это просто я не привык с джунами работать. То видит проблему, но не разбирается в причинах, то не особо хорошо проверяет качество моделей. С другой стороны есть плюс - нашёл, что в spacy можно модель ner объединять с правилами. Это нам поможет. Но при этом он добавил в правила не все ключевые слова которые были по сущности, а лишь несколько. исправили это. Пока разачарован в том, что его модель работает хуже руловых парсеров. Видимо завтра будем сидеть и придумывать как улучшать. Созванивался с Никитой, около часа говорили. Я почувствовал, что у него какое-то огорчение и проблемы накопились, решил разобраться с этим. В общем его волновали две вещи: то, что аугментации и модельки не слишком хорошо работают. И то, что он не успевает делать то, что в карточках, соответственно и KPI испытательного срока его волнуют. Вроде смог успокоить Ещё ему знакомый из Сколково прорассказывал как они репо sber-bert используют для своих нер. Я Никите пообещал, что он сможет поэкспериментировать, когда я с докером разберусь И снова показал ему то, что я написал в карточке аугментаций, чтобы делал более простые вещи. Сам я решил, что все-таки нам нужен тестовый датасет для проверки парсинга на простых кейсах. Подготовил несколько примеров и написал код для проверки качества парсинга на всех этапах. на следующей неделе допишем код и скажу ребятам постепенно добавлять примеры, на которых будем проверять. Показал ребятам в каком виде надо формировать тестовый датасет, будем собирать потихоньку. Сегодня был созвон по разметке данных Самарой. Решили делать так: Вначале (вначале - это в конце июня) дадим им 100 текстов для разметки боли и 100 для разметки локализаций. Если все норм - идем дальше. Если не очень - обновляем инструкции, отправляем на переразметку. Если совсем плохо - может быть на этом и заканчиваем)) Дальше делаем небольшие пачки текстов. - берем сколько-то текстов, просим разметить там 8-10 определенных сущностей - в следующей итерации те же тексты, но следующие сущности - когда по текстам есть разметка на все сущности, берем следущие тексты Если качество разметки ниже того, что я поставил критерием, то у них 1 или 2 (точно не понял) шанса сделать переразметку. Если требуемого качества не достигли - похоже прекращаем Никита продолжает парсеры симптомов. Яша захотел подвести статистику того, сколько потенциальных комбинаций сущностей + классов у нас есть. Я прикинул, по боли оказалось 4 миллиона, ибо 5 фичей с таким количеством классов: 86, 86, 20, 6, 5. Яша ушёл думать над тем, как ему лучше сформулировать задачу. С Дани созвонились и пообщались, он показал мне результаты псевдолейблинга. В общем походу он совсем не фильтровал предсказания. До фига ошибок в предсказаниях - так что будет либо фильтровать их, либо переходить на нейронки, которые смогут выдавать вероятности для NER. Созвонился с Никитой. У него есть прогресс, выложил 4 парсера сущностей. Аугментацию делает простую, как я советовал, и она успешно работает. Дани сегодня говорил, что смотрит задачки на алгоритмы, чтобы в перспективе найти работу за границей. Приятно, что может такое говорить - значит доверяет. Настя, Дани и Никита снова занялись тренировкой эмбеддингов, это хорошо. И все продолжают эксперименты со своими моделями Сегодня был обновлен тестовый демостенд, туда заодно зашли несколько новых NER моделей фичей и симптомов. Буду следить за результатами тестирования. Ещё Даша наконец добралась до задачи по ревизии конфигов. Я ревьювил её MR. И она попросила нас всех составить списки своих конфигов. Обнаружил, что Дани тренировал NER модели на новых фичах и вообще не смотрел на качество разметки. Я запустил скрипт для проверки разметки - по двум фичам оказалось совсем плохо... Сказал ему, что так нельзя, надо разбираться с разметкой. Сбор нашего тестового датасета идёт медленно. В прошлый понедельник я просил всех добавлять по 1 тексту в день - в конце недели могло бы быть 25 текстов. Но оказалось, что их всего 12 - они были добавлены мной, Ангелиной и Настей. Дани и Никита ничего не добавили. Спросил в чём дело - оба ответили, что планировали добавить все свои тексты в конце недели. Сегодня посмотрел с утра - не добавили. Дани добавил свои тексты во второй половине дня. Никита не добавил даже после напоминания. Завтра буду разбираться в чем дело. Настя занимается парсером отрицаний. Это такая старая штука, которая ищет отрицания сущностей в тексте (типа "жидкого стула нет"). Это жуткая мешанина правил и проверок. Она выдала идею - попробовать использовать ML для этого. Я погуглил - в принципе есть статьи на тему negation extraction and linking. Попробуем это обмозговать. Я на прошлой неделе предлагал своим ребятам раз в неделю делать созвон для обсуждения нерабочих вопросов по DS и карьере. Сегодня созвонились, обсуждали изучений нейронок и иностранных языков, прокачивание навыков, общие интересы и так далее. Договорились, что на следующей неделе я покажу из в live coding как писать простую нейронку на pytorch с нуля. И потом каждую неделю что-то ещё показывать буду. С Дани сегодня был длинный созвон на две темы. В общем, как я и понял немного раньше: Он в Сбере привык, то ему дают готовые данные, а он только модельки тренирует. Поэтому тренировал свои модели, не смотря на качество разметки вообще. Дал ему советы о том, как это делать. А потом показал свой код для запуска экспериментов на pytorch-lightning + hydra. В целом пайплайн готов, как-нибудь потом можно будет показать и другим людям. На созвоне со Сколково подавляющую часть времени они рассказывали старую информацию или общались/спорили друг с другом. В итоге хотят в середине июля подавать магистерскую работу на какую-то конференцию. Пока они по факту погоняли разные варианты берта и active learning. Дальше будут ещё больше экспериментов гонять. Ну и последнее - мы потихоньку своими силами собираем тестовый датасет для проверки качества парсеров, линкера и категоризатора. Пока ~19 из 40 кейсов отрабатывают. Даша выложила MR с небольшими техническими переделками - spacy_ru теперь сабмодуль, не надо вручную клонировать. Я проверял работоспособность. Потом у неё появилась мысль привести requirements.txt в порядок. Создал ветку под это, сформировал новый список библиотек. Сергей выложил большой MR с кучей новых симптомов. Теперь сущностей 100+, парсеры есть примерно на 35 из них. Настя выложила обновленный парсер отрицаний, надо будет потестировать. ``` Andrey Lukyanenko, [29.06.20 10:36] Привет! У меня небольшой вопрос: Никита уже второй спринт вподряд не создает milestones (во время прошлого спринта я ещё ему напоминал, в этот раз уже и не стал). И уже второй спринт вподряд не устраивает планирование с моей командой - у вас также? Есть подозрение, что через какое-то время заявят, что подход с функциональными командами развалился и надо возвращаться к продуктовому Olya Kozlova, [29.06.20 10:37] Да, у нас так же ``` А я завел отдельное репо для запуска экспериментов на pytorch_lightning + hydra. В нем настроил black, flake8, mypy и pre-commit hook в качестве примера как можно все это оформлять. Июль У меня был созвон с Яшей почти на час. Он спрашивал про новых ребят, про их успехи, про моё мнение, про их настроения и так далее; про процессы, ожидания, про мои настроения и всякое другое. Хз, может это продолжение политических игр наверху Интересный момент в том, что он считал Дани лучшим из новичков, Настю следующей, Никиту на последнем месте. Уже 5 классификаторов сущностей - это по одной sklearn модели. Куча моделей на NER. Никита итак новые модели строит сразу на 4 сущности, но все равно много. И линкер. В итоге инициализация проекта уже занимает около минуты и жрёт 6Gb + оперативки. Дальше будет больше. Надо думать, что делать в будущем, ибо скоро я банально не смогу запускать проект на рабочем ноуте для проверки качества. У меня всего 1 идея - строить 1 огромную модель на все (ну или несколько, каждая на большое количество сущностей). Но для этого нам нужно иметь разметку типа "1 текст - все сущности/классы/линкинг", а не "на разных текстах, разная разметка". И минимум тысяч 10 текстов. Но при наших темпах/качестве разметки это совсем нереально. На Самару я не рассчитываю - почти уверен, что наши критерии качества они не выполнят. У нас парсеры новые реально странные false positives выдают. Яша созвонился со мной и просил разобраться с этим. Я пообщался с Никитой, он будет пробовать что-то сделать. Вся проблема в данных - разметку по симптомам делали мало, так что Никита разными ухищрениями добирает себе данные. С Никитой обсудили какие из парсеров симптомов имеет смысл оставить на правилах. И заодно просмотрели тот приоритетный список симптомов от Яши, часть из них нормально будет работать на ключевых словах - сделаем. ```text Меня слегка плющит от Яши и Роберта. Взгляни в чатик проекта пожалуйста Я совершенно случайно заметил, что недавно добавили новую сущность, которая противоречит старой. Я указал - Роберт ответил, что мол "ой, надо подумать". И ещё в одной сущности надо менять список ключевых слов - и опять они об этом заранее не подумали, а мне надо искать это самому. Это их прямая задача следить за непротиворечивостью ``` Обнаружили очередные мелкие неприятности в spacy, они особо не мешают, но мотивируют стараться перейти к нейронкам. Никита обновил два парсера симптомов, мы их выложили. Пришла разметка по ещё двум фичам. Полное согласие разметчиков ~90%. Дальше дадим им задание разметить это же на классы. Ещё Яша в очередной раз завел разговор о том, что надо уменьшать количество ошибок false positive. Попросил меня написать некий план борьбы с этим. Я-то напишу план, но основных пункта будет два: качественная разметка в больших объёмах и использование нейронок, которые опять же требуют разметку. По факту Никита и Дани тренируют модели на датасетах, где большая часть данных была ими же и создана - либо поиском текстов, либо аугментацией. Ибо имеющихся данных явно мало. Ну и в целом забавно, как Яша говорит, что мол предсказание диагнозов работает хорошо. Конечно, оно будет работать хорошо, когда туда на вход приходят данные в четко структурированном виде, с заранее известными возможными значениями, и создано до фига таблиц с разными вероятностями для всех возможных плоских симптомов. Я сегодня натренировал нейронку на наших данных по локализации, вроде выглядит адекватно. Сделал MR на то, чтобы нейронки можно было использовать в нашем проекте. Завтра Ангелина посмотрит, потом будем сравнивать качество по сравнению с прошлыми шагами. В четверг буду своим ребятам показывать как тренировать bilstm на NER на pytorch. Сегодня в основные ветки вмерджили 3 большие штуки: - обновленный парсер отрицаний (на правилах) - обновленный код для сбора статистики о качестве моделей на нашем тестовом датасете - моя нейронка для парсера локализаций На следующий спринт поставили Насте задачу расширить код для анализа моделей на датасете - сделать более подробную статистику по категоризаторам. Ещё Настя и Никита объединили усилия, чтоб с помощью snorkel попробовать не просто найти данные для разметки, а ещё и сделать разметку. Успехи есть, но нужно время. Никита ещё нам рассказал, что пробует улучшить руловые парсеры - чтобы они не искали просто по ключевым словам, а чтобы были с regex. Яша меня немного удивил на сегодняшней встрече. Он с одной стороны сказал, что ему нравится наш прогресс и успехи, с другой стороны он очень вяло отреагировал на новость, что мы начали использовать нейронки для парсеров, но очень обрадовался тому, что Никита будет использовать регулярки. В текстах наткнулись на такой сложный кейс: "страдаю сильными головными болями, иногда от боли даже темнеет в глазах". "боли" похоже на симптом "боль", но это не так - это скорее условие. Обнаружили небольшую ошибку в одной из функции препроцессинга, исправили. Ангелина пробует тренировать какие-то эмбеддинги Navec. Вроде хорошие и мало весят - посмотрим. Пришла разметка из Ульяновска по классам фичей: полное согласие по day_time 85,7% по симметрии 78,4% Настя проанализировала разметку, что-то получилось поправить руками, что-то автоматически поправим. И пишет код для вывода статистики по качеству категоризаторов на нашей тестовой выборке. Никита пробовал делать парсеры с регулярками, в результате получилось, что с ними очень много геморроя, а улучшения практически нет - большинство ошибок руловых парсеров из-за опечаток, а у нас в текстах такие тупые опечатки, что регулярками фиг отловишь. Так что со следующей недели он будет осваивать мой код для NER на нейронках. Я сравнил несколько лемматизаторов на наших данных: spacy (текущий), pymorphy2, natasha, rnnmorph. pymorphy2 выглядит как самый адекватный и шустрый. Попробую применять его при обработке данных для парсеров. Не уверен имеет ли смысл заменять лемматизатор во всем проекте - это много работы и не уверен, что это точно даст значительное улучшение. Проанализировали разметку от Самары. Лучше, чем в прошлый раз, но все равно пока ещё хуже разметки от Ульяновска. Ошибки в процессинге исправлили, но нашли ещё одну ошибку, исправим скоро. Я экспериментировал с NER на лемматизированных данных, качество не особо выше. август Переписывался с Робертом по поводу разметки Самары. В общем будет ещё один раунд тестовой разметки, потом тестовая закончится. Мы (моя команда) будем только запускать скрипты для анализа. Если качество не достигает критериев, то копаться в данных не будем, все данные будут отправляться на переразметку и Роберт/Лиза будут разбираться с этим. Заодно завтра Лиза организовала встречу - им понравился наш скрипт для автоматического анализа кросс-разметки, хотят внедрить его в свою платформу для разметки. Настя выложила категоризатор продуктивности. Ангелина занимается генерацией примеров для линкера. что-то про превращение в скил марвина И что-то ещё говорил о том, что если у нас будет успех, "то есть мы покажем не только ресерч", то "вернут финансирование" ```text Angelina Kudriavtceva, [04.08.20 17:43] мы хоть какой-то пайплайн для оценки сделали Andrey Lukyanenko, [04.08.20 17:44] Ага. И это круто Angelina Kudriavtceva, [04.08.20 17:44] а они провели один q&A и то с непонятными результатами Andrey Lukyanenko, [04.08.20 17:44] У меня возникла мысль - пусть он организует проверку качества. Если у кого-то есть мнение, что модели много ошибаются - пусть это тестирует кто-то и показывает примеры с ошибками. Andrey Lukyanenko, [04.08.20 17:45] Чтобы это было массово, а не то что Роберт/Яша закидывают в карточки 1 пример с ошибкой в неделю ``` Ещё он сказал, что в некоторых сущностях один из тот же текст может иметь разные классы. Например, "2-3 раза в день" - частота. Но это может быть "редко" для одних симптомов и "часто" для других. Я сказал, что такое можно ловить, но прийдётся использовать нейронки и потребуется больше разметки. Никита провел много экспериментов по сущностям с использованием лемматизации и без неё. Получилось, что разница минимальная. Дани попросил/предложил сделать переразметку фичи duration на NER - а то была плохая разметка. Я согласился. Я допилил возможность делать инференс pytorch моделями на несколько сущностей. Сейчас пишу расчет f1 multiclass на pytorch. Раньше использовал готовый расчет из pytorch-lightning, но он не работает на ddp Дани создал MR для выкладывания парсеров симметрии и day_time, Настя выложила категоризаторы на них же. После того как Дани добавит новые тестовые примеры посмотрим на качество моделей и решил выкладывать ли их. Степан Кудин сказал: "Кстати, Никита как-то скептически отзывался о, как я понял, твоём проекте." Я сегодня созвонился с Никитой и обсудил будущее. Проект будет продолжаться, скил делаем. Если случится что-то совсем неожиданное и проект закроют (сейчас нет никаких намеков на это), то никого увольнять точно не будут - либо придумают новый проект, либо распределят по другим проектам. Но, повторюсь, пока нет намеков на это. В целом Никита намекнул, что на проект тратится многовато человеческих ресурсов, но есть вариант, как достигнуть качественного успеха - сделать некую технологию, которую реально смогут использовать в будущем. Если сделаем - будет очень хорошо для нас. То есть, например, удобный подход для NER, удобные аугментации или что-то ещё. Пришла разметка локализаций от Ульяновска. Full agreement: 69.4402% Они посмотрели на наш анализ разметки и согласились прям сразу делать переразметку. Надеюсь, что смогут повысить качество. Вместе с Настей слегка исправили код для анализа качества разметки. Минимально повлияло, но стало правильнее - раньше, если кто-то из разметчиков ничего не разметил, то в full agreement это не учитывалось. С Никитой вместе разбирались с тем как использовать эмбеддинги. У Ангелины новые эксперименты с линкером показывают повышение качества. От Самары пришла разметка. Очень плохая devops, который нам делает ci/cd, заболел, так что это опять откладывается в неизвестно куда. Сегодня созванивались с Олей. Мы рассказали про то, как организовываем разметку, как работаем с данными и про модели парсеров и линкинга. Обсудили, что можно ещё делать. Оля посоветовала пробовать эмбеддинги для исправления опечаток (поиск похожих слов), но как видно на скриншотах, которые я выслал в чатик по nlp, там слишком много лишнего. С Дани разбирались как подключаться к докеру на сервере через локальный pycharm, решили, что проще не мучаться и делать это через vs code. Внезапно нам сообщили, что с 1 или 2 числа все выходят в офис. И удаленки вроде как вообще не будет в будущем (только для болеющих). Подстава. Я копаюсь с бертом. У нас в рабочих чатиках народ поднял шум и недовольство, ибо ни хрена непонятно. Ни тестов, ни соблюдения норм безопасности, ни какой конкретики. В итоге пока остаемся на удаленке, дальше хотят сделать 1-2 дня в офисе 09.2020 Роберт на прошлой неделе обещал нам подготовить роадмап, но теперь оказалось, что Андрей должен это согласовать, а он в отпуске. Так что по факту со дня принятия новой стратегии у нас/меня всё ещё нет понимания того, куда и как мы движемся. Я попросил своих ребят собрать наши подходы к улучшению качества разметки и примерно описать как много времени у нас уходит на исправление косяков с разметкой. Как понимаю, у нас прогресс есть в повышении качества, но пока всю аналитику делаем сами. Платформа разметки заинтересовалась тем, как мы анализируем качество, но особо не шевелится его использовать. Видимо у них все тоже медленно С Робертом договорились понизить критерий full agreement для Самары до 85%. Ульяновск закончил очередную разметку локализаций. Качество full agreement 95%+ Точнее это была переразметка - вначале они разметили, мы показали, что качество ужасное, они стали переразмечать. Повыгружали логи обращений в Марвина. Я их поизучал, в общем доля медицинских запросов в марвине крайне мала. И все они примитивные - из нескольких простых слов. Плюс люди обычно требуют сразу решения проблемы (типа "у меня болит голова что принять"). В общем нам нужно больше реальных медицинских текстов из Марвина, чтобы понять насколько наши модели справляются с этим. Ангелина обнаружила ещё одну проблему в логике опроса. Точнее мы думали, что это уже исправлено, но нет. Видимо теперь посмотрим, как у нас будут ставиться задачи интеграторам, и сколько они их будут делать. Общался с Робертом. Он вначале хотел, чтобы я составил ему список задач для найма интегратора. Я намекнул, что список задач на проекте должен исходить от него, он согласился. На основе моих идей и кода Дани и Настя смогли сделать базовый вариант active learning - предсказание вероятностей + подсчет энтропии + отбор текстов с максимальной энтропией для разметки. И даже умудрились добавить это в snorkel. Так что попробуем использовать на следующих итерациях разметки по известным сущностям. Внезапно нашли очередной баг в логике опроса - где-то что-то упало. Роберт сказал, что фраза "больно писать, иногда кровью" распарсилась неправильно - у нас выдало симптом "мочеиспускание" и к нему привязалось "иногда". Понятно, что это не очень правильно, но это сложный случай. По обоим пунктам я могу сказать, что опять настаиваю на том, что нужно нормальное тестирование проекта. Чтобы и баги технические найти, и нормально качество оценивать, а не как-то исправлять модели на основе одного примера. Ещё решили, что пора уже пробовать более продвинутые подходы. Дани подготовит датасет - на 100к текстах запустит все наши парсеры и линкер. А затем попробуем сделать одну модель на сущности и линкинг. joint ner and re, spert, adaptive span bert и прочее. С утра был созвон с командой разметки. По факту ничего конкретного не сказали - ни сроки, ни фичи, ни что либо ещё. Ещё и стали спрашивать, что нам надо - будто раньше не могли. Потом пообщался с Дашей - в общем там тоже хреновые менеджеры, нереальные сроки и так далее В целом все идёт по планам. Ангелина скоро закончил переносить модель линкера с keras на pytorch. Настя хочет изучать новые вещи, с понедельника попробую ей начать давать строить модели NER. Созвонился с Настей, дал ей вводные по NER. В целом она уже простые вещи пробовала, так что рассказал практические детали. Будет пробовать модели spacy. Когда освоит - будем к нейронкам постепенно переходить. Созванивался с Дани, обсуждали как можно улучшать наши модели NER на нейронках, будем делать. Мне написал Герман - хочет уменьшить нагрузку на разметчиков. Суть его предложения такая: сейчас, если пачка разметки не проходит по критериям качества, мы отправляем её на переразметку целиком; он хочет, чтобы на переразметку отправлялись только тексты, где есть различия в разметке. Мне эта идея не очень нравится - если full agreement низкий, то могут быть тексты, где все разметчики ошиблись. И скорее всего моим ребятам прийдётся больше времени тратить на проверку разметки. Посоветовался с Олей, в итоге такая идея: из прошлой разметки берем пак с плохим качеством. Берем из него тексты с полным совпадением разметки и сами глазами смотрим сколько из них верных, сколько ошибочных. Если много ошибок - говорю, что идея Германа не сработает. Если мало ошибок - значит я не прав, и так можно. Завтра попробуем. Взяли тексты и проверяли разметку. Получилось примерно 10%, что приемлемо. Но у нас много вопросов по правильности разметки, будем завтра с Робертом обсуждать. А в целом пойнт который пусть Роберт решает: с одной стороны, да, ошибок в разметке с full agreement мало. С другой стороны, они есть. Мы итак слишком много в данных копаемся, больше не будем. Значит, если мы соглашаемся с Германом, они будут больше текстов размечать, но будет немного больше ошибок. Роберт хочет, чтобы мы "улучшали парсеры", но если мы заведомо знаем, что в разметке есть ошибки, то точно есть некий предел качества, который не преодолеть без исправления разметки У нас все ещё нет роадмапа. Но Роберт пока примерно сказал, что интеграция будет где-то в ноябре. А выход в предпрод в январе Раньше каждую пятницу мы всей проектной командой созванивались и рассказывали сделанное за неделю. Теперь Роберт решил, что он будет созваниваться только с лидами и по-отдельности. Был созвон с Робертом: при опросе люди будут отвечать в свободном стиле и это надо парсить Я уже добавил в global categorizer/parser новые методы для этого (пока локально). Дальше интереснее: Нужен парсер на да/нет/не знаю. Попробуем с лингвистами договориться Надо поставить задачу интеграторам для добавления всего этого Созвонился с Робертом. - Он хочет после завершения итерации разметки с Ульяновсоком организовать разметку 2к текстов на все сущности. Типа для оценки качества парсеров - лингвисты будут переписывать наши формулировки вопросов. Например, чтобы не было обращений на вы/ты, а были обезличенные - на прошлой неделе он хотел возможность парсинга открытого ответа на вопрос по сущности. А теперь уже захотел, чтобы человека можно было опрашивать на несколько сущностей, например "как сильно у вас болит? как долго у вас болит?" или "если ли у вас тошнота? есть ли у вас понос?". Соответственно и парсить ответы на это. Пока отложили. Ибо для меня непонятными и сложными кажутся возможные ответы типа "первое да, второе нет" - лингвисты могут поделиться с нами наработками по парсингу да/нет/не знаю - завтра Роберт будет встречаться с Машей для обсуждения роадмапа и прочего. Соответственно в этот раз обещает прислать инфу завтра - Роберт хочет собрать все тексты с форумов (для Самары) короче 70 токенов. И пачками размечать их. Вначале на 4 сущности, которые уже были, потом на другие. Сегодня созванивался с Настей. - она успешно попробовала тренировать NER со spacy и даже нейронки. Успешно запустила мой пайплайн для тренировки нейронок - потренировала парсер для поиска отрицаний в тексте (раньше был на правилах). Пока похуже прошлой версии, но не намного. Может быть сможем сделать лучше - у неё много времени уходило на работу с doccano, я помог написать bash скрипт, чтобы было удобнее Созванивался со своими ребятами -показывал как правильно писать код, чтобы проходить проверки flake8/mypy/black в нашем проекте. ```text Andrey Lukyanenko, [24.09.20 16:21] Созвонился сейчас с Никитой по "технологии". Когда закончили, у меня вырвалась только одна реакция - "ой, бляяя" Andrey Lukyanenko, [24.09.20 16:29] Это выглядело примерно так (краткая версия общения на 20 минут): - давай я кратко опишу этот короткий файлик (ибо ты его все равно не читал) - это не совсем то. нам надо обогащать технологическое ядро - ... че? - нам надо развивать технологическое ядро - ... хорошо. А если подробнее? - надо сделать универсальное решение. Перейти от домена к технологии. Взять на себя часть функционала, которая интересна людям. Сделать готовое решение - ... хорошо. Пайплайн для тренировки моделей - то, что надо или нет? - это хорошо. Пусть будет пайплайн. На выходе будут артефакты, которые будут встраиваться в технологическое ядро. - ... ладно. Давай так. Вот что ещё надо сделать кроме этого пайплайна? - В технологическом ядре будут разные микро-сервисы, которые можно будет модульно объединять. Надо сделать такой модуль - мне кажется, что это больше для интеграторов? Чтобы нормально написали код, чтобы не был bottleneck по производительности. - ... давай ты до завтра об этом подумаешь и мы завтра это снова обсудим? до свидания ``` Созвонился с Робертом. Инфа: - он опять заговорил про то, чтобы спрашивать пользователя несколько сущностей. Я предложил ему вначала расписать возможные варианты того, что может отвечать человек - я недавно сделал доработку, что парсеры могут парсить одну сущность. Он радостно спросил, можно ли это быстренько впилить на тестовый стенд. Я объяснил, что это к интеграторам - договорились, что когда Ульяновск будет делать "golden разметку", мы будем требовать 100% full agreement - спросил у него есть ли какой-то список сущностей/диагнозов, которые мы должны обрабатывать - ещё не - он сказал, что собрал 8к текстов на медицинскую тематику. теперь будут просить людей наговаривать это на Марвина, для медицинской ASR. - ещё он скинул ссылку на это: http://etiona.com сказал, что будут общаться с автором сайта на предмет возможности покупки этого проекта. Процесс разметки с Самарой идёт так: Вначале они размечают плохо, потом Настя запускает на их разметке наш скрипт для анализа качества разметки, отправляет им, они переразмечают. Это даёт хорошие результаты - покрывает критерии. С другой стороны, это все те же сущности, которые они уже который раз размечают. Думаю, что на новых сущностях будет хуже. Настя сделала MR с новой версией модели парсера отрицаний, но ci/cd выдает непонятные ошибки. Девопс пока не отвечает. Завтра буду его пинговать. Свершилось чудо. Я пообщался с Никитой по поводу "технологии" и смог добиться хоть какой-то конкретики Вначале он начал также, как и в прошлый раз - "надо инвестировать в вытаскивание структуры из неструктурированных данных". Но в итоге он предложил следующее: что мы уходим от концепции медицинской команды и большая часть NLP будет поделена на 2 стрима: стрим Оли Козловой с чат-ботами/классификацией и прочим и наш стрим с NER. Предложил устроить созвон на троих с Олей, когда она выйдет из отпуска. Пока все равно не очень понятно, какой будет практический результат, но хоть какой-то прогресс) Ибо как бы над проектом все равно надо работать. Но судя по тому, что он говорит - он действительно хочет пайплайн тренировки моделей, типа того, что у нас есть Ещё может быть мы сможем active learning больше заниматься при желании октябрь Ангелина встроила линкер. adaptive max pooling и использует мой пайплайн написала скрипт который приводит датасет по линкеру в формат ner + re Изменял работу с fasttext в пайплайне. Осознали, что поскольку парсер отрицаний мы переносим на нейронки (вместо рулового), надо слегка изменять его применение - надо объединять предсказания нормальных сущностей и сущности-отрицания. В целом код для этого написал. Когда Настя будет готова выложить новую модель - буду выкладывать. На маленьком созвоне по NER договорились, что Аня свяжется со мной, и мы попробуем запустить мой пайплайн на её данных. С Робертом решили уже начинать разметку golden датасета. Лингвисты прислали их рулы на парсинг да/нет/не знаю, будем разбираться с тем, как это использовать. Раньше у нас была сущность "выделения", а теперь есть отдельные сущности "выделение из носа", "выделение из ушей". Роберт предложил делать на них парсеры, но мне кажется, что это будет путаться с локализациями. В итоге сошлись на таком решении: запускаем обычные парсеры, а потом, если видим, что у нас слинковались такие пары сущностей, то конвертируем из в "правильные". Это проще и эффективнее. Был созвон с Робертом по двум темам. Что показать Ханину на следующей неделе. И что Смартмед снова вышел на контакт и снова хочет наш чат-бот. Роберт хочет, чтобы у них был и голосовой, и текстовый бот. Ещё он сказал, что после интеграции с Марвином начнётся "основная работа". Переспросил - он имеет ввиду, что прийдётся переделывать много моделей, чтобы работали с данными из ASR вот только я об этом уже много раз говорил, да и писал тоже :) Что-то поломалось в ci/cd (почему-то докер удалился). Девопс разбирается. Заодно наконец-то стал впиливать автозапуск проверок стиля и тестов при MR. Правда у нас куча тестов старые и давно не рабочие. Разметчики в Самаре и Ульяновске постепенно доходят до высокого качества. Настя и Ангелина сделали большую часть работ по задаче создания парсера на "да/нет/не знаю". Ангелина тренировала линкер встроила наш векторайзер Обнаружился баг - наши парсеры плохо работают когда текст написан капсом )))) добавим переведение всего в lower case. Аня Лапидус сказала, что вначале наш пайплайн для NER дал результаты не особо лучше spacy, но после изменения процессинга стало заметно лучше. Ноябрь Начинаем анализировать разметку "golden" датасета от Ульяновска. 500 текстов на 6 сущностей пока размечено. Они его типа на 100% full agreement разметили. "Типа" - потому что даже на первый взгляд я вижу проблемы в разметке. Попросил Дани и Никиту посмотреть, сам тоже поанализирую. Роберт сообщил, что директор по продукту ему сказала , что мы пока ничего не продаем внешним заказчикам (видимо пока не устаканится ситуация). Так что Роберт покажет проект Медси, но в ближайшее время им ничего не продаем. Ещё Роберт сказал, что хочет сделать парсеры на все сущности. Жду от него подробности и ключевые слова для парсеров. Пообщался с Робертом. 1. Он показал демку Медси, но ничего внятного не сказал про результаты 2. В четверг будет встреча нашего топ-менеджмента (включая Ханина) и топ-менеджмента Медси. Будут решать, какие проекты делать. 3. Если наш симптом-чекер сделаем для них, то потом в будущем будет итеративное добавление новых сущностей и диагнозов. 4. Про то, что надо переформулировать вопросы, Роберт согласился. В связи с этим у него возникла идея сгенерить все возможные плоские симптомы, при этом сделать так, чтобы они не участвовали в постановке диагноза. А потом, после начала работы продукта можно будет смотреть какие неактивные плоские симптомы часто спрашивают пользователи и работать над ними 5. Я сказал, что если регулярно будут изменяться/добавляться сущности, то надо будет каждый раз обновлять разметку и golden dataset, и тренировочных данных. Роберт выдал идею: если будет проект с Медси, собрать побольше врачей экспертов и зафиксировать список сущностей на 1-2 года 6. Роберт внезапно прислал мне список из ~90 сущностей, которые есть в плоских симптомах/диагнозах. И надо, чтобы они у нас работали. У нас пока работает примерно половина. Почему раньше не подумал - не сказал. Впрочем, сделаем все на правилах. С парсерами и категоризаторами будет проще, а вот relation extraction скорее всего будет плохо работать. 7. Последнее. Представим фразу "у меня болят суставы рук" или "у меня болят мышцы рук" (кстати, Никит, в первом примере "болят" не ловятся, такое уж точно должно работать) Сейчас у нас "болят" - "боль", "суставы" и "рук" - классы локализаций. К боли явно привяжется что-то одно. Но это вполне нормальная жалоба, нам надо понимать, что болят именно суставы рук. Пока придумали такое решение: - в дерево локализаций к релеватным локализациям (например "рука") добавляем подклассы типа "сустав/мышцы/кожа/??? руки" - делаем парсер (а может даже просто поиск по ключевому слову), который проверяет наличие этих слов - если не нашлось - ничего не меняем - если нашлось - меняем предказанный класс Общался с Робертом. 1. возможно от Самары откажемся. менеджменту не нравятся затраты. и не понимают зачем нужно. сегодня станет более понятно. 2. Сергей предложил логировать все тексты от людей. Прям гениальное предложение... 3. Идея на будущее - при запуске свободного ответа запускать весь global parser. Я намекнул Роберту. что надо вначале продумать как это будет работать и как сочетаться с уже распарсенным 4. Заведу новые карточки по проблемам с ci/cd, ибо Роберт думал, что уже все работает 5. Сказал Роберту про качество golden - он огорчился. Хочет, чтобы качество было ближе к 100%. Пока не решили как, предварительная идея - запускаем check_all_parsing, лог отдаем валидатору. Потом обновление инструкций и переразметка 6. В golden будет и линкинг, и классы 7. Про суставы/мышцы и прочее - Роберт обновит список сущностей, но пока не будем сразу изменять разметку Бизнесовые метрики три: - человек согласился с рекомендацией врача - согласился и записался - согласился, записался и пришёл на приём. И последнее, самое веселое. Похоже, что Сергей предложил вернуться к старой идее Нурлана. Берем много-много медицинских историй. Парсим их нашими моделями. И от этого получаем зависимости. Типа: "боль в ноге" - 40% травматолог, 60% кто-то ещё "насморк" - 90% лор, 10% кто-то ещё И в потенциале заменить ручные таблички Роберта. Созвон с Робертом - gpu для инференса не будет [я другого и не ожидал] - договор с Самарой идёт до декабря. Продлевать не будут. - оля кулешова сказала добавить интерактивное выделение локализаций. Типа на теле человека тыкать где болит [я пока плохо представляю, как это может быть сделано] Созвонился с Робертом. Новостей особо нет, кроме того, что он стал более пессимистичным насчёт будущего проекта после предстоящего пилота. У него опасения скорее не по качеству проекта, а по решениям свыше. Типа наши новые руководители могут быть в целом не заинтересованы в медицинском боте, или просто захотят переиспользовать наработки в обычном чат-боте декабрь У нас вчера от Ульяновска пришла разметка с хреновым качеством. Оказалось, что Герман решил провести эксперимент - чтобы люди размечали без "контролера", который обычно отвечает на спорные вопросы. Получилось плохо, они обязательно переразметят Очередная итерация разметки закончилась. Внезапно оказалось, что Роберт слегка изменил принципы разметки - раньше длинные локализации размечались целиком, а теперь он сказал разметчикам, что можно совсем не размечать... В итоге будем отправлять на переразметку Дани и Ангелина разбираются с onnx. В целом все норм, но в одной модели портятся предсказания. По крайней мере нашли косяк в одной функции процессинга, исправили. Теперь надо будет ещё написать процессинг на случай, когда на 1 токен предсказывается больше одной сущности (раньше таких кейсов особо не было). Дани и Ангелина сегодня показывали нам как перегонять модельки в onnx. В целом все успешно у них получилось. Но есть нюанс - CRF слой хрен перегонишь в ONNX, поэтому просто ставили argmax. У нас есть одна модель на ~30 сущностей - в ней от этого качество сильно падает. Попробуем туда добавить attention и пошаманить, надеемся, что качество вырастет. Проект вроде закрывают. Но конкретики практически нет.