Еще один практический пример использования ИИ: скучные открытые публичные встречи в краткое саммари

от автора

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

PS: Прокомментирую, (после публикации встретила абсолютно обоснованные удивления), что NDA не нарушаем, конечно же, только публичные открытые встречи и стримы. Слово «совещания» окрашивает информацию в закрытый формат)))

 

Часть 1: подготовка к работе

Совещания дело сугубо закрытое, поэтому в качестве примера возьмем доброе видео со всеми любимым Николаем Дроздовым о кошках. Файл как раз типичный для совещаний в зуме: почти 30 минут, весит довольно много даже после сжатия 54 Мб. Да, бывают и многочасовые разговоры, но там по факту ничего не изменится, кроме времени обработки материала.

Писать будем на Python 3.11: стандартно разворачиваем виртуальное окружение, устанавливаем необходимые библиотеки.

Использовать будем библиотеки двух «китов» этой сферы Microsoft (SpeechRecognition) и OpenAI (openai)

from openai import OpenAI from pydub import AudioSegment from moviepy.editor import VideoFileClip import speech_recognition as sr

Подробно про подключение OpenAI написано в руководстве, мне на Windows 11 достаточно было прописать API-ключ в переменных окружения

setx OPENAI_API_KEY "your-api-key-here"

Часть 2: конвертируем видео в текст

Первый вариант перевода речи в текст с помощью модели «whisper-1» от OpenAI, код будет выглядеть так:

def convert_speech_to_text(file_path):      audio_file= open(file_path, "rb")      transcript = client.audio.transcriptions.create(         model="whisper-1",          file=audio_file      )      print(transcript)      with open("text.txt", "w", encoding="utf-8") as file:         file.write(transcript) 

Модель может обработать сразу видео в формате «mp4» размером не более 26 Мб. Если больше — надо дробить файл на кусочки.

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

Конвертируем из видео в аудио формат:

def convert_mp4_to_wav(input_file, output_file):     # Загружаем видеофайл     video_clip = VideoFileClip(input_file)      # Извлекаем аудиодорожку     audio_clip = video_clip.audio      # Сохраняем аудио в формате wav     audio_clip.write_audiofile(output_file, codec='pcm_s16le')  

Разбиваем аудио файл на кусочки (chunks) и подаем их на обработку в модель SpeechRecognition, обязательно не забываем указать, что распознается русский язык.

# Функция для распознавания речи в аудиофайле с использованием библиотеки SpeechRecognition def recognize_audio(audio_file_path, chunk_duration_ms=10000):     # Загрузка аудио файла     audio = AudioSegment.from_wav(audio_file_path)      # Инициализация объекта Recognizer из библиотеки SpeechRecognition     recognizer = sr.Recognizer()      # Пустая строка для хранения распознанного текста     text = ""      # Определение размера куска аудио в миллисекундах     chunk_size = int(chunk_duration_ms)      # Разделение аудио на куски заданного размера     chunks =  for i in range(0, len(audio), chunk_size)]          # Итерация по каждому куску аудио     for i, chunk in enumerate(chunks):         # Создание временного файла для текущего куска         chunk_path = f"chunk_{i}.wav"         chunk.export(chunk_path, format="wav")          # Использование AudioFile из SpeechRecognition для открытия временного файла         with sr.AudioFile(chunk_path) as source:             # Запись аудио из файла             chunk_audio = recognizer.record(source)              try:                 # Попытка распознавания речи с использованием Google Speech Recognition                 chunk_text = recognizer.recognize_google(chunk_audio, language="ru-RU")                                  # Добавление распознанного текста к общему тексту                 text += chunk_text + " "                  # Вывод распознанного текста для текущего куска                 print(chunk_text)                 print("")             except sr.UnknownValueError:                 # Обработка случая, когда Google Speech Recognition не может распознать аудио                 print(f"Google Speech Recognition не смог распознать аудио для куска {i}")      # Возврат общего распознанного текста     return text 

Не забываем сохранять общий результат. Из файла в 51 Мб у меня вышло 157 аудио-кусочков. Это можно настраивать через переменную chunk_duration_msФайл result.txt с исходным текстом сохранила в гитхабе. Всего вышло 2661 слово.

Часть 3: из текста

Приступаем к самому интересному, сделаем саммари (как модно нынче говорить) или, другими словами, выделим основные тезисы текста. Использовать будем модель OpenAI gpt-3.5-turbo

С появлением ИИ возникло новое искусство создания промтов — правильных формулировок на естественном языке, которые могут корректно поставить задачу ИИ, именно ту, которую человек хочет решить. Например, в нашем случае, задача может звучать так:

    prompt = " напиши важные тезисы из текста "

или так

    prompt = " выдели только самые важные тезисы очень кратко " 

В запросе к OpenAI API есть особые параметры, которые влияют на генерацию текста:

  • temperature — контролирует степень разнообразия и случайности ответа. Более высокая температура (например, 0.8) делает ответы более разнообразными, но менее предсказуемыми. Более низкая температура (например, 0.2) делает ответы более фокусированными и предсказуемыми,

  • stop — может использоваться для указания строки, при достижении которой генерация текста прекращается,

  • n — указывает количество альтернативных ответов, которые вы хотите получить от модели.

Используем только параметр «температуры». Пусть в первом случае он будет равен 0.5. Аналогично аудио делим текст на кусочки и подаем их в модель

# Функция для генерации краткого содержания текста с использованием OpenAI GPT-3 def generate_summary(text, max_chunk_size=2048):     # Разбивка входного текста на куски с заданным максимальным размером     input_chunks = split_text(text, max_chunk_size)     print("Text split ")     print(len(input_chunks))          # Список для хранения сгенерированных кусков текста     output_chunks = []          # Задание промпта для модели     prompt = "напиши важные тезисы из текста "          # Итерация по каждому куску входного текста     for i, chunk in enumerate(input_chunks):         # Запрос к модели GPT-3 для генерации тезисов на основе текущего куска текста         response = client.chat.completions.create(             model="gpt-3.5-turbo",             messages=[                 {"role": "user", "content": prompt + chunk}             ],             temperature=0.5         )                  # Извлечение сгенерированного ответа от модели         answer = response.choices[0].message.content                  # Вывод информации о текущем куске         print(f"chunk {i+1} from {len(input_chunks)}")         print(answer)                  # Добавление сгенерированного куска в список         output_chunks.append(answer)          # Объединение сгенерированных кусков в одну строку и возврат результата     return " ".join(output_chunks) 

Итого, текст мы разбили на 4 блока. Не забываем сохранить результаты. У нас получилось весьма краткое изложение текста, в гитхабе файл summary.txt получилось 27 пунктов

  • Зверь, о котором идет речь, является частью нашей окружающей среды.

  • Он обладает уникальными адаптивными способностями.

  • Этот зверь может быть опасным для людей, если его не понимать и не уважать.

  • Он играет важную роль в экосистеме и взаимодействует с другими животными.

  • Для сохранения баланса природы, необходимо учиться сосуществовать с этим зверем. — Кошка является одним из самых загадочных и удивительных животных на планете.

  • Ученые спорят о том, кто приручил кого — мы кошек или они нас.

  • Кошки и собаки имеют общего предка, который жил примерно 55 миллионов лет назад.

  • История взаимоотношений семейства кошачьих и людей напоминает остросюжетный детектив.

  • Некоторые дикие кошки, такие как тигры и львы, представляют опасность для людей.

  • Домашние кошки остаются опасными хищниками и способны пройти большие расстояния в поисках добычи.

  • Кошки имеют развитые охотничьи инструменты, такие как лапы, уши и усы, которые помогают им охотиться эффективно.

  • Кошки могут принести свою добычу своим владельцам в качестве демонстрации своих охотничьих навыков. — Одомашнивание кошек началось около 10 000 лет назад.

  • Кошка является одним из немногих одиночных животных.

  • Кошка была приручена для борьбы с грызунами, которые угрожали запасам зерна.

  • Степная кошка стала хищником, который приближался к жилищу человека.

  • Наш контакт с кошками произошел на территории плодородного полумесяца.

  • Кошки были приручены раньше, чем коровы и козы.

  • Кошки распространились по всей Азии и другим частям мира.

  • Доказательства свидетельствуют о том, что кошки были приручены в Древнем Египте.

  • Египтяне почитали кошек и наделили их божественным статусом. — Процесс мумификации кошек в Древнем Египте был идентичен процессу мумификации людей.

  • Мумифицированные кошки были значимыми и пользовались огромным уважением в египетском обществе.

  • Кошки были священными животными и символизировали материнство и хищничество.

  • В разных культурах кошки были почитаемы как спутницы богинь охоты, покровительницы любви, колдуньи и т.д.

  • Кошки эволюционировали и научились манипулировать людьми, используя свои способы коммуникации.

  • В разных странах и городах существуют традиции почитания кошек и у них есть особый статус.

  • Кошки помогали бороться с грызунами и спасали от угрозы голода.

  • Кошки до сих пор остаются одними из самых популярных домашних животных и оказывают положительное влияние на нашу жизнь.

Или при втором вариант промта с более строгой задачей и другими параметрами температуры (0.1) получилось гораздо меньше — 17 пунктов.

  • Зверь живет рядом с нами.

  • Кошка является одним из самых загадочных и удивительных животных на планете.

  • Ученые спорят о том, кто приручил кого — мы кошку или она нас.

  • Семейство кошачьих и псовых имеет общего предка, который жил около 55 млн лет назад.

  • Кошки и собаки — наши друзья и союзники с древних времен.

  • Кошки имеют развитый охотничий арсенал, включая острые когти, чувствительные уши и волоски на лапах и усах.

  • Домашние кошки все еще сохраняют свои охотничьи инстинкты и могут пройти значительные расстояния за ночь.

  • Кошки могут быть опасными для мелкой фауны и способны истребить птиц, мышей и насекомых.

  • Кошки могут принести свою добычу в дар хозяину, проявляя свой природный инстинкт и уча охотничьим приемам своих котят. — Одомашнивание кошек началось около 10 000 лет назад.

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

  • Кошка начала приближаться к жилищам людей и была принята ими как союзник.

  • Первые контакты между кошками и людьми произошли на территории плодородного полумесяца.

  • Египтяне особенно уважали кошек и даже наделили их божественным статусом. — Мумификация кошек в Древнем Египте была связана с их священным статусом и значимостью для египетского народа.

  • Кошки были изображены в облике божеств в Древнем Египте, что подчеркивало их роль в материнстве и защите семьи.

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

  • В разных культурах кошки были почитаемы и связывались с различными богинями, такими как богиня охоты Артемида или богиня Гера.

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

Вместо заключения

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

Источники

Implementing text summarization using OpenAI’s GPT-3 API.

 How to format inputs to ChatGPT models

https://platform.openai.com/docs/overviewOpenAI API

Мой код на GitHub

Практический пример использования модели детекции изображений


ссылка на оригинал статьи https://habr.com/ru/articles/774944/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *