AI/ML

검사기가 자기 성적을 잘못 보고하고 있었습니다

AI에게 일을 맡기기 시작하면 검사 장치가 따라 늘어납니다. 사람이 결과물을 일일이 다 볼 수 없으니 자동으로 훑는 스크립트를 만들어 붙이고, 그 스크립트가 통과를 내면 다음 단계로 넘깁니다. 코드 린터, 테스트, 배포 전 점검, 문서 검사 — 형태는 달라도 하는 일은 같습니다. 사람 대신 봐 주는 것입니다.

방동걸 프로필 사진
(주)웨이스 대표이사
연재 초록불의 안쪽 1/2

AI에게 일을 맡기기 시작하면 검사 장치가 따라 늘어납니다. 사람이 결과물을 일일이 다 볼 수 없으니 자동으로 훑는 스크립트를 만들어 붙이고, 그 스크립트가 통과를 내면 다음 단계로 넘깁니다. 코드 린터, 테스트, 배포 전 점검, 문서 검사 — 형태는 달라도 하는 일은 같습니다. 사람 대신 봐 주는 것입니다.

그런데 그 검사 장치가 실제로 일하고 있는지는 누가 봅니까.

저희에게 그 질문이 사고로 돌아온 이야기를 적습니다. 대상은 저희가 사내에서 쓰는 문체 검사 스크립트입니다.

무엇을 검사하는 도구인가

저희는 제안서·보고서·블로그 글을 여러 사람이 나눠 작성합니다. 사람마다 말투가 다르면 회사가 두서없어 보여서, 쓰지 않기로 한 표현 목록을 만들어 두었습니다. 번역투와 영어 문장 구조를 그대로 옮긴 문장이 주 대상입니다.

그 목록을 사람이 매번 눈으로 대조할 수는 없어서 파이썬 스크립트 하나를 만들었습니다. 문서 경로를 넣고 돌리면 걸린 문장을 줄 번호와 고칠 말까지 짚어 줍니다. 문서를 낼 때마다 이걸 돌렸고, 매번 통과가 나왔고, 그 통과를 믿고 문서를 내보냈습니다.

그 스크립트가 얼마나 잘 잡는지는 저희 규약 문서에 "자가검증 15/15"라고 적혀 있었습니다. 15개 항목을 시험해 15개를 다 잡았다는 뜻입니다.

그런데 그 검증을 돌릴 시험 문제가 코드에 없었습니다. 15/15는 예전에 사람이 손으로 한 번 세어 보고 적어 둔 숫자였고, 그 뒤로 아무도 다시 재지 않았습니다. 검사기는 매일 돌면서 매번 통과를 냈지만, 그 통과가 무엇을 근거로 나오는지 확인한 적이 없었습니다.

어제 처음으로 실제로 쟀습니다. 규칙 39종, 재현율 40/40, 자연문 47문장에 오탐 0.

숫자 자체는 나쁘지 않았습니다. 문제는 그것을 아무도 모르고 있었다는 것입니다. 검사기가 잘 잡고 있었다는 것도, 못 잡고 있었다는 것도 확인할 방법이 없는 상태로 몇 주를 보냈습니다.

이 글은 그 사건을 그대로 적은 글입니다. 저희가 만든 검사 장치가 저희를 어떻게 속였는지, 그 첫 회차입니다.

검사기는 매일 돌았고 매번 통과했습니다

저희는 문서를 낼 때마다 금지 표현 검사기를 돌립니다. 번역투와 어색한 차용어를 잡는 도구입니다. 매번 [PASS]가 나왔습니다.

여기서 저희가 착각한 것이 하나 있습니다. 검사기가 통과를 냈다는 것은 "문제가 없다"가 아니라 "내가 문제를 못 찾았다"입니다. 두 문장은 화면에서 똑같이 초록색으로 보입니다.

잡아야 할 것을 하나도 못 잡아도 통과가 나옵니다. 오히려 아무것도 못 잡는 검사기가 가장 조용하고, 가장 자주 통과를 냅니다.

그래서 검사기에는 성적표가 따로 필요합니다. 이 검사기가 잡아야 할 것을 실제로 잡는가. 그것을 재는 별도의 장치입니다. 저희 문서에는 그 성적표의 숫자가 적혀 있었는데, 정작 그 숫자를 만드는 장치가 없었습니다.

다른 일을 하다가 걸렸습니다

찾아낸 경위가 허무합니다. 저희를 잡으러 간 것이 아니었습니다.

외부 연구 하나를 저희 작업 방식에 적용할지 검토하던 중이었습니다. 그 검토에서 "우리 도구 중 자가검증이 있는 것"을 세어 보려고 명령어를 쳤습니다.

$ 금지어_스윕.py --selftest error: unrecognized arguments: --selftest

문서에 적혀 있는 기능이 코드에 없었습니다. 규약 문서는 그 명령어를 근거로 15/15를 말하고 있었고, 명령어 자체가 없었습니다.

숫자는 계기에 떠 있었고, 그 숫자를 만드는 것은 어디에도 붙어 있지 않았습니다
숫자는 계기에 떠 있었고, 그 숫자를 만드는 것은 어디에도 붙어 있지 않았습니다

이런 결함은 스스로 신고하지 않습니다. 검사기가 매일 통과를 내고 있었으니 아무 경보도 울리지 않았습니다. 옆에서 다른 것을 세다가 우연히 손이 닿은 자리였습니다.

고친 방법 — 검사기가 자기 성적을 증명하게 했습니다

세 가지를 했습니다.

  • 검증 세트를 실제 파일로 만들었습니다. 걸려야 하는 문장 40개(양성)와 걸리면 안 되는 자연스러운 문장 47개(음성)를 규칙별로 채웠습니다. 규칙이 39종이니 종마다 자기를 걸리게 하는 문장이 최소 하나씩 있어야 합니다.

  • --selftest를 실제로 만들었습니다. 이제 명령어 하나로 재현율과 오탐이 함께 나옵니다. 실측값은 재현율 40/40, 오탐 0/47, 규칙 39종 중 양성 보유 39종입니다.

  • 그 세트를 자동 수정 대상에서 뺐습니다. 검사기를 고치는 쪽이 시험 문제까지 고칠 수 있으면 성적은 언제든 만점이 됩니다. 세트는 사람 승인 없이는 바뀌지 않는 자리에 두었습니다.

세 번째가 핵심입니다. 채점표를 만드는 것보다, 채점표를 시험 보는 쪽 손이 닿지 않는 곳에 두는 것이 어렵습니다.

채점표는 검사기 손이 닿지 않는 자리에 두었습니다
채점표는 검사기 손이 닿지 않는 자리에 두었습니다

이 사건에서 남는 것

저희가 배운 것을 세 줄로 적으면 이렇습니다.

  • 초록불은 상태가 아니라 그 검사기의 발언입니다. 발언의 신뢰도는 따로 재야 합니다.

  • 문서에 적힌 숫자는 그 숫자를 만든 장치가 지금도 도는지까지 함께 적혀야 합니다. 한 번 손으로 확인한 값과 매번 자동으로 나오는 값은 문서에서 똑같이 생겼습니다.

  • 자기 도구를 못 믿는 것이 기본값입니다. 저희는 자동화를 파는 회사인데, 저희 자동화가 저희에게 잘못 보고하고 있었습니다.

그리고 하나가 남았습니다. 이번에는 검사기를 검사하는 장치를 만들었는데, 그 장치가 제대로 도는지는 무엇이 보증합니까.

그 자리에서 또 한 번 걸렸던 이야기를 다음 회차에 적겠습니다. 이번에는 저희 안에서 걸린 것이 아니라, 바깥에서 먼저 알려 줬습니다.

이 글이 도움이 되셨다면 공유해 주세요

새 글이 올라오면 메일로 알려드립니다

제조 현장에서 확인한 것들을 기록합니다. 광고성 발송은 하지 않습니다.

우리 공장은 지금 어느 단계일까요?

제조 AI 성숙도 자가진단 — 회사 정보 없이 10문항이면 됩니다.

무료 진단 받기
방동걸 프로필 사진
작성자
(주)웨이스 대표이사

제조 AI 운영체제 VEXPLOR를 만들고 있습니다. 스마트공장 구축 현장에서 데이터 표준화·온톨로지·디지털트윈·자율형공장을 다루며, 이 블로그에는 현장에서 실제로 부딪힌 문제와 그때 내린 판단을 씁니다.

contact@wace.me

이 문제를 실제 현장에서 풀고 있습니다

(주)웨이스는 제조 AI 운영체제 VEXPLOR로 데이터 표준화부터 자율형공장까지 만들어가고 있습니다. 제조 현장에서 AI가 실제로 무엇을 판단하는지 볼 수 있습니다.