사람인, AI 공고 자동생성 서비스 (with ChatGPT)

Jinhoo Jang
saraminlab
Published in
8 min readJul 13, 2023

7월 초 사람인에서 간편공고에 사용할 AI 공고 자동생성 서비스를 런칭하였다. 공고 자동생성에 관련하여 그동안 다양한 시도를 하였는데 어떻게 런칭하였고, 어떤 문제들이 있었으며 어떻게 해결하였는지 포스팅을 통해 알려드리고자 한다.

AI가 생성한 공고 본문

시작, ChatGPT가 아닌 GPT

그동안 사람인의 AI Lab에서는 다양한 서비스를 내재화하였다. 추천 엔진과 알고리즘도 클라우드 서비스를 사용하지 않고 직접 만들었으며, 최근에 구축한 자기소개서 코칭 및 자기소개서 평가인 스펙트럼 서비스 역시 다양한 자연어처리 전문가들과 언어학 박사와의 작업으로 완성하였기에 이번 공고 생성 역시 기존처럼 내재화를 통해서 구축을 하고 싶었다.

SK에서 공개한 KoGPT2
카카오에서 만든 GPT-3 기반의 KoGPT

처음에는 공개된 GPT 모델들 중에 KoGPT(2.0, 3.0 모두 사용) 등과 같이 국내에 공개된 모델들을 Few Shot Learning등의 방식을 사용하여 구축 진행중이었지만 얼마지나지 않아 공개된 ChatGPT API를 사용하고 나서부터는 도저히 사용을 할 수가 없었다.

KoGPT
KoGPT 기반 공고 생성 데모 화면

“KoGPT의 경우 비록 버전이 더 낮지만, 국내 대기업이 국내 데이터들을 학습하였기에 성능이 괜찮을 것이다” 라고 생각했던 내 예측은 고스란히 무너졌는데 실제 만든 서비스는 예측하지 못하는 말들과 반복적인 키워드(위 데모 화면에서 R, R이라고 적힌 것을 볼 수 있음)를 내뱉는 등의 문제가 발생하였다.

결국 ChatGPT(GPT 3.5)의 성능을 따라하고자 하위 모델인 공개된 GPT 모델을 활용하였으나, 결국에는 ChatGPT의 압도적인 성능과 공고 생성을 할 때 높은 컴퓨팅 파워를 사용하는 것이 버거워 결국에는 ChatGPT로 완전히 노선을 변경하게 되었다.

ChatGPT도 완벽하지 않다

처음에는 완벽에 가까운 ChatGPT의 성능에 자연어처리 개발자들을 걱정하게 되었지만, 점점 예상치 못한 문제에 직면하게 되면서 마치 RDB(관계형 DB)에서 NoSQL로 전환하던 시절처럼 시행착오들이 기다리고 있었다.

우선, 동일한 프롬프트(Prompt)를 던져도 예상치 못한 결과가 튀어나오는 경우가 있었다. 원인은 모르겠으나 테스트가 늘어나면서 Response의 정확도가 점점 이상해져만 갔다.

사실 ChatGPT가 만들어내는 공고 내용의 텍스트는 정상적이었지만 이를 그대로 공고로 활용하기에는 무리가 있었다. 예를 들어, “채용사이트에 올릴 인공지능 공고를 생성해줘”와 같은 간단한 프롬프트를 던졌다면, 아래와 같이 프롬프트의 내용을 그대로 적는 일이 비일비재하였다.

채용사이트에 올릴 인공지능 공고를 만들어보겠습니다. ~~~~~

게다가 프롬프트가 길어질 경우 원하는 값을 던져주지 못하는 빈도가 늘어나게 되면서, 결국 문제를 방지하기 위해 공고를 JSON 구조로 항목(모집분야, 우대사항 등)별 생성하는 방식으로 변경하였다.

{채용사이트에 올릴 인공지능 공고를 만들어보겠습니다. "모집분야":[~~

이 구조로 변경한 이후에는 결과가 잘못될 경우, 위 JSON 예시처럼 구조가 이상하기에,파싱 실패로 데이터를 사용하지 않게 되면서, 이상한 공고가 나오는 것을 원천적으로 방지하게 되었다.

다만 JSON 구조로 변경한 이후 공고 생성에 실패한 케이스가 전보다 훨씬 많이 발생하는 문제도 존재하였는데, 그래도 이상한 공고를 생성하는 케이스보다는 이 방식이 낫다 판단하였다.

점점 이상해져가는 ChatGPT

문제는 ChatGPT의 인기가 급증 할수록 사람들이 많이 써서 그런지 결과까지 나오는데 시간이 오래 걸리기 시작하고, JSON으로 결과를 생성할 때 실패하는 비율도 점점 늘어나기 시작했다.

초기의 공고 생성에 걸리는 시간은 10~20초 사이였는데, 어느 시점엔가 60초가 넘는 경우가 비일비재 하였으며, 이상한 말들이 나오는 비율도 2배 이상 급증하였다.

실패 케이스는 프롬프트 요청을 Thread로 여러개 생성하여 비용이 많이 늘더라도 실패 발생보다 더 많이 생성하면 되지만, 문제는 생성 시간이었다. 기획에서는 1분 이상 넘어가면, 문제가 있다 판단하여 1분이 넘어갈 경우 API를 끊어버리게 되는데 이 문제를 두고볼 수가 없었다.

Two Track, 내부 딥러닝 모델

서비스를 런칭하였는데 ChatGPT의 모든 응답이 1분 이상 걸리게 될 경우, 웹서버에서는 모든 요청을 끊어버리기에 이는 사실상 서비스가 중지 되는 것과 동일한 상황이었고 이를 방지하기 위해서 노선을 변경할 수 밖에 없었다.

결국 투트랙 방식으로 요청이 들어올 때 자체 공고 생성 모델로 공고를 제공하고, 동시에 ChatGPT도 요청하여 ChatGPT와 다른 모델을 결합하여 제공하는 방식으로 전환하게 되었다. 이는 챗봇과도 유사한데 챗봇의 경우 Rule-Based와 딥러닝 모델을 결합하듯 공고 생성 모델도 다양한 모델을 혼재하여 사용하게 되었다.

공고 생성 엔진

데이터 수집

우선 데이터를 수집해야 하는 문제가 있었는데 이는 ChatGPT의 장점이라 생각해서 런칭전까지 매일 ChatGPT를 5천번 이상 호출하여 특정 업종, 모집분야와 직업에 대한 공고를 생성하였다.

추가로 사람인 내부의 공고 중 인기가 많고, 검증된 본문의 공고를 파싱하여 마찬가지로 데이터를 수집하였다. 기존 공고의 경우 민감한 정보가 존재할 수 있기에 많이는 하지 못했지만, 매일 일정수의 공고를 수동으로 수집하였다.

마지막으로 사용자가 서비스로 요청한 ChatGPT의 생성 결과도 다시 임시 데이터들이 저장되어 있는 콜렉션으로 보내고, 내부 검토 후 완료된 것은 서비스로 사용할 수 있는 재활용 공고가 되어 다양한 공고 생성 요청들을 확인할 수 있으며, 공고 내용을 다시 활용할 수 있는 구조로 만들었다.

분류 모델

몇십만건의 공고 데이터를 확보한 순간에는 이제 특정 키워드와 공고를 매칭하는 작업이 남아 있었는데 이는 분류 모델을 활용하였다.

공고를 생성하기 위해서는 업종과 직무·직업 그리고 모집분야를 넣게 되어 있다. 이를 분류하는 모델에 던지게 되면, 가까운 대표 모집분야와 직업을 결과로 주게 되고 이를 기반으로 기 생성된 공고를 가져올 수 있다.

공고 입력 폼

예를 들어, 위의 공고 입력 폼의 예시처럼 업종에는 종합병원, 직무를 간호사, 모집부문을 대형병원 간호사 모집이라고 입력 했을 경우 해당 값들을 기반으로 모집분야는 “병원 간호사”, 직업은 “간호사”라는 텍스트 결과를 리턴하게 된다.

이렇게 얻어 낸 모집부문과 직업의 값을 기반으로 기 생성된 공고를 찾아내고, 찾아낸 공고를 제공하면 ChatGPT로 만든 결과처럼 제공을 해줄 수 있으며 비용은 들지 않고 훨씬 빠른 서비스가 가능하다.

다만 여기서도 문제는 존재하는데 바로 학습하지 못한 모집분야와 직업을 요청할수도 있다는 것이다. 즉, 한번도 학습하지 못한 모집분야를 요청할 경우 적재된 공고가 없지만, 딥러닝은 어떻게든 분류를 할 것이기에 엉뚱한 공고를 서비스할 수 있는 위험이 있다.

이를 방지하기 위해서 형태소 분석을 통해서 유사한 단어가 존재하는지 등을 찾게 되고, 없을 경우 분류 시스템을 호출하지 않고 ChatGPT만 호출하여 문제를 예방하게 되었다.

이런 케이스는 내부적으로 관리기 등을 통해서 예상치 못한 모집분야가 들어오는 것을 실시간으로 확인할 수 있는 시스템을 구축해 놨으며, 예상하지못한 모집분야는 분류 모델의 다음 학습을 통해서 처리가 될 것이다.

런칭 효과

간편공고 등록 추이(숫자값 제거)

AI 공고 자동생성은 간편공고에만 반영하였으며 7월 4일 런칭한 서비스이다. 보편적으로 가장 많이 공고를 등록하는 월요일을 기준으로 계산할 때, AI 자동생성 런칭 후 약 40%에 가까운 간편 공고가 증가하였다. (증가 수치는 비공개)

공고자동생성의 서비스 고도화

이번 공고 자동생성 서비스에는 ChatGPT와 내부 딥러닝 모델을 병행하였지만 Google의 Bard, 네이버 클로바 등과 같이 ChatGPT 경쟁 회사들의 초거대 언어모델을 사용하지는 못하였다.

사실 포스팅에 적지 않았지만, ChatGPT 이전에 네이버 클로바 및 카카오의 유료 언어 모델을 사용하려고 했으나, 네이버의 경우 내부 테스트 중이기에 사용하지 못한 문제가 있었고 카카오 역시 마찬가지였다.

시간이 지나면 ChatGPT처럼 자유롭게 사용이 되는 시점이 온다면, ChatGPT만 호출하지 않고, 동시에 여러 모델에 요청해서 응답을 사용하여 어떠한 모델을 선택하는지 진행을 할 예정이다.

외부 API를 사용하는 것과 동시에 내부의 딥러닝 모델은 더욱 고도화하여 궁극적으로는 공고를 생성하는 것도 자체적으로 썩 좋은 모델을 만들어보는 것을 시도하고자 한다.

--

--