Хочется завершить начатый #делайRAG рассказ про пайплайн — помимо сегодняшнего будет еще два поста о последнем шаге с эмбеддингами и заключительный.
Сегодня хочу рассказать об одном по сути этапе ручной проверки, но сборка таблиц — технически отдельный большой и не простой этап, который у меня, кажется, ни за одну сессию не сработал нормально 🙂
После разметки Gemini возвращает JSONы, в которых есть метки «session_ID». Этот ID появляется еще на первом этапе (скрапинге): это результат моих попыток сделать многоразовый пайплайн, в рамках которого самостоятельные сессии обрабатываются отдельно от других (грубо говоря, я сделала скрапинг практики за 2020-й год, и все дальнейшие шаги должны исполняться в отношении только этой пачки кейсов). В общем, сколько у меня в итоге было субститутных костыльных кодов, которые дособирали эти пачки — стыдно признаться.
Центральная функция этой части кода — собрать таблицу с релевантными для RAG (субстантивными) делами. Каждый ключ в JSONе становится колонкой таблицы (смотрите аттач со скринами в комментарии — этот аттач в отличие от предыдущих полезно посмотреть тем, кто не очень разбирается во всех этих жисонах, там наглядно). Затем таблица с релевантными делами дополняется скриптом тремя колонками:
🤩 колонка с полным текстом решения ФАС из папки, в которую помещаются все txt с решениями на этапе скрапинга;
🤩 колонка с caseID. Зачем это нужно — это довольно скучно, вынесла это в аттач;
🤩 колонка с «тематическими тегами».
Тематические теги — это описание статей из ФЗ «О рекламе» максимально короткими ключевыми словами по типу «некорректное_сравнение», «БАД_дисклеймер».
Основной функционал этих тегов — они помогают оценивать равномерное наполнение базы знаний кейсами разной тематики (чтобы не было перекоса, например, в рекламу финансовых услуг, и было побольше решений по темам, которые достаточно редко затрагиваются (например, правила о государственном языке)). У тегов есть еще и задел на будущее — они будут основой для reranking-а, который я планирую реализовать для повышения точности выдачи кейсов из базы, связью с кластером эмбеддингов для руководств ФАС, который я тоже хочу до Нового года всё же сделать.
Ну и затем я перехожу к ручному отсмотру. Делаю я его по нескольким причинам:
🤩 Нейросеть иногда плохо справляется с частью промпта, которая просит её считать нерелевантными дела, требующими наличия каких-то лицензий и разрешений, где содержание рекламы не совпало с реальностью. В каждом батче таких обязательно будет 20-30 дел, и, на мой взгляд, они не особо нужны для задачи, которую решает бот.
🤩 Нейросеть получает каждый новый кейс на рассмотрение без знания обо всех предыдущих, и ей невдомек, что база знаний распухнет от однотипных решений по фразе «мы лучше, чем ломбард!».
🤩 Мне просто это нравится! 🤗 Мне нравится рекламное право в целом, это расширяет мой профессиональный кругозор. Всё, что нейросеть оценивает на 6-9 баллов, как правило, довольно интересно смотреть.
🤩 Я искренне верю в то, что база знаний не должна быть свалкой документов, она требует кураторского подхода, и мои объемы не такие, чтобы всё отдавать на откуп нейросети.
Но нужно сказать, что вся эта система оценок действительно работает, и если лень, то можно и отдать всю задачу нейросети: просто смело брать из каждого батча дела от 5 баллов. Но и при мануальном отсмотре я полагаюсь на эти оценки: примерно с 5 баллов уже просматриваю по диагонали, подмечая только кейсы по редко освещаемым в практике вопросам, даже если там простая правовая позиция, и «поднимаю» им оценку. В принципе я читаю только колонку violation_summary, иногда смотрю аргументы ФАС с цитатами. Количество осечек при суммаризации минимальное, и я каждый раз радуюсь тому, как нейросети упростили такой тип задач.
Итогом этого этапа является то, что я беру и руками копирую строки с оценкой выше 4 или 3 (зависит от батча) и вставляю в файл с основной базой, святая святых, RAG.csv. Это тоже можно делать скриптом, но мне не лень 😊
Всё! Всех с понедельничком, отличной недели, друзья ☕️
Post #40
512

- ❤ 10
- 👍 5
- 🔥 1