Поскольку после выпуска ChatGPT начался ажиотаж вокруг технологий искусственного интеллекта, таких как чат-боты, большие языковые модели (LLM) и вторые пилоты, вскоре появилось гораздо больше вариантов использования.
Я не говорю о самых распространенных из них, таких как помощники по написанию, генераторы изображений или чат-боты, обученные на ваших данных. Я говорю о более нишевых вариантах использования, таких как реалистичные говорящие аватары, видеоредакторы или синтез речи.
В этой статье мы собираемся рассмотреть один из таких вариантов использования — приложение-транскрибатор, которое можно использовать с подкастами или видео на YouTube . Это будет очень полезно, если вы когда-нибудь хотели использовать API GPT-3 или увидеть демо-версию OpenAI Whisper в действии.
В первой части этого руководства мы рассмотрим все, что нам нужно для настройки и начала разработки приложения.
А затем во второй части мы загрузим наш рабочий код в облако и заработаем пользовательский интерфейс, чтобы другие могли видеть результаты и взаимодействовать с приложением.
Теперь пристегнитесь, потому что нам придется испачкать руки кодом Python, создающим это.
Чтобы построить это, мы пройдем 3 акта.
В первом мы увидим все, что нам нужно, чтобы подготовиться к предстоящему путешествию.
Во втором мы создадим прототип локально и выясним, какие инструменты могут помочь нам в этом процессе.
И в финале мы загрузим все, что мы построили, в облако, чтобы другие тоже могли это попробовать.
Звучит отлично?
Хорошо, тогда пойдем!
Прежде всего, приблизительный обзор процесса, которому мы будем следовать, — это извлечение информации, которую мы хотим расшифровать, и последующая передача ее в
После этого мы возьмем выходные данные и выполним некоторую постобработку, прежде чем отобразить их во внешнем приложении, чтобы другие могли их увидеть и иметь возможность взаимодействовать с ними.
Если бы мы делали это вручную, этот процесс потребовал бы нескольких дополнительных шагов. К счастью, OpenAI стал доступным
Здесь вам придется решить, какой путь выбрать.
Сначала выберите свой путь, а затем мы продолжим.
Далее нам понадобится ключ API от OpenAI для доступа к модели GPT-3.5 Turbo (которая, по сути, является моделью, лежащей в основе ChatGPT).
Если вы не знаете, как его получить, выполните следующие действия:
Как только вы получите этот ключ, мы перейдем к следующему кусочку головоломки — Шепоту.
Вы можете загрузить и установить последнюю версию Whisper на свой компьютер, выполнив следующую команду:
pip install -U openai-whisper
Альтернативно вы можете установить последний коммит из Git с его зависимостями с помощью этой команды:
pip install git+https://github.com/openai/whisper.git
Это дает вам больше контроля над тем, какую версию вы устанавливаете (и именно эту команду вы захотите запустить, если попытаетесь выполнить ее из блокнота Colab).
Примечание. Вам потребуется установить «ffmpeg», если вы хотите запускать Whisper из командной строки.
После установки Whisper все, что нам нужно, — это файлы, которые мы хотим расшифровать. Мы можем передать ему несколько типов медиафайлов, таких как «mp3», «mp4», «mpeg», «wav» и многие другие.
Единственное ограничение здесь — размер файлов, на 10-минутное видео уйдет гораздо больше времени, чем на 20-минутный подкаст.
Вот и следующая развилка дороги.
Вам придется выбрать, хотите ли вы расшифровать видео или аудио .
Для простоты в этом примере мы будем использовать аудиофайлы из подкастов.
И здесь у вас может возникнуть вопрос: « Откуда мне скачать выпуски подкастов?» ».
Есть 2 способа, которые я знаю.
Первый — использовать такой сайт, как ListenNotes, выбрать любой понравившийся подкаст и перейти к отдельным эпизодам.
Стоит отметить, что вам придется создать учетную запись, чтобы иметь доступ к отдельным эпизодам и соответствующим аудиофайлам.
Оттуда вам нужно будет нажать кнопку с тремя точками, чтобы открыть вкладку «Еще», а затем вы увидите возможность загрузить аудио.
Вот как это будет выглядеть:
Второй вариант — вместо этого использовать Podchaser. Вы будете следовать аналогичному процессу поиска подкаста, просмотра списка эпизодов и выбора конкретного.
Как только вы перейдете на страницу отдельного эпизода, справа вы увидите столбец, под которым находится кнопка воспроизведения и другие параметры.
Если вы прокрутите вниз, вы увидите информацию о подкасте, возможности поделиться им в социальных сетях и небольшой раздел с возможностью загрузки аудиофайла.
Вот как это будет выглядеть:
Выберите тот вариант, который вам больше нравится, и загрузите пару эпизодов разной продолжительности, чтобы вы могли проверить, как работает процесс транскрипции.
Я рекомендую выбирать серии продолжительностью менее 30 минут.
Причина этого в том, что если вы выберете более длинный вариант, Whisper может занять много времени для его обработки, и вы можете столкнуться с проблемами тайм-аута (особенно, если вы используете среду Colab).
Расшифровка эпизода продолжительностью 20–30 минут может занять от 4 до 8 минут.
Основным узким местом здесь является продолжительность процесса транскрипции, прежде чем мы получим результат, который можно будет использовать в дальнейшей работе.
Теперь, когда мы выполнили все требования и настройка завершена.
Нам пора переходить к следующей части путешествия.
Мы вступаем на более глубокую территорию программирования.
Мы будем использовать Whisper через Python , так как это удобнее. И для транскрипции нам не нужно делать ничего особенного, просто передаем аудиофайл в модель и ждем транскрипции, все.
Итак, давайте пройдемся по этому процессу построчно.
import whisper model = whisper.load_model("base")
Здесь мы загружаем «базовую» версию модели Whisper. Существует несколько версий (или «размеров»), выпущенных OpenAI, и они различаются количеством параметров, потребляемыми ресурсами и временем, необходимым для выполнения транскрипции.
Вот удобная диаграмма для справки.
Если хотите, вы можете попробовать их все на размер (каламбур).
Имейте в виду, что если вы используете более крупную модель, вам понадобится больше ресурсов для ее работы (например, графический процессор).
Итак, если вы запускаете это в Colab, вы можете использовать вместо этого эту команду.
model = whisper.load_model('medium', device='cuda')
Вы передаете параметр устройства, на котором хотите, чтобы это запускалось.
После того, как вы выбрали размер модели, вы можете передать аудиофайл, который хотите расшифровать, например:
result = model.transcribe(“path-to-where-the-file-is”)
Затем вы можете распечатать содержимое, чтобы убедиться, что транскрипция работает. (Но вы можете просмотреть только первые 1000 символов или около того, а не распечатывать все целиком.)
podcast_transcript = result['text'] podcast_transcript[:1000]
Если все получилось хорошо, теперь результаты процесса транскрипции сохранены в переменной. Тот, который мы будем использовать для постобработки.
Это достаточно легко. Но давайте предположим, что мы хотим иметь возможность узнать, что обсуждалось в подкасте, помимо того, что мы можем найти в описании эпизода.
Мы можем создать функцию, которая принимает всю стенограмму и выдает нам «резюме». Краткое изложение, которым мы также можем поделиться с занятыми людьми, у которых нет времени, чтобы просмотреть все и посмотреть, стоит ли оно их времени или нет.
Давайте продолжим и сделаем это.
Есть предположения, что мы будем использовать для составления этого резюме?
Подсказка: у нас уже есть ключ API для этого.
Да, вы поняли.
Мы будем использовать модель get-3.5-turbo для создания этого резюме, предоставив ему стенограмму подкаста.
Мы могли бы выполнять вызовы напрямую к API, но гораздо удобнее использовать для этого пакет OpenAI (который удачно назван «openai» 😆).
Нам также понадобится библиотека токенизатора от OpenAI, чтобы знать количество токенов, которые мы будем отправлять в модель.
И мы можем установить оба из них, запустив…
pip install openai pip install tiktoken
Теперь нам нужно где-то сохранить ключ API, прежде чем мы вызовем GPT-3.
Вы можете сохранить его как переменную среды, а затем подготовить к использованию в таком коде.
openai.api_key = os.environ["OPENAI"]
Или, если вы используете среду Colab, вы можете сделать что-то вроде этого.
import openai from getpass import getpass openai.api_key = getpass("Enter your key here: ")
А затем, когда вы запустите эту команду, она отобразит ячейку ввода, куда вы можете вставить ключ.
Теперь вы можете подтвердить, что ключ работает, перечислив модели, доступные в настоящее время с помощью этого фрагмента кода.
models = openai.Model.list() for model in models['data]: print(model['root'])
Если наш ключ работает правильно, мы можем продолжить и вызвать API GPT-3.
Но есть кое-что важное, что мы должны принять во внимание в первую очередь. И это связано с тем, что я упоминал ранее о «токенах».
Поскольку идея состоит в том, чтобы передать расшифровку подкаста модели ИИ и получить обратно ее сводку, нам нужно знать, сколько «токенов» она способна принять.
ИИ не считает слова или символы, а использует жетоны. Вот почему существует концепция «контекстного окна».
Если мы превысим длину контекстного окна, наша расшифровка может быть усечена, и мы получим сводку на основе неполных данных. (Еще одна причина выбрать не слишком длинный выпуск подкаста.)
К счастью, существует 2 версии модели GPT-3. Традиционный и другой с расширенным контекстным окном.
Если вы посмотрите документацию OpenAI, вы увидите разницу между ними.
Для этого и нужна библиотека tiktoken. Это поможет нам узнать, сколько токенов содержится в расшифровке, и какую модель использовать для сводки.
Мы можем выполнить этот расчет с помощью следующего кода.
import tiktoken enc = tiktoken.encoding_for_model(“gpt-3.5-turbo”) print(“Number of tokens in the input ”, len(enc.encode(podcast_transcript)))
Если количество токенов в результате превышает 4097, то нам придется использовать версию модели «16 тыс.».
Зная это, мы наконец можем выполнить вызов API, используя модель, подходящую для данной ситуации.
Сначала давайте сохраним приглашение, которое мы отправим модели, в переменной. Вы можете поэкспериментировать со своей собственной подсказкой, вот пример:
prompt = """ You are an expert marketer responsible for the growth of several popular podcasts. You are now tasked with summarizing an episode in a way that is concise and covers the main points of the episode for others to understand. The transcript of the episode is provided below. """ request = prompt + podcast_transcript
Теперь давайте выполним вызов API, используя следующий код.
chatOutput = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k", messages=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": request} ] )
А потом давайте проверим ответ от API.
chatOutput.choices[0].messages.content
Вот оно! Краткое изложение эпизода подкаста на основе стенограммы, созданной нами с помощью Whisper.
Вы можете использовать тот же процесс, чтобы выделить основные моменты эпизода. Это своего рода способ дать потенциальному слушателю возможность заглянуть в разговор.
Способ сделать это очень похож. Единственная часть, которая изменится, — это приглашение, которое получит модель. Вместо того, чтобы запрашивать резюме, вы можете попросить его извлечь наиболее важные моменты в формате списка. Результаты зависят от вашего творчества с подсказками.
Теперь, когда мы знаем, что это работает, мы можем поместить весь код в функцию для локального запуска.
Итак, давайте продолжим и создадим эту функцию.
def transcribe_podcast(file_path): print("Starting podcast transcription") # Load the Whisper model import os import Whisper print("Loading the Whisper model") model = whisper.load_model("medium") print(model.device) # Do the transcription print("Starting the transcription") result = model.transcribe(file_path) # Return the transcribed text print("Transcription completed, returning results...") return result
Вы можете вызвать эту функцию, отправив ей путь к аудиофайлу и получить взамен транскрипцию.
Вот пример того, как вы это сделаете.
output = transcribe_podcast('path_to_audio_file')
А затем загляните в содержание стенограммы.
output[text][:1000]
Хорошо, пока все хорошо.
Теперь, когда это работает локально, было бы здорово загрузить его в облако, чтобы вы могли показать его другим и произвести впечатление на друзей и семью своими навыками кодирования l33t h4xx0r. 😆
Но нет, на самом деле, это хороший выбор — развернуть его в онлайн-сервисе, чтобы другие могли его опробовать.
И мы собираемся сделать это во второй части. Создание облачной функции, которая может принимать запросы, и создание быстрого внешнего интерфейса для визуализации результатов этой функции (например, сводки и основных моментов эпизодов подкаста).
Мы пока оставим это.
На данный момент у вас есть приложение, работающее локально, и вы можете протестировать его с эпизодами разной длины и увидеть среднюю продолжительность времени, которое Whisper требуется для транскрипции.
Спасибо, что дочитали до этого места.
И я надеюсь увидеть вас снова во второй части.
Не забудьте подписаться на меня на Hackernoon , чтобы не пропустить ближайшие статьи.