OpenAI GPT: как создать сводку для YouTube

OpenAI GPT: как создать сводку для YouTube

8 апреля 2023 г.

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

Требования

Прежде чем погрузиться в код, убедитесь, что у вас есть следующее:

  1. На вашем компьютере установлен Python 3
  2. Ключ API OpenAI (бесплатную пробную версию можно получить на странице https://platform.openai.com/)
  3. Установленные пакеты Python:

  4. youtube-transcript-api

  5. опенай

Давайте напишем код

1. Извлечение ID из ссылки

Во-первых, давайте извлечем идентификатор видео из предоставленной ссылки на YouTube:

import re


def extract_youtube_video_id(url: str) -> str | None:
    """
    Extract the video ID from the URL
    https://www.youtube.com/watch?v=XXX -> XXX
    https://youtu.be/XXX -> XXX
    """
    found = re.search(r"(?:youtu.be/|watch?v=)([w-]+)", url)
    if found:
        return found.group(1)
    return None

2. Получение стенограммы видео

Далее мы напишем функцию для получения стенограммы видео с помощью библиотеки youtube-transcript-api. :

from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled


def get_video_transcript(video_id: str) -> str | None:
    """
    Fetch the transcript of the provided YouTube video
    """
    try:
        transcript = YouTubeTranscriptApi.get_transcript(video_id)
    except TranscriptsDisabled:
        # The video doesn't have a transcript
        return None

    text = " ".join([line["text"] for line in transcript])
    return text

3. Получение сводки с помощью GPT-3

Теперь, когда у нас есть стенограмма видео, мы можем использовать OpenAI GPT-3 для создания сводки:

def generate_summary(text: str) -> str:
    """
    Generate a summary of the provided text using OpenAI API
    """
    # Initialize the OpenAI API client
    openai.api_key = os.environ["OPENAI_API_KEY"]

    # Use GPT to generate a summary
    instructions = "Please summarize the provided text"
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": instructions},
            {"role": "user", "content": text}
        ],
        temperature=0.2,
        n=1,
        max_tokens=200,
        presence_penalty=0,
        frequency_penalty=0.1,
    )

    # Return the generated summary
    return response.choices[0].message.content.strip()

Позвольте мне пройтись по каждому параметру:

  • модель. Модель ИИ, которая будет использоваться, — gpt-3.5-turbo вместо text-davinci-003, поскольку она работает аналогично, но в 10 раз дешевле. Когда GPT-4 станет общедоступной, вы сможете легко заменить модель на лучшую.
  • сообщения: это массив, в котором каждый элемент (сообщение) имеет роль (либо система, пользователь или помощник) и содержимое (само текстовое сообщение). Первое сообщение с ролью system должно содержать инструкции для ИИ.
  • температура: число от 0 до 2. Используется для выборки. Чем выше значение (0,8 и выше) вы используете, тем более случайным становится результат. В противном случае более низкое значение (около 0,2) делает его более сфокусированным и предсказуемым.
  • n: количество вариантов чата, создаваемых для каждого ввода. В данном случае нам нужен только один.
  • max_tokens: максимальное количество токенов для создания в завершение чата. Общая длина входных и сгенерированных токенов ограничена длиной контекста модели. Давайте использовать 200 токенов для более краткого обзора.
  • presence_penalty: число от -2,0 до 2,0. Положительные значения снижают эффективность новых токенов в зависимости от того, появляются ли они в тексте до сих пор, что увеличивает вероятность того, что модель будет говорить о новых темах.
  • частота_пенальти: число от -2,0 до 2,0. Положительные значения штрафуют новые токены на основе их текущей частоты в тексте на данный момент, уменьшая вероятность того, что модель дословно повторит одну и ту же строку.

Чтобы немного уменьшить количество повторяющихся сэмплов, используйте штрафные коэффициенты от 0,1 до 1. Если вы хотите сильно уменьшить повторение, вы можете увеличить коэффициенты до 2, но имейте в виду, что это может ухудшить сэмплы. Отрицательные значения могут использоваться для увеличения вероятности повторения. Более подробную информацию вы можете найти в документации.

Собираем все вместе

Наконец, давайте создадим функцию для выполнения всех трех шагов и запустим ее:

def summarize_youtube_video(video_url: str) -> str:
    """
    Summarize the provided YouTube video
    """
    # Extract the video ID from the URL
    video_id = extract_youtube_video_id(video_url)

    # Fetch the video transcript
    transcript = get_video_transcript(video_id)

    # If no transcript is found, return an error message
    if not transcript:
        return f"No English transcript found " 
               f"for this video: {video_url}"

    # Generate the summary
    summary = generate_summary(transcript)

    # Return the summary
    return summary


if __name__ == '__main__':
    url = "https://www.youtube.com/watch?v=D1R-jKKp3NA"
    print(summarize_youtube_video(url))

Вот пример видеообзора Стива Джобса на церемонии вручения дипломов в Стэнфорде, 2005 г., созданной с помощью GPT-3:

<цитата>

Стив Джобс выступил с речью на церемонии вручения дипломов в университете, в которой рассказал три истории из своей жизни. Первая история была о том, как он бросил колледж и как это привело его к занятиям каллиграфией, что позже повлияло на дизайн компьютера Macintosh. Вторая история была об увольнении из Apple, что позволило ему начать все сначала и создать успешные компании, такие как Pixar. Третья история была о его опыте с раком и о том, как он научил его жить каждый день так, как если бы он был последним. Он призвал выпускников найти то, что они любят, а не останавливаться на достигнутом, и иметь мужество следовать своему сердцу и интуиции. Он закончил свою речь словами: «Оставайтесь голодными, оставайтесь глупцами».

Разве это не потрясающе? 😎

Заключение

Использование OpenAI GPT может быть отличным способом создания резюме видео YouTube. Однако это только один пример. Этот подход можно использовать для всех источников информации, которые могут быть представлены в виде текста. Это экономит время и помогает быстро получить ключевые моменты. Представьте, насколько это может быть полезно для статей или телеконференций!

Полезные ссылки

  1. Весь упомянутый код в одном месте
  2. Документация по OpenAI
  3. Поваренная книга OpenAI


Оригинал