[파이썬 프로젝트]유튜브 콘텐츠 분석 및 챗봇 만들기

Oni·2023년 10월 3일
0

NLP

목록 보기
1/3
post-thumbnail

이번 추석연휴가 지나가기 전
'만들면서 배우는 나만의 인공지능 서비스' 책을 참고하여
독학으로 진행해본 파이썬 프로젝트 : <유튜브 콘텐츠 분석 및 챗봇 만들기>

이 프로젝트를 통해 다음과 같은 내용을 익힐 수 있다.

  • 웹 API의 이해
  • Open AI API 사용
  • 유튜브 영상에서 자막정보 가져오기
  • 유튜브 영상을 학습한 챗봇 생성

이 모든 과정은 파이썬 코딩으로 진행!


실습 영상은 소탐대실 채널의 초코파이같은 간식류에 쇠고기, 돼지고기는 어디에 함유된 것인지 그 원인을 밝히는 내용의 컨텐츠이다. (흥미롭)
대체 어디에 소가 들어가는 걸까?라는 제목의 영상을 학습해서
챗봇형태로 질의응답을 하는 파이썬 프로젝트를 진행해보자!

  • 실습 환경 : colab

💎1.유튜브 비디오 자막생성

# 유튜브 자막 정보 가져오기
!pip install youtube-transcript-api

# 비디오 아이디 가져오는 함수 정의 
def get_video_id(video_url):
    video_id = video_url.split('v=')[1][:11]
    return video_id

from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter
import textwrap


# 학습할 동영상 URL 입력
video_url = "https://www.youtube.com/watch?v=X6YwQc8jMQE" 
video_id = get_video_id(video_url)

transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ko'])

text_formatter = TextFormatter() # SRT 형식으로 출력 지정
text_formatted = text_formatter.format_transcript(transcript)

# text 전체 출력
text_info = text_formatted.replace("\n", " ") # 개행문자 제거

# text 일부 출력
shorten_text_info = textwrap.shorten(text_info, 150 ,placeholder=' [..이하 생략..]')

영상의 자막이 텍스트로 잘 변환되었다.


💎2.Open AI API키 발급

  • Open AI에서 api키를 발급은 무료이나 실제로 사용을 하기 위해서는 유료결제를 해야한다.
    만약 새로 가입하는 경우에는 $5정도 무료로 사용할 수 있다
  • 나는 출시되었을 때 사용해봐서 유료결제했다😅
  • Tip : 테스트용이라면 $5면 충분하고 크레딧을 아끼기 위해 좀 짧은 영상으로 테스트 하자.ㅎㅎ)

OpenAI 접속사이트(https://platform.openai.com)

API 키 발급

  • 우측 상단 Personal -> View API Keys -> API Keys -> Create new secret key 순 클릭

크레딧 확인 및 충전

  • Personal -> View API Keys ->Billing Overview -> Add to credit balance 순 클릭

개인적으로만 사용하는 토이프로젝트 수준이라면
발급받은 키를 코드상에서 그대로 입력하여 사용해도 괜찮지만

공유 및 확장성을 고려한다면
보안을 위해 환경변수 설정을 통해 토큰을 별도로 입력해주는 것이 바람직하다.

환경변수 설정하는 방법을 시도했는데, 어쩐 이유인지 잘 안되어서
차선책으로 코드를 직접 입력하는 방법으로 토큰을 입력하는 방법으로 해결하였다.


💎3. 챗봇생성

  • OpenAI는 인공지능 채팅을 위한 Chat Completions API 제공.
  • Chat Completions API는 GPT-3.5, GPT-4 모델을 이용해 함수 이름과 매개변수가 포함된 JSON 객체 생성
  • 이를 통해 Chat Completions API의 결과를 외부 도구나 API와 보다 안정적으로 연결 가능
  • 호출함수는 내부 함수일 수도 있고, 웹 API를 이용하는 함수일 수도 있으며, 데이터베이스와 연결된 함수일 수도 있음
  • OpenAI의 API 요청에 대한 응답은 JSON 형식.

💡 Chat Completions API에서 함수 호출 단계
1. 사용자 입력과 함수 정보를 Chat Completions API 모델로 보내기
2. 모델이 사용자의 입력에 따라 함수 호출을 위한 응답(JSON 객체)이나 일반 응답을 생성
3. 함수 호출을 위한 응답일 경우 JSON객체의 구문을 분석하고, 인수가 있는 경우 인수를 사용해 함수 호출
4. 함수 호출 결과를 기존 메시지에 추가해 Chat Completions API 모델로 다시 보내고 응답 결과를 사용자에게 표시

pip install openai
import openai

def answer_from_given_info(question_info, prompt):

    # 입력 정보에 기반해 답변 요청
    user_content = f"{prompt} 다음 내용을 바탕으로 질문에 답해 줘. {question_info}"

    messages = [ {'role': 'user', 'content': user_content} ]

    response = openai.ChatCompletion.create(
                        model="gpt-3.5-turbo",
                        messages=messages,
                        #max_tokens=500,
                        stop = ["."],
                        temperature=0.2 )

    return response['choices'][0]['message']['content'] # 응답 결과 반환
openai.api_key='발급받은 키 입력'

이제 몇가지 질문을 통해, 제대로 학습이 되었는지 검증을 해보자😎

💥 참고로 영상에 의하면
돼지고기(젤라틴)는 마시멜로우에, 쇠고기는 우지라는 소기름이 빵부분에 들어가며 빵처럼 부드러운 식감이 아닌 바삭하고 부스러지는 식감을 낼 때 포함되는 것

질문 1)

question_info = text_info # 자막을 가져온 내용을 학습 데이터로 사용
prompt = "초코파이에는 왜 쇠고기가 들어가나요?" # 질문
response = answer_from_given_info(question_info, prompt)
print(response)
#초코파이에는 소고기가 들어가는 이유는 풍미와 식감을 더해주기 위해서입니다

영상에 다음과 같은 멘트가 실제로 나온다.


질문 2)

정확하다. 다음 질문을 던져보자


질문 3)

이 부분은 '우지'라는 답변을 기대한 질문인데 다소 정확도가 아쉬운 답변이었다. 혹시 우지라는 개념이 학습이 된 것은 맞을까? 다른 질문을 던져보자.


질문 4)

우지에 대한 개념은 있다. 다시 한번 다르게 질문을 해볼까?


질문 5)

이럴수가. 갑자기 또 안들어간다고 한다🤣
4살 아이를 학습하는 것 같은 기분이 들었다.
API 파트에서 결제하는 것 때문에 좀 헤매었는데, 책에 있는 샘플 코드 덕분에 그래도 비교적 간단하게 파이썬 프로젝트의 결과물을 내볼 수 있었다.
다음 실습에서는 이 파이썬 프로젝트를 좀 더 발전시켜서 웹앱으로 챗봇 ui를 만들어 사용의 편의성을 높인 형태로 제작해봐야겠다.


Reference

profile
데이터 분석/엔지니어링/ML에 관한 기록

0개의 댓글