본문 바로가기
데이터&AI

[PYTHON] openai의 gpt api를 활용하여 적은 데이터로 중요도 점수 모델 만들기

by 일등박사 2023. 3. 6.

안녕하세요!!!

지난 포스팅에서 openai의 gpt api를 활용하여 문장 클러스터링 하는 방법을배워보았습니다!

2023.03.05 - [일등박사의 생각/데이터분석] - [PYTHON] openai의 gpt api를 활용하여 문장 클러스터링 하기

 

이번에는, 클러스터링을 넘어 나만의 텍스트 중요도 모델을 만들어보겠습니다!!

 


1. 모듈 임포트 및 선언

   - 우선 openai의 api키 와 패키지들을 불러옵니다.

   - 추가로 앞으로 대화내용을 지속 저장할 신규변수(conversation_history)를 만들어줍니다.

import pandas as pd
import numpy as np
from openai.embeddings_utils import get_embedding
from openai.embeddings_utils import cosine_similarity
API_KEY = '{나의 API키}'
openai.api_key = API_KEY

2.  테스트 문장 Set 

   - 이번 테스트에서는 아래와 같이 간단한 4개의 문장을 샘플로 정했습니다!

  - 처음 2개 문장은 긍정(1)으로, 뒤 두개 문장은 부정(2)로 정하여 labels 의 변수에 저장!!

sentences = ["일등박사의 블로그는 최고입니다 ",
            "일등박사 블로그에서는 블록체인, AI에 관한 유용한 정보를 잘 알수 있어요", 
            "나는 옆의 다른블로그가 더 좋던데", 
             "api로 하는것이 아니라 원천 모델을 만들줄 알아야지!?" ]

labels = [1,1,0,0]

 

3.  테스트 문장 Set  을 기준으로 벡터 만들기

   - 지난 포스팅과 유사하게, api를 활용하여 openai의 gpt모델 ada 기반의 벡터를 생성, embeddings에 저장합니다!

response_similarity = openai.Embedding.create(
    input = sentences,
    model = "text-similarity-ada-001")
print(response_similarity)

sentence_0  = response_similarity['data'][0]['embedding']
sentence_1  = response_similarity['data'][1]['embedding']
sentence_2  = response_similarity['data'][2]['embedding']
sentence_3  = response_similarity['data'][3]['embedding']

embeddings = [sentence_0, sentence_1,sentence_2,sentence_3]

 

4. logistic Regression으로 구분모델 제작

   - 많은 분들이 익숙한 sikit-learn의 logisticRegression을 활용하여 모델을 만들어줍니다!

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(embeddings, labels)

아래와 같이 모델이 잘 생성됩니다!!

 

4. Test 문장으로 검증

   - 이젠, 새로운 테스트 문장을 만들어 검증을 진행합니다!

   - 마찬가지로 문장들을 gpt api에 보내고 그 벡터값을 저장하여, 이미 생성된 모델이 적용해보는 것입니다!!

sentences_test = [  "별로 배울게 없네,, 다음엔 안와야지",
                  "일등박사 블로그를 통하여 잘배웠습니다 ",
                  "블록체인, AI에 관한 유용한 정보가 많아 좋았어요",
                  "원천 모델 만드는 법은 안알려주나요!??" ]
                  
response_similarity = openai.Embedding.create(
    input = sentences_test,
    model = "text-similarity-ada-001")
print(response_similarity)

sentence_test_0  = response_similarity['data'][0]['embedding']
sentence_test_1  = response_similarity['data'][1]['embedding']
sentence_test_2  = response_similarity['data'][2]['embedding']
sentence_test_3  = response_similarity['data'][3]['embedding']

embeddings_test = [sentence_test_0, sentence_test_1,sentence_test_2,sentence_test_3]

model.predict(embeddings_test)

결과는 어땟을까요!!?

아래의 이미지와 같이 긍정적인 내용에는 1, 부정적인 내용에는 0으로 잘 분류한 것을 확인할 수 있었습니다!@

 

 

어떤가요!? 4개의 적은 데이터로 학습시켰지만, 결과적으로 좋은 모델을 만들 수 있었음을 확인할수 있었습니다!!

댓글