개인정보만,
검게.
Noir는 문서와 ‘가리고 싶은 것’의 지정을 받아, 해당하는 부분을 목록으로 돌려주는 마스킹 전용 소형 LLM입니다. 밖으로 내보내기 전의 문서를 사내 CPU만으로 처리할 수 있습니다. 스크롤하면 빛줄기가 문서를 가로지릅니다.
JA担当の山田太郎です。お電話は03-0000-1234までお願いします。
ENPlease call Emily Carter at (555) 010-4477 before March 3.
DEFrau Anna Becker wohnt in der Lindenstraße 12, 10115 Berlin.
HRIvan Horvat (42 godine) javio je da je na bolovanju.
※ 예문과 이름·번호는 모두 가상입니다. 위 동작은 예시를 재생한 것입니다.
지정은
평소 쓰는 말로.
‘개인정보’, ‘연락처’, ‘단, 나이는 제외’. 평소 말하듯 지정하면 같은 문서라도 가리는 곳이 달라집니다. 버튼을 누르거나 그대로 지켜봐 주세요.
제목: (견본상사) 계약 내용 확인
견본상사 총무부 홍길동 님
안녕하세요. 주식회사 네코데이터의 성춘향입니다.
11월 20일(금)에 계약 갱신에 대해 상의드리고 싶습니다. 월 요금은 480,000원 그대로입니다.
담당자 이몽룡 님(42세)은 허리 통증으로 오늘 쉬신다고 들었습니다.
연락은 02-0000-1234 또는 [email protected]으로 부탁드립니다.
보내실 곳: 서울시 종로구 가나다로 12 견본빌딩 5층
※ 이 칸은 동작 예시이며, 정해진 답을 재생하고 있습니다(실제 모델은 돌아가지 않습니다). 예문은 모두 가상입니다.
120B보다
과하게 가리지 않는다.
일본어·영어 문서 각 100건으로, gpt-oss-120b(1,170억 파라미터)에 같은 지시를 내려 비교했습니다. 위의 종이는 각 오류의 예시입니다. 아래 막대는 그 오류가 일어난 비율로, 짧을수록 좋은 결과입니다.
※ 자체 제작한 테스트에서의 실측(2026년 11월, Q4_K_M, 이메일·전화·URL·날짜의 범용 규칙 병용). 자세한 조건은 페이지 맨 아래에 있습니다.
모호한 지정일수록
차이가 난다.
가리지 못한 누락이 얼마나 많은지를 천칭으로 비교합니다. 누락이 많은 쪽이 내려갑니다. 종류를 분명히 나열한 지정에서는 비슷하지만, ‘개인정보’처럼 모호한 지정이나 ‘단, ~는 제외’가 붙으면 차이가 벌어집니다.
Noir0%
gpt-oss-120b0%
※ 일본어·영어 합계. 누락률(%, 1칸 = 1%). 지정의 내역은 종류를 나열한 지정 69건, 모호한 지정 104건, 제외 조건이 붙은 지정 27건.
4개 언어,
각각의 성적.
언어별로 전용 Noir를 준비했습니다(일본어·영어는 공통). 노란색이 gpt-oss-120b보다 좋은 수치입니다.
- 크로아티아어·독일어의 누락은 gpt-oss-120b와 거의 같습니다. 누락의 대부분은 ‘02.11.2026’, ‘14:12 Uhr’ 같은 유럽식 날짜와 시각이었습니다.
- 이런 형식의 날짜·시각을 잡는 규칙을 2개 더하면, 추산으로는 누락이 크로아티아어 31→23%, 독일어 25→15%로 내려가 gpt-oss-120b(24%·19%)보다 낮아집니다. 제품에 반영할 예정입니다. 예정
돌아오는 것은
JSON.
찾아낸 부분을 같은 대상끼리 묶은 목록으로 돌려줍니다. 문서에 적힌 그대로의 문자열이라서, 본문에서 바로 찾아 바꿀 수 있습니다.
- id: 같은 사람·같은 대상은 하나로 묶입니다(‘이몽룡’과 ‘몽룡’).
- type: 48종의 라벨 이름. 프롬프트의 언어로 돌아옵니다(영어라면 ‘person name’).
- mentions: 문서에 적힌 그대로의 문자열. 해당하는 것이 없으면
[].
다음 문서에서 대상에 해당하는 것을
모두 찾아 주세요. …(생략)
출력은 JSON 배열만: [{"id": "E1",
"type": "...", "mentions": ["..."]}]
대상:
개인정보. 단, 나이는 제외
방식: 마스킹(replacements는 넣지 않음)
문서:
(여기에 문서)문서 1장을
약 20초에.
노트북 CPU(GPU 없음)로 약 900자 문서를 읽고 가릴 부분을 돌려주기까지를 재생합니다. 재생은 5배속, 시계는 실제 초 수입니다.
0.0초5배속 재생
문서 읽기가릴 부분 쓰기
가린 곳 0 / 0
- 지정
- 이름·전화번호·이메일 주소·주소
- 읽기
- 약 140 토큰/초
- 쓰기
- 약 24 토큰/초
- 장비
- Core i7-11800H·8스레드
- 이 속도로 차례로 처리하면 1대로 1시간에 약 17만 자입니다.
- GPU로 16건을 동시에 처리하면 문서 100건이 약 20초였습니다(gpt-oss-120b는 약 90초). 사내 측정
※ 문서와 가리는 부분은 예시입니다(이 페이지 안에서 모델이 돌아가는 것은 아닙니다). 시간은 사내에서 측정한 읽기·쓰기 속도로 계산했습니다. 같은 사람을 가리키는 표현은 하나로 묶어 한 번에 가립니다.
1,000자씩
잘라서 넘긴다.
긴 문서는 1,000자 정도의 덩어리로 자른 뒤 하나씩 넘깁니다. 학습 때 본 길이에 맞추면 놓치는 것이 줄어듭니다. 결과는 마지막에 합치고, 이메일·전화·URL·날짜처럼 정해진 형식을 잡는 규칙과 함께 씁니다.
실행(llama.cpp)
llama-server -m noir-ja-en-Q4_K_M.gguf \ -c 16384 -t 8 -np 1 --jinja --port 8191
공개 중가중치 다운로드 →
- 사고 모드는 끄고(
enable_thinking: false),temperature 0으로 사용합니다. - 언어별로 모델을 고릅니다: 일본어·영어는 ja-en, 독일어는 de-en, 크로아티아어는 hr-en.
- CPU(Core i7-11800H·8스레드)로 1,000자 덩어리가 약 20초. 사내 측정
같은 문서를
지시 하나로 다르게 칠한다.
예시 문서에 지시를 골라 시험해 볼 수 있습니다. 지시를 바꾸면 같은 문서라도 가리는 곳이 달라집니다. 모델에 보내는 프롬프트와 돌아오는 JSON도 그대로 볼 수 있습니다.
1문서 고르기
2지시 고르기고르면 바로 실행
또는 종류를 직접 고르기
모델에 보내는 프롬프트
돌아오는 JSON
[]
측정 방법과
상담.
- 문서: 일본어·영어·독일어·크로아티아어 각 100건. 이메일·회의록·인사 메모·청구서·진료 정보 등 테스트용으로 만든 가상의 문서이며, 가려야 할 부분에 정답 표시를 해 두었습니다.
- 지정: 문서마다 ‘종류 나열’, ‘모호한 표현’, ‘제외 조건’ 중 하나. gpt-oss-120b(reasoning effort medium)에도 같은 프롬프트를 넘겼습니다.
- 지표: 누락 = 정답 중 가려지지 않고 남은 비율, 과잉 마스킹 = 가린 부분 중 불필요했던 비율, 지정 위반 = 지정하지 않은 종류를 가린 비율.
- 실시: 2026년 11월, Q4_K_M. 정식 공개 전에 다시 검토합니다.