본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

받아쓴 말은 뜻으로 읽어

~13 min · dictation, token-mirror, confirmation, prompting

Level 0음소거
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"늘 딕테이션이 완벽하진 않기 때문에, 아빠 입력에 오타가 평소보다 많을 수 있다는 점을 감안해야 해." — 아빠, 2026-09-25

전사문이 틀리는 방식

받아쓴 메시지는 틀리는 방식이 뻔해. 동음이의어가 엉뚱한 단어로 떨어지고, 구절 한가운데서 띄어쓰기가 깨지고(한국어에선 그것만으로 문장 뜻이 달라 보일 수 있어), 영어 기술 용어는 한글로 풀어 적혀서 오고, 전사기가 처음 듣는 이름은 소리가 비슷한 흔한 단어가 돼. 이 중 아빠 실수는 하나도 없어. 이걸 실수로 다루는 답은 두 번 틀려. 한 번은 지적해서, 또 한 번은 아빠가 기계한테 더 또박또박 말해야 한다고 느끼게 해서.

받아쓴 턴 지시

input_modality가 dictated면 턴에 묶음이 하나 더 실려. 내용은 네 가지야.

  • 아빠가 뜻한 걸로 읽어. 동음이의어, 깨진 띄어쓰기, 한글로 적힌 영어, 잘못 들은 이름을 예상해.
  • 전사 오류를 절대 지적하지 말고, 잘못 들은 단어를 절대 되풀이하지 마. 답에서도, 나중에 소울이 적어 두는 어디에서도. 아빠가 뜻한 단어를 써.
  • 어떻게 읽느냐에 따라 할 일이 달라지면 한 줄로 확인해. 이름, 숫자, 부정, 예 아니오. 말로 하면 이건 교정이 아니라 자연스러운 맞장구로 들려("벨로우즈 말하는 거지?").
  • 낯선 것과 잘못 들은 건 달라. 모르는 단어도 진짜일 수 있어. 오류로 치기 전에 아는 것(이 대화, 아빠의 앱, 아빠의 사람들)부터 확인해.

잘못 들은 단어를 되풀이하면 안 되는 이유

이 규칙은 이 집이 잘 아는 실패에서 나왔어. 모델은 눈앞의 토큰을 따라 해. 전사문에 깨진 단어가 있고 답이 그걸 되풀이하면, 답은 대화 기록에 들어가고, 기록은 기억에 들어가고, 다음 주엔 그 깨진 단어가 상관없는 턴의 맥락에 튀어나와서 모델이 그걸 또 쓸 가능성이 더 커져. 잘못 들은 한 번이 소울 자신의 어휘 버릇이 될 수 있어. 답에서 뜻한 단어를 쓰면 그 고리가 첫 매듭에서 끊겨.

가설 둘, 판정은 이미 아는 사실로

마지막 규칙이 제일 미묘해. 받아쓰기라고 해서 이상한 단어가 전부 틀린 건 아니야. 두 번째 가설이 하나 더 생길 뿐이야. 그 단어가 아빠가 한 말 그대로일 수도 있고(새 앱, 처음 듣는 사람, 아빠 분야의 용어), 아는 단어를 잘못 들은 걸 수도 있어. 판정은 가까이 있는 사실이 해. 앱과 소울 명단, 1분 전에 나눈 말. 두 읽기가 같은 행동으로 이어지면 그냥 해. 다른 행동으로 갈리면 물어. 확인 한 줄은 더 조용한 실패도 막아줘. 소울이 아빠 말을 자기가 답할 수 있는 모양으로 슬쩍 바꿔 놓고, 아빠가 물은 것 대신 그걸 답해버리는 실패 말이야.

Code

두 번째 가설, 이미 아는 걸로 판정하기·python
from difflib import get_close_matches

# Ground truth the soul already holds: names that carry actions.
KNOWN = {
    "벨로우즈": "the voice engine (Bellows)",
    "비컨": "the video workshop (Beacon)",
    "본파이어": "the music engine (Bonfire)",
}


def read_for_meaning(heard: str) -> tuple[str, str]:
    """Return (action, detail) for one action-bearing word in a dictated turn."""
    if heard in KNOWN:
        return "act", KNOWN[heard]                      # heard exactly right
    close = get_close_matches(heard, KNOWN, n=2, cutoff=0.5)
    if len(close) == 1:
        # One plausible known word. The action depends on it, so check in one
        # short line, using the INTENDED word, never repeating the misheard one.
        return "confirm", f"{close[0]} 말하는 거지?"
    if len(close) > 1:
        return "ask", "어느 쪽 얘기야, " + " 아니면 ".join(close) + "?"
    return "act", f"'{heard}' taken as said: unfamiliar is not a typo"


for word in ("벨로우즈", "벨로즈", "비건", "라운드테이블"):
    print(word, "->", read_for_meaning(word))

External links

Exercise

아무 어시스턴트에게나 메시지 열 개를 말로 받아쓰게 해. 메시지마다 중요한 이름, 숫자, 부정을 하나씩 넣어. 전사문을 모으고, 각각 뭐가 틀렸는지(틀린 게 있다면) 분류한 다음, 지시의 네 규칙 중 어느 게 맞는지 정해. 말없이 고치기, 한 줄 확인, 두 읽기 사이에서 묻기, 들은 그대로 받기.
Hint
부정이 위험한 부류야. 'not'이나 '안'이 빠지면 행동이 뒤집히는데 문장은 여전히 매끄러워서 깨져 보이는 데가 하나도 없어. 그다음이 숫자야. 잘못 읽은 채 움직였을 때 대가가 크다면, 이 둘은 전사문이 멀쩡해 보여도 확인할 가치가 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.