랭체인으로 유튜브 요약하기steemCreated with Sketch.

in kr-dev 커뮤니티11 months ago (edited)

이 글은 LangChain을 사용하여 유튜브 자막을 다운로드하여 요약하는 방법을 설명합니다.

필요한 파이썬 패키지 설치

%pip install langchain openai tiktoken youtube-transcript-api pytube 

파이썬 패키지 import

from langchain.document_loaders import YoutubeLoader
from langchain.chat_models import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain

OpenAI API Key 설정

import os

os.environ['OPENAI_API_KEY'] = 'sk-...'

유튜브 자막 다운로드

유튜브에서 제공하는 자막을 다운로드하여 요약할 것입니다. YoutubeLoader 패키지의 from_youtube_url 함수를 사용하면 유튜브 자막과 메타데이터를 다운로드 할 수 있습니다.

loader = YoutubeLoader.from_youtube_url("https://www.youtube.com/watch?v=T9m3MpZ7_kE", add_video_info=True)
result = loader.load()

유튜브 자막 요약하기

chain = load_summarize_chain(ChatOpenAI(temperature=0), chain_type="stuff", verbose=False)
chain.run(result)

(번역) 저자는 살바도르 달리의 초현실주의에 매료되어 광기, 광란, 창의성에 대한 인류의 사랑을 어떻게 이야기하는지 성찰합니다. 이 몽환적인 공간을 탐험하면 우리 자신에 대해 새로운 것을 발견할 수 있고, 참신함을 불러일으키는 엔진 또는 진실을 말하는 거짓말쟁이로서의 잠재력을 발견할 수 있다고 믿습니다. 저자는 이를 성장에 대한 거부이자 예술가, 시인, 광인의 영역에 머물고 싶은 욕망으로 보고 있습니다.

긴 영상의 유튜브 자막 요약하기

자막 텍스트가 너무 많은 경우 토큰 제한 4000을 넘어 버립니다. 이런 경우에는 다음 방법으로 요약합니다.

이번 예시에서는 약 30분짜리 유튜브 영상을 사용합니다.

loader = YoutubeLoader.from_youtube_url("https://www.youtube.com/watch?v=bqxQd42xRNc", add_video_info=True)
result = loader.load()

add_video_info=True 옵션을 사용하면 더 많은 정보를 가져올 수 있습니다.

자막의 토큰 길이를 계산해보면 4000이 넘습니다.

이런 경우에는 자막을 분할하여 요약해야 합니다. 이번 예시에서는 RecursiveCharacterTextSplitter를 사용하여 텍스트를 분할해보겠습니다… RecursiveCharacterTextSplitter는 의미적으로 가장 연관성이 강한 텍스트 조각으로 보이는 모든 단락을 가능한 한 길게 유지하려고 한다고 합니다. 청크 사이즈는 4000자로 분할합니다.

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=4000)
docs = text_splitter.split_documents(result)

7개의 문서로 분할 되었습니다.

분할된 각 문서의 길이를 확인해보면 문자열 길이는 4000 이하이며, 토큰 수는 약 700~800개입니다.

이제 분할된 문서를 load_summarize_chain 함수에 넣고 요약을 해보겠습니다.

chain = load_summarize_chain(llm, chain_type="map_reduce", verbose=True)
chain.run(docs)

load_summarize_chain 함수에 verbose=True 옵션을 사용하면 요약하는 과정을 살펴볼 수 있습니다.


(요약) 기술과 창의성에 관한 강연자인 제이슨 실바는 기술이 인간의 한계를 뛰어넘고 정신 건강 위기를 극복하는 데 도움이 될 수 있다고 믿습니다. 그는 가상 현실, 바이오 해킹, 정신 활성 기술을 결합하여 트라우마를 치유하고 내면의 이야기를 다시 쓰는 '사이버 델릭 시대’라는 아이디어를 제안합니다. 실바는 우주와의 연결과 환경 보호의 중요성을 인식하는 에코델릭 의식을 옹호합니다. 그는 청중이 냉소주의를 넘어 매 순간 문앞에 있는 가능성의 공간을 받아들이고, 문자 그대로의 순진한 현실주의의 틀을 넘어 세상을 보는 방법으로 마술적 리얼리즘을 사용하도록 장려합니다.

7개로 분할된 텍스트를 각각 요약한 후, 이 7개의 요약을 다시 하나의 텍스트로 합쳐 요약하는 방법을 사용하기 때문에, 최종 요약이 완성되기까지 약간의 시간이 소요됩니다.

마치며

정보가 넘쳐나는 시대에 살고 있는 우리에게 시간은 정말 소중합니다. 하지만 바쁜 현대인들이 유튜브 영상을 처음부터 끝까지 시청하는 것은 쉽지 않아요. GPT를 사용하여 유튜브 영상을 자동으로 요약해준다면 정말 많은 시간을 아낄 수 있게 됩니다.


Buy Me A Coffee
or
[카카오페이로 후원하기] [토스페이로 후원하기]


이 글이 마음에 드셨다면 투표리블로그를 눌러 저의 글을 더 많은 분들과 공유해주세요. 그리고 이와 같은 콘텐츠를 더 보고 싶으시다면 @anpigon팔로우해주세요.

읽어주셔서 감사합니다!


티스토리에서 작성하였습니다.
원본 글: https://anpigon.tistory.com/400

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

고맙습니다

 11 months ago (edited)

이 글이 도움이 되었다니 다행입니다. 그리고 림님의 댓글에 감사드립니다.

훌륭합니다!
그리고 스팀에도 토스후원처럼 후원기능을 붙이면 좋을거 같습니다.

이타인님 댓글 감사합니다! 스팀에 토스와 비슷한 후원 기능을 추가한다면 정말 좋을 것 같습니다. 사용자들이 원하는 콘텐츠를 지원하고 도움을 주는 데에 더욱 편리하게 되겠네요. 에이블팀에 이런 아이디어를 제안해보는 것도 좋을 것 같습니다.

사실 지금개발하는 쿠폰몰 개발전에 만들던게 그런 팁 기능이 있는 앱이었습니다. 우선 순위를 바꿔서 개발중입니다.

스팀 앱 개발기 #98 - 다음에 개발할 기능
https://www.steemit.com/@dorian-mobileapp/98

@dorian-mobileapp님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.

[2023/5/21] DATED NIXIEE DAILY REPORT
https://www.steemit.com/@nixiee-fund/2023-5-21-dated-nixiee-daily-report

@nixiee-fund님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64777.26
ETH 3101.53
USDT 1.00
SBD 3.84