정확도를 넘어서: 채용 사기 공고를 구조로 읽는 손실 함수

분류 정확도와 latent space 구조를 하나의 손실로 함께 다듬는 centroid-guided contrastive loss를 채용 사기 공고 탐지 맥락에서 읽어봅니다.

원문 논문 보기
'정확도를 넘어서: 채용 사기 공고를 구조로 읽는 손실 함수' 기사 커버 이미지

Beyond Accuracy: Centroid-Guided Contrastive Loss for Structured Fraudulent Job Posting Detection는 arXiv 2609.21599로 공개된 논문으로, 채용 사기 공고 탐지에서 분류 정확도와 latent space 구조를 하나의 손실 함수로 함께 다듬겠다고 제안합니다. 원문은 제목 아래에 걸어둔 링크에서 확인할 수 있습니다.

이 글은 그 주장을 순서대로 따라갑니다. 왜 정확도만으로 부족한지에서 출발해 centroid를 이용한 top-k push and pull이 latent space를 어떻게 다시 빚는지로 이어지고, 마지막에는 EMSCAD에서의 결과를 어디까지 받아들여야 하는지를 짚어봅니다.

안녕하세요, 패트릭입니다.

구인 사이트를 뒤적이다 보면 조건이 너무 좋아서 오히려 손이 멈추는 공고가 있습니다. 월급은 높지만 하는 일 설명은 짧고, 연락은 개인 메신저로만 받겠다고 적혀 있는 그런 글 앞에서라면요. 그렇다면 모델도 이런 멈칫을 배울 수 있을까요.

제가 이 논문에 오래 머문 이유는 그 멈칫을 숫자 하나로 환원하지 않겠다는 태도 때문이었습니다. 맞혔는지 틀렸는지를 넘어서 모델 안의 공간이 사기라는 감각을 어떻게 담고 있는지까지 함께 보겠다는 제안이었으니까요. 문서 AI를 오래 보다 보면 정확도 숫자 뒤에 숨어 있는 공간의 모양이 궁금해지는 순간이 오죠. 이 논문은 바로 그 모양을 건드립니다.

왜 정확도만으로는 채용 사기를 막기 어려울까

채용 사기 공고는 겉으로 보면 멀쩡한 문서입니다. 문법이 깨져 있지도 않고 형식도 정상 공고와 크게 다르지 않습니다. 그런데 내용은 가짜이거나 사람을 속이려는 의도를 품고 있으니, 이 간극이 문제의 시작이 됩니다. 표면이 비슷하면 분류기는 표면 단서에 기대기 쉬우니까요.

여기서 재미있는 질문이 생깁니다. 정확도가 높다는 말은 무엇을 보장할까요. 테스트셋에서 많이 맞혔다는 뜻이기는 하지만, 모델이 사기라는 범주를 제대로 이해했다는 뜻과는 거리가 있습니다. 특히 사기가 드물고 모양이 자주 바뀌는 영역에서는 오늘의 정확도가 내일의 안전을 보장하지 않기 때문입니다.

실제 운영을 떠올려보면 감이 옵니다. 월요일 아침에 새로운 유형의 가짜 공고가 백 건쯤 들어옵니다. 그중 몇 건은 기존에 본 적 없는 문구로 포장되어 있습니다. 분류기가 작일까지는 잘 맞혔다고 해도 이런 낯선 변형 앞에서는 경계가 흔들릴 수 있고, 숫자 하나만 보고 있으면 그 흔들림을 미리 알기 어렵습니다.

저는 그래서 정확도라는 말을 들을 때마다 뒤에 한 문장을 덧붙입니다. 그 정확도가 어떤 공간 위에서 만들어졌는지부터 봐야 한다는 문장입니다. 공간이 엉켜 있으면 경계는 우연에 기대게 되지만, 공간이 정돈되어 있으면 경계는 설명할 수 있는 근거를 갖게 됩니다. 이 논문은 후자를 택하겠다는 선언처럼 읽혔습니다.

정상과 사기 공고가 centroid 주변에 모이는 latent space 개념도
정상과 사기 공고가 centroid 주변에 모이는 latent space 개념도

가짜 공고는 스팸과 뭐가 다를까

스팸은 대개 티가 납니다. 같은 문구가 반복되고 발신지가 수상하며 받는 사람이 행동을 취하도록 재촉하죠. 그래서 단어 몇 개만 잡아도 꽤 잘 걸러집니다. 반면 채용 사기 공고는 정상 문서의 옷을 입고 들어옵니다. 직무, 우대사항, 복리후생 같은 칸을 다 갖추고 있어 단어 빈도만으로는 가르기 어렵습니다.

생각해보면 사람도 비슷하게 속습니다. 저도 예전에 지인의 제보로 본 가짜 공고에서 회사 이름과 주소가 멀쩡해서 한참을 헤맸던 적이 있습니다. 나중에 알고 보니 급여 조건 문장 하나에 무리한 약속이 숨어 있었습니다. 전체가 가짜인 문서보다 일부만 비틀린 문서가 더 위험하다는 것을 그때 실감했습니다.

이 차이는 모델 설계로 직결됩니다. 문서 전체를 하나의 점수로 뭉개면 일부의 비틀림이 평균 속으로 사라지지만, 문서 안의 구조를 공간에 남기면 그 비틀림이 위치의 어긋남으로 드러납니다. 정상 공고들이 모인 동네와 사기 공고들이 모인 동네가 생기고, 그 동네 안에서도 미묘하게 결이 다른 골목이 보이는 식이니까요.

그렇다면 우리가 원하는 것은 단순한 정답률을 넘어 읽기 가능한 공간입니다. 어떤 공고가 왜 그 동네에 속했는지, 경계에 걸린 공고는 무엇이 아쉬워서 걸렸는지를 물을 수 있는 공간 말입니다. 이 논문이 clustering을 분류와 같은 선에 올린 이유도 여기에 있다고 저는 읽었습니다.

분류와 군집화를 하나의 손실로 묶으면 벌어지는 변화

보통 분류와 군집화는 따로 둡니다. 분류는 정답 라벨을 맞히는 일이고 군집화는 라벨 없이 비슷한 것끼리 모으는 일이다 보니, 둘을 섞으면 목표가 충돌할 거라는 걱정이 먼저 듭니다. 한쪽은 경계를 예민하게 세우려 하고, 다른 한쪽은 안쪽을 뭉치게 만들려 하니까요.

이 논문이 제안하는 Centroid-Guided Contrastive Loss, 줄여서 CGCL은 그 둘을 하나의 손실 함수로 합칩니다. 분류가 요구하는 결정 경계는 그대로 두면서 densely formulated clustering이라는 빽빽한 군집화 항으로 latent space를 계속 다듬겠다는 발상입니다. 말은 어렵게 들리지만 그림으로 보면 직관적입니다. 각 범주의 중심을 잡고 그 중심을 기준으로 당기고 미는 일을 매 스텝마다 반복하는 것입니다.

저희가 새로운 AI 아키텍처를 볼 때도 benchmark 숫자만 보지는 않습니다. 실제로 무엇이 바뀌었고, 그 변화가 시스템에서 어떤 비용 구조를 만드는지를 함께 봅니다. 이런 눈으로 보면 CGCL의 변화는 손실 하나를 더한 수준에 그치지 않습니다. 학습의 매 순간에 공간의 모양을 평가하고 고치는 피드백이 들어간다는 점에서 훈련의 성격 자체가 달라지기 때문입니다.

물론 합친다고 다 좋아지는 것은 아닙니다. 분류 손실이 너무 세면 공간은 경계 맞히기에 급급해지고, 군집화 항이 너무 세면 라벨과 어긋난 동네가 생길 수 있어서, 이 균형을 어떻게 잡았는지가 실제 성능을 가릅니다. 논문은 이 균형을 손실 하나의 설계로 풀겠다고 말하고 있으니, 다음 장면에서는 그 설계의 손잡이가 되는 centroid와 top-k 이야기로 넘어가겠습니다.

centroid가 이끄는 top-k push and pull은 어떻게 돌아갈까

centroid는 각 범주를 대표하는 중심점이라고 이해하면 됩니다. 정상 공고 임베딩들의 한가운데에 정상 centroid가 있고 사기 공고 임베딩들의 한가운데에 사기 centroid가 있는 식입니다. 중심이 있으면 개별 샘플은 혼자 헤매지 않아도 됩니다. 어디로 모여야 하는지를 알려주는 등대가 생기는 셈입니다.

CGCL은 이 등대를 기준으로 top-k push and pull을 수행합니다. pull은 같은 범주의 샘플을 centroid 쪽으로 당기는 일이고 push는 다른 범주의 샘플을 centroid에서 밀어내는 일입니다. 전부 다 당기고 미는 대신 상위 k개에 집중한다는 점이 독특합니다. 매번 가장 어긋난 녀석들부터 손보는 셈입니다. 학급 자리 배치를 떠올리면 비슷합니다. 전원을 한꺼번에 움직이면 교실이 소란스러워지지만 가장 멀리 앉은 몇 명부터 제자리로 돌려보내면 전체가 빨리 정돈되니까요.

여기서는 조금 조심해서 읽을 필요가 있습니다. top-k라는 말은 얼핏 들으면 소수만 챙기는 것처럼 들리지만, 학습이 반복되면 매 스텝의 상위 k가 계속 바뀌면서 결국 넓은 범위가 다듬어집니다. 꾸준히 공간을 다시 빚는다는 논문의 표현도 이런 반복을 가리킨다고 저는 이해했습니다. 한 번의 큰 손질 대신 작은 손질을 계속 이어가는 방식입니다.

실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. centroid를 매번 다시 계산하는 비용은 감당할 수 있을까요. 배치마다 중심이 출렁이면 학습이 불안해질 텐데, 중심을 얼마나 자주, 얼마나 부드럽게 갱신하는지가 구현의 감각을 가릅니다. 논문이 centroid-driven이라는 말을 앞에 내세운 만큼, 중심을 다루는 디테일이 전체 거동을 좌우한다고 봐야 합니다.

분류기 경계와 centroid-guided 학습의 차이 비교
분류기 경계와 centroid-guided 학습의 차이 비교

경계는 지키고 군집은 조밀하게 만든다는 말의 실제 뜻

결정 경계와 군집 조밀도는 서로 다른 잣대입니다. 경계는 정상과 사기를 가르는 선이 얼마나 정확한지를 재고 조밀도는 각 동네가 얼마나 단단하게 모여 있는지를 잽니다. 경계만 좋으면 아슬아슬하게 맞히는 모델이 되고, 뭉침만 좋으면 라벨과 동떨어진 예쁜 섬이 생깁니다. 둘 다 아쉬운 결과입니다.

CGCL이 내세우는 목표는 이 둘을 함께 잡는 것입니다. 경계의 정확도는 유지하면서 clustering compactness를 높인다는 표현이 바로 그것입니다. 문장으로 쓰면 한 줄이지만 훈련 장면에서는 두 개의 손이 동시에 움직이는 모습에 가깝습니다. 한 손은 경계선 근처에서 헤매는 샘플을 바로잡고 다른 한 손은 동네 안쪽으로 흩어진 샘플을 중심으로 모읍니다.

이 차이는 경계 근처 공고를 다룰 때 드러납니다. 금요일 오후에 새로 들어온 공고 한 건이 정상 centroid와 사기 centroid의 한가운데에 떨어졌다고 해보죠. 경계만 배운 모델은 그저 한쪽으로 찍을 뿐이지만, 공간까지 다듬어진 모델은 그 공고가 왜 중간에 머무는지를 짚어줍니다. 어떤 문장이 사기 쪽으로 끌고 있고, 어떤 칸이 정상 쪽으로 붙잡고 있는지를 읽을 수 있게 되니까요.

저는 이 대목을 문서 AI의 오래된 고민과 겹쳐서 읽었습니다. 문서 분류는 맞히는 일로 끝나지 않고, 틀렸을 때 왜 틀렸는지를 설명해야 하는 일로 이어지니까요. 공간이 정돈되어 있으면 오류 분석이 쉬워지고, 오류 분석이 쉬워지면 다음 데이터 수집이 쉬워집니다. 정확도 숫자 하나보다 이런 선순환이 더 오래 남는 자산이라고 저는 봅니다.

가짜끼리의 미묘한 차이를 잡는다는 주장을 어떻게 읽어야 할까

이 논문에서 제가 가장 오래 머문 부분은 사기 공고 사이의 미묘한 차이까지 담겠다는 대목이었습니다. 사기라는 한 묶음 안에도 결이 다르다는 주장이어서, 현장에서 사기를 다뤄본 사람이라면 고개를 끄덕일 만한 지적입니다. 어떤 글은 급여를 부풀리고, 어떤 글은 연락 창구를 흐리며, 어떤 글은 회사 정보를 교묘하게 빌려오니까요.

문제는 그다음입니다. 이런 세부 차이를 모델이 정말 구분하는지, 우리가 듣고 싶은 이야기를 논문이 대신 말해주는 것인지를 가려야 합니다. latent space에 작은 봉우리가 보인다고 해서 그 봉우리가 곧 사기 유형과 같은 말이라고 단정하면, 우연한 뭉침에 이름을 붙이는 실수로 이어지니까요.

그래서 저는 이 주장을 가능성으로 읽는 편이 맞다고 봅니다. centroid 주변에 빽빽한 군집을 만들면 세부 차이가 위치의 차이로 드러날 여지가 생기고, 그 여지가 생기면 사람이 들여다보고 유형을 붙일 수 있다는 뜻입니다. 모델이 유형을 알아서 이름 붙여준다는 뜻과는 거리가 있습니다. 공간이 질문을 던질 준비를 하고 답은 사람이 확인하는 구조에 가깝습니다.

이런 눈으로 보면 다음 할 일도 분명해집니다. 사기 동네 안의 작은 뭉침들이 시간이 지나도 유지되는지, 새로운 사기 유형이 들어왔을 때 기존 뭉침과 어떻게 관계 맺는지를 지켜보는 것입니다. 하루 이틀의 그림 대신 몇 주에 걸친 공간의 변화를 보면, 이 주장이 습관인지 체질인지가 드러날 테니까요.

centroid 계산과 top-k push and pull 흐름도
centroid 계산과 top-k push and pull 흐름도

EMSCAD 1등이라는 결과를 조심해서 읽는 법

논문은 공개 benchmark인 EMSCAD에서 state-of-the-art 성능을 달성했다고 밝히고 있습니다. 연구의 맥락에서 EMSCAD는 채용 사기 공고 탐지를 평가하는 공개 무대이고 여기서 가장 좋은 성적을 냈다는 말은 분명히 듣는 사람을 멈추게 합니다. 저도 처음에는 그 문장에서 손이 멈췄습니다.

그런데 여기서 잠깐 호흡을 고를 필요가 있습니다. 1등이라는 말은 같은 무대, 같은 규칙 안에서의 순위이지, 현실의 모든 채용 사이트에서 통한다는 보증으로 읽으면 곤란합니다. 데이터의 시기와 출처, 라벨의 기준, 정상과 사기의 비율이 바뀌면 순위는 얼마든지 흔들리니까요. 특히 사기처럼 상대가 계속 손을 바꾸는 영역에서는 어제의 1등이 내일의 답이 된다는 보장이 없습니다.

실제 시스템 관점에서 보면 물을 점이 더 있습니다. 어떤 backbone 위에 CGCL을 올렸는지, 배치 크기와 학습 길이는 어떻게 두었는지, centroid 갱신 주기는 어떻게 잡았는지에 따라 결과가 달라질 수 있습니다. 이런 조건이 가려진 채 숫자만 돌면 해석이 흐려집니다. 저는 숫자를 볼 때 숫자 자체보다 그 숫자가 어떤 조건 위에서 섰는지를 먼저 묻는 편입니다. 이번에도 마찬가지였습니다.

그럼에도 이 결과를 가볍게 볼 일은 없습니다. 분류 정확도와 군집 조밀도를 함께 놓고 SOTA를 찍었다는 말은, 적어도 EMSCAD라는 무대 안에서는 경계와 공간을 함께 잡는 접근이 통했다는 쪽으로 읽힙니다. 다만 그 통했다는 말을 무대 밖으로 들고 나갈 때는 한 박자 쉬어야 합니다. 무대 안의 승리와 현장의 승리는 다른 경기이기 때문입니다. 제가 앞으로 보고 싶은 것은 바로 그 두 번째 경기, 즉 시간이 흐르고 사기 문구가 바뀐 뒤에도 공간이 버티는지에 대한 기록입니다.

가짜 공고 안의 세부 군집을 보여주는 확대도
가짜 공고 안의 세부 군집을 보여주는 확대도

문서 AI를 만드는 입장에서 이 구조를 가져가 본다면

문서 AI 쪽에서 일하다 보면 분류기는 많지만 설명할 수 있는 분류기는 드물다는 말을 자주 듣습니다. 저희 팀 안에서 오가는 말도 비슷합니다. 무엇이 바뀌었고, 그 변화가 운영에서 어떤 비용을 만드는지를 묻는 것입니다. CGCL은 이 물음에 공간이라는 답을 건넵니다. 경계만 내놓는 대신, 그 경계가 서 있는 동네까지 함께 내놓는 식이니까요.

온보딩 장면을 하나 그려보죠. 새로 온 심사 담당자가 경계에 걸린 공고 스무 건을 앞에 두고 있습니다. 기존 화면이라면 점수와 라벨만 보였을 겁니다. 공간이 정돈된 화면이라면 각 공고가 어느 centroid에서 얼마나 떨어져 있는지, 주변에는 어떤 공고들이 모여 있는지가 함께 보이죠. 그러면 사람은 점수를 외우는 대신 위치를 읽게 되고 그 읽기가 쌓이면 심사 기준이 됩니다. (처음에는 저도 이런 화면을 상상하면서 읽었습니다. 논문에 화면 이야기가 나오는 것은 아닙니다. 공간이 주는 가능성을 제가 운영 장면으로 번역한 것입니다.)

이런 그림이 가능하려면 serving 쪽의 질문도 따라와야 합니다. 임베딩을 저장하고 centroid까지의 거리를 매번 계산하면 조회 비용이 늘어납니다. 이 비용을 실시간 심사에서 감당할 수 있을지, 배치 후처리로 돌릴지를 정해야 하죠. 문서 양이 많아지면 벡터 조회가 병목이 되기 쉬우니까요. 학습이 예쁘다고 운영까지 예쁘다는 보장은 없어서, 조회 경로와 캐시 전략을 함께 그려야 합니다.

그럼에도 가져갈 만한 감각은 분명합니다. 문서 분류를 점수 맞히기를 넘어 동네 만들기로 바라보는 감각이죠. 동네가 잘 만들어지면 새로운 사기 유형이 들어왔을 때 어디에 집을 지어줘야 할지가 보이고, 그 보임이 곧 데이터 수집 계획이 됩니다. 저는 이 논문을 기법 하나보다 이런 관점의 제안으로 읽는 쪽에 가깝습니다.

정확도가 전부라는 말을 곧이곧대로 믿으면 생기는 일

분기 마감 주에 숫자 하나가 좋아 보이면 손을 멈추기 쉽습니다. 숫자가 좋으니 다음 분기까지 손대지 말자는 결정이 나오고, 그 사이에 사기 문구는 조용히 바뀝니다. 모니터링 화면의 숫자는 한동안 멀쩡해 보이는 것이죠. 그러다 어느 날 경계 근처 공고가 한꺼번에 쏟아지면서 뒤늦게 손을 댑니다.

이때 공간을 함께 본 팀과 숫자만 본 팀의 대응은 달라집니다. 공간을 본 팀은 centroid에서 멀어지는 공고들의 흐름을 미리 보고 어떤 문구가 동네를 흔드는지를 추적하지만, 숫자만 본 팀은 틀린 건이 쌓인 뒤에야 움직입니다. 밤사이 공시가 늦게 도착해도 라인을 멈출 수 없는 운영처럼, 채용 심사 라인도 멈출 수 없어서 조기 신호의 유무가 큽니다.

여기서 오해하지 말아야 할 대목이 있습니다. 공간을 본다고 해서 정확도가 뒷전으로 밀려나는 일은 없습니다. 경계가 틀리면 사람이 그만큼 더 봐야 하니까요. 다만 정확도를 공간과 함께 보면 숫자의 결이 달라집니다. 그날의 점수에서 그달의 체질로 시선이 옮겨가는 것이죠. 이 논문이 정확도를 넘어서자고 말할 때, 저는 정확도를 버리자는 말 대신 정확도가 서 있는 땅까지 보자는 말로 받아들였습니다.

그렇다면 우리 팀의 대시보드는 무엇을 보여줘야 할까요. 저는 정답률 옆에 centroid까지의 거리 분포, 경계 근처 건수의 추이, 새로 생긴 작은 뭉침의 개수를 두는 상상을 했습니다. 숫자 대신 움직임이 드러나는 화면 말입니다. 이런 화면이 있으면 다음 주에 어떤 유형이 올지를 미리 걱정할 수 있게 됩니다.

EMSCAD 문서가 인코더를 거쳐 구조화된 임베딩으로 바뀌는 과정
EMSCAD 문서가 인코더를 거쳐 구조화된 임베딩으로 바뀌는 과정

그래서 채용 공고를 넘어 남는 질문은 무엇일까

지금까지 CGCL이 겨냥한 무대는 채용 사기 공고였습니다. 이 발상이 통하는 곳은 그 바깥에도 있죠. 보험 청구서, 대출 서류, 지원서처럼 정상과 비정상이 문서의 옷을 바꿔입고 나타나는 영역이 그렇습니다. 겉은 멀쩡하지만 일부만 비틀린 문서가 문제 되는 곳마다 공간을 함께 다듬는 접근은 써볼 여지가 있습니다.

질문도 바뀌었습니다. 예전에는 어떻게 하면 분류기를 더 맞히게 할지를 물었죠. 이제는 어떻게 하면 공간이 정돈된 분류기를 만들지를 묻게 됩니다. 전자가 점수의 질문이라면 후자는 체질의 질문이죠. 체질을 묻기 시작하면 평가의 눈도 달라집니다. 테스트셋 점수 옆에 군집의 모양, 시간에 따른 흔들림, 새 유형에 대한 반응을 함께 묻게 되니까요.

저는 여기서 멈칫했습니다. 공간이 예쁘다고 그 공간이 곧 진실과 같은 말이라고 받아들이면, 사람이 개입할 자리를 어디에 둘지가 남기 때문입니다. 작은 뭉침에 이름을 붙이고, 경계에 걸린 건을 직접 보고, centroid가 흔들릴 때 기준을 다시 세우는 일은 결국 사람의 몫인데, 이 몫을 시스템 안에 어떻게 심을지가 다음 설계라고 봅니다.

결국 남는 것은 사람을 어디에 둘지라는 질문입니다. 모델이 동네를 만들고 사람이 그 동네를 읽는 구조라면, 읽는 사람의 시간과 주의를 어디에 쓸지가 관건이 됩니다. 채용 공고라는 구체적인 무대에서 시작했지만, 이 논문이 오래 남긴 것은 그 읽기의 가능성을 드러냈다는 점이라고 저는 정리합니다. 다음에는 그 읽기가 현장에서 어떤 속도로 돌아가는지를 보고 싶습니다.

채용 사기 심사 파이프라인의 운영 개념도
채용 사기 심사 파이프라인의 운영 개념도

참고 자료

  1. Beyond Accuracy: Centroid-Guided Contrastive Loss for Structured Fraudulent Job Posting Detection · arxiv.org

    리뷰 원문