{"id":14283,"url":"\/distributions\/14283\/click?bit=1&hash=8766cc03cba44a6d934ee26f882971a64223452448548d2fc3a5f37339e77cfa","title":"\u0412\u0438\u0434\u0435\u043b\u0438 \u0432 \u0421\u043e\u0447\u0438 \u0443\u0436\u0435 \u0432\u0441\u0451? \u0412\u043e\u0442 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u043e\u0442\u0434\u044b\u0445\u0430 \u043d\u0430 \u043a\u0443\u0440\u043e\u0440\u0442\u0435 ","buttonText":"","imageUuid":""}

Суммаризация текста с помощью LLaMA-2 13B для новичков

LLM модель типа LLaMA-2, вышедшая в июле 2023 года, умеет многое с помощью правильно составленного текстового запроса (промта) без дополнительного программирования. Одна из очень полезных возможностей это суммаризация текста, c помощью которой можно сделать краткую выдержку по большому тексту даже на русском языке.

"Brain linked with chipset", стиль: artstation, Kandinsky 2.2

Коротко о LLaMA-2

Существуют 3 версии LLaMA-2 по числу параметров 7B, 13B, 70B. Чем больше миллиардов параметров, тем более качественным будет результат, но требуется больше вычислительных ресурсов. Оптимальный, на мой взгляд, это 13B на нем и остановимся далее.

Все версии LLaMA-2 имеют контекст 4 000 токенов, что позволяет подгрузить в запрос около 10 страниц текста. На данный момент на HuggingFace, официальная модель LLaMA-2 доступна по предварительному одобрению, после отправки персональных данных. Однако, есть уже модифицированные модели от других пользователей, которые свободно можно использовать из коробки. Однако не все они полезны.

Какие LLM модели самые качественные?

Есть специальный лидерборд, где по разным тестам можно увидеть рейтинг моделей. Что касается LLaMA по параметрам можно увидеть из этого сравнения, что 13B не сильно хуже по многим тестам, чем 70B.

Llama-2 расширенная на 8K

В данной статье, мы остановимся на "OpenAssistant/llama2-13b-orca-8k-3319", т.к. я неоднократно ее опробовал и она хорошо работает. Помимо этого у нее увеличен контекст до 8 000 токенов, что крайне необходимо в работе с документами.

Мультиязычность модели

Изначально модель обучена работать на разных языках. Основной это английский. Русский также доступен, но его качество не во всех случаях хорошее. В частности, я замечал что 7B заметно хуже 13B.

Системные требования

LLaMA-2 можно запускать на процессоре и на GPU. Чтобы использовать эту модель на процессоре используют квантизацию для снижения требований к ресурсам, иначе непомерно долго работает и требует много памяти. Поскольку квантизация не входит в цель данной статьи - гуглите "Running Llama 2 on CPU Inference".

У меня в распоряжении есть 2 GPU 3909 с суммарным объемом памяти 48 Gb. Этого достаточно для запуска LLaMA-2 13B и более менее быстрого отклика.

Если у вас есть хотя бы только одна видеокарта с 24 Gb, то придется использовать LLaMA-2 7B или квантизацию, либо арендовать GPU в облаке.

Стандартный код для работы с LLaMA-2

Предполагается, что вы уже работает с transformers, поэтому шаг установки это библиотеке опускаю. Ниже приведен стандартный код HugginfFace для запуска LLM модели.

Шаг 1 - Инициализация

from transformers import pipelineimport torch checkpoint = "OpenAssistant/llama2-13b-orca-8k-3319" p = pipeline("text-generation", checkpoint, torch_dtype=torch.float16, device_map="auto", max_new_tokens=512, temperature=0 )

device_map="auto" - автоматически распределит нагрузку на имеющиеся ресурсы. Если несколько видеокарт, значит он все их задействует, что очень удобно. Если указать device_map="cpu", то будет использован только процессор.

max_new_tokens=512 - сколько токенов (можно сказать что слов) будет сгенерировано моделью. Чем больше токенов, тем дольше генерация будет.

update от 25 октября, ранее я утверждал:

torch_dtype=torch.bfloat16 - очень важно указать значение bfloat16 (вместо float16), так модель поместится в две видеокарты с памятью по 24Гб, иначе не влазит.

В последующих тестах это утверждение не подтвердилось по каким-то причинам, bfloat больше не стал влиять на размер используемой видеопамяти.

temperature=0 - поскольку мы будем работать с контекстом (документами пользователя) этот параметр необходимо указывать в 0, чтобы свести к минимуму выдумки и несуществующие в исходном тексте формулировки.

Шаг 2 - запрос (промт)

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

qa_template = """Question: Who is Joe Biden?"""

Шаг 3 - запуск

print(p(qa_template))

Ответ модели был такой:

Joe Biden is a former Vice President of the United States who served under President Barack Obama from 2009 to 2017. He is a member of the Democratic Party and has been a U.S. Senator from Delaware since 1973. Biden is also a presidential candidate in the 2020 election...

Какой промт нужен для суммаризации текста

Чтобы модель отвечала в контексте наших документов, необходимо в промте прямо это попросить: Use the following pieces of context to summary.

qa_template = """Use the following pieces of context to summary. Context: МОСКВА, 16 авг - РИА Новости. Снизить в два раза количество ошибок при диагностировании сердечно-сосудистых заболеваний позволит математическая модель ученых СГМУ. Результаты опубликованы в журнале The European Physical Journal Special Topics. Сердце здорового человека бьется нерегулярно, то есть время сердечных сокращений может быть разным, объяснили ученые. При этом у людей с заболеваниями сердца и сосудов, например гипертонией, сердце бьется гораздо ровнее, чем у здоровых. По словам специалистов, степень нерегулярности сердечного ритма можно использовать для медицинской диагностики. Чаще всего для этого применяют спектральный анализ электрической активности сердца, полученный методом электрокардиографии (ЭКГ). Однако построение точных спектров биологических систем – крайне сложная задача, поэтому все диагностические методы предполагают погрешность, конкретная величина которой известна только очень приблизительно, отметили ученые. Исследователи Саратовского государственного медицинского университета им. В.И. Разумовского (СГМУ) создали математическую модель для точного вычисления погрешности при оценке спектров биологического сигнала. По их словам, применение полученных данных позволит в два раза снизить количество неверных сердечно-сосудистых диагнозов. «"Принятые методы диагностики, например, гипертонии, как оказалось, дают верный диагноз только в 70% случаев. Основная причина высокой погрешности в том, что и мировые, и российские стандарты рекомендуют для анализа короткие электрокардиограммы в 3–5 минут. Наши расчеты показали, что данные ЭКГ за 15–20 минут помогут поднять это значение до 85%", – сообщил старший научный сотрудник НИИ кардиологии СГМУ Юрий Ишбулатов. Question: Краткое изложение на русском языке."""

Ответ модели: Ученые из Саратовского государственного медицинского университета им. В.И. Разумовского разработали математическую модель, которая позволит снизить в два раза количество ошибок при диагностировании сердечно-сосудистых заболеваний. По словам исследователей, применение полученных данных позволит в два раза снизить количество неверных диагностик.

Промт для получения темы на основе контекста

Если к выше указанному тексту поменять в конце вопрос

Question: Сформулируй тему контекста на русском языке

Получим ответ: Математическая модель, разработанная учеными СГМУ, позволит снизить в два раза количество ошибок при диагностировании сердечно-сосудистых заболеваний.

Если изменить в начале указание вместо "to summary" поставить "to topic" и в конце вопрос

qa_template = """Use the following pieces of context to topic. Context: ... Question: Сформулируй тему контекста на русском языке """

То получится немного другой ответ: Снижение в два раза количества ошибок при диагностировании сердечно-сосудистых заболеваний с помощью математической модели ученых СГМУ.

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

Как размер контекста влияет на системные требования

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

На двух 3090 24Гб модель 13B занимает по 14-21 Гб и выше памяти в каждой видеокарте. Остается совсем немного для работы с разной длиной контекста.

Что делать если текст большой?

Вероятно самое просто это разбить документ по предложениям в размере менее 4К токенов и скармливать в промт. Получив все суммаризации по блокам, можно запустить еще одно разбиение на блоки, если финал превышает размер контекста. А если не превышает, то можно запустить финальную суммаризацию. Но я так еще не пробовал )

Также не забываем, что если требуется максимальное качество, можно пробовать версии 70B, а также само собой ChatGPT 4, у которого есть 32K контекст, и Claude 2 у которого есть контекст длинной 100К.

Как уместить модель в одной видеокарте 24 ГБ

Для этого потребуется загрузка в 8-бит. А также torch_dtype=torch.float16

from transformers import pipelineimport torch checkpoint = "OpenAssistant/llama2-13b-orca-8k-3319" model_kwargs = {"device_map": "auto", "load_in_8bit": True} p = pipeline("text-generation", checkpoint, torch_dtype=torch.float16, max_new_tokens=1000,temperature=0 , model_kwargs=model_kwargs )

Заключение

В данной статье показан самый простой способ использования LLaMA-2 на примере суммаризации текста. Если есть вопросы - пишите, чем смогу помогу. Замечу, что я лишь энтузиаст-исследователь, а не профессиональный ИИ-программист. Также вы можете подписаться на мой ТГ-канал, где я делюсь своими находками.

0
Комментарии
-3 комментариев
Раскрывать всегда