인공지능/직접 해보기

데이터 추출 시스템 만들어보기

원담 2025. 6. 26. 16:45
728x90

오늘은 모델에 충분하고 명확한 예시 데이터를 제공한 후에 그 다음은 대형 언어 모델의 힘을 빌려 적절히 파인튜닝하여 원하는 정보를 정확하게 추출하려고 한다. Luedata.io라는 회사는 예를 들어, 누군가 책을 샀다거나, 애플 제품을 샀다거나, 토스터를 샀다거나 하는 거래 내역(raw transaction data)을 시스템에 넘기면 그 안에서 누가, 무엇을, 얼마에 샀는지 같은 정보를 추출해 낸다. 오늘은 이것을 간단한 파인튜닝으로 따라 해 보려고 한다.

 

Lune | Real-Time Transaction Intelligence for Banks & Fintechs

Lune transforms complex transaction data into actionable insights. Our AI-driven platform empowers banks, neobanks, and fintechs with real-time enrichment, customer engagement, and precision targeting.

www.lunedata.io

학습시킬 데이터셋은 아래와 같이 생겼는데, 이런 류의 데이터 셋을 gpt turbo 3의 파인튜닝 데이터 셋으로 제공한다.

{
  "messages": [
    {
      "role": "system",
      "content": "Given an expense information, please provide the following fields in a JSON dictionary, where applicable \\\"person:\\\" {person_name}, \\\"amount:\\\" {amount}, \\\"item:\\\" {item}."
    },
    {
      "role": "user",
      "content": "John Smith decided to upgrade his kitchen appliances and bought a state-of-the-art toaster for $150.25."
    },
    {
      "role": "assistant",
      "content": "{\"person\":\"John Smith\", \"amount\":\"150.25\", \"item\":\"toaster\"}"
    }
  ]
}

expense.json
0.00MB

파인튜닝하는 python 파일은 간단하다. 학습시킬 express.json 을 넘기고 base model을 정한 client에 넘겨주면 된다.

# pip install openai langchain 

import json 
import time 
import openai
from openai import OpenAI
import os 

os.environ["OPENAI_API_KEY"] = ""

if __name__=="__main__":

    my_file = "expense.json"

    # upload the fine-tune file

    client = OpenAI()

    training_file = client.files.create(
        file=open(my_file, "rb"),
        purpose="fine-tune"
    )

    # create a fine-tune model job

    job = client.fine_tuning.jobs.create(
        training_file = training_file.id,
        model = "gpt-3.5-turbo",
        suffix="expense"
    )

    ftj = client.fine_tuning.jobs.retrieve(job.id)

파인 튜닝이 완료되고 결과 테스트를 해 보았는데, 학습의 결과 대로 아주 잘 추출이 된다.

궁금해서 파인튜닝이 되지 않은 gpt turbo model로도 테스트해 보았는데, 일반적인 성능이 좋아져서 그런건지 잘 추출하네..^^;

그래서 한글로 이번엔 조금 복잡한 예시를 주었는데

땡!

기댓값은 2000원에 item 붕어빵 혹은 item  팥붕 1개 슈붕 1개를 기대했는데, 결과가 너무 안 좋았다.

gpt 일반 모델

그런데 gpt 일반 모델은 예상대로 너무 답변을 잘하네..?

오늘은 문장을 입력하면 그 안에서 person, amount, item을 추출하는 작업으로 파인튜닝을 진행해 보았는데, 놀랍게도 일반 GPT 모델의 성능이 매우 좋아져서 파인튜닝한 모델보다 오히려 더 만족스러운 결과를 보여주었다. 최근의 GPT 모델들은 대규모 데이터로 사전 학습되어 다양한 문맥에서의 정보 추출 능력이 향상되었기 때문이라고 생각이 드는데 특히, 명시적인 파인튜닝 없이도 few-shot 혹은 zero-shot 방식으로도 고정밀의 정보 추출이 가능해져서 이런 결과가 나오지 않았나 싶다.

또한, 파인튜닝 모델은 데이터셋의 품질이나 양, 편향에 따라 성능이 제한적일 수 있는 반면, 범용 GPT는 더 일반화된 성능을 제공할 수 있어 이런 수준에서는 더 이상 파인튜닝이 필요가 없겠구나 싶었다! 하지만 그 과정을 이해한 것만으로도 모델의 작동 원리와 한계, 그리고 무엇을 개선할 수 있을지를 체감할 수 있었고, 실전에서의 선택 기준도 더 분명해진 느낌이라 꽤 의미 있는 경험이었다

728x90