OpenAI GPT: как создать сводку для YouTube
8 апреля 2023 г.Недавно во время просмотра интервью на YouTube мне пришла в голову идея оптимизировать процесс, прочитав стенограммы. В качестве развития этой идеи я начал искать способ получить краткое содержание видео. После некоторых исследований я создал простое приложение, которое создает сводку видео на YouTube с использованием модели OpenAI GPT. В этой статье я покажу вам, как создать подобное приложение.
Требования
Прежде чем погрузиться в код, убедитесь, что у вас есть следующее:
- На вашем компьютере установлен Python 3
- Ключ API OpenAI (бесплатную пробную версию можно получить на странице https://platform.openai.com/)
-
Установленные пакеты Python:
- опенай
Давайте напишем код
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 станет общедоступной, вы сможете легко заменить модель на лучшую. - сообщения: это массив, в котором каждый элемент (сообщение) имеет
роль
(либосистема
,пользователь code> или
помощник
) исодержимое
(само текстовое сообщение). Первое сообщение с ролью 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. Однако это только один пример. Этот подход можно использовать для всех источников информации, которые могут быть представлены в виде текста. Это экономит время и помогает быстро получить ключевые моменты. Представьте, насколько это может быть полезно для статей или телеконференций!
Полезные ссылки
Оригинал