Краткое содержание первой части

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

Для этого задания мы разработали фреймворк, позволяющий изменять LLM-модель и тип токенизации в реальном времени. В качестве эталона мы использовали GPT4 Turbo и ADA-02 для токенизации. Хотя такое решение не подходит для продакшн, оно отлично служит точкой отсчёта.

Особенностью нашего подхода стало собрание 31 вопроса, от простых до сложных, с последующей оценкой ответов юристами. Оценка была сделана руками, людьми, что делает её особенно ценной. Мы тестировали различные комбинации моделей и промптов, включая GPT4, GPT3.5, GigaChat и YandexGPT. Гипотеза об эталонной модели и токенайзере подтвердилась результатами от OpenAI (около 70% точных ответов). Однако токенайзеры от RuBert оказались не настолько эффективными, как ожидалось.

Более подробно об этом можно прочитать в первой части.

Сравнительная таблица из первой части

В этой части мы рассмотрим дообученный токенайзер и модели Saiga на базе Llama и Mistral.

Какой выбрать токензайзер (тот что создаёт векторное представление текста)?

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

Напомню, что в RAG промпт задачи формируется динамически. Вопрос (A) конвертируется в вектор, и выбираются наиболее близкие ему математические векторы фрагментов регламента, сортируемые по убыванию "близости". Затем из них формируется запрос. Например, для вопроса A наиболее близкими являются фрагменты текста P, D, F, G, при этом дистанция между векторами A-P больше, чем A-D. С этой задачей лучше всего справляется ADA-02 от OpenAI.

Таким образом, можно создать собственный токенайзер и сравнить, какие фрагменты текста он выдаст для такого же запроса. Если их последовательность совпадает с ADA-02, это отлично. В противном случае, эту ошибку можно измерить и анализировать.

Если скормить этот текст в СhatGPT и попросить зарисовать, он выделит суп как основный элемент.

В некотором смысле наш токензайзер должен выделять правильные элементы.

Методология поиска лучшего токенайзера

В качестве референса было я взял около 5000 текстовых фрагментов различного содержания: примеры вопросов, выдержки из регламента. Из этих данных случайным образом формировались 250 пар текстов для расчета косинусной близости для выбранного токенизайзера. Далее рассчитывал отклонение между значением эталонного ADA-02 и выбранного. Колебание этого отклонения и есть наш параметр. Если токензайзеры идентичны, то и среднееквадратичное отклонение между ними = 0.

Среднее квадратичное отклонение между каждой точкой позволило определить точность выбранного токенизатора. RuBert – Large демонстрировал погрешность около 10-11% в отношении ADA-02, sbert-nlu-ru-mt – 9-11%, что является улучшением, хоть и незначительным.

Близко, но все равно колбасит (9-13%)
Близко, но все равно колбасит (9-13%)

9Ембеддинг – это матрица чисел, поэтому задача адаптации локального токенизатора, такого как RuBERT или sbert‑nlu‑ru‑mt, заключается в преобразовании одной матрицы в другую. Классическая ML задача.

После исследований промпта в ChatGPT я остановился на трехслойной сети TensorFlow, без специальной настройки и подбора гиперпараметров (всё по умолчанию, что наверное упущение).

30 эпох обучения и был создан адаптер. Он переводит вектор RuBert (1024 параметра) в вектор OpenAI (1526 параметров). Этот адаптер будет эффективно работать только с текстами, близкими к определенной тематике.

Желтая линия - это токенайзер RuBert после FineTuning. Он по форме и пикам больше подходит под эталонный.  Улучшение точности с 11 до 6% - радикально улучшило общие показатели.
Желтая линия - это токенайзер RuBert после FineTuning. Он по форме и пикам больше подходит под эталонный. Улучшение точности с 11 до 6% - радикально улучшило общие показатели.

Синтетические тесты показали, что ошибка снизилась с 9-11% до 6%. При этом использование sbert-nlu-ru-mt не дало прироста, поэтому был выбран RuBert-large в качестве основы.

Таким образом, был получен локально работающий токенизатор, близкий по эффективности к облачному ADA-02, что теоретически должно улучшить качество ответов.

Проверка на практике, как работает FineTuned токенайзер.

Возьмем наш эталон GPT-4 и пропустим через нашу машинку вопросов/ответов и отдадим на оценку ответов юристам. И мы получаем следующие результаты:

GPT-4

ADA-02

RuBert - Large

RuBert-Large FineTuned

Верно

71%

32%

55%

Спорно

6%

13%

19%

Ошибочно

23%

55%

26%

Значения правильных ответов на эталонной модели значительно выросли (с 32% до 55%). Ошибочных ответов уменьшилось в двое и равно эталонным (уменьшение с 55% до 26%, при 23% эталонных). Иными словами – наша стратегия сработала:

  1. Правильный токенайзер повышает качество. Улучшение точности ембедингов с 11% до 6% даёт значимый результат.

  2. Fine Tune токенайзера возможен

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

YandexGPT

ADA-02

RuBert - Large

RuBert-Large FineTuned

Верно

29%

32%

45%

Спорно

26%

6%

13%

Ошибочно

45%

61%

42%

Локальные модели

Пришло время к самому интересному. Я развернул локальные на базе Saiga2 (LLama2).

Решение не тестировать на токенизаторе от OpenAI и обычном RuBert было обоснованным, так как использование локальной модели с облачным токенизатором от OpenAI кажется абсурдным, а применение обычного RuBert нецелесообразно из-за его низкого качества.

Для сравнения я взял модели с двумя разными квантованиями. На 5 и 8. Первая может поместиться в видеокарту 3060 (12GB), вторая уже требует карты 3090 или 4090 (24GB).

Обе модели показали почти идентичные: 35% верных ответов, 52% ошибочных и 13% спорных ответов. Это немного лучше, чем у YandexGPT|GigaChat на базе обычного RuBert, но хуже, чем у RuBert-fine tuned.

В целом, YandexGPT немного превосходит Saiga LLama2, что является положительным моментом.

Итоговая сравнительная таблица:

А вот с fine-tune моделями у меня пока не всё получается как надо. Много галлюцинаций. Поэтому я планирую написать отдельную статью по этой теме, когда завершу эксперименты.

Влияние сложности вопросов на оценку

На данный момент задача RAG с использованием локальных моделей (в закрытом контуре) не решается в полной мере в лоб. Одновременно эту задачу можно решать, если есть доступ к OpenAI GPT4 с широким окном контекста, достигая 70-80% правильных ответов без особых усилий. Обратная сторона медали, кроме отсутсвия контура безопасности - это стоимость. Сейчас запрос будет обходиться где-то в 5-10 центов.

Основные ограничения локальных моделей, на мой взгляд связаны в первую очередь с (1) правильным формированием чанков первичного текста (2) токенайзерами,и в меньшей степени – с самими моделями. Недостатки моделей, по моему мнению, можно компенсировать более точными промптами и fine-tuning. Альтернативно, можно подождать развития технологий в ближайшие месяцы.

Работа над нарезкой и векторизацией данных – это задача требующая нашего внимания и которая не будет решена сама по себе. Доработка FineTune токенайзера представляется технически выполнимой. Нужно больше экспериментировать с гиперпараметрами модели.

По вопросу нарезки данных (чанков текста) возможны три пути. Первый, немного примитивный, но правильный с точки зрения продуктового подхода – ограничить RAG задачу информацией, которая умещается в 1-2 абзаца, возможно с ручной нарезкой.

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

Третий - ждать, пока появятся достойный локальные модели с длиной контекста (эффективной длинной) до 128К символов. Но это не наш путь.

Поэтому не прощаюсь ...

Комментарии (17)


  1. vagon333
    07.01.2024 20:28

    ... По вопросу нарезки данных (чанков текста) возможны три пути.


    Вариант с онлайн (не локальной) моделью в 120к токенов не рассматриваете?
    Я наконец получил нужный мне результат нарезки с использованием GPT4 128k токенов. Аккуратно нарезает текст.
    Учитывая, что у меня 3.5тыс документов с текстом > 14k tokens, с доп. обработкой это порядка $4k для OpenAPI за нарезку всех текстов и пост-обработку.
    А затем ежемесячный мелкий объем, зато не нужно растопыриваться, как та корова в бомболюке.

    героиня


    1. dvgureev Автор
      07.01.2024 20:28

      Не понял вопроса или Вы не прочитали первую часть.

      Конечно можно использовать gpt4, это есть в выводах, но к сожалению такое решение вряд ли пройдёт инфобез в крупных компаниях, а в Российских и подавно.

      Но если речь будет идти об открытой информации, вроде маркетинга, то gpt4 turbo вполне можно использовать и получить не менее 80% правильных ответов


      1. vagon333
        07.01.2024 20:28

        Первую часть читал, контекст уловил.
        Пытаюсь донести идею - не усложнять, если есть возможность.

        У крупных компаний такая возможность есть - ChatGPT Enterprise (https://openai.com/blog/introducing-chatgpt-enterprise), и некоторые известные мне компании в процессе прохождения InfoSec (занимает время).
        У мелких (стартапов) - тоже. О чем и написал, как о личном опыте.
        Насчет российских компаний - все верно, блокировка, но обходные пути существуют и ими пользуются.


        1. dvgureev Автор
          07.01.2024 20:28

          Понял. Я все же думаю Европейские компании будут стараться гайки прикручивать тоже. Тут даже дело не в цене или доступе. А в самом смысле, что если это станет core бизнеса, то быть в зависимости от кого-либо неправильно.

          Как бытовое применение- да, как бизнес я бы много раз подумал.

          А расскажите по какому принципу резали текст? 128 к в целом даёт большое пространство, но вот ембединги по такому размеру будут плохи кажется


          1. vagon333
            07.01.2024 20:28
            +3

            А расскажите по какому принципу резали текст? 128 к в целом даёт большое пространство, но вот ембединги по такому размеру будут плохи кажется

            Обычный промпт: специализация, задача, ожидаемый результат, пример результата.
            Хорошо что с этим промптом филонить перестал. А дальше - нарезка по section_start.

            Только пришлось повозиться с настройкой.
            You are a semantic text analyzer: a specialized tool designed to interpret and understand the meaning of text in a document. 
            Your primary role involves processing written content to discern its underlying structure, context, and intent. 
            You excel in analyzing the semantics, or the meaning conveyed by the text, rather than just focusing on the words themselves.
            
            As a semantic text analyzer, your tasks include:
            -- Identifying Key Themes and Concepts: You detect and highlight the main ideas and themes present in the text, which helps in understanding the overall message or purpose of the document.
            -- Extracting and Structuring Information: You extract relevant information and organize it into a structured format, like identifying headings, subheadings, and categorizing content into a hierarchical structure for easier comprehension.
            -- Summarizing and Paraphrasing Content: You can generate concise summaries or paraphrases of large text segments, capturing the essence of the content while maintaining its original meaning.
            
            User provides a document text.
            You perform semantic text analysis and identify hierarchical document structure.
            Provide a structured breakdown of the document, focusing on the semantic meaning of each section. 
            The analysis should include:
            -- Sequential numbering for each section and subsection (e.g., 1, 1.1, 1.2, 2, 3.1, 3.1.1, 4, etc.).
            -- The semantic meaning or summary of each section.
            -- A specific substring or phrase that clearly marks the beginning of each section in the document.
            
            The Document Analysis Response should be in JSON format.
            
            Example of Document Analysis Response (as JSON):
            -------------
            {
              "document_structure": [
                {
                  "section_number": "1",
                  "section_meaning": "Introduction to the Topic",
                  "section_start": "In this paper, we explore"
                },
                {
                  "section_number": "1.1",
                  "section_meaning": "Background Information",
                  "section_start": "The concept of X has its roots in"
                },
                {
                  "section_number": "1.2",
                  "section_meaning": "Purpose of the Study",
                  "section_start": "This study aims to"
                },
                {
                  "section_number": "2",
                  "section_meaning": "Literature Review",
                  "section_start": "A review of the relevant literature"
                },
                {
                  "section_number": "3.1",
                  "section_meaning": "Methodology Overview",
                  "section_start": "The methodology employed in this research"
                },
                {
                  "section_number": "3.1.1",
                  "section_meaning": "Data Collection Methods",
                  "section_start": "Data was collected using"
                },
                {
                  "section_number": "4",
                  "section_meaning": "Results and Discussion",
                  "section_start": "The results of the study indicate"
                }
              ]
            }
            -------------

            Пример результата:
            {
              "document_structure": [
                {
                  "section_number": "1",
                  "section_meaning": "Introduction to the Official Interpretations",
                  "section_start": "Introduction"
                },
                {
                  "section_number": "1.1",
                  "section_meaning": "Official status of the commentary",
                  "section_start": "1. Official status."
                },
                {
                  "section_number": "2",
                  "section_meaning": "Authority, purpose, coverage, and effect on state laws",
                  "section_start": "Section 1030.1 Authority, purpose, coverage, and effect on state laws"
                },
                {
                  "section_number": "2.1",
                  "section_meaning": "Coverage details and foreign applicability",
                  "section_start": "(c) Coverage"
                },
                {
                  "section_number": "2.1.1",
                  "section_meaning": "Foreign applicability specifics",
                  "section_start": "1. Foreign applicability."
                },
                {
                  "section_number": "2.1.2",
                  "section_meaning": "Persons who advertise accounts",
                  "section_start": "2. Persons who advertise accounts."
                },
                {
                  "section_number": "3",
                  "section_meaning": "Definitions and their interpretations",
                  "section_start": "Section 1030.2 Definitions"
                },
                {
                  "section_number": "3.1",
                  "section_meaning": "Definition and examples of 'Account'",
                  "section_start": "(a) Account"
                },
                {
                  "section_number": "3.1.1",
                  "section_meaning": "Covered accounts examples",
                  "section_start": "1. Covered accounts."
                },
                {
                  "section_number": "3.1.2",
                  "section_meaning": "Examples of accounts not subject to the regulation",
                  "section_start": "2. Other accounts."
                },
                {
                  "section_number": "3.1.3",
                  "section_meaning": "Other investments not considered as 'account'",
                  "section_start": "3. Other investments."
                },
                {
                  "section_number": "3.2",
                  "section_meaning": "Definition and examples of 'Advertisement'",
                  "section_start": "(b) Advertisement"
                },
                {
                  "section_number": "3.2.1",
                  "section_meaning": "Covered messages in advertisements",
                  "section_start": "1. Covered messages."
                },
                {
                  "section_number": "3.2.2",
                  "section_meaning": "Examples of messages that are not advertisements",
                  "section_start": "2. Other messages."
                },
                {
                  "section_number": "3.3",
                  "section_meaning": "Definition and examples of 'Bonus'",
                  "section_start": "(f) Bonus."
                },
                {
                  "section_number": "3.3.1",
                  "section_meaning": "Examples of bonuses",
                  "section_start": "1. Examples."
                },
                {
                  "section_number": "3.3.2",
                  "section_meaning": "De minimis rule for bonuses",
                  "section_start": "2. De minimis rule."
                },
                {
                  "section_number": "3.3.3",
                  "section_meaning": "Aggregation of items for bonus determination",
                  "section_start": "3. Aggregation."
                },
                {
                  "section_number": "3.4",
                  "section_meaning": "Definition and examples of 'Consumer'",
                  "section_start": "(h) Consumer"
                },
                {
                  "section_number": "3.5",
                  "section_meaning": "Definition of 'Depository institution and institution'",
                  "section_start": "(j) Depository institution and institution"
                },
                {
                  "section_number": "3.6",
                  "section_meaning": "Definition of 'Deposit broker'",
                  "section_start": "(k) Deposit broker"
                },
                {
                  "section_number": "3.7",
                  "section_meaning": "Definition and relation of 'Interest' to bonuses",
                  "section_start": "(n) Interest"
                },
                {
                  "section_number": "3.8",
                  "section_meaning": "Definition and relation to Regulation E for 'Passbook savings account'",
                  "section_start": "(p) Passbook savings account"
                },
                {
                  "section_number": "3.9",
                  "section_meaning": "Definition and examples of 'Periodic statement'",
                  "section_start": "(q) Periodic statement"
                },
                {
                  "section_number": "3.10",
                  "section_meaning": "Definition and examples of 'Tiered-rate account'",
                  "section_start": "(t) Tiered-rate account"
                },
                {
                  "section_number": "3.11",
                  "section_meaning": "Definition and specifics of 'Time account'",
                  "section_start": "(u) Time account"
                },
                {
                  "section_number": "3.12",
                  "section_meaning": "Definition of 'Variable-rate account'",
                  "section_start": "(v) Variable-rate account"
                },
                {
                  "section_number": "4",
                  "section_meaning": "General disclosure requirements",
                  "section_start": "Section 1030.3 General disclosure requirements"
                },
                {
                  "section_number": "4.1",
                  "section_meaning": "Form and design requirements for disclosures",
                  "section_start": "(a) Form"
                },
                {
                  "section_number": "4.2",
                  "section_meaning": "General rules for disclosures",
                  "section_start": "(b) General"
                },
                {
                  "section_number": "4.3",
                  "section_meaning": "Relation to Regulation E for disclosures",
                  "section_start": "(c) Relation to Regulation E"
                },
                {
                  "section_number": "4.4",
                  "section_meaning": "Oral response to inquiries",
                  "section_start": "(e) Oral response to inquiries"
                },
                {
                  "section_number": "4.5",
                  "section_meaning": "Rounding and accuracy rules for rates and yields",
                  "section_start": "(f) Rounding and accuracy rules for rates and yields"
                },
                {
                  "section_number": "5",
                  "section_meaning": "Account disclosures",
                  "section_start": "Section 1030.4 Account disclosures"
                },
                {
                  "section_number": "5.1",
                  "section_meaning": "Delivery of account disclosures",
                  "section_start": "(a) Delivery of account disclosures"
                },
                {
                  "section_number": "5.2",
                  "section_meaning": "Content of account disclosures",
                  "section_start": "(b) Content of account disclosures."
                },
                {
                  "section_number": "6",
                  "section_meaning": "Subsequent disclosures",
                  "section_start": "Section 1030.5 Subsequent disclosures"
                },
                {
                  "section_number": "6.1",
                  "section_meaning": "Change in terms and advance notice requirements",
                  "section_start": "(a) Change in terms"
                },
                {
                  "section_number": "6.2",
                  "section_meaning": "Notice before maturity for time accounts",
                  "section_start": "(b) Notice before maturity for time accounts longer than one month that renew automatically."
                },
                {
                  "section_number": "6.3",
                  "section_meaning": "Notice before maturity for time accounts longer than one year that do not renew automatically",
                  "section_start": "(c) Notice before maturity for time accounts longer than one year that do not renew automatically."
                },
                {
                  "section_number": "7",
                  "section_meaning": "Periodic statement disclosures",
                  "section_start": "Section 1030.6 Periodic statement disclosures"
                },
                {
                  "section_number": "7.1",
                  "section_meaning": "General rules for periodic statements",
                  "section_start": "(a) General rule"
                },
                {
                  "section_number": "7.2",
                  "section_meaning": "Special rule for average daily balance method",
                  "section_start": "(b) Special rule for average daily balance method"
                },
                {
                  "section_number": "8",
                  "section_meaning": "Payment of interest",
                  "section_start": "Section 1030.7 Payment of interest"
                },
                {
                  "section_number": "8.1",
                  "section_meaning": "Permissible methods for payment of interest",
                  "section_start": "(a)(1) Permissible methods"
                },
                {
                  "section_number": "8.2",
                  "section_meaning": "Determination of minimum balance to earn interest",
                  "section_start": "(a)(2) Determination of minimum balance to earn interest"
                },
                {
                  "section_number": "8.3",
                  "section_meaning": "Compounding and crediting policies",
                  "section_start": "(b) Compounding and crediting policies"
                },
                {
                  "section_number": "8.4",
                  "section_meaning": "Date interest begins to accrue",
                  "section_start": "(c) Date interest begins to accrue"
                },
                {
                  "section_number": "9",
                  "section_meaning": "Advertising",
                  "section_start": "Section 1030.8 Advertising"
                },
                {
                  "section_number": "9.1",
                  "section_meaning": "Misleading or inaccurate advertisements",
                  "section_start": "(a) Misleading or inaccurate advertisements"
                },
                {
                  "section_number": "9.2",
                  "section_meaning": "Permissible rates in advertising",
                  "section_start": "(b) Permissible rates."
                },
                {
                  "section_number": "9.3",
                  "section_meaning": "Additional disclosures required in advertising",
                  "section_start": "(c) When additional disclosures are required"
                },
                {
                  "section_number": "9.4",
                  "section_meaning": "Advertising bonuses",
                  "section_start": "(d) Bonuses"
                },
                {
                  "section_number": "9.5",
                  "section_meaning": "Exemption for certain advertisements",
                  "section_start": "(e) Exemption for certain advertisements."
                },
                {
                  "section_number": "10",
                  "section_meaning": "Enforcement and Record Retention",
                  "section_start": "Section 1030.9—Enforcement and Record Retention"
                },
                {
                  "section_number": "10.1",
                  "section_meaning": "Record retention requirements",
                  "section_start": "(c) Record retention."
                },
                {
                  "section_number": "11",
                  "section_meaning": "Additional Disclosures Regarding the Payment of Overdrafts",
                  "section_start": "Section 1030.11—Additional Disclosures Regarding the Payment of Overdrafts"
                },
                {
                  "section_number": "11.1",
                  "section_meaning": "Disclosure of total fees on periodic statements",
                  "section_start": "(a) Disclosure of total fees on periodic statements."
                },
                {
                  "section_number": "11.2",
                  "section_meaning": "Advertising disclosures for overdraft services",
                  "section_start": "(b) Advertising disclosures for overdraft services."
                },
                {
                  "section_number": "11.3",
                  "section_meaning": "Disclosure of account balances",
                  "section_start": "(c) Disclosure of account balances."
                }
              ]
            }


            1. dvgureev Автор
              07.01.2024 20:28

              А вектор по какой части делали?


  1. naumov13ru
    07.01.2024 20:28
    +1

    Очень интересно мне как юристу, но непонятно как программисту. Но это мои проблемы: последний раз я писал программу на бейсике ещё на спектруме. А квадратичные отклонения я помню (что есть такое) из курса правовой статистики, лет 27 назад, что сдал и забыл. В любом случае прошу автора не забрасывать тему, Legaltech наше будущее.


    1. dvgureev Автор
      07.01.2024 20:28
      +2

      На Хабре не просто найти баланс.

      Но в части Legaltech, я бы сказал, что будущее все таки за машиночитаемыми договорами. Или базовые договора+ точечные машиночитаемые изменения.

      Но это далёкая история.

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

      И тему я буду копать дальше. Обязательно.


      1. naumov13ru
        07.01.2024 20:28

        Сейчас Минюст РФ (словами Чуйченко) обещает ИИ в своём чат-боте что на портале правовой помощи. Я к тому будут ли они обучать минюстовскую LLM на корпусе судактов с "ГАС Правосудие". У Вас нет никаких сведений об этом?


  1. bosco
    07.01.2024 20:28
    +1

    Какие вообще критерии допустимости? Кажется, что рассматривать что-то с правильным ответом менее 98% - не серьёзно. А до этого, на первый взгляд, ещё фантастически далеко.


    1. dvgureev Автор
      07.01.2024 20:28
      +2

      98% нет и у человека. В ходе обсуждения проекта мы иногда спорили, что является правильным ответом, а один из ответов был неожиданным для одного из коллег. Он не знал.

      Поэтому более правильно сейчас кажется научить определять сложные и простые вопросы и в случае сложных делать пометку "данные не точные, хотите запросить консультацию?". А простые довести до уровня 100%.


  1. avdosev
    07.01.2024 20:28

    Правильно же понимаю, что это сравнение моделей без дообучения для задачи, стоковые модели?

    Если да, то есть в планах дообучить?


    1. dvgureev Автор
      07.01.2024 20:28

      В целом да. Если конечно не считать, что Сайга это тоже дообученная Llama

      Дообучение в работе, но пока без результатов. Есть сложности с промтом обучения и галлюцинациями. Но сделаем.

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


      1. avdosev
        07.01.2024 20:28

        Есть сложности с промтом обучения и галлюцинациями.

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

        Ещё интересно не упрётись ли вы в высокую долю копипасты в попытках уменьшить галлюцинации.

        Пробовали обучать reward на людских оценках ответов от юристов?

        Есть какие то метрики которые используете для оценки модели перед ручными разметками?


  1. stanislav-belichenko
    07.01.2024 20:28

    Наверняка глупый вопрос новичка, но в обоих частях не нашел ответа на него: а как можно даже для внутреннего использования начать использовать модель, которая ошибается даже хотя бы в 5% случаев? Особенно, если речь о юридических тематиках. Другими словами, что происходит такого, чтобы качество работы использующих эти ошибочные ответы не падало?


    1. dvgureev Автор
      07.01.2024 20:28

      Если в лоб, то:

      1) руками разбить на куски, каждый из которых был законченный. Если список чего-то, то тогда весь список - один кусок.

      2) Подключить gpt4 turbo с контекстом 128к

      3) все что не вошло в п. 1 запретить использовать на уровне админ правил и может быть промтпом, если нельзя никак сократить.

      При таком подходе думаю можно добиться 90+ процентов.


    1. dvgureev Автор
      07.01.2024 20:28

      Сложности начинаются, когда Вы захотите перенести все в закрытый контур.