-
youtube 요약.03 - LLM으로 script 파일 요약하기Language Study/Python 2024. 11. 14. 17:31
1. 요약하려는 영상에서 음성파일 추출(yt_dlp)
2. 해당 음성 파일을 text 형식으로 변환 (whisper)
3. llama, gpt 등을 이용하여 script 내용 요약(gpt)
+ 요약된 내용을 게시 또는 정리할 수 있는 후처리 프로세스마지막으로 3번 llama, gpt 등을 이용하여 script 내용 요약(gpt) 이다.
사실 이 항목은 정리하기가 좀 어렵다. 사내 AI 모델을 이용하여 구성하였기 때문에 보안상 코드로 구성해서 보여주기도 어렵고
GPT를 사용했다 하더라도 사용 방법을 제외하고는 prompt의 내용을 변경, 몇몇 변수 temperature, token값 등을 변화하면서
가장 원하는 답과 근사한 형태로 결론을 도출할 때까지 테스트해보는 작업이였기 때문이다. (기술적부분 보다는 반복의 영역)처음 포스팅을 할 때 마지막까지 어떻게 정리할 수 있을지 생각해보고 시작하지 못했다...
그래도 GPT를 사용했을 때 기준으로 한번 정리해보려고 한다.os.environ["OPENAI_API_KEY"] = "your_API_key"
먼저 API로 GPT를 호출하기 위해서는 key가 필요하다.
사용량에 따라서 과금되기 때문에 내용을 정리하면서 이 key값을 블로그나 깃허브에 올리지 않도록 주의가 필요하다.
(git은 push할 때 경고가 나오면서 안되는 것 같았다.)embed_model = OpenAIEmbedding( model="text-embedding-3-small", ) # load documents documents = SimpleDirectoryReader("youtube/").load_data() # set up ChromaVectorStore and load in data vector_store = ChromaVectorStore(chroma_collection=chroma_collection) storage_context = StorageContext.from_defaults(vector_store=vector_store) index = VectorStoreIndex.from_documents( documents, storage_context=storage_context, embed_model=embed_model )
임베딩 모델을 선언하고 이 임베딩 모델에 document로 추출한 script 파일을 넣어줬다.
가장 단순하게 구현하는 것은 prompt에 script 내용을 추가하여 요약까지 부탁하는 것이지만
파일로 따로 주고 prompt로는 요약에 대한 명령만 내릴 때 가장 원하는 형태의 답변이 나왔었다.prompt = f""" #파일을 읽고 내용을 한글로 요약하려고해 아래 모든 내용들은 한글로 작성해줘 제목을 만든 뒤 핵심적인 주제를 먼저 서술해주고 상세 내용을 설명해줘 형태는 아래와 같아 각 항목들 사이에는 1줄씩 띄워줘 제목 : 주제 : 상세 내용 : """
prompt는 위와 같이 작성했다.
한글을 명시하지 않으면 영어로된 script는 영어로 요약하기 때문에 항상 한글로 요약할 수 있게 선언해주고
후처리를 위해서는 최대한 같은 포맷의 답변이 나오는 것이 좋기 때문에 답변의 형태를 지정해줬다.추가적으로 role과 message 등을 더 많이 지정해준다면 좀 더 원하는 답변을 얻어낼 수도 있다."temperature" : 0, "max_tokens" : 300,
특별한 변수 지정은 없지만 temperature은 0에 가까운 것이 좋았다.
temperature가 높은 경우 예상할 수 없는 답변이 자주 나오기 때문에 우리가 필요한 스크립트의 단순한 요약만을 고려하면
다양한 답변은 굳이 필요없었다.token은 너무 길게 생성하면 답변이 너무 길어지기 때문에 요약이라는 부분을 고려했을 때 적당한 수준이 좋았다.
response = query_engine.query(prompt) response_text = response.response response_text += f'\n\n링크 : {youtube_url}'
query를 던지고 온 답변 마지막에 원래 영상의 url을 추가했다.
요약만 있고 원래 영상을 찾아갈 수 없으면 안되기 때문에 같이 나올 수 있도록 추가한 부분인데 요즘 대부분의 웹 사이트에서
url을 추가하면 썸네일을 지원하기 때문에 좀 더 결과물이 좋게 보이는 효과도 있다.요약 결과
제목 : C언어 포인터 기초 설명주제 : C언어에서 포인터의 기본 개념과 사용 방법에 대한 설명상세 내용 :이 영상에서는 C언어의 포인터에 대해 설명합니다. 포인터는 변수의 메모리 주소를 저장하는 변수로, 변수 앞에 * 기호를 사용하여 선언합니다. 예를 들어, int형 변수 x가 있고, x의 값이 10일 때, int *p와 같이 포인터 p를 선언하면 p는 x의 주소를 저장하게 됩니다. 이 주소를 통해 x의 값을 p로 접근할 수 있습니다.또한, 배열과 포인터의 관계에 대해서도 설명합니다. 배열은 연속된 메모리 위치에 데이터를 저장하며, 배열 이름 자체가 첫 번째 원소의 주소를 나타냅니다. 예를 들어, int s[3] = {1, 2, 3}이라는 배열이 있을 때, s는 배열의 첫 번째 원소의 주소를 가리키며, s[0], s[1], s[2]를 통해 각 원소에 접근할 수 있습니다.이러한 포인터의 개념을 이해하고 사용하는 방법을 숙지하면, C언어 프로그래밍에서 보다 효율적으로 메모리를 관리하고 데이터를 조작할 수 있습니다.예시로 요약된 결과를 보면 prompt에서 요구했던 형태로 잘 요약된 것을 볼 수 있다.
위 와 같은 방법으로 내가 필요한 영상을 요약을 만들어서 제공할 수도 있고 영상을 실제로 보기 전에 어떤 내용인지 대략적인 파악이나
보는 것을 결정하는데 도움을 줄 수 있을 것 같았다.코드를 다 공개할 수 없는 특성상 글이 많이 어수선하지만 방향성 정도만 파악하면 좋을 것 같다.
'Language Study > Python' 카테고리의 다른 글
Python 숫자 제곱 pow 함수 사용하기 (1) 2024.11.19 youtube 요약.02 - whisper로 음성파일 text 변환하기 (4) 2024.11.09 youtube 요약.01 - yt_dlp로 youtube 음성 파일 추출하기 (5) 2024.11.08 파이썬 문자 채우기, 0채우기 (1) 2024.07.23 [기능] 파이썬 stdin 입력 (0) 2021.04.16