더 좋아진 AI 작성 코드 주석 탐지기
개발자가 AI가 생성한 코드 주석과 사람이 작성한 주석을 구분하는 분류기를 공개 데이터와 더 견고한 기반 위에 재구축하여 공개했습니다. 웹 브라우저에서 실행되어 붙여넣은 내용이 외부로 전송되지 않으며, 교차 검증 기준 균형 정확도 77%, 실제 데이터 테스트에서는 88%를 기록했습니다. UI에서 텍스트의 어떤 부분이 판단에 기여했는지 피처 활성화를 클릭으로 확인할 수 있는 것이 특징입니다.
이전 AI 주석 분류기를 학습시킬 때 일부 개인적인 비공개 데이터를 사용했고 다소 불안정한 기반 위에 구축했기 때문에 코드나 데이터를 공유할 수 없었습니다. 이번에 공개 데이터와 더 나은 기반 위에 다시 만들었습니다! 먼저 직접 사용해 보시면 좋습니다. 웹 페이지에 붙여넣은 내용은 브라우저를 벗어나지 않으므로 무엇이든 안심고 시험해 볼 수 있습니다. 이전 버전을 일부 테스터들에게 시험해 보도록 초청했고, 대체로 긍정적인 피드백을 받았습니다.
이전 글에서 '클로드식 표현'을 분석했던 것처럼 로봇 특유의 표현을 세부적으로 나누지는 않겠습니다. 새 분류기의 UI에서는 분류 중인 텍스트의 어떤 부분이든 클릭하면 해당 부분에서 어떤 피처가 활성화되는지, 그것이 전체 판단에 어떻게 기여하는지 확인할 수 있기 때문입니다. 피처 활성화 확장 보기의 예시도 있습니다.
성능 면에서 핵심 수치는 77%의 균형 정확도(balanced accuracy)입니다. 이는 사람이 작성한 주석과 로봇이 생성한 주석이 동일한 비율로 나타난다고 가정할 때 분류기가 사람 vs 로봇 판정을 맞히는 비율입니다. 분류기는 또한 교정(calibration)된 예측 확률을 출력하는데, 이는 각 판정이 정확할 확률로 읽을 수 있다는 뜻입니다. 이는 교정 곡선(calibration curve)을 통해 검증하며, 이 곡선은 알려진 확률의 사건에 분류기가 어떤 확률을 부여하는지 보여줍니다. 모든 점이 기준 대각선에 매우 가깝게 위치하므로 근사적으로 정확하다는 것을 알 수 있습니다. 이는 다양한 길이의 주석에서도 유지되며, 적합된 온도(temperature) 파라미터가 데이터 양이 늘어남에 따라 증가하는 확신도를 보정해 줍니다.
혼동 행렬(confusion matrix)을 보면 분류기의 실패 유형을 더 자세히 알 수 있습니다. 이 표에서 '로봇'이 탐지하려는 양성 클래스입니다. 약어는 진양성/가양성/진음성/가음성 비율을 뜻합니다.
판정: 사람 | 판정: 로봇 입력: 사람 — tnr = 0.73 | fpr = 0.27 입력: 로봇 — fnr = 0.20 | tpr = 0.80
사람이 작성한 것이 확인된 입력이 주어지면 분류기는 73%의 확률로 사람으로 올바르게 판정합니다. 로봇이 작성한 것이 확인된 입력은 80%의 확률로 올바르게 판정됩니다. 즉 두 경우 모두(사람 확인/로봇 확인) 오류율이 약 25% 정도라는 뜻입니다. 높게 들릴 수 있습니다! 하지만 이 오류율은 가능한 모든 입력에 대한 집계치라는 점을 기억하세요. 분류기가 분류할 때마다 교정된 예측 확률을 출력하므로 크게 신경 쓸 필요는 없습니다. 따라서 개별 판단에서 가양성 위험이 낮은지 높은지 알 수 있습니다. 분류기가 매우 확신할 때(예: 확신도 80% 이상) 가양성 위험은 5%로 떨어집니다. 분류기가 불확실할 때(확신도 약 50%)는 교정 특성상 절반 정도의 확률로 잘못된 판정을 내리게 됩니다.
혼동 행렬의 수치를 언급한 것은 분류기를 논의할 때 자주 사용되기 때문이며, 보다 학술적인 독자들이 기대할 수 있어서입니다. 요청된 다른 수치들도 있습니다: 정확도(Accuracy) 77%, 정밀도(Precision) 75%, 재현율(Recall) 80%, 민감도(Sensitivity) 80%, 특이도(Specificity) 73%, F1 점수 77%. 정확도, 정밀도, F1 점수는 기저 비율에 따라 달라지지만, 여기서는 무지 가정, 즉 사람 작성 주석과 로봇 생성 주석이 동일하게 섞여 있다는 가정 하에 계산했습니다. 이 모든 수치는 교차 검증에서 나온 것입니다.
또한 사람과 로봇의 실제 댓글로 구성된 소규모 비합성 세트를 수동으로 테스트하여 분류기가 표본 외에서 얼마나 일반화되는지 확인했습니다.
판정: 사람 | 판정: 로봇 입력: 사람 — tnr = 0.89 | fpr = 0.11 입력: 로봇 — fnr = 0.14 | tpr = 0.86
이는 다음과 같은 성능 수치로 이어집니다: 정확도 88%, 정밀도 89%, 재현율 86%, 민감도 86%, 특이도 89%, F1 점수 87%. 아주 좋은 결과입니다! 비합성적이고 더 실제에 가까운 사례가 학습 데이터보다 분류기가 구별하기 쉬운 것으로 보입니다. 물론 이 모든 것은...