Узнайте, как преобразовать аудио в текст

Audio API предоставляет два конечных точка для преобразования речи в текст: transcriptions и translations, основанные на нашей передовой открытой модели large-v2 Whisper. Они могут быть использованы для:

  • Транскрибации аудио на языке оригинала.
  • Перевода и транскрибации аудио на английский.

Загрузки файлов в настоящее время ограничены 25 МБ, и поддерживаются следующие типы входных файлов: mp3, mp4, mpeg, mpga, m4a, wav, и webm.

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

1from openai import OpenAI
2client = OpenAI()
3
4audio_file= open("/path/to/file/audio.mp3", "rb")
5transcript = client.audio.transcriptions.create(
6  model="whisper-1", 
7  file=audio_file
8)

По умолчанию тип ответа будет json с включенным исходным текстом.

{ "text": "Представьте самую дикую идею, которая у вас когда-либо была, и вас интересует, как она может масштабироваться до чего-то, что в 100, 1000 раз больше. .... }

Audio API также позволяет устанавливать дополнительные параметры в запросе. Например, если вы хотите установить response_format как text, ваш запрос будет выглядеть следующим образом:

1from openai import OpenAI
2client = OpenAI()
3
4audio_file = open("speech.mp3", "rb")
5transcript = client.audio.transcriptions.create(
6  model="whisper-1", 
7  file=audio_file, 
8  response_format="text"
9)

Справочник API содержит полный список доступных параметров.

API переводов принимает на вход аудиофайл на любом из поддерживаемых языков и транскрибирует, если необходимо, аудио на английский. Это отличается от нашего конечного точка /Transcriptions, так как вывод не на оригинальном языке ввода, а переведен на английский текст.

1from openai import OpenAI
2client = OpenAI()
3
4audio_file= open("/path/to/file/german.mp3", "rb")
5transcript = client.audio.translations.create(
6  model="whisper-1", 
7  file=audio_file
8)

В этом случае, введенное аудио было на немецком, а выведенный текст выглядит так:

Привет, меня зовут Вольфганг и я из Германии. Куда вы сегодня направляетесь?

На данный момент мы поддерживаем только перевод на английский.

На данный момент мы поддерживаем следующие языки через оба конечных точка transcriptions и translations:

Африкаанс, Арабский, Армянский, Азербайджанский, Белорусский, Боснийский, Болгарский, Каталонский, Китайский, Хорватский, Чешский, Датский, Голландский, Английский, Эстонский, Финский, Французский, Галисийский, Немецкий, Греческий, Иврит, Хинди, Венгерский, Исландский, Индонезийский, Итальянский, Японский, Каннада, Казахский, Корейский, Латышский, Литовский, Македонский, Малайский, Маратхи, Маори, Непальский, Норвежский, Персидский, Польский, Португальский, Румынский, Русский, Сербский, Словацкий, Словенский, Испанский, Суахили, Шведский, Тагалог, Тамильский, Тайский, Турецкий, Украинский, Урду, Вьетнамский, и Валлийский.

Хотя базовая модель была обучена на 98 языках, мы перечисляем только те языки, которые превысили 50% показателя ошибок в словах (WER), который является стандартным показателем точности модели распознавания речи в текст. Модель вернет результаты для языков, не указанных выше, но качество будет низким.

По умолчанию Whisper API поддерживает только файлы размером менее 25 МБ. Если у вас есть аудиофайл большего размера, вам потребуется разделить его на части по 25 МБ или меньше или использовать сжатый аудиоформат. Для достижения наилучшей производительности мы советуем вам избегать разделения аудио посередине предложения, так как это может привести к потере некоторого контекста.

Один из способов справиться с этим - использовать открытый пакет Python PyDub для разделения аудио:

1from pydub import AudioSegment
2
3song = AudioSegment.from_mp3("good_morning.mp3")
4
5# PyDub обрабатывает время в миллисекундах
6ten_minutes = 10 * 60 * 1000
7
8first_10_minutes = song[:ten_minutes]
9
10first_10_minutes.export("good_morning_10.mp3", format="mp3")

OpenAI не гарантирует пригодность или безопасность программного обеспечения сторонних разработчиков, такого как PyDub.

Вы можете использовать prompt для улучшения качества генерируемых транскрипций с помощью Whisper API. Модель будет стараться соответствовать стилю prompt, поэтому скорее всего будет использовать заглавные буквы и пунктуацию, если prompt это делает. Однако, текущая система prompt гораздо более ограничена, чем наши другие языковые модели, и предоставляет ограниченный контроль над генерируемым аудио. Вот несколько примеров того, как prompt могут помочь в различных сценариях:

  1. Prompts могут быть очень полезны для коррекции конкретных слов или аббревиатур, которые модель может неправильно распознать в аудио. Например, следующий prompt улучшает транскрипцию слов DALL·E и GPT-3, которые ранее записывались как "GDP 3" и "DALI": "Транскрипт о OpenAI, которая создает технологии вроде DALL·E, GPT-3 и ChatGPT с надеждой однажды построить систему AGI, приносящую пользу всему человечеству"
  2. Чтобы сохранить контекст файла, который был разделен на сегменты, вы можете подсказать модели с транскриптом предыдущего сегмента. Это сделает транскрипт более точным, так как модель будет использовать соответствующую информацию из предыдущего аудио. Модель будет учитывать только последние 224 токена prompt и игнорировать все, что ранее. Для многоязычных вводов Whisper использует специальный токенизатор. Для вводов только на английском языке используется стандартный токенизатор GPT-2, которые оба доступны через открытый исходный код пакет Python Whisper.
  3. Иногда модель может пропускать пунктуацию в транскрипте. Этого можно избежать, используя простой prompt, который включает пунктуацию: "Привет, добро пожаловать на мою лекцию."
  4. Модель также может пропустить обычные заполнители в аудио. Если вы хотите сохранить эти заполнители в вашем транскрипте, вы можете использовать prompt, который их содержит: "Эмм, дайте мне подумать, хмм... Хорошо, вот что я, типа, думаю."
  5. Некоторые языки могут быть написаны по-разному, например, упрощенный или традиционный китайский. Модель может не всегда использовать стиль письма, который вы хотите для вашего транскрипта по умолчанию. Вы можете улучшить это, используя prompt на желаемом вами стиле письма.

Как мы исследовали в разделе о prompt-engineering, одной из наиболее частых проблем при использовании Whisper является то, что модель часто не распознает необычные слова или аббревиатуры. Чтобы решить эту проблему, мы выделили различные техники, которые улучшают надежность Whisper в этих случаях: