안녕하세요, まさきん입니다.
오른쪽 Control 키를 누르고 있는 동안만 녹음하고, 떼면 글자로 바꿔서 붙여 넣어 준다. 그런 음성 입력 도구를 제 Mac에서 쓰고 있습니다. 받아쓰기도 문장 다듬기도 Mac 안에서 돌아가는 구조입니다.
만들면서 고민한 점, 잰 숫자, 잘 되지 않았던 시도를 정리해 둡니다. 개선과 측정은 AI(Claude Code)의 도움을 받으며 진행했습니다. 코드는 공개하지 않았으므로, 생각의 기록으로 읽어 주시면 좋겠습니다.
※ 글 공개 시점의 정보입니다. 모델과 라이브러리의 사양은 공식 정보에서 확인해 주세요.
- 녹음 키를 누르고 있는 동안만 녹음하고, 떼면 글자로 바꿔서 커서 위치에 붙여 넣는다
- 받아쓰기는 Whisper large-v3, 다듬기는 Qwen3-8B의 4bit 버전. 둘 다 MLX로 돌린다
- turbo와 Qwen2.5-3B에서 바꿔도 느려지는 것은 1회 발화에 0.3–0.8초 정도였다
- 사고 모드는 1회 발화에 4–22초가 걸리고 같은 소리의 혼동도 잘 고쳐지지 않아 접었다
- 붙여 넣을 앱은 녹음 키를 누른 시점의 전면 앱에 맞춘다
어떤 도구인가
사용법은 단순합니다. 텍스트 입력란에 커서를 두고, 녹음 키를 누른 채로 말합니다. 키를 떼면 잠시 기다린 뒤에 글자가 붙여 넣어집니다.
녹음 키의 기본값은 오른쪽 Control입니다. 메뉴 바에 상주하며, 메뉴에서 다른 키로 바꿀 수 있습니다. 상태는 아이콘 표시로 알 수 있습니다.
동작하는 것은 Apple Silicon Mac뿐입니다. 받아쓰기도 다듬기도 MLX로 돌리고 있기 때문입니다. MLX는 Apple silicon용 머신러닝 프레임워크입니다. 공식 README에 그렇게 설명되어 있습니다.
사용하고 있는 부품은 다음과 같습니다.
| 역할 | 사용하는 것 | 비고 |
|---|---|---|
| 받아쓰기 | mlx-whisper | 모델은 whisper-large-v3-mlx |
| 문장 다듬기 | mlx-lm | 모델은 Qwen3-8B의 4bit 버전 |
| 녹음 | sounddevice | 16kHz 모노로 녹음한다 |
| 녹음 키 감지 | pynput | 오른쪽 Control 등 |
| 메뉴 바 | rumps | 상태를 아이콘으로 표시한다 |
| 실행 환경 | uv | Python 3.11–3.12 |
mlx-whisper는 Whisper를 MLX로 돌리기 위한 부품입니다. 공식 설명에 따르면 Whisper는 OpenAI의 오픈 소스 음성 인식 모델입니다. 크기는 약 3,900만에서 약 15억 파라미터까지 있다고 합니다.
처리 흐름
키를 떼고 나서 붙여 넣어지기까지, 다음 순서로 처리가 진행됩니다.
- 녹음 키를 누르고 있는 동안만 녹음한다. 뗀 뒤에도 0.3초는 계속 녹음한다
- 무음과 0.4초보다 짧은 녹음을 버린다
- Whisper로 받아쓴다. 용어 힌트를 함께 넘긴다
- 치환 규칙으로 표기를 고친다
- 같은 단어의 반복이나 신뢰도가 낮은 결과를 버린다
- Qwen3로 군말(필러)을 빼고 문장부호를 정리한다
- 치환 규칙을 한 번 더 적용한다
- 클립보드를 거쳐 붙여 넣는다. 원래 클립보드의 내용은 되돌려 둔다
도중에 버리는 단계를 많이 넣은 것이 이 도구의 특징입니다. Whisper는 무음에서 문장을 지어내는 경우가 있습니다. 그래서 소리가 너무 작은 녹음은 받아쓰기에 돌리지 않습니다.
다듬기 뒤에도 안전장치가 있습니다. 다듬은 결과가 원래 문장에서 너무 멀어졌다면 다듬기 전의 문장을 붙여 넣습니다. 질문 형태로 말했을 때 LLM이 답을 써 버리는 경우가 있기 때문입니다.
동작에 필요한 것
조건은 다음과 같습니다. 제 환경에서 동작을 확인한 것은 MacBook Pro 한 대뿐입니다.
| 항목 | 조건 |
|---|---|
| 칩 | Apple Silicon(M1 이후) |
| OS | macOS 14 이상. 제 환경에서 확인한 것은 macOS 26뿐 |
| 메모리 | 상주 중 약 8GB, 피크는 약 10GB. 24GB 이상이 기준 |
| 디스크 | 모델이 약 7.2GB, Python 환경이 약 1.2GB |
| 네트워크 | 처음 모델을 받을 때만. 설치한 뒤에는 네트워크가 없어도 실행된다 |
| 키보드 | 녹음 키로 쓸 수 있는 키. 기본값은 오른쪽 Control |
| 마이크 | 내장·외장·Bluetooth 어느 것이든 된다 |
메모리는 실측값입니다. 16GB Mac에서는 다른 앱과 합치면 여유가 없을지도 모릅니다.
메모리가 부족할 때는 turbo와 Qwen2.5-3B로 바꾸면 줄어듭니다. 모델만 치면 대략 약 3GB입니다. 그만큼 정확도는 떨어집니다.
MacBook 내장 키보드에는 오른쪽 Control이 없습니다. 외장 키보드를 쓰거나, 메뉴에서 다른 키로 바꾸게 됩니다. 누르고 있는 동안만 쓰기 때문에, 혼자 눌러도 아무 일도 일어나지 않는 수식 키가 어울린다고 생각합니다.
처음 한 번만, 모델을 받느라 약 7GB의 통신이 발생합니다. 집 회선이라면 신경 쓰이지 않는 양입니다. 다만 외출한 곳에서 테더링으로 시작하면 통신량이 신경 쓰일지도 모릅니다.
누르면 라쿠텐 로그인 페이지가 열립니다. 로그인하면 캠페인 내용이 표시됩니다.
느려진 만큼의 실측
모델을 키우면 시간이 더 걸립니다. 얼마나 느려지는지를 제 Mac에서 재 보았습니다. Apple M5 Pro에 메모리 48GB인 MacBook Pro입니다.
| 단계 | 바꾸기 전 | 바꾼 뒤 | 소요 시간 기준 |
|---|---|---|---|
| 받아쓰기 | whisper-large-v3-turbo | whisper-large-v3 | 0.2–0.3초에서 0.4–0.7초 |
| 다듬기 | Qwen2.5-3B | Qwen3-8B | 0.25초 전후에서 0.4–0.6초 |
합치면 1회 발화에 0.3–0.8초 정도 느려졌습니다. 짧은 발화라면 신경 쓰일 정도의 차이는 아니라고 느낍니다.
긴 발화도 재 보았습니다. 25초 동안 말했을 때는 받아쓰기도 다듬기도 1.9초였습니다. 합계는 약 3.9초입니다. 길이에 비례해서 늘어나지만, 못 기다릴 정도는 아니었습니다.
다만 이 표는 짧은 합성 음성으로 잰 것입니다. 횟수도 적으니 참고 정도로만 봐 주세요.
앱으로 실제로 쓰고 있을 때 3.6초나 5.3초가 걸린 발화도 있었습니다. 발화 길이만으로는 설명이 되지 않으며, 원인은 아직 조사하지 못했습니다.
받아쓰기는 turbo에서 large-v3로
turbo는 large-v3의 디코더 층을 32에서 4로 줄인 모델입니다. 공식 모델 카드에는 훨씬 빨라지는 대신 품질이 조금 떨어진다고 적혀 있습니다.
처음에는 속도를 우선해서 turbo를 쓰고 있었습니다. 그런데 합성 음성으로 시험해 보니 제품명 가타카나를 같은 소리의 평범한 단어로 잘못 알아들었습니다. large-v3에서는 원래 철자에 가까운 형태로 나왔습니다.
그렇다고는 해도 이 확인은 짧은 합성 음성 3개뿐입니다. 실제 목소리에서 차이가 나는지는 아직 다 확인하지 못했습니다. 소요 시간은 조금 늘지만, 잘못 알아듣는 것을 줄이는 쪽으로 기울였습니다.
모델 크기와 숫자를 잘못 듣는 문제는 Whisper는 금액 숫자를 틀린다에서도 썼습니다.
다듬기는 Qwen2.5-3B에서 Qwen3-8B로
다듬기의 역할은 군말(필러)을 빼고 문장부호를 정리하는 것뿐입니다. 내용을 덧붙이거나 요약하게 하지 않습니다. 프롬프트에도 그렇게 적어 두었습니다.
그런데 3B 모델은 깨진 입력에 말을 덧붙였습니다. 실제로 쓰다가 나온 깨진 문장에 「のです」(노데스, 설명이나 강조를 나타내는 문장 끝 표현)와 「にゃあい」(냐아이, 고양이 울음소리 같은 말)를 덧붙인 거죠. 「お日に」(오히니)도 어순째로 「毎日」(마이니치, 매일)로 바꿔 버렸습니다.
8B로 바꾸자 입력을 거의 그대로 돌려주게 되었습니다. 군말도 3B에서는 「あのー」(아노-)나 「えーと」(에-토)가 남아 있었습니다. 8B는 「あのー」「えっと」(엣토)「ですね」(데스네)「まあ」(마-)까지 빼 주었습니다. 모두 “저어”, “음”, “말이죠”, “뭐” 같은 일본어 군말입니다.
Qwen3는 기본 설정에서 사고 과정을 출력합니다. 다듬기에는 필요 없으므로 enable_thinking=False로 꺼 두었습니다. 모델 카드에서는 이 지정이 사고 동작을 엄격하게 멈추는 스위치라고 설명하고 있었습니다.
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=False,
enable_thinking=False,
)
출력 길이에도 상한을 두었습니다. 입력 글자 수의 2배 토큰까지입니다. 다듬기가 폭주하더라도 끝없이 이어지지 않게 하기 위해서입니다.
사고 모드와 큰 모델은 접었다
오변환을 고치려면 생각하게 하는 방법도 있을 것 같습니다. Qwen3에는 사고(thinking) 모드가 있어서, 다듬기에 쓸 수 있을지 시험해 보았습니다.
먼저 8B의 사고 모드를 시험했습니다. 1회 발화당 6–20초 시간이 늘었습니다.
이어서 16GB 정도 되는 30B 사고 전용 모델도 시험했습니다. 이쪽은 7–30초입니다. 긴 문장에서는 2,500토큰을 써도 끝나지 않고 영어로 계속 생각하고 있었습니다.
모델 카드에는 사고 모드용 권장 설정이 있습니다. Temperature는 0.6, TopP는 0.95, TopK는 20입니다. 탐욕적(greedy) 생성은 피하라고도 적혀 있습니다.
만약을 위해 이 설정에 맞춰 다시 쟀습니다. 각 문장을 2회씩 시험한 결과가 다음 표입니다. 표의 입력 문장은 일본어 그대로이고, 괄호 안은 설명입니다.
| 입력 문장(짧게 줄인 것 포함) | 고치고 싶은 부분 | 결과 | 소요(2회) |
|---|---|---|---|
| 今週の試作について共有します(「施策」(시사쿠, 시책)가 「試作」(시사쿠, 시제품 제작)로 잘못 나온 문장) | 「試作」→「施策」 | 2회 모두 고쳐지지 않았다 | 9.2초, 12.1초 |
| 前年同月費と比較します(「前年同月比」(전년 동월 대비)의 「比」가 「費」(비용)로 잘못 나온 문장) | 「費」→「比」 | 2회 모두 고쳐지지 않았다. 한 번은 말을 빼고, 한 번은 말을 덧붙였다 | 20.9초, 22.1초 |
| 原因を分析して、改善作を検討します(「改善策」(개선책)이 「改善作」으로 잘못 나온 문장) | 「作」→「策」 | 2회 모두 고쳐졌다 | 8.1초, 8.6초 |
| 新商品の試作品が届いたので、来週の会議で確認します(신상품 시제품이 도착해서 다음 주 회의에서 확인한다는 올바른 문장) | 고치지 않는다(올바른 문장) | 2회 모두 그대로였다 | 5.8초, 4.0초 |
고치고 싶은 3문장 가운데 깔끔하게 고쳐진 것은 1문장뿐이었습니다. 소요 시간은 4–22초입니다. 다른 문장에서는 입력에 있던 조사를 하나 빼 버리는 경우도 있었습니다.
사고 모드는 기다리게 하는 데다, 반드시 고쳐지는 것도 아니었습니다. 몇 초에서 20초 정도 기다려도 같은 소리로 인한 혼동이 남는 경우가 있습니다.
시험 횟수가 적으니 경향으로만 봐 주세요. 그렇다고는 해도 짧은 음성 입력에서 몇 초에서 20초를 기다리는 것은 수지가 맞지 않는다고 판단했습니다. 긴 발화에서만 쓰는 선택 모드도 생각해 볼 수 있습니다. 다만 이번 결과로는 효과에 비해 시간이 걸맞지 않았습니다.
다듬기 프롬프트에 용어와 지시를 덧붙이는 방법도 시험했습니다. 고쳐진 것은 용어에 올려 둔 단어뿐이었습니다. 긴 문장에서는 다른 단어로 바꿔 버리는 경우도 있었습니다.
같은 소리의 혼동에는 문맥이 통할 것 같았다
쓰다 보면 「施策」(시책)가 「試作」(시제품 제작)로 나오는 경우가 있었습니다. 둘 다 시사쿠로 읽는 같은 소리의 말이라서 소리만으로는 구별할 수 없습니다. 앞뒤의 화제를 알면 구별할 수 있을 것입니다.
그래서 직전의 발화를 Whisper의 힌트에 덧붙이는 방법을 시험했습니다. 합성 음성 3건 중 「施策」가 「試作」가 되는 예가 고쳐졌습니다. 소요 시간은 0.39초에서 0.43초로, 거의 달라지지 않았습니다.
나머지 2건은 덧붙이든 덧붙이지 않든 올바르게 나왔습니다. 즉 확인할 수 있었던 것은 1건뿐입니다.
이 방법은 아직 도입하지 않았습니다. 실제 목소리로 확인한 뒤에 하고 싶다고 생각합니다. 직전의 발화를 덧붙이면 힌트를 그대로 베낀 결과를 버리는 판정에도 영향이 갑니다. 그 부분까지 포함해서 다시 살펴볼 예정입니다.
용어 파일과 치환 규칙
고유 명사나 전문 용어는 소리만으로는 다른 철자로 나옵니다. 그래서 용어 파일을 마련했습니다. 쓰는 방법은 두 가지입니다.
- 1행에 1단어만 쓰면 받아쓰기의 힌트가 된다
誤 => 正(틀린 표기 → 올바른 표기)로 쓰면 받아쓴 뒤에 치환한다
# 1행 1단어: 받아쓰기의 힌트로 넘긴다
Whisper
Qwen
# 왼쪽 => 오른쪽: 받아쓴 뒤에 치환한다
ビッグクエリ => BigQuery
힌트로 넘기는 단어는 30개까지로 하고 있습니다. 위의 예는 작성법을 보여 주기 위한 것이며 실제 내용과는 다릅니다. 마지막 줄은 일본어로 「ビッグクエリ」(빅쿼리)라고 적힌 표기를 BigQuery로 바꾸는 규칙입니다.
치환 규칙에서 조심한 것은 평범한 단어를 치환하지 않는 것입니다. 다른 용도로 만든 오변환 사전에는 평범한 단어를 다른 단어로 바꾸는 줄이 있었습니다. 음성 입력에 그대로 쓰면 평범한 문장까지 망가집니다. 그래서 가져다 쓰지 않고 음성 입력용을 따로 마련했습니다.
붙여 넣을 앱에 맞추기
말을 끝내기 전에 다른 앱으로 전환하는 경우가 있습니다. 그대로 붙여 넣으면 전환한 앱에 들어가 버립니다. 그곳이 녹음 키를 눌렀을 때 입력하려던 앱이라는 보장은 없습니다.
그래서 녹음 키를 누른 시점의 전면 앱(가장 앞에 떠 있는 앱)을 기억해 둡니다. 붙여 넣는 시점에 다른 앱이 맨 앞에 있다면, 기억해 둔 앱을 맨 앞으로 가져온 뒤에 붙여 넣도록 만들었습니다.
전면 앱은 lsappinfo로 알아냅니다. 앞으로 가져올 때는 open -b에 번들 ID를 넘깁니다. 앞으로 오기까지는 0.3초 정도입니다.
lsappinfo info -only bundleid "$(lsappinfo front)"
open -b com.apple.TextEdit
여기서 한 가지 함정에 빠졌습니다. 처음에는 NSWorkspace의 frontmostApplication으로 전면 앱을 조사했습니다. 그런데 이벤트 루프를 돌리지 않는 프로세스에서는 오래된 값을 계속 돌려주더라고요. 앞으로 가져왔는데도 못 가져왔다고 판정하고 있었습니다.
그래서 항상 최신 값을 돌려주는 lsappinfo로 바꿨습니다.
또 하나, 타이핑하는 도중에는 전환하지 않습니다. 타이핑 중간에 전면 앱이 바뀌면 치고 있던 글자가 다른 앱에 들어가 버리기 때문입니다. 입력이 0.6초 정도 멈추기를 기다립니다. 기다리는 것은 최대 2초이고, 넘기면 전환합니다.
앱이 종료되어 있었을 때나 앞으로 가져오지 못했을 때는 붙여 넣지 않습니다. 클립보드에 넣고 알려 주기만 합니다.
제약도 있습니다.
- 구분할 수 있는 것은 앱 단위. 같은 앱 안에서 탭이나 패널(pane)을 바꿔도 구분하지 못한다
- 전체 화면 앱이 다른 Space에 있으면 Space도 함께 전환된다
- 붙여 넣은 뒤에 이전 앱으로는 되돌아가지 않는다
막혔던 부분
AirPods를 귀에 꽂지 않으면 무음이 된다
처음에는 녹음은 되는 것 같은데 글자가 들어가지 않는 상태가 되었습니다. 원인은 macOS의 기본 입력이 AirPods였다는 점입니다. 귀에 꽂지 않았기 때문에 소리가 전혀 전달되지 않아 음량은 0인 채였습니다.
대책은 두 가지입니다. 첫째는 메뉴에서 입력 마이크를 고정할 수 있게 한 것. 둘째는 녹음 전에 장치 목록을 다시 만드는 것입니다.
소리를 다루는 부품인 PortAudio는 시작했을 때의 장치 목록을 계속 가지고 있습니다. 그대로 두면 AirPods를 연결한 뒤의 기본 입력 변경을 따라가지 못합니다. 다시 만드는 데 걸리는 시간은 몇 밀리초였습니다.
힌트 베끼기를 버리는 판정이 너무 엄격했다
힌트 문장을 그대로 출력한 결과는 붙여 넣지 않고 버립니다. 힌트를 넘기면 조용한 부분에서 힌트 자체가 나오는 경우가 있기 때문입니다. 이전 글에서도 faster-whisper로 조용한 클립에 힌트가 반복되어 나왔습니다.
그런데 처음의 판정은 너무 엄격했습니다. 힌트에 포함된 짧은 말만 한 올바른 발화까지 버려 버립니다. 예를 들어 「日本語の音声」(일본어 음성)이라고만 말한 경우입니다.
그래서 일치한 길이에 하한을 두었습니다. 힌트의 기본 문장은 10글자 이상, 용어가 붙은 힌트 전체는 24글자 이상일 때만 버립니다.
시험하다가 내 클립보드를 덮어썼다
붙여 넣기 시험은 실제 기기의 클립보드를 건드립니다. 클립보드에 쓰는 함수를 대체하는 것이 누락되었습니다. 그 결과 시험용 문장으로 제 클립보드를 덮어써 버렸습니다. 원래 내용은 되돌리지 못했습니다.
실제 기기를 건드리는 처리를 시험할 때는 호출될 수 있는 함수를 전부 대체합니다. 시험 전후로 클립보드의 내용이 바뀌지 않았는지도 확인한다. 이것이 이때의 교훈입니다.
그 밖의 제약
- 클립보드 복원은 텍스트만. 이미지를 복사해 둔 상태였다면 사라진다
- 받아쓰는 중에 누른 키는 무시된다. 끝난 뒤에 다음 말을 한다
- 10초 정도의 발화에서, 키를 떼고 붙여 넣어지기까지 2초 전후가 걸린다
- 비정상 종료되어도 자동으로 다시 시작되지 않는다
어울리는 사람·어울리지 않는 사람
| 관점 | 어울리는 사람 | 어울리지 않는 사람 |
|---|---|---|
| Mac | Apple Silicon이고 메모리에 여유가 있다 | Intel Mac이거나 메모리가 적다 |
| 사용 방식 | 짧은 문장을 여러 번 입력한다 | 한 글자 한 글자의 정확함이 필요한 문서를 쓴다 |
| 환경 | 처음에 약 7GB를 받을 수 있다 | 통신량을 항상 아끼고 있다 |
| 자세 | 설정 파일을 직접 고치는 것이 부담스럽지 않다 | 그대로 쓸 수 있는 앱이 좋다 |
오변환은 0이 되지 않습니다. 그래서 붙여 넣어진 문장은 한 번 눈으로 확인하는 것을 전제로 한 도구라고 생각합니다.
시작하기 전에 확인할 것
비슷한 도구를 Mac에서 시험해 보려는 분을 위해 조건을 정리했습니다.
- Apple Silicon(M1 이후) Mac이다
- macOS 14 이상이다
- 메모리가 24GB 이상 있다. 적을 때는 가벼운 모델로 한다
- 모델과 환경을 위해 약 8.4GB의 디스크 여유 공간이 있다
- 처음에 약 7GB를 다운로드할 수 있는 회선이 있다
- 녹음 키로 쓸 수 있는 키가 있다. 없으면 다른 키로 바꾼다
- AirPods를 쓴다면 귀에 꽂은 뒤에 말한다
특히 메모리와 마이크 두 가지가 중요하다고 생각합니다. 이 두 가지는 돌려 본 뒤에 알아채면 되돌아가는 수고가 크기 때문입니다.
- 정확도를 우선할 때: 받아쓰기는 large-v3, 다듬기는 Qwen3-8B. 대기 시간은 1회 발화에 0.3–0.8초 정도 늘어난다
- 메모리를 아끼고 싶을 때: turbo와 Qwen2.5-3B로 한다. 그만큼 정확도는 떨어진다
- 다듬기가 필요 없을 때: 메뉴에서 끈다. 받아쓰기 결과에 치환만 적용해서 붙여 넣어진다
자주 묻는 질문
Q. Intel Mac에서도 동작하나요?
동작하지 않을 것 같습니다. MLX는 공식 README에서 Apple silicon용이라고 설명합니다. 제가 시험한 것도 Apple Silicon Mac뿐입니다.
Q. 메모리가 16GB인 Mac에서도 쓸 수 있나요?
상주 중에 약 8GB, 피크에서 약 10GB를 썼습니다. 다른 앱과 합치면 여유가 없을지도 모릅니다. 가벼운 모델 조합으로 하면 메모리는 줄어듭니다. 그만큼 정확도는 떨어집니다.
Q. 네트워크가 없어도 쓸 수 있나요?
설치한 뒤에는 쓸 수 있습니다. 모델은 이미 받아 둔 것만 쓰도록 설정해 두었고, 통신할 수 없는 상태에서의 실행도 확인했습니다. 네트워크가 필요한 것은 처음 모델을 받을 때뿐입니다.
Q. 녹음 키는 바꿀 수 있나요?
메뉴의 「録音キー」(녹음 키)에서 바꿀 수 있습니다. 고를 수 있는 것은 Control·Option·Command·Shift의 좌우와 F1–F20입니다. 글자가 나오는 키와 Enter와 Space는 쓸 수 없습니다. 오른쪽 Control·오른쪽 Option·F13 이후는 평소 단축키와 겹치기 어렵다고 생각합니다.
Q. 다듬기는 끌 수 있나요?
끌 수 있습니다. 메뉴의 「整形する」(다듬기)로 켜고 끌 수 있습니다. 끄면 다듬기를 거치지 않고, 치환 규칙만 적용해서 붙여 넣어집니다. 다시 시작하면 켜짐으로 돌아갑니다.
Q. 긴 문장이면 어느 정도 기다리나요?
25초 발화에서 약 3.9초였습니다. 10초 정도의 발화라면 2초 전후입니다. 길이에 비례해서 늘어나므로, 길게 말할수록 대기 시간은 늘어납니다.
Q. 다른 앱으로 전환해도 제대로 붙여 넣어지나요?
녹음 키를 누른 시점의 앱에 붙여 넣습니다. 전환되어 있다면 그 앱을 맨 앞으로 가져온 뒤에 붙여 넣습니다. 다만 구분하는 것은 앱 단위입니다. 같은 앱 안에서 탭을 바꿔도 구분하지 못합니다.
참고한 공식 정보
- MLX(ml-explore 공식 저장소)
- Whisper의 MLX 버전 README(ml-explore 공식 저장소)
- openai/whisper-large-v3-turbo 모델 카드(OpenAI, Hugging Face)
- mlx-community/whisper-large-v3-mlx(mlx-community, Hugging Face)
- Qwen/Qwen3-8B 모델 카드(Qwen, Hugging Face)
- mlx-community/Qwen3-8B-4bit(mlx-community, Hugging Face)
정리
Whisper로 받아쓰고, Qwen3로 다듬는다. 흐름은 단순합니다. 다만 모델을 고르는 방법이나 붙여 넣을 앱을 맞추는 방식에 따라 사용감이 크게 달라졌습니다.
결국 효과가 있었던 것은 소박한 궁리였습니다. 예를 들어 좀 더 큰 모델로 바꾸는 것입니다. 말끝이 잘리지 않게 하는 0.3초나, 눌렀을 때의 앱에 붙여 넣는 것도 효과가 있었습니다. 사고 모드 같은 화려한 방법은 대기 시간에 걸맞지 않았습니다.
아직 시험하지 못한 것도 남아 있습니다. 직전의 발화를 문맥에 덧붙이는 방법과, 받아쓰기와 다듬기의 시간을 나눠서 기록하는 것입니다. 음성 입력을 시험해 보고 싶은 분은 우선 mlx-whisper만 돌려 보시면 어떨까요?
제 작업을 AI에 맡기는 이야기는 아침 브리핑을 자동으로 만드는 글에도 썼습니다. 모델을 받는 데에는 통신량을 쓰므로 회선에 여유가 있으면 시작하기 쉬울 것 같습니다.
누르면 라쿠텐 로그인 페이지가 열립니다. 로그인하면 캠페인 내용이 표시됩니다.
이 글에는 제휴 광고가 포함되어 있습니다. 이 사이트의 링크를 통해 상품·서비스에 신청하시면 제휴사로부터 보상을 받을 수 있습니다. 또한 운영자는 라쿠텐 그룹 소속 직원으로, 사원 추천 프로그램을 통해 보상을 받는 경우가 있습니다. 기사 내용과 평가는 광고 유무와 관계없이 운영자의 실제 경험과 조사를 바탕으로 작성했지만, 위 관계를 이해하신 후 읽어 주시기 바랍니다. 자세한 내용은 면책조항·제휴 링크 안내를 참고해 주세요. 면책조항·제휴 링크 안내
이 글에는 기계 번역이 포함되어 있습니다. 정확한 조건은 라쿠텐 모바일 공식 사이트의 다국어 페이지에서 확인해 주세요.
라쿠텐 모바일의 통신 지역·전파 상황이 궁금하신 분은, 공식 전파 개선·조사 요청 양식 을 통해 문의하실 수 있습니다.