데이터 라벨링의 자동화 혁명! 시간과 비용을 아끼는 ChatGPT의 강력한 활용방법

ChatGPT를 활용한 텍스트 데이터 라벨링 방법

0. 시간과 비용을 절약하는 데이터셋 구축: ChatGPT로 데이터 라벨링하기

인공지능 모델을 훈련시키기 위해, '문제'와 '정답' 쌍으로 이루어진 데이터셋이 필요합니다. (지도 학습 기준) 이때 데이터에 정답, 즉 라벨을 부여하는 것을 '라벨링'이라고 합니다.
 
 

1. 데이터의 중요성, 양질의 데이터란?

직접 AI 모델을 개발하는 분들은 아마 "데이터가 다 했다"라고 느끼는 경우가 많으실거에요.
물론 좋은 AI 모델을 위해 최신 알고리즘, 고성능 컴퓨팅 등 중요한 요소는 다양하죠.
하지만 독자님이 AI 및 데이터 관련 직군의 주니어라면, 일단 데이터의 가치에 주목하는 것이 현명한 선택이라고 생각합니다. 높은 품질의 데이터처럼 말이죠.
 
'질 좋은' 데이터는 무엇일까요? 왜 중요할까요?
최신 AI 기술은 대부분 인공신경망 기반의 딥러닝 모델이라고 봐도 무방합니다. 이 인공신경망은 인간의 학습 방법을 모방하고 있습니다.
갓 난 아기가 '엄마'라는 말을 내뱉기까지 엄마를 엄마라고 지칭하는 것을 -> 질 좋은 데이터(정확한 라벨링)
무수히 많이 목격하였을 것이다. -> 많은 데이터
엄마를 아빠라고 지칭한다면 -> 질 나쁜 데이터(부정확한 라벨링) 아기가 무척이나 혼란스러울 것이다.
시간이 지나 아기는 '나를 낳아주고 돌봐주는, 나를 업고 있는 이 사람'을 '엄마'라고 불러야 한다는 것을 배운다. -> 패턴 학습
데이터에서 유의미한 패턴을 학습하는 것, 이것이 인공지능 모델 학습의 핵심입니다.
이를 용이하게 만들어주는 것이 바로 양질의 데이터. 양질의 데이터는 AI 모델에게 좋은 선생님입니다.
 
 

2. ChatGPT에게 라벨링을 맡기는 이유

앞서 데이터의 양과 질이 중요하다고 기술했습니다.
다만, 많은 양의 데이터에 좋은 라벨을 부여하는 것은 지속적으로 신경을 써야하는 반복 업무이기에, 단조로우며 고단한 일입니다.
그래서 정부 기관을 비롯한 많은 기업들은 외주 업체 또는 단기 파트타이머들에게 데이터 라벨링 업무를 맡기곤 합니다.
이때 해시스크래퍼가 경험한 바, 여러 가지 문제에 필연적으로 직면하게 됩니다.
 
❗️첫째, 질 좋은 데이터를 보장할 수 없다. AI 모델 개발자가 그리는 AI 모델의 방향이 있고, 그 방향에 맞는 데이터 라벨링의 기준이 있습니다.
이 기준을 라벨러들에게 상세하게 전달한다고 하더라도, 라벨러마다 편차가 있을 수 있으며 한 명의 라벨러가 혼자 작업을 하더라도 반복 작업 중에 집중력이 떨어질 수도 있다. 사람이기에 완벽한 일관성을 갖기는 어려울 것입니다. (*휴먼에러 발생)
 
❗️둘째, 비용이 많이 발생한다. 가공해야 할 데이터의 양이 많을수록, 짧은 시간 안에 데이터셋을 구축해야 할수록 더 숙련된, 더 많은 노동력이 필요하게 될 것 입니다.
 
ChatGPT를 사용한 데이터 라벨링 역시 완벽하지 않을 뿐더러, 문제가 까다로울수록 프롬프트 작성에 어려움을 겪을 수도 있습니다. 그러나 비용 절감, 시간 단축, 일관성 측면에서 상당히 효과적인것은 누구나 인정할 것입니다. 또한 관련 직군 종사자라면, 거대 언어 모델과 친숙해지고, 언어 모델과 대화하는 법을 반드시 깨우쳐야한다고 생각합니다. 앞으로 프롬프트 엔지니어링은 업무 효율을 위한 기본 소양이 될 것이라고 감히 예측하고 있습니다.
 

3. ChatGPT로 데이터 라벨링하기

감정 분석 데이터셋을 만든다고 가정해보겠습니다.
 
 

3.1 OpenAI의 API key 받기

본 포스팅에서는 웹에서 라벨링을 진행하지 않고 ChatGPT의 API를 활용해보겠습니다.
먼저 아래의 링크에서 OpenAI 로그인 후, API 호출 비용 결제를 위한 결제 수단을 등록해야 합니다. https://platform.openai.com/
그 다음 API 키를 다운로드해야 합니다.
API 키를 처음 생성한 후에 반드시 따로 잘 저장해줍니다. 한 번 밖에 노출이 안되므로, 까먹으면 다시 생성해야 하는 문제가 있으니 주의해야 합니다.
 
 

3.2 프롬프트 작성

text = '맛있는 거 먹어서 기분이 너무 좋다.' # 감정 분석 대상 텍스트 prompt = f'''You're an assistant, labeling data on a consistent basis. Label the given text with one of the following sentiments: Positive, Negative, or Neutral. If you can't determine a sentiment, label the text as Neutral. Do not enclose your output in double or single quotes, just the label. Follow the example to analyze the sentiment. given text: 나 너무 우울해 sentiment: Negative given text: 오늘 아침 일찍 출근했다. sentiment: Neutral given text: {text} sentiment: '''
 
여기서 프롬프트를 작성하는 몇 가지 팁이 있는데요,
 
  • 영어로 작성
2023년 8월 기준, 현재까지는 언어 모델은 토큰 수 제약이 있음. 무제한으로 긴 질문을 던질 수 없으며, 토큰 수가 길어질수록 비용이 더 많이 발생. ChatGPT는 영어에 대한 토큰 효율이 가장 좋은 편. 쉽게 말해 같은 질문을 해도 영어로 질문할 경우 비용이 적게 발생함. 또한 결과값을 비교해보았을 때, ChatGPT는 영어에 대한 성능이 가장 우수한 것으로 판명.
 
  • ChatGPT에게 역할 부여하기
ChatGPT가 따라야 할 지시사항을 작성하기 전에 역할을 부여
 
  • 예시를 함께 제공하기
출력 포맷과 방식에 대해 가이드를 제공하는 것 이를 Few-shot Learning이라고도 함.
 
  • 상세하지만, 명료하게 작성하기
이는 토큰 효율을 위함과 동시에 정확한 답변을 유도하기 위함인데, 상세한 설명을 하되, 최대한 간단 명료하게 작성.
 
위의 내용을 참조하셔서 프롬프트를 작성해줍니다.
 

3.3 API 응답 요청하기(파라미터 설정)

response = openai.ChatCompletion.create( model='gpt-3.5-turbo', temperature=0, messages=[ {"role": "user", "content": prompt} ] ) sentiment = response.choices[0].message['content'] print(f'문장: {text}\\n감정: {sentiment}')
문장: 맛있는 거 먹어서 기분이 너무 좋다. 감정: Positive
 
그대로 코드를 실행해보면 동일한 결과를 확인할 수 있을 것입니다. 몇몇 파라미터에 대해 아래의 설명을 참고하면 좋습니다.
 
  • temperature
가장 중요한 파라미터이다.
이 파라미터는 모델의 응답에 대한 다양성을 컨트롤합니다. temperature가 높을수록 다양하고, 창의적인 답변을 하고, temperature가 낮을수록 일관된 답변을 합니다. 우리는 '데이터 라벨링'을 하므로 이를 0(가장 낮은 값)으로 설정해보겟습니다.
언어 모델은 답변을 생성할 때, 여러 가지 답변에 대해 확률을 산정합니다. 'temperature=0'이 의미하는 바는 생성된 답변 중에 가장 확률이 높은 답변을 선택한다는 의미입니다. 더 복잡한 다른 질문을 반복해보면 알 수 있을 것입니다. ’temperature=0'이면, 동일한 답변만 반복하게 됩니다.
그리고 우리가 웹에서 데이터 라벨링을 진행하지 않은 이유는 아래와 같습니다. 1) 무수한 데이터를 라벨링하기 위해서는 반복 행위를 위한 코딩이 필요함. 2) 우리가 웹에서 사용하는 ChatGPT의 temperature는 특정 값으로 지정되어 있어 조정할 수 없음.
 
 
  • messages의 role: user, assistant, system
위 코드에서는 'user'의 메세지만 작성하였지만, 실제로 'user', 'assistant', 'system' 세 가지가 있습니다.
'user' 메세지에는 사용자가 ChatGPT에게 하고 싶은 질문 또는 지시 사항을 작성해주시면 됩니다.
'assistant' 메세지는 ChatGPT가 이전 대화 내용을 참조하게 하기 위한 메세지입니다. 우리가 웹에서 ChatGPT와 대화를 해보면 ChatGPT가 이전 대화 내용을 기억하면서 대화하는 것을 알 수 있습니다. 이것이 가능한 이유는 사용자가 질문을 할 때, 이전 대화 내용도 ChatGPT에게 함께 전달되기 때문입니다. 따라서 데이터 라벨링을 위한 작업에서는 필요없습니다.
'system' 메세지는 ChatGPT의 행동 양식을 지정합니다. 우리는 'user' 메세지에 ChatGPT의 역할을 부여했는데, 이 내용은 'system' 메세지에 작성해도 좋습니다. 그러나 이런 간단한 라벨링 작업에서 굳이 따로 system 메세지를 작성할 필요까지는 없습니다.
 
 

3.4 대량의 데이터를 라벨링한다면?

위까지의 과정은 데이터 한 건에 대한 라벨링을 보여드렸습니다. 개발 역량이 어느정도 있다면, 대량의 데이터를 반복하여 라벨링하는 것은 크게 어렵지 않을 것입니다.
단, 유의해야할 사항은 API 호출시 발생할 에러에 대해 예외 처리를 잘 하는 것입니다.
짧은 시간 동안 너무 많은 호출이 있거나, 네트워크 연결이 좋지 않은 경우 등 에러가 종종 발생하기 때문에 이를 예외 처리함으로써 안정적인 라벨링을 진행할 수 있습니다.
 
def sentiment_analyze(text): prompt = f'''You're an assistant, labeling data on a consistent basis. Label the given text with one of the following sentiments: Positive, Negative, or Neutral. If you can't determine a sentiment, label the text as Neutral. Do not enclose your output in double or single quotes, just the label. Follow the example to analyze the sentiment. given text: 나 너무 우울해 sentiment: Negative given text: 오늘 아침 일찍 출근했다. sentiment: Neutral given text: {text} sentiment: ''' try: response = openai.ChatCompletion.create( model='gpt-3.5-turbo', temperature=0, messages=[ {"role": "user", "content": prompt} ] ) sentiment = response.choices[0].message['content'] return sentiment except: sentiment = 'error' return sentiment df['label'] = df['text'].apply(sentiment_analyze)
 
 

4. 비용은 얼마인가?

2023년 8월 기준, 주로 사용되는 모델은 'gpt-3.5-turbo'와 'gpt-4'입니다. 예시와 같은 감정 분석처럼 단순 분류 데이터셋을 만드는 것은 3.5 모델로 충분합니다.
'gpt-3.5-turbo' 기준으로 유저의 질문의 경우 1,000토큰 당 0.0015달러, gpt의 응답의 경우 1,000토큰 당 0.002달러의 비용이 발생합니다.
위 예시에서 사용한 프롬프트의 경우 약 200 토큰 정도에 불과합니다. 단순 계산으로 3달러면 약 1만 건의 감정 분석 데이터셋을 라벨링할 수 있습니다.
하지만 복잡한 문제를 다룰 때는 명령 프롬프트도 더 구체적이고 복잡해지며, 3.5 모델을 사용하는 것은 한계가 있을 수도 있습니다.
이때 gpt4 모델을 활용하여 해결할 수 있는 것들이 많은데, 비용이 20~30배인 것을 고려하면, 신중한 결정이 필요하실겁니다.
 
 

5. 결론

단순한 반복 업무의 라벨링이라면, 비용과 성능을 고려하였을 때, ChatGPT 사용을 망설일 필요가 없습니다. 단, GPT4 모델을 사용해야 할 수준의 복잡한 업무를 맡겨야 한다면, 비용에 대한 충분한 검토가 함께 이뤄져야겠죠.
텍스트 데이터에만 한정된 방법이라는 점, OpenAI의 가격 정책에 의존해야 한다는 점, 라벨링된 데이터로 GPT 모델의 성능을 상회하는 AI 모델을 만들기는 어렵다는 점 등 단점도 있습니다.
하지만 오픈소스 진영에서도 급격히 발전을 이뤄내고 있고, 이러한 단점들은 빠른 시일내로 해결될 수 있을것으로 예측됩니다.
텍스트 데이터셋을 구축할 때, 이제는 인간 라벨러보다 우선순위로 고려할 방식이라고 생각합니다. ChatGPT는 저임금으로, 쉬지 않으면서 나의 일을 도울 수 있는 조수입니다. 잘 활용하시어 원하시는 바를 얻으실 수 있었으면 좋겠습니다.