Skip to content

Речь в текст

Изучите, как преобразовать аудио в текст.

Введение

Аудио API предлагает два способа преобразования речи в текст и переводы, используя наш передовой открытый модельный аппарат large-v2 Whisper. Эти возможности позволяют:

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

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

Быстрый старт

Транскрипции

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

Транскрипция аудио с помощью Python

python
from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/audio.mp3", "rb")
transcription = client.audio.transcriptions.create(
  model="whisper-1", 
  file=audio_file
)
print(transcription.text)
js
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("/path/to/file/audio.mp3"),
    model: "whisper-1",
  });

  console.log(transcription.text);
}
main();
bash
curl --request POST \
  --url https://api.openai.com/v1/audio/transcriptions \
  --header "Authorization: Bearer $OPENAI_API_KEY" \
  --header 'Content-Type: multipart/form-data' \
  --form file=@/path/to/file/audio.mp3 \
  --form model=whisper-1

По умолчанию ответ будет в формате JSON, включающем сырой текст.

Пример ответа:

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

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

Дополнительные опции

python
from openai import OpenAI
client = OpenAI()

audio_file = open("/path/to/file/speech.mp3", "rb")
transcription = client.audio.transcriptions.create(
  model="whisper-1", 
  file=audio_file, 
  response_format="text"
)
print(transcription.text)
js
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("/path/to/file/speech.mp3"),
    model: "whisper-1",
    response_format: "text",
  });

  console.log(transcription.text);
}
main();
bash
curl --request POST \
  --url https://api.openai.com/v1/audio/transcriptions \
  --header "Authorization: Bearer $OPENAI_API_KEY" \
  --header 'Content-Type: multipart/form-data' \
  --form file=@/path/to/file/speech.mp3 \
  --form model=whisper-1 \
  --form response_format=text

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

Переводы

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

python
from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/german.mp3", "rb")
translation = client.audio.translations.create(
  model="whisper-1", 
  file=audio_file
)
print(translation.text)
js
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
    const translation = await openai.audio.translations.create({
        file: fs.createReadStream("/path/to/file/german.mp3"),
        model: "whisper-1",
    });

    console.log(translation.text);
}
main();
bash
curl --request POST \
  --url https://api.openai.com/v1/audio/translations \
  --header "Authorization: Bearer $OPENAI_API_KEY" \
  --header 'Content-Type: multipart/form-data' \
  --form file=@/path/to/file/german.mp3 \
  --form model=whisper-1

Пример вывода для файла на немецком языке:

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

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

Поддерживаемые языки

Мы в настоящее время поддерживаем следующие языки как через транскрипции, так и через переводы:

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

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

Таймкоды

По умолчанию API Whisper выводит текстовый расшифрованный текст предоставленного аудио. Параметр timestamp_granularities[] позволяет использовать более структурированный и помеченный временем формат вывода в формате JSON, с таймкодами на уровне сегмента, слова или обоих. Это обеспечивает точность на уровне слова для транскрипций и редактирования видео, что позволяет удалять конкретные кадры, связанные с индивидуальными словами.

Опции таймкодов

python
from openai import OpenAI
client = OpenAI()

audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
  file=audio_file,
  model="whisper-1",
  response_format="verbose_json",
  timestamp_granularities=["word"]
)

print(transcript.words)
js
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("audio.mp3"),
    model: "whisper-1",
    response_format: "verbose_json",
    timestamp_granularities: ["word"]
  });

  console.log(transcription.text);
}
main();
bash
curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F file="@/path/to/file/audio.mp3" \
  -F "timestamp_granularities[]=word" \
  -F model="whisper-1" \
  -F response_format="verbose_json"

Длинные входные записи

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

Чтобы решить эту задачу, можно использовать PyDub — open source библиотеку Python для работы с аудио:

python
from pydub import AudioSegment

song = AudioSegment.from_mp3("good_morning.mp3")

# PyDub использует время в миллисекундах
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.mp3", format="mp3")

OpenAI не предоставляет гарантий относительно использования или безопасности стороннего ПО, такого как PyDub.

Подсказки

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

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

Улучшение надежности

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

Использование параметра подсказки

Первый метод включает использование опционального параметра prompt для передачи словаря с правильными написаниями.

Так как Whisper не была обучена использованию техник следования инструкциям, она работает больше как базовая модель GPT. Полезно помнить, что теперь Whisper обрабатывает только первые 244 токена подсказки.

Пример использования параметра подсказки

Python

python
from openai import OpenAI
client = OpenAI()

audio_file = open("/path/to/file/speech.mp3", "rb")
transcription = client.audio.transcriptions.create(
  model="whisper-1", 
  file=audio_file, 
  response_format="text",
  prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T."
)
print(transcription.text)

Хотя это повысит надежность, эта техника ограничена лишь 244 символами, так что ваш список СКЮ (stock keeping unit) должен быть относительно мал, чтобы это стало масштабируемым решением.

Постобработка с использованием GPT-4

Второй метод включает этап постобработки с использованием GPT-4 или GPT-3.5-Turbo.

Мы начинаем с предоставления инструкций для GPT-4 через переменную system_prompt. Аналогично тому, что мы делали с параметром prompt, мы можем определить наши названия компании и продуктов.

Постобработка

Python

python
system_prompt = "Вы являетесь помощником компании ZyntriQix. Ваша задача — исправить любые ошибки в написании текста, преобразованного из аудио. Убедитесь, что названия следующих продуктов написаны правильно: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Добавляйте только необходимую пунктуацию в виде точек, запятых и заглавных букв, используя только предоставленный контекст."

def generate_corrected_transcript(temperature, system_prompt, audio_file):
    response = client.chat.completions.create(
        model="gpt-4",
        temperature=temperature,
        messages=[
            {
                "role": "system",
                "content": system_prompt
            },
            {
                "role": "user",
                "content": transcribe(audio_file, "")
            }
        ]
    )
    return completion.choices[0].message.content

corrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)

Если вы попробуете это на своем аудиофайле, вы увидите, что GPT-4 удается исправить множество ошибок в транскрипции. Ввиду его большего окна контекста, этот метод может быть более масштабируемым, чем использование параметра Whisper prompt, и более надежным, так как GPT-4 может быть проинструктирован и направлен таким образом, который недоступен для Whisper, учитывая отсутствие применения следования инструкциям.

Создано при поддержке AITUNNEL