
Arion은 화면에 보이는 문맥이 음성 입력의 이름 표기를 바로잡을 것이라는 직관을 실험으로 검증했다. 그 결과 화면 문맥은 일부 모델에서 받아쓰기 내용을 바꾸거나 CPU 사용만 늘렸고, 다른 실험에서는 음향 모델의 재인식이 텍스트 모델보다 효과적이었다.
Arion은 중국어·영어 또는 두 언어가 섞인 말을 받아 적는 로컬 우선 음성·병음 입력기다. 키를 누른 채 말하면 음성 인식과 선택형 로컬 교정 모델이 전사를 다듬어 커서 위치에 입력한다. 예를 들어 “Wednesday, no wait, Thursday”를 “Thursday”로 고친다.
화면의 텍스트를 OCR로 읽어 교정 모델에 전달하는 기능은 몇 차례 직접 시험했을 때 이름을 모두 맞혔다. 하지만 별도 검증 세트에서 Qwen3 4B는 화면에 열린 张巍의 메시지를 받아쓰기한 张伟 대신 입력했고, 출력 검증기도 이를 허용했다. 기본 모델인 Qwen3 1.7B는 화면·커서 주변 텍스트·받아쓰기 이력을 켜든 끄든 30개 중 9개를 통과했다.
화면 문맥 실험에서는 30개 사례 가운데 방해가 되는 창, 화면에 표시된 프롬프트 인젝션, 발음이 비슷한 이름, 관련 없는 받아쓰기 이력 등 부정 사례 7개를 포함했다. 문맥 출처를 하나씩 시험한 뒤 조합했다. 커서 주변 텍스트는 통과 사례를 늘리지 않았고, 최근 받아쓰기 이력은 1~2개를 더했다. 화면 텍스트는 Qwen3 4B에서 대부분의 개선을 이끌었다.
- macOS Vision의
accurateOCR은 중앙값 기준 107ms였고, Qwen3 4B의 통과 사례를 5~6개 늘렸다.fast모드(중앙값 30ms)는 중국어를 읽지 못해 그중 2개를 잃었다. - Qwen3 1.7B는 모든 문맥 설정에서 9개를 통과했다. Qwen3 4B는 9개에서 16개로 늘었지만 지연 시간과 메모리는 대략 두 배였다.
이 결과에 따라 문맥에서 가져온 표기가 검증 점수를 얻는 정도를 제한해 화면 텍스트가 받아쓰기 본문을 대체하지 못하게 했다. 원문 문맥을 그대로 넣는 대신 추출한 용어를 사용하자 Qwen3 4B의 중앙 지연 시간은 1.84초에서 0.86초로 줄었다. 문맥을 무시하는 Qwen3 1.7B에는 CPU만 쓰고 정확도를 높이지 않는 기본 설정을 켜지 않았다. 문맥 제거 실험 결과와 ADR 013에 관련 내용을 공개했다.
발음 정보를 제공하면 텍스트 모델이 음성 인식 오류를 고칠 수 있는지도 154개 사례로 시험했다. Qwen3 1.7B에서 924회 생성 결과를 측정했으며, 병음과 음성에서 디코딩한 국제음성기호(IPA), 인식기의 토큰 신뢰 점수를 시험했다. 비교를 위해 LLM을 쓰지 않고 녹음 음성을 오프라인 음향 모델로 다시 인식하는 대조군도 포함했다.
| 조건 | 중국어 CER | 영어 WER | 혼합 오류율(MER) |
|---|---|---|---|
| 스트리밍 인식 원본 | 8.17% | 7.63% | 36.39% |
| 오프라인 음향 재인식(대조군) | 5.82% | 3.97% | 22.10% |
| 텍스트만 LLM 교정(Qwen3 1.7B) | 8.42% | 7.53% | 36.39% |
| 텍스트와 인식기 토큰 점수 | 85.77% | 39.27% | 231.27% |
| 음성 IPA만 입력 | 314.73% | 334.69% | 275.20% |
오류율이 100%를 넘는 결과는 삽입 오류를 그대로 집계하고 실패한 출력을 원문으로 바꾸지 않는 평가 규칙에서 나왔다. 원시 로그 소프트맥스 토큰 점수를 조정하지 않은 1.7B 모델에 전달하자 모델은 단어를 반복하고 프롬프트 항목과 예시를 복사하다 256토큰 출력 한도에 도달했다. 스트리밍 인식이 정확했던 문장 60개 중 26개를 망가뜨렸다. 텍스트만 입력한 교정기는 거의 바꾸지 않았으며, 순수 무음 사례 4개에서는 빈 문자열 대신 따옴표 두 개를 출력했다.
반면 오프라인 음향 재인식은 중앙값 0.13초 만에 세 오류율을 모두 낮췄다. 60개 발화를 개선했고, 원래 정확했던 발화는 하나도 훼손하지 않았다. 발음 정보 실험 결과에서 조건별 결과를 확인할 수 있다.
세 번째 실험에서는 Rime 입력기용 LLM 후보 재정렬기를 재현했다. 공개된 설계는 로컬 모델의 재정렬 지연 시간을 약 1ms로 보고했지만, Qwen3.5-0.8B와 로컬 oMLX에서 실제 Rime 후보 목록 100개를 시험하자 1위 정확도가 56개에서 45개로 떨어졌다. 3개는 개선되고 14개는 나빠졌다. 후보 목록에 완성 단어와 병음 일부만 소비하는 접두 후보가 섞여 있어, 朋友(친구)가 彭, 学习(공부)가 学, 电脑(컴퓨터)가 点으로 밀리는 사례가 있었다.
로컬 모델 서버에 보내는 HTTP 요청은 중앙값 288.85ms가 걸렸다. 공개 코드의 타이머는 프로세스 CPU 시간만 재는 os.clock()을 사용했다. Rime 프로세스가 응답을 기다리며 쉬는 동안 CPU 시간은 거의 흐르지 않아 로그에는 중앙값 0.787 ms가 찍혔지만, 사용자는 거의 3분의 1초를 기다렸다. 또 Lua 파서가 UTF-8 중국어 문장부호를 바이트 단위 문자 집합에 넣어 처리하면서 89개 실제 응답 중 38개를 파싱하지 못했다. 모델이 誓言(맹세)을 반환해도 화면에는 实验(실험)이 남는 식이었다. 재현 결과에서 세부 내용을 볼 수 있다.
이런 실험을 진행하는 이유는 코드와 데모를 만드는 일이 쉬워졌다고 실제 사용에서 개선됐다는 뜻은 아니기 때문이다. Arion 저장소의 상당 부분은 코딩 에이전트가 작성하고 엔지니어가 풀 리퀘스트에서 검토한다. 에이전트는 눈앞의 검사 통과를 우선해 모델 출력이 검증에 실패하면 원문으로 대체하거나, 오디오 버퍼를 다시 시도하거나, 없는 장치를 모의 처리할 수 있다. 이런 대체 동작은 문제를 숨길 수 있다.
실험에서는 모델을 조정하기 전에 24개 개발 사례와 미리 작성해 SHA-256 해시를 남긴 30개 검증 사례를 나눴다. 모든 후보는 같은 장비에서 제품용 워커와 검증기를 거쳤다. 기본 교정 모델을 고를 때 미교정 기준선은 30개 중 12개를 통과했다.
| 모델 | 검증 세트 통과(30개 중) | 악화 사례 | 최종 재작성 지연 시간 중앙값/95백분위 |
|---|---|---|---|
| Qwen3 0.6B | 24 | 0 | 0.18 / 0.36초 |
| Qwen3 1.7B(출시 기본값) | 27 | 0 | 0.50 / 1.67초 |
| Qwen3 4B | 28 | 0 | 0.89 / 2.15초 |
Qwen3 4B는 약 두 배의 지연 시간과 메모리를 쓰고 사례 하나를 더 개선했다. 가장 빠른 0.6B 모델은 세 사례를 놓쳤고, 절이나 숫자를 삭제하는 해로운 수정은 검증기가 막아야 했다. 이에 1.7B를 기본 모델로 선택했다. 전체 오디오 파이프라인 측정에서는 발화를 구간별로 확정하면 종료 지연은 약간 줄지만 구간 경계의 인식 오류가 늘었다. 스트리밍 음성 인식과 구간별 Qwen3-ASR, 1.7B LLM을 동시에 실행했을 때는 ONNX Runtime 스레드 풀 세 개가 CPU를 놓고 경쟁해 캡처 큐가 넘치면서 AUDIO_DISCONTINUITY 오류가 발생했다. 실패를 재시도로 가리지 않는 규칙에 따라 구간별 확정은 제외했고, 현재 파이프라인은 말을 멈춘 뒤 발화 전체를 한 번에 디코딩한다. 이후 중간 발화 LLM 미리보기도 최종 결과를 바꾸지 않고 대체된다는 벤치마크 결과에 따라 ADR 023에서 제거했다. 실시간 교정 파이프라인 결과와 ADR 011도 공개돼 있다.
병음 입력에서는 LLM 재정렬기를 제외한 뒤, 같은 앱에서 최근 120초 이내에 입력한 내용만 학습하는 온디바이스 문맥 순위기를 만들었다. 한 번의 선택이 1위 후보를 독점하지 않도록 한 번의 확인으로 올릴 수 있는 순위를 두 단계로 제한했다. 동음이의어 50쌍과 시드 3개를 사용한 실험에서 첫 등장 정확도는 14%로 변하지 않았다. 이후 등장에서는 표준 빈도 학습만 썼을 때 1위 정확도가 32.2%였지만, 문맥 순위기를 켜면 88.7%로 올랐다. MRR은 0.612에서 0.933으로 개선됐고, 47쌍은 나아졌으며 악화한 쌍은 없었다. 같은 실험에서 순위기 자체의 키 입력당 처리 시간은 0.02~0.06ms였지만, 처음 측정한 문자 키 지연 시간의 95백분위는 2.92ms였다. 프로파일링 결과 후보 창을 매번 앞으로 가져오는 macOS orderFront가 비용의 대부분을 차지했다. 유휴 상태에서 후보 창을 투명하게 두고 클릭을 통과시키자 95백분위 지연 시간은 0.81ms로 낮아졌다. 문맥 순위기 결과에 실험 내용을 공개했다.
평가 규칙은 실패와 취소 상태를 그대로 보존하고, 불완전한 실행은 완료 보고서를 만들지 않으며, 실패한 모델 출력을 표를 보기 좋게 하려고 원문으로 바꾸지 않도록 정한다. 중단된 Qwen3 4B 실험의 완료된 생성 두 건도 cancelled_by_user 상태로 보관했고, 보고서에는 완료된 1.7B 체크포인트만 사용했다. 벤치마크 자료와 사례별 원출력, 워밍업, 실패 실행, 녹음 음성, 프롬프트는 모델 가중치와 개인 녹음을 제외하고 저장소에 보관한다. 자료는 1,062개 파일, 약 98MB 규모이며 바이트 단위 SHA-256 해시로 식별한다. 모델을 불러오지 않고 아카이브를 검증하고 보고서를 다시 만들 수 있다.
pnpm --dir /path/to/Arion-evaluation bench:archive:verify pnpm --dir /path/to/Arion-evaluation bench:archive:report --out .workspace/archive-report-repeat
평가 명세 008은 실패를 숨기지 않는 규칙을 정한다. 평가 방법론은 정규화 방식, 전체 기준 단위 대비 전체 오류 수로 계산하는 오류율, 화자 단위 쌍체 부트스트랩 구간을 고정한다. 테스트 정답은 추론·메모리·문맥에 들어가지 않으며, 테스트 데이터로 학습한 메모리도 거부한다(EVAL-A04). 벤치마크 아카이브와 평가 방법론에서 관련 자료를 확인할 수 있다.
실험의 결론은 명세, 의사결정 기록, 에이전트 지침에도 남긴다. 명세는 제품 요구사항과 수용 기준을 정하고, 의사결정 기록은 이유를 보존하며 기존 결정을 삭제하는 대신 새 결정으로 대체한다. AGENTS.md와 CLAUDE.md에는 모의 출력을 추론 증거로 쓰지 말 것, 조사하지 않은 문제를 숨기는 대체 로직을 추가하지 말 것, 코드와 함께 문서도 갱신할 것 등을 적었다. 드라이버나 모델이 없으면 실행은 실패로 표시하고, 없는 기능을 통과한 테스트로 보고하지 않는다.
다만 현재 평가에는 한계가 있다. 대부분의 말뭉치는 한 개발자가 만들었고 음성의 상당수는 합성했거나 소리 내어 읽은 것이다. 공개된 테스트 세트는 회귀 검사에는 쓸 수 있지만 새 블라인드 테스트로 다시 사용할 수 없다. 문장 교정 품질도 의미 보존·문체·환각에 대한 사람의 블라인드 검토가 아니라 정확한 문자열 비교를 대리 지표로 측정하며, 이 검토는 아직 출시 조건으로 남아 있다. 수치 대부분은 Apple M4(32GiB) 한 대에서 얻었고, Windows 경로는 종단 간 측정보다 컴파일 검사와 단위 테스트에 의존하는 경우가 많다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요