SELECT 1
Entry 0102026.10.20 화
One launch a day. Picked, run, explained.

2026.10.20 화

qwen3-4b-deslop: 시스템 프롬프트 없이 AI 문체 줄이기

오늘의 픽: qwen3-4b-deslop

qwen3-4b-deslop 은 Qwen3-4B 를 추가로 학습시켜 영어 글의 AI 문체 습관을 줄인 언어 모델이다.

오늘의 픽으로 선정한 이유는 문체 지시를 요청마다 보내지 않고 모델의 가중치에 반영했기 때문이다.

exit 0실행함작동한다. 시스템 프롬프트 없이도 em dash 와 이모지가 거의 나오지 않았다.
출처
Show HN
만든 방식
Qwen3-4B-Instruct-2507, LoRA, llama.cpp

무엇이 문제인가

LLM대규모 언어 모델. 많은 글로 학습해 글을 이해하고 생성하는 AI 모델이다. 이 쓴 영어 글에는 반복되는 습관이 있다. 문장 중간에 em dash영어 문장 중간에 설명을 끼워 넣거나 말을 끊을 때 쓰는 긴 줄표. 를 넣고, "not X, but Y" 꼴로 대비를 만들고, 항목을 세 개씩 나열한다. 독자는 이런 습관으로 AI 가 쓴 글을 알아본다.

Claude 에서는 문체를 프롬프트로 지시한다. Anthropic 은 platform.claude.com 의 프롬프트 작성 모범 사례 페이지에서, 출력 형식을 바꾸려면 하지 말아야 할 것 대신 해야 할 것을 지시하라고 안내한다. 같은 페이지에는 프롬프트의 문체를 원하는 출력의 문체에 맞추라는 조언도 있다. 이 방식에서는 지시문을 요청마다 함께 보내야 한다. 모델의 기본 문체는 바뀌지 않는다.

qwen3-4b-deslop 의 제작자는 이 모델 전에 다른 방법을 실험했다. 문체 점수는 제작자가 습관 26가지를 정규식으로 찾아 1,000단어당으로 계산하는 값이고, 낮을수록 습관이 적다. 원본 모델은 121, 사람 필자가 쓴 글은 보통 15 아래다. 생성하는 동안 모델 내부의 값을 조정하는 코드와 문체 시스템 프롬프트대화 앞에 붙여 LLM 의 역할과 말투, 규칙을 정하는 지시문. 사용자의 질문보다 먼저 모델에 전달된다.를 함께 사용하자 문체 점수가 약 15까지 내려갔다. 하지만 이 방식은 생성할 때마다 프롬프트와 코드를 함께 실행해야 했다. 부작용도 있었다. 평범한 글을 넣으면 다음 단어 예측이 원본 모델과 달라졌다. 문체 말고 다른 동작도 바뀌었다는 뜻이다.

어떻게 해결했나

Erik Markus Kannike 는 2026년 10월 19일 Hacker News 에 블로그 글 「Qwen3-4B with the AI writing tics trained out」을 Show HN개발자 커뮤니티 Hacker News 에서 자신이 만든 프로덕트를 소개하는 글. 제목이 "Show HN:"으로 시작한다. 글로 올렸다. 그는 학습으로 문체 교정을 모델의 가중치에 반영했다. 기반 모델은 Qwen3-4B-Instruct-2507 이다.

방법은 두 가지다. 첫째, "not" 을 쓰는 데 관여하는 뉴런 4개를 찾아 부호를 바꿨다. 제작자에 따르면 이 편집만으로 "not X, but Y" 가 70% 줄었다. 둘째, 지식 증류교사 모델이 쓴 답을 학습 데이터로 삼아 학생 모델을 학습시키는 방법. 교사는 보통 더 크거나 성능이 좋은 모델이다.를 세 번 반복했다. 교사 모델은 이전 회차의 모델에 뉴런 편집과 문체 프롬프트를 더한 것이다. 교사 모델이 학습용 질문 288개에 답하면, 제작자는 문체 점수 기준과, 문장이 깨지거나 주제를 벗어났는지 확인하는 검사를 통과한 답만 골라 LoRA모델의 원래 가중치는 고정하고 작은 행렬 몇 개만 추가로 학습하는 파인튜닝 방법. 학습할 값이 적어 노트북에서도 학습할 수 있다. 어댑터를 학습시켰다. 학생 모델은 문체 프롬프트 없이 그 답을 생성하도록 학습된다.

두 번째 회차의 모델은 문체 점수가 9.9 까지 내려갔지만, 입장이 없는 의견 글을 쓰고 존재하지 않는 연구를 인용했다. 그래서 세 번째 회차에는 답이 요청한 장르와 길이에 부합하는지 검사하는 규칙을 추가했다. 마지막 회차의 학습 데이터는 답 161개다. 완성한 모델은 원본 모델과 같은 방식으로 로드할 수 있다. 양자화모델의 가중치를 더 적은 비트의 숫자로 저장해 파일 크기와 메모리 사용량을 줄이는 일. 정확도가 조금 떨어질 수 있다.한 GGUFllama.cpp 와 Ollama 가 읽는 모델 파일 형식. 모델을 실행하는 데 필요한 가중치와 설정을 파일 하나에 담는다. 파일(2.5 GB)은 llama.cpp 나 Ollama 로 실행한다.

무엇이 다른가

첫째, 문체를 정하는 방식이 다르다. Claude 는 요청마다 받는 지시문에 따라 문체를 바꾼다. qwen3-4b-deslop 은 LoRA 학습과 뉴런 편집으로 가중치를 바꾼 모델이라, 시스템 프롬프트 없이도 바뀐 문체로 글을 쓴다. 오늘 시스템 프롬프트 없이 에세이 6개를 생성하자 원본은 em dash 를 23번, deslop 은 3번 썼다. 생성할 때 쓰는 난수의 시드를 바꾸면 같은 질문에도 다른 답이 나온다. 시드 3개로 deslop 을 세 번 더 실행하자 답 18개에 em dash 가 하나도 없었다. 트레이드오프는 유연성이다. 지시문은 요청마다 바꿀 수 있지만, 가중치에 반영한 문체를 바꾸려면 다시 학습해야 한다. 기본 문체만 바뀌었고, em dash 를 쓰는 능력은 유지됐다. 오늘 em dash 를 넣은 문장을 요청하자 deslop 도 em dash 를 썼다.

둘째, 다른 능력에 미치는 영향이 다르다. 제작자는 사람 필자가 쓴 글 22편을 넣고, 다음 단어 예측이 원본 모델과 얼마나 달라지는지 측정했다. 차이가 작을수록 문체 밖의 변화가 적다는 뜻이다. deslop 의 차이는 생성 중에 값을 조정하는 방식의 약 3분의 1 이었다. 같은 측정에서 deslop 은 사실을 묻는 질문과 산수 질문 30개를 모두 맞혔다. 트레이드오프는 글의 질이다. 모델 카드Hugging Face 의 모델 저장소에 있는 설명 문서. 학습 방법과 권장 설정, 한계를 적는다.에는 문장이 밋밋하고 지어낸 이름과 장소가 자주 나온다고 적혀 있다.

무엇이 편해지나

  • 로컬 모델로 짧은 영어 글을 생성하는 개발자. 문체 지시문을 시스템 프롬프트에 넣지 않아도 em dash, 소제목, 이모지가 적게 나온다. 오늘 에세이 6개에서 원본은 소제목 4개와 이모지 15개를 썼다. deslop 에는 같은 질문 6개를 시드를 바꿔 네 번씩 넣었다. 답 24개 어디에도 소제목과 이모지가 없었다.
  • AI 가 쓴 초안을 다듬는 편집자. 고쳐야 할 문체 습관의 수가 줄어든다. 오늘 "not X, but Y" 꼴의 문장은 7개에서 1개로 줄었다. 다만 deslop 이 해시 테이블을 설명한 답에는 Here's how it operates step by step: 처럼 뒤에 올 내용을 미리 알리는 문장이 나왔다. 제작자는 이런 문장을 줄였다고 밝혔다.

어떻게 만들었나

  • 블로그 글에 따르면 학습은 M2 MacBook Air 에서 회차마다 1~3시간 걸렸다. 어댑터는 rank 16 의 LoRA 이다.
  • 뉴런 편집은 notxy-flip4.json 파일에 레이어와 뉴런 번호, 배율 -1 로 적혀 있다. Hugging Face 저장소에는 병합한 가중치와 LoRA 어댑터, notxy-flip4.json 이 함께 공개돼 있다.
  • 문체 점수는 습관 26가지를 정규식으로 찾는 검출기로 계산한다. 모델 카드에는 이 검출기가 lab/slopscore.py 로 적혀 있지만, 이 파일이 있는 저장소의 공개 주소는 찾지 못했다.
  • Hugging Face 의 모델 저장소는 2026-10-17 에, GGUF 저장소는 2026-10-19 에 만들어졌다.

실행해 보니

모델 파일을 내려받고 아래 순서로 시험했다.

  1. 설치. llama-cpp-python 0.3.36 을 소스에서 빌드하는 데 2분 21초 걸렸다. 이 라이브러리로 llama.cpp 를 Python 에서 호출한다. deslop 의 Q4_K_Mllama.cpp 의 양자화 형식 가운데 하나. 가중치를 주로 4비트로 저장한다. Q8_0 은 8비트로 저장한다. 파일은 2,497,279,552 바이트였다.
  2. 비교 대상. 원본 Qwen3-4B-Instruct-2507 의 Q4_K_M 파일(unsloth 배포)을 함께 실행했다. 두 모델에 같은 질문 9개를 같은 설정으로 넣었다. 시스템 프롬프트는 넣지 않았고, 모델 카드의 권장값(temperature 0.7, top-p 0.9, repeat penalty 1.1)을 사용했다. 답의 길이는 최대 320토큰으로 제한했다.
  3. 에세이 6개. LinkedIn 글 2개, 블로그 글, 의견 글, 설명문 2개다. em dash 는 원본 23개, deslop 3개였다. 1,000단어당으로 환산하면 16.9개와 2.4개다. 제작자가 적은 값은 20.5개와 0개다.
  4. em dash 가 나온 곳. deslop 은 새 CRM 을 소개하는 LinkedIn 글에 It’s not perfect—some fields still need adjusting—but overall it’s working well. 라고 썼다. 하늘이 파란 이유를 설명하는 글에도 em dash 가 하나 나왔다.
  5. 다른 습관. "not X, but Y" 꼴은 직접 만든 정규식으로 찾았다. 원본 7개, deslop 1개였다. 원본은 소제목 4개, 굵은 글씨 18개, 이모지 15개를 썼다. 첫 실행의 deslop 답에는 소제목, 굵은 글씨, 이모지가 하나도 없었다. deslop 이 해시 테이블을 설명한 답에는 뒤에 올 내용을 미리 알리는 문장 Here's how it operates step by step: 과 번호 목록이 나왔다.
  6. 길이. "about 150 words" 를 요청하자 deslop 은 139단어, 원본은 126단어를 썼다. 모델 카드에는 이런 요청에 180~230단어를 쓰는 일이 많다고 적혀 있다. 오늘은 그보다 짧았지만 질문 하나의 결과다.
  7. 요청한 습관. em dash 를 넣은 문장과 "It's not X, it's Y." 꼴의 문장을 요청하자 두 모델 모두 요청대로 썼다.
  8. 재현. 시드 3개를 더 정해 deslop 에 같은 에세이 질문 6개를 다시 넣었다. 답 18개(3,965단어)에 em dash, 소제목, 이모지는 하나도 없었다. 첫 실행을 합치면 em dash 는 답 24개에서 1,000단어당 0.6개다. 굵은 글씨는 설명문 답 6개 가운데 2개에 나왔다.
  9. 속도. 4코어 CPU 에서 deslop 은 초당 약 7.7토큰, 원본은 약 8.2토큰을 생성했다.
$ python3 summary.py base deslop
base    essays=6 words=1363 emdash=23 notxy=7 headers=4 bold=18 emoji=15
deslop  essays=6 words=1272 emdash=3 notxy=1 headers=0 bold=0 emoji=0
$ python3 rep_score.py | tail -1
answers=18 with_emdash=0 words=3965 emdash=0 per1000=0.0

확인하지 못한 것

  • 제작자의 문체 점수. 습관 26가지의 배점이 적힌 검출기 코드를 찾지 못했다. 코드가 공개되면 오늘의 답에 그대로 적용해 보자.
  • 병합한 가중치(bf16)와 Q8_0 파일. 제작자의 수치는 병합한 가중치 기준이다. Q8_0 파일에 같은 질문과 시드를 넣어 Q4_K_M 의 결과와 비교하자.
  • 세 개씩 나열하는 습관과 지어낸 이름. 정규식에는 넣지 않았다. 답을 직접 읽고 측정해 보자.
  • 한국어 글. 모델 카드에도 짧은 영어 글만 시험했다고 적혀 있다. 한국어 질문으로 같은 비교를 해 보자.

판정

작동한다. 시스템 프롬프트 없이도 em dash 와 이모지가 거의 나오지 않았다. 다만 첫 실행의 에세이 6개 가운데 2개에 em dash 가 나왔다. 해시 테이블 설명문에는 뒤에 올 내용을 미리 알리는 문장이 나왔고, 시드를 바꾼 실행에서는 굵은 글씨도 나왔다. 로컬 모델로 짧은 영어 글을 생성하면서 문체 지시문을 요청마다 넣고 싶지 않은 경우에 써 볼 만하다. 한국어 글이나 긴 글은 시험한 범위 밖이라 이 모델은 적합하지 않다.

얻어갈 것

  • 문체 습관을 측정할 때는 같은 질문을 원본 모델에도 넣어 비교하자. 오늘 em dash 는 원본 23개, deslop 3개였다.
  • 모델 카드의 수치는 배포한 파일로 여러 번 측정해 확인하자. 오늘 Q4_K_M 파일로 실행한 deslop 은 첫 실행에서 em dash 3개를 썼고, 시드를 바꾼 세 번의 실행에서는 하나도 쓰지 않았다.
  • 가중치로 문체를 바꿔도 생성한 글을 검사하는 단계는 유지하자. 첫 실행에서는 요청하지 않아도 에세이 2개에 em dash 가 나왔다.

시작하기

  1. pip install llama-cpp-python
  2. curl -LO https://huggingface.co/erikkannike/qwen3-4b-deslop-v4-GGUF/resolve/main/qwen3-4b-deslop-v4-Q4_K_M.gguf
필요한 것
Python 3, C++ 컴파일러, CMake. llama-cpp-python 을 소스에서 빌드한다 · 디스크 2.5 GB. GPU 와 API 키는 필요 없다
비용
Apache-2.0, 무료. 모델 파일을 내려받아 로컬에서 실행한다.

질문은 llama-cpp-python 의 create_chat_completion 함수에 시스템 프롬프트 없이 user 메시지 하나로 전달했다. 모델 카드에는 Ollama 로 실행하는 한 줄 명령도 적혀 있다.

실행해서 확인한 절차다.

진행

  1. 3일응답함
  2. 7일응답함
  3. 15일예정
  4. 30일예정
  5. 90일예정
  6. 180일예정
  7. 365일예정

최근 확인 7일, 2026.10.26 월

사이트 응답
200
HN 득표
144 → 158

저장소가 없는 픽이라 무엇이 바뀌었는지 알 수 없다. 사이트 응답과 HN 반응만 확인한다.

전체 이력 보기 →