본문 바로가기
AI/AI 스터디

GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 4 - 감정 추론하기

by davi_kr 2023. 5. 7.

목차

    반응형

    요약하기에 이어서 추론하기에 대해 알아보겠습니다.

    추론이란 주어진 내용을 기반으로 드러나지 않은 것을 추측해보는 것입니다.

     

    요약하기에선 그냥 사실에 대해 정리하는 것이 주였다면,

    이번에는 주어진 내용을 기반으로 감정을 추측해보는 걸 해보겠습니다.

     

    오늘 글의 순서

    1. 예시 데이터 리뷰

    2. 감성 분석해보기(긍정/부정)

    3. 감정의 종류 분석해보기

    4. 반복문으로 개별 리뷰에 대한 긍정/부정 + 디테일한 감정 분석해보기

     

    예시 데이터 리뷰

    오늘 사용할 예시 데이터입니다.

    23.5.7 기준 플레이스토어 인기 차트 인기 앱/게임에서 1위를 하고 있는 알티어스 with SIA의 유저 리뷰입니다.

    리뷰 추출 조건은 5/6 0시 이후로 작성 됐으며 뽑힌 것 중에 20개만 그냥 추출했습니다.

     

    game_app_reviews = """쿠폰도 많이 줘서 무과금도 플레이 가능합니다
    양산중국겜
    잼 있어요
    재밌어요
    재밌게 하고 있어요
    시작부터 지원 빵빵하게 해주고 아주 기대만빵입니다
    할만함
    조작법이 쉽고 재밌어요
    할만해요
    깔끔한그래픽!! 간편한조작!! 케릭도 이쁘고 많이 퍼주는 갓겜!!
    잼납니다!!!!
    간만에 좋은게임찾은거같아요 ㅎㄹ
    플레이 해본 결과 정말 재미있고 질리지가 않네요.
    재미있을거같네요
    재밌습니다. 양산형 중겜과는 다르네요
    아직경험중이지만 이정도는 나름 재밌는데요??ㅋ
    정말 잼나유 ㅎㅎ
    계속 누르게 만그는 게임 아입니꺼??? 오늘도 ㄱㄱㄱ
    굿이에요 너무 복잡하지않아 좋아요
    엄청재미있어요 육성도빠르고 딱 맘에드네요"""

     

    챗gpt를 활용하기 위해 우선 아래 코드를 기본적으로 셋팅해줍니다.

     

    import openai
    openai.api_key = '나의 api key 등록하기'
    
    # gpt 모델 가져오기
    def get_completion(prompt, model="gpt-3.5-turbo"): # Andrew mentioned that the prompt/ completion paradigm is preferable for this class
        messages = [{"role": "user", "content": prompt}]
        response = openai.ChatCompletion.create(
            model=model,
            messages=messages,
            temperature=0, # this is the degree of randomness of the model's output
        )
        return response.choices[0].message["content"]

     

    감성 분석해보기 (긍정/ 부정)

    prompt = f"""
    What is the sentiment of the following product review, 
    which is delimited with triple backticks?
    
    please write in korean
    
    Review text: '''{game_app_review}'''
    """
    response = get_completion(prompt)
    print(response)

     

    결과 : 이 제품 리뷰는 매우 긍정적인 감정을 나타냅니다. 사용자들은 게임이 재미있고 쉽게 조작할 수 있으며, 그래픽도 깔끔하다는 것을 언급하고 있습니다. 또한 무과금으로도 플레이할 수 있어서 좋다는 의견도 있습니다.

     

    사실 저 리뷰들 사이에 보면 양산중국겜이라는 리뷰가 있어서 저 리뷰를 어떻게 답해줄까도 궁금했는데, 별도의 언급이 없었습니다. 이 부분은 이따가 반복문으로 개별로 돌려보면서 그때도 똑같은지 봐야겠습니다.

     

    prompt = f"""
    What is the sentiment of the following product review, 
    which is delimited with triple backticks?
    
    Give your answer as a single word, either "긍정" \
    or "부정".
    
    Review text: '''{game_app_review}'''
    """
    response = get_completion(prompt)
    print(response)

     

    결과 : 긍정

     

    감정의 종류 분석해보기

    prompt = f"""
    Identify a list of emotions that the writer of the \
    following review is expressing. Include no more than \
    five items in the list. Format your answer as a list of \
    lower-case words separated by commas.
    
    Review text: '''{game_app_review}'''
    """
    response = get_completion(prompt)
    print(response)

     

    결과 : 재밌어요, 재미있음, 재밌게 하고 있어요, 재미있을거같네요, 재밌습니다

     

    데이터에 재밌다는 말이 위주이다보니 그 내용들을 그대로 가져왔네요.

    좀 더 깔끔하게 다듬을 방법이 있을지.. 비슷한 종류는 하나로만 출력해달라는 조건을 추가해보겠습니다.

     

    if the emotions are similar than please write only one representative emotion이라는 문구를 추가했습니다.

     

    prompt = f"""
    Identify a list of emotions that the writer of the \
    following review is expressing. Include no more than \
    five items in the list. Format your answer as a list of \
    lower-case words separated by commas.
    
    if the emotions are similar than please write only one representative emotion
    
    Review text: '''{game_app_review}'''
    """
    response = get_completion(prompt)
    print(response)

     

    결과 : 재밌다, 기대, 재미있다, 좋다, 감탄

     

    아까보다는 정리가 됐고 재밌는게 다른 표현들도 출력이 됐네요. 이래서 쓰기 나름이라는 얘기가 나오는 것 같습니다.

    신비한 프롬프트의 세계네요..

     

    4. 반복문으로 개별 리뷰에 대한 긍정/부정 + 디테일한 감정 분석해보기

    반복문을 통해 개별 리뷰에 대해 좀 더 자세히 들여다보고 싶어서 기존 예시를 리스트 형태로 변경했습니다.

    이렇게 작업을 하게 되면, 나중에 대량의 정보를 받았을 때, 디테일한 분류도 가능해지기 때문에 훨씬 다양한 활용성이 생길 수 있을 것 같습니다. VOC 분류 같은 곳에도 용이할 것으로 추측되어서 그 부분을 시험해보겠습니다.

     

    game_app_review = ['쿠폰도 많이 줘서 무과금도 플레이 가능합니다',
     '양산중국겜',
     '시작부터 지원 빵빵하게 해주고 아주 기대만빵입니다',
     '조작법이 쉽고 재밌어요',
     '깔끔한그래픽!! 간편한조작!! 케릭도 이쁘고 많이 퍼주는 갓겜!!',
     '굿이에요 너무 복잡하지않아 좋아요',
     '엄청재미있어요 육성도빠르고 딱 맘에드네요']

     

    사용한 코드

     

    for i in range(len(game_app_review)):
        prompt = f"""
    
        '''에 둘러싸여진 고객의 리뷰를 분석하고 싶어. 
        분석하고 싶은 내용은 아래와 같아:
        1. 리뷰의 내용이 긍정인지, 부정인지, 중립인지 분석해줘
        2. 리뷰에서 표현되고 있는 감정이 어떤 것들이 있는지 분석해줘
        3. 그 감정을 느낀 원인이 적혀있다면, 어떤 것 때문에 그런 감정을 느꼈는지도 분석해줘
    
        분석 결과는 아래의 형식으로 적어줘
        1. 리뷰 유형 :
        2. 디테일한 감정 종류 :
        3. 감정의 원인 : 
    
        Review text: '''{game_app_review[i]}'''
        """
    
        response = get_completion(prompt)
        print(i, response, "\n")

     

    결과)

    0  1. 리뷰 유형 : 긍정적인 리뷰
         2. 디테일한 감정 종류 : 만족감, 기쁨
         3. 감정의 원인 : 쿠폰 제공으로 인한 경제적 이점으로 인해 만족감과 기쁨을 느꼈을 것으로 추측됩니다. 

    1 1. 리뷰 유형 : 중립적인 리뷰
       2. 디테일한 감정 종류 : 감정이 표현되지 않음
       3. 감정의 원인 : 감정이 표현되지 않아 원인을 파악할 수 없음 

    2 1. 리뷰 유형 : 긍정적인 리뷰
        2. 디테일한 감정 종류 : 기대감, 만족감
        3. 감정의 원인 : 지원이 빵빵하게 이루어졌기 때문에 기대감이 높아졌고, 그에 따라 아주 기대만빵한 상태가 되었다. 

    3 1. 리뷰 유형 : 긍정적인 리뷰
        2. 디테일한 감정 종류 : 기쁨, 만족감
        3. 감정의 원인 : 조작법이 쉽고 재미있어서 만족감과 기쁨을 느꼈다. 

    4 1. 리뷰 유형 : 긍정적인 리뷰
        2. 디테일한 감정 종류 : 만족감, 기쁨, 호감
        3. 감정의 원인 : 게임의 그래픽이 깔끔하고 조작이 간편하며, 캐릭터도 이쁘고 많이 퍼주어서 만족감과 기쁨을 느끼며 게임을 즐겼다. 

    5 1. 리뷰 유형 : 중립적인 리뷰
        2. 디테일한 감정 종류 : 긍정적인 감정
        3. 감정의 원인 : 제품이 복잡하지 않고 좋다는 것에 대한 인상으로 추정됨. 

    6 1. 리뷰 유형 : 긍정적인 리뷰
        2. 디테일한 감정 종류 : 기쁨, 만족감
        3. 감정의 원인 : 게임의 재미와 육성 속도가 빠르다는 것이 맘에 들어서. 

     

    결과 분석

     

    결과 1번에서 양산중국겜은 역시 판별을 못해줬습니다. 한국인의 정서나 감정을 정확하게 읽기는 어려운 것 같습니다.

    그 외에는 5번에서 굿이에요. 이런 표현이 들어가서 충분히 긍정으로 분류할 수 있을 것 같은데 중립적인 리뷰로 답을 줬네요.

    감정의 원인도 추정하도록 했는데 감정의 원인에서는 좋다는 표현이 나왔음에도 다르게 해석하는게 어떤 원인일지 모르겠네요.

     

    다만, 전반적으로는 7개의 데이터를 3가지 항목으로 나눠서 봤는데 1개는 아예 잘못된 데이터이고 6개의 데이터 중에서 1개는 2개는 유효한 데이터임으로 총 21개에서 17개 정도는 유효한 결과를 확인했네요.

     

    이걸로 봤을 때 보편적인 정서나 감정이 위주인 리뷰들이라면 분석이 수월하고 즉시 활용도 가능해보이고 

    한국 정서상 좀 난이도 높은 감정들이나 표현들이 많이 들어가는 리뷰들이 있다면 정확도가 아주 많이 떨어질 수도 있겠다는 생각이 듭니다.

     

    네이버에서 개발 중인 AI가 한국 특화라는 컨셉을 가져가고 있는 이유에 대해서도 어느 정도 공감이 가는 부분이네요.

    네이버에서 하이퍼 클로바가 얼른 나왔으면 좋겠습니다^^

    네이버 화이팅 ㅋㅋㅋ

    반응형

    댓글