- Jiang et al.의 “Low-Resource” Text Classification 논문에서 주목받은 gzip 기반 kNN 분류기 성능이 일반적인 kNN 정확도가 아니라, k=2에서 top-2에 가까운 방식으로 계산됐을 가능성이 있음
- 공식 저장소의
experiments.py안calc_acc는 동률 후보 중 정답 라벨이 하나라도 있으면 정답으로 처리해, 가까운 두 학습 샘플 중 하나만 맞아도 성공으로 계산됨 - 첫 4개 데이터셋의 “Full” 컬럼을 다시 계산하면 여러 수치가 바뀌며, KirundiNews에서는 gzip 방법이 최고 성능에서 최저 성능으로 내려감
- 별도 재구현 결과 공식 코드 출력은
top2와 항상 같았고, k=2 동률을 가까운 샘플 우선으로 풀면 사실상 k=1과 같은 결과가 됨 rand==True옵션은random.choice로 동률을 깨지만 논문 결과에는 쓰이지 않은 것으로 보이며, SogouNews는 데이터 크기 때문에 아직 실행되지 않음
논문 결과 재현 중 드러난 정확도 계산 문제
- 대상은 Jiang et al.의 “Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors로,
gzip기반 방법이 여러 신경망 기반 방법보다 높은 성능을 보인 표가 Twitter에서 주목받음 - 공식 소스 코드를 재현하는 과정에서 kNN 분류기의 정확도 계산 방식이 일반적인 방식과 다르게 동작하는 지점이 확인됨
- 특히 k=2에서는 정상적인 kNN(k=2) 정확도라기보다 top-2 정확도에 가까워, 논문 방법의 성능이 더 높게 잡힐 수 있음
k=2 kNN에서 동률이 문제가 되는 이유
- 논문 방법은 kNN classifier를 사용하며, Appendix C에 따르면 모든 실험에서 k=2를 사용함
- k=2 분류는 테스트 샘플마다 가장 가까운 학습 샘플 2개를 찾기 때문에 라벨 상태가 단순함
- 두 라벨이 같으면 해당 라벨을 예측하며, 결과적으로 k=1과 같은 답이 됨
- 두 라벨이 다르면 1:1 동률이 생기므로, 가까운 샘플 우선 같은 별도 동률 해소 규칙이 필요함
- 동률을 무작위로 깨면 1:1 동률의 절반에서는 더 먼 샘플을 고르게 되어, k=1보다 나아지기 어려움
calc_acc가 동률을 처리하는 방식
- 문제 지점은
experiments.py의calc_acc메서드임 - 코드 흐름은
sorted_pred_lab에 top-k 샘플의 라벨과 카운트를 모으고, 라벨별로 묶은 뒤 카운트 기준으로 정렬함 - 가장 높은 카운트와 동률인 라벨들을 순회하다가, 그중 하나라도 테스트 라벨과 같으면
if_right = 1로 설정되어 정답 처리됨 - k=2에서 서로 다른 두 라벨이 각각 1표를 받으면, 두 후보 중 하나가 정답인지만 확인하는 셈이 됨
- 이 결과는 ImageNet에서 말하는 top-k 정확도와 비슷하지만, 여기서는 선택된 k개 라벨이 아니라 k개 학습 샘플을 기준으로 한다는 차이가 있음
- 이 메서드는 임의의 k를 받지만 모든 k에서 top-k를 계산하지는 않으며, k=2일 때 모든 후보가 최대 카운트 1로 묶이는 특수한 상황이 생김
calc_acc에는rand플래그가 있고rand==True에서는random.choice로 동률을 깨지만, 논문 결과에는 사용되지 않은 것으로 보임
재계산된 정확도 변화
- 첫 4개 데이터셋의 “Full” 컬럼에서 논문 수치와 수정된
knn2d수치는 다음과 같음
| 구분 | KinyarwandaNews | KirundiNews | DengueFilipino | SwahiliNews |
|---|---|---|---|---|
| 논문 | 0.891 | 0.905 | 0.998 | 0.927 |
수정 knn2d |
0.835 | 0.858 | 0.999 | 0.850 |
- 다섯 번째 데이터셋인 SogouNews는 크기가 커서 아직 실행되지 않음
- 이 차이로 실험 해석이 크게 바뀌며, KirundiNews에서는
gzip방법이 최고 성능에서 최저 성능으로 내려감
별도 구현으로 확인한 결과
- 별도 구현은 두 가지 동률 해소 전략을 사용함
r: 무작위 선택d: 동률이 없어질 때까지 k를 줄임
- 재구현 결과는 다음과 같음
| 방식 | kinnews | kirnews | filipino | swahili | 설명 |
|---|---|---|---|---|---|
table5 |
0.891 | 0.905 | 0.998 | 0.927 | 논문 표 수치 |
code |
0.891 | 0.906 | 1.000 | 0.927 | npc_gzip 저장소 사용 |
top2 |
0.891 | 0.906 | 1.000 | 0.927 | top-2 |
knn1r |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, 동률 무작위 |
knn1d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, 동률 시 k 감소 |
knn2r |
0.828 | 0.807 | 0.851 | 0.842 | kNN, k=2, 동률 무작위 |
knn3r |
0.838 | 0.791 | 0.851 | 0.881 | kNN, k=3, 동률 무작위 |
knn2d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=2, 동률 시 k 감소 |
knn3d |
0.843 | 0.794 | 0.904 | 0.883 | kNN, k=3, 동률 시 k 감소 |
- 검산 결과는 공식 코드가 무엇을 계산했는지 보여줌
table5는code와 0.001 또는 0.002 이내로 가까워 논문 수치를 재현할 수 있음code는 항상top2와 같아, 공식 코드 결과가 별도 구현한 top-2 결과와 일치함knn1r == knn1d이며, k=1에서는 동률이 발생하지 않음knn2d == knn1d이며, k=2에서 동률을 첫 번째 샘플로 풀면 k=1과 같아짐knn2r < knn2d이며, k=2의 1:1 동률에서 무작위 선택은 절반의 경우 더 먼 샘플을 택하게 됨
남아 있는 확인 사항
- 더 많은 k 값을 포함한 새 재구현은 gzip-knn에 있음
- DengueFilipino가 일부 경우 1.0처럼 매우 높은 이유는 후속 글 Part 2에서 다룸
table5와code가 두 경우에서 약간 다른 이유는 아직 확인 과제로 남아 있음