Hacker News

WangNet – 1.8 MB, zero-dependency Numberwang adjudication in 11 languages

WangNet — 1.8MB 무의존성 신경망으로 11개 언어의 '넘버왕'을 판정하기

영국 코미디 스케치 'Numberwang'의 판정을 수행하는 초소형 신경망 프로젝트입니다. 모델 전체가 1.8MB JSON 파일이며 추론 코드는 순수 Python 표준 라이브러리 약 100줄로, PyTorch나 NumPy 없이 동작합니다. 11개 언어의 숫자 표현을 문자 단위로 처리하며, 농담 프로젝트이지만 의존성 없는 추론 구현의 극단적인 사례를 보여줍니다.

본문

GitHub에 공개된 WangNet은 숫자가 'Numberwang'인지 여부를 판정하는 신경망입니다. Numberwang은 Mitchell and Webb의 영국 TV 코미디 스케치에 등장하는 가상의 퀴즈쇼로, 어떤 숫자가 Numberwang인지에 대한 규칙이 의도적으로 불명확한 것이 유머의 핵심입니다. 이 프로젝트는 그 판정을 실제 신경망으로 구현했습니다. 전체 모델이 1.8MB짜리 JSON 파일 하나이고, 추론 코드는 순수 Python 표준 라이브러리 약 100줄입니다. PyTorch도, NumPy도, 설치할 것도 없이 클론 후 바로 실행할 수 있으며, 유일한 요구사항은 Python 3.8 이상입니다.

판정 방식과 입력 처리

CLI로 숫자나 표현을 넘기면 네 가지 판정 중 하나를 신뢰도와 함께 반환합니다: 'That's not Numberwang', 'THAT'S NUMBERWANG!', 'That's not even a number', 'That's Wangernumb! Rotate the board!'입니다. 인수 없이 실행하면 대화형 모드로 진입합니다. 처리 가능한 입력의 범위가 넓습니다. 숫자는 아라비아 숫자와 단어 표기 모두 지원하며, zweiundzwanzig(독일어), veintidós(스페인어)처럼 11개 언어를 악센트 없이도 인식합니다. '5*2'나 'twelve plus four' 같은 산술식은 계산 결과를 기준으로 판정하고, 1 또는 44에 해당하는 값은 Wangernumb로 판정됩니다. 음수, 소수, 통화 기호, 단위, 시각 표기, 로마 숫자(XLIV), 서수(22nd)도 처리합니다. 'fortnight'처럼 숫자에서 파생된 단어는 그 숫자로 판정하는 반면, 'often'이나 'money'처럼 숫자를 우연히 포함한 단어는 숫자로 취급하지 않습니다. 'shinty-six' 같은 허구의 숫자도 숫자로 인정하며, 숫자 내용이 전혀 없는 입력은 'Numberwang이 될 수 없다'고 판정합니다. 저자는 'wangness'가 숫자 자체의 속성이라고 설명합니다. four, vier, quatre, cuatro는 모두 같은 판정을 받습니다.

모델 구조

아키텍처는 문자 임베딩(32차원)에서 시작해 Conv1d(128, 커널 3)와 ReLU 두 겹, global max pooling, Linear(128), ReLU, Linear(4), softmax로 이어지는 간단한 문자 수준 컨볼루션 네트워크이며 파라미터는 80,804개입니다. 네트워크가 문자를 직접 읽기 때문에 추론 시점에는 토크나이저도, 정규화기도, 규칙 엔진도 없습니다. 숫자와 연산자, 정답 판정, 11개 언어 지식이 전부 가중치 안에 들어 있고 model.json이 그 전부를 담고 있습니다. Python API로 load_model과 wang_probabilities를 import해 네 클래스 확률 벡터를 얻을 수도 있고, Hugging Face Spaces에 호스팅된 데모와 Gradio 기반 로컬 데모도 제공됩니다. 다만 Gradio는 데모용일 뿐 모델 자체에는 필요 없습니다.

성능과 한계

486개의 홀드아웃 판정에서 정확도 88.9%, macro-F1 0.896을 기록했습니다. 상한은 대략 98%인데, 학습 레이블의 약 2%가 '오랜 판정 관행에 따라' 반전되어 있기 때문입니다. 쇼의 판정이 본질적으로 자의적이라는 설정을 반영한 농담입니다. 클래스별로는 Wangernumb가 F1 0.937로 가장 좋고, Numberwang 0.910, not a number 0.886, not Numberwang 0.851 순입니다. 약점은 보지 못한 피연산자의 산술로 44~72%에 그칩니다. 네트워크가 계산하는 게 아니라 암기하기 때문에 '5*2' 같은 흔한 식은 정확하지만 '904 * 3'은 추측에 가깝습니다. 저자는 산술 정확도가 중요하면 식을 먼저 평가해서 결과를 넘기라고 권합니다. 라이선스는 MIT이며, 특정 숫자가 Numberwang인지 여부에 대해 어떤 보증도 하지 않는다는 고지가 붙어 있습니다.

Hacker News 반응

  • @codeulike — 이게 뭔지 모르는 사람들을 위해 Mitchell and Webb의 'Numberwang' 스케치 영상 링크를 공유했습니다.
  • @tclancy — 미국인 입장에서 상대방이 배경을 모르니 기분 상하게 하지 않고 소리 내어 말할 수 있는 대사라는 점이 특히 좋다고 했습니다.
  • @tialaramex — 스케치 속 스누커 해설자들이 술을 마셨을 것 같은 설정이 매우 영국적이며 특정 시대의 영국이라고 평했습니다. 어린 시절 스누커와 다트 선수들이 실제로 취한 상태로 경기하던 시절이 있었고, 자신이 성인이 될 무렵엔 프로 의식이 바뀌었다는 회상을 덧붙였습니다.
  • @toyg — 'Are we the baddies?', 'WATCH THE FOOTBALL!' 등 Mitchell and Webb의 다른 전설적인 대사들을 나열하며 반가워했습니다.
  • @codeulike — 쇼의 대사 'there's everything to play for ... And forever to play it in!'를 인용하며 스케치의 분위기를 재현했습니다.

원문: GitHub / 번역·요약: Trawling