본문 바로가기

Python/YouTube Data API v3

[Youtube API] Chat GPT 연동하기

이번 포스팅에는 Chat GPT를 연동하여 수집한 댓글에 대한 긍정과 부정을 판별해 보도록 하겠습니다.

코드 먼저 확인해 보도록 하겠습니다.

Open AI 의 API Key 발급을 사전에 하셔야 정상 동작 합니다.

https://platform.openai.com/

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

#DB 연동 부 생략
openai.api_key = login['openai']

curs.execute("SELECT * FROM youtube.video_list")
lists = curs.fetchall()
grade = 0

curs.execute("SELECT * FROM youtube.comment_list where grad is null")
listData = curs.fetchall()
for list in lists: # 저장된 동영상의 비디오 아이디 추출
    v_id = list[1]


    msg='를 긍정적 의견이면 "Y" 부정적 의견이면 "N"로 판단해줘'

    for list in listData:
        commentText = list[2]
        comment_id = list[9]
        print(commentText)
        completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": '"Please judge '+commentText.strip()+'"' + msg}])
        response = completion.choices[0].message.content
        print('A: ' + response)
        print('----------------------------------------------------------------------------------------------')
        if 'Y' in response:
            grade += 1
        elif 'N' in response:
            grade -= 1
        else:
            grade += 0
        print(grade)

        time.sleep(10)
    # sql = "INSERT INTO youtube.video_list (grade) VALUES ('{%s}');"
        sql = "UPDATE youtube.comment_list SET grade = %s  WHERE comment_id = '" + str(comment_id) + "'"
        val = (grade)
        curs.execute(sql, val)
        conn.commit()
        grade = 0

해당 코드는 저장된 비디오 아이디를 추출하고 비디오의 코멘트를 추출합니다.

추출한 코멘트는 Chat GPT에게 코멘트에 대한 긍정, 부정을 판별해 달라고 요청합니다.

이때, OpenAI의 API토큰은 영어는 1글자당 1토큰, 한글은 1글자당 4토큰은 소모하고 질문과 응답에 대한 모든 글자에 토큰이 소모되니, 되도록이면 영어로 질문하고 간결한 답변을 요구하면 토큰을 아낄 수 있습니다.

 

해당 코드를 동작하면 아래와 같이 코멘트를 불러와 긍정, 부정을 판별하고

긍정이면 +1, 부정이면 -1, 주관적이라 판별이 불가능하면 0 으로 점수를 매기게 됩니다.

긍정 판별 코멘트
부정 판별 코멘트
주관적 판별 코멘트 -1
주관적 판별 코멘트 -2

물론 사람이 판별하는 것 만큼 완벽하게 결과가 도출되진 않지만 나름 높은 정확도의 판별 결과를 얻을 수 있었습니다.

 

다음 포스팅에서는 Chart.js를 이용하여 데이터를 가독성있게 시각화 해보도록 하겠습니다.