9주차: 시퀀스 모델링과 트랜스포머의 등장
시퀀스 모델링과 트랜스포머의 등장.
□ 이번 주에 하는 일
- 단어를 차례로 읽는 RNN·LSTM이 앞의 정보를 뒤로 전달하는 방법과 한계 관찰
- 현재 단어가 다른 위치를 얼마나 참고하는지 나타내는 어텐션의 행 하나 읽기
- 트랜스포머의 구조를 수식 없이 따라가고, 제공 노트북에서 어텐션 그림과 빈칸 후보 비교
문장 뒤쪽에서 ‘그것’을 만나면 앞쪽을 다시 본다. 무엇을 가리키는지 알기 위해서다. 그림에서 떨어진 카드 사이에 선이 이어진 것도 같은 생각이다. 컴퓨터가 글을 읽을 때 앞의 정보를 어떻게 가져오는지가 이번 주의 질문이다.
□ 8주차에서 이어지는 자리
8주차에는 문장과 문서를 벡터로 바꾸어 질문에 맞는 문서를 찾았다. 문장 임베딩 모델이 단어들을 서로 견주며 읽는다고 설명했지만, 안에서 어떻게 읽는지는 아직 보지 않았다. 이번 주는 그 안으로 들어간다. 검색기를 새로 만드는 것이 아니라, 문맥을 반영하는 벡터가 만들어지는 경로를 본다.
7주차에는 단어 하나에 벡터 하나가 있었다. 오름의 화산 지형과 ‘값이 오름’의 뜻이 같은 벡터에 섞였다. 이번 주의 출발점은 여기다. 같은 글자라도 주변 말이 다르면 다른 표현이 필요하다. ‘은행에 입금했다’와 ‘은행 열매를 주웠다’의 은행을 주변 말 없이 구별할 수 있을까?
| 비교 | 7주차 단어 벡터 | 8주차 문장 임베딩 | 9주차에서 볼 것 |
|---|---|---|---|
| 표현 대상 | 단어 하나 | 문장 전체 | 문장 안의 각 위치 |
| 문맥 | 학습한 여러 문맥이 한 벡터에 섞임 | 입력 문맥을 반영한 문장 벡터 | 현재 입력의 다른 위치를 참고하는 과정 |
| 핵심 질문 | 어떤 단어와 가까운가 | 어떤 문서와 가까운가 | 지금 표현을 만들 때 어디를 참고하는가 |
□ 이 문서를 읽는 법
- 수식은 나오지 않는다. 구조와 출력 해석이 목표이며 RNN·어텐션 코드를 직접 작성하지 않음
- 이론과 교육용 모형의 민지·우산 문장은 설명용 예시, 실제 공개 원문 아님
- 실제 모델 입력은 제주관광공사의 Hallasan 공개 원문에 제목을 붙이고 한 단어를 빈칸으로 바꾼 것, 출처는 강의 2에서 확인
- 실제 출력 표는 제공 노트북의 기본값 실행 결과. 가중치와 확률은 소수 셋째 자리로 반올림
- 모델은 공개 영어 모델
prajjwal1/bert-tiny(MIT), 한국어 이해 능력이나 제주 사실을 검증하는 도구 아님 - 노트북은 CPU만 사용. 기본값으로 끝까지 실행하며, TODO 입력 교체는 선택 활동 한 지점
온라인 (2시수)
Section titled “온라인 (2시수)”강의 1: 차례로 읽는 모델과 긴 문장의 문제
Section titled “강의 1: 차례로 읽는 모델과 긴 문장의 문제”□ 단어가 같아도 순서가 다르면
8주차의 단어 벡터 평균은 ‘안 먹고 잤다’와 ‘먹고 안 잤다’를 구별하지 못했다. 더하는 순서를 바꾸어도 평균은 같기 때문이다. 하지만 앞 문장은 밥을 먹지 않고 잤다는 뜻이고, 뒤 문장은 먹은 다음 잠을 자지 않았다는 뜻이다. 안이 어느 말 앞에 놓이는지가 결론을 바꾼다.
문장을 단어 모음이 아니라 순서가 있는 목록, 즉 시퀀스로 다루면 이 문제를 줄일 수 있다. 모델이 첫 토큰을 읽은 다음 둘째를 읽고, 앞서 본 내용을 다음 단계에 가져가는 것이다. 사람이 읽는 방식과 닮았지만, 컴퓨터가 가져가는 것은 원문을 담은 메모가 아니라 숫자 목록이다.
□ RNN: 앞에서 받은 정보를 다음으로
**RNN(순환 신경망)**은 토큰을 하나씩 읽으면서 상태를 갱신한다. 상태는 지금까지 읽은 정보를 담도록 학습되는 벡터다. 현재 토큰과 이전 상태를 함께 넣으면 새 상태가 나온다. 새 상태를 다음 위치로 넘겨 같은 일을 반복한다.
그림은 실제 모델 구조도가 아니라 현재 상태를 다음 위치로 전달하는 릴레이의 비유다. 여러 사람이 쪽지를 건네며 각자 새 정보를 적는다고 생각하자. 뒤의 사람은 처음 사람을 직접 만나지 않고, 앞 사람이 건네준 쪽지에서 시작한다. RNN도 각 위치에서 이전 상태를 받아 현재 입력과 섞어 새 상태를 만든다. 다만 쪽지에 모든 원문을 그대로 적을 수 있는 것은 아니다. 상태의 크기는 정해져 있어 무엇을 남길지 학습해야 한다.
노트북의 교육용 모형과 같은 설명용 문장으로 따라가 보자. ‘민지는 제주에서 우산을 샀다. 그것은 빨갛다.‘이다. 아래 표는 모델을 실행해 측정한 내용이 아니라, 정보 전달 경로를 설명하는 표다.
| 읽는 위치 | 지금 들어오는 말 | 다음 위치에 남겨야 할 정보의 예 |
|---|---|---|
| 1 | 민지는 | 행동하는 사람 |
| 2 | 제주에서 | 행동이 일어나는 장소 |
| 3 | 우산을 | 행동의 대상 |
| 4 | 샀다 | 앞의 사람·장소·대상이 구매 사건이라는 연결 |
| 5 | 그것은 | 앞의 대상과 현재 대명사를 연결할 정보 |
| 6 | 빨갛다 | 그 대상의 속성 |
표의 ‘남겨야 할 정보’는 사람의 해설이다. 상태 벡터 안에 ‘사람 칸’, ‘장소 칸’, ‘우산 칸’이 이름표를 달고 있는 것은 아니다. 7주차 밀집 벡터처럼 여러 칸의 숫자가 함께 표현한다. 이 차이를 기억해야 상태를 사람이 쓴 요약문처럼 읽는 오해를 피할 수 있다.
그림의 RNN: 차례로 읽기를 고르고 ‘다음 토큰’을 누른다. 강조 표시가 왼쪽에서 오른쪽으로 움직인다. ‘우산을’에서 생긴 정보가 ‘샀다’를 지나 ‘그것은’에 전달되어야 한다는 점을 본다. 어텐션: 참고 위치 보기로 바꾸면 떨어진 두 위치가 함께 강조된다. 실제 모델 가중치가 아니라, 두 정보 전달 방식의 차이를 보여 주는 도식이다.
□ 길어질 때 어려워지는 이유
우산 뒤에 ‘돌담 옆을 걷고, 친구를 만나고, 다른 가게를 구경한 뒤’ 같은 내용을 넣는다고 하자. 이것도 구조를 설명하기 위해 만든 문장이다. ‘그것은’에 도착할 때까지 다른 정보가 계속 들어오고 상태가 여러 번 바뀐다. 우산의 정보가 뒤의 표현을 만드는 데 필요하더라도 그 정보가 충분히 유지된다는 보장은 없다.
어려움은 두 가지로 나눌 수 있다. 첫째, 정해진 크기의 상태에 많은 정보를 남겨야 한다. 둘째, 앞의 정보가 뒤까지 여러 갱신 단계를 거쳐야 한다. 학습할 때도 멀리 떨어진 관계를 반영하려면 그 경로를 따라 숫자를 고쳐야 하므로 어려울 수 있다. 이번 주는 이 학습 과정의 공식까지 들어가지 않는다.
- ‘길면 반드시 잊는다’는 고정 법칙이 아니라, 길고 복잡한 관계를 유지하기 어려울 수 있다는 설명
- 어느 단어 수부터 실패한다는 보편적인 경계는 없음, 문장·설정·학습에 따라 다른 결과
- 순차 처리에서는 뒤 단계가 앞의 상태를 기다려야 하므로, 여러 위치를 동시에 처리하는 데 제약
□ LSTM: 남길 정보와 지울 정보 조절
LSTM은 RNN 계열이지만 정보를 남기고 지우는 조절 장치를 둔다. 지금 입력에서 무엇을 새로 받아들일지, 이전 정보 중 무엇을 유지할지, 현재 위치에서 무엇을 밖으로 내보낼지 조절한다. 이런 장치를 흔히 게이트, 문이라고 부른다.
쪽지 비유로 보면 새 사건을 적을 때마다 이전 쪽지를 통째로 바꾸는 대신, 오래 남길 부분과 당장 쓸 부분을 나누어 관리하는 것이다. ‘우산을 샀다’의 대상은 뒤에서 다시 쓸 수 있으니 유지하고, 잠깐 지나가는 정보는 덜 남길 수 있다. 그러나 모델이 실제로 그렇게 남겼는지는 별도의 관찰이 필요하다. 이 예시는 설계의 직관이며 우산을 기억한 실험 결과가 아니다.
| 질문 | RNN | LSTM |
|---|---|---|
| 새 상태는 무엇에서 나오나 | 이전 상태와 현재 입력 | 이전 상태·기억과 현재 입력, 조절 게이트 |
| 앞의 정보를 어떻게 보존하나 | 상태를 계속 갱신하며 전달 | 유지·삭제·출력을 조절하며 전달 |
| 긴 관계는 해결되나 | 여러 단계를 거치는 전달의 어려움 | 정보 유지에 도움, 완전한 보존 보장은 없음 |
| 뒤 위치는 앞 위치를 기다리나 | 기본 처리에서 필요 | 기본 처리에서 필요 |
LSTM을 ‘기억력이 좋은 RNN’이라고 요약해도 방향은 맞다. 더 정확히는 기억을 조절하는 구조를 넣은 RNN이다. 사람의 기억과 같은 기능을 가진다는 뜻은 아니다. 긴 관계를 다루는 데 도움이 되지만 모든 조건을 정확히 유지하거나 모호한 대명사를 자동으로 해결하지는 않는다.
□ 모호함은 기억만으로 풀리지 않는다
‘민지는 우산을 샀다. 수진은 가방을 들었다. 그것은 빨갛다.‘를 읽으면 무엇이 빨간지 확정하기 어렵다. 앞의 정보를 전부 기억해도 우산과 가방이 모두 후보로 남는다. ‘그것’을 ‘우산’으로 바꾸면 명확해진다. 이는 정보를 전달하는 능력과 원문 자체의 모호함이 다른 문제라는 뜻이다.
모델이 특정 대상을 골랐다고 해서 원문에 유일한 정답이 생기지는 않는다. 온라인 활동에서는 확실한 참조와 가능한 해석을 나누어 표시한다. 하나를 억지로 고르는 것보다 불확실한 이유를 설명하는 편이 정확하다.
□ 긴 안내문에서 무엇을 놓칠까
제주 행정·정책 안내에는 대상, 신청 기간, 지원 내용, 제외 조건이 떨어져 있을 수 있다. 처음의 대상 조건만 읽으면 가능해 보이지만, 마지막의 제외 조건이 판단을 뒤집을 수 있다. 내용이 길다는 것뿐 아니라 여러 곳의 조건을 함께 충족해야 한다는 구조가 어렵다.
실제 운영 정보를 임의로 만들지 않기 위해 여기서는 숫자와 기한을 제시하지 않는다. 실무 활동에서는 공개 데이터 출처의 공식 안내문에서 대상·기한·예외 위치를 찾아 표시한다. 실제 자격 판단이나 신청을 대신하는 활동은 아니다.
| 읽기에서 필요한 것 | 놓쳤을 때 생기는 문제 | 확인 방법 |
|---|---|---|
| 대상 조건 | 지원 대상이 아닌 사람에게 가능하다고 안내 | 대상 문장과 정의를 함께 확인 |
| 기간 | 예전 일정이나 다른 절차의 기한을 혼동 | 날짜가 어느 절차에 붙었는지 확인 |
| 예외 조건 | 기본 대상이라도 제외되는 경우 누락 | 뒤쪽 단서·각주까지 확인 |
| 대명사·지시어 | ‘해당 대상’이 어느 조건을 가리키는지 혼동 | 앞 문장의 참조 범위 확인 |
□ 강의 1에서 꼭 가져갈 것
- 시퀀스는 순서가 있는 토큰 목록이다. 같은 단어라도 순서가 달라지면 뜻이 바뀐다
- RNN은 이전 상태와 현재 토큰을 함께 보고 새 상태를 다음 위치로 전달한다
- 상태는 원문 복사본이 아니라 정해진 크기의 벡터다. 긴 관계는 여러 갱신 단계를 거쳐 전달된다
- LSTM은 유지·삭제·출력을 조절하는 구조로 정보 유지에 도움을 주지만, 모든 관계의 보존을 보장하지 않는다
- 원문이 모호하면 기억이 충분해도 답이 하나로 정해지지 않는다. 불확실한 참조는 불확실하다고 기록한다
강의 2: 참고 비중으로 문맥을 만드는 어텐션
Section titled “강의 2: 참고 비중으로 문맥을 만드는 어텐션”□ 앞사람의 쪽지만 기다리지 않고
RNN의 경로가 길어지는 문제를 줄이려면 현재 위치에서 필요한 앞의 위치를 더 직접 참고할 수 있으면 좋다. ‘그것은’을 처리할 때 여러 상태를 거친 정보만 받는 대신, ‘우산을’ 위치의 표현을 참고하는 것이다. 어텐션은 어느 위치를 얼마나 참고할지 계산하고 그 비중으로 정보를 모으는 방식이다.
직관적으로 **‘중요한 단어에 집중한다’**고 설명해도 좋다. 다만 여기의 중요함은 사람이 정답을 알고 매긴 점수가 아니다. 모델이 학습한 숫자로 현재 입력의 위치들을 견주어 얻은 참고 비중이다. 단어의 사전적인 중요성이나 사실이 맞을 확률과도 다르다.
□ 가중치 행 하나를 읽는 방법
노트북 1-1의 교육용 모형을 먼저 읽자. 토큰은 ‘민지는, 제주에서, 우산을, 샀다, 그것은, 빨갛다’ 여섯 개다. 사람이 ‘그것은’의 행에 아래 비중을 직접 넣었다. 실제 모델에서 뽑은 값이 아니며 학습도 하지 않았다.
| 현재 위치 | 민지는 | 제주에서 | 우산을 | 샀다 | 그것은 | 빨갛다 |
|---|---|---|---|---|---|---|
| 그것은 | 0.05 | 0.05 | 0.70 | 0.05 | 0.10 | 0.05 |
행은 표현을 만드는 현재 토큰, 열은 참고할 토큰이다. 우산을의 칸 0.70은 이 행의 정보 결합에서 우산 위치에 큰 비중을 준다는 뜻이다. ‘우산이 정답일 확률 70%‘라는 뜻은 아니다. 한 행의 비중을 모두 합하면 1이다. 계산은 코드가 하며 학생은 칸의 위치와 크기를 읽는다.
다른 행을 읽을 때는 현재 토큰이 달라진다. ‘그것은’ 행에서 우산을 칸이 크다고 해서 ‘우산을’ 행에서도 그것은 칸이 크다는 보장은 없다. 현재 위치에서 참고 위치로 향하는 관계이므로 두 칸이 대칭일 필요가 없다. 6주차 동시발생 행렬이 좌우 대칭이었던 것과 다른 점이다.
그림에서 A, B, C를 차례로 고른다. A는 우산 위치에 큰 비중, B는 가까운 위치에 큰 비중, C는 고른 비중이다. 모두 사람이 지정한 값이다. 같은 입력에서도 참고 비중의 모양은 여러 가지일 수 있다는 구조만 보여 준다. 실제 모델의 헤드를 재현한 그림으로 읽지 않는다.
□ 자기 어텐션과 여러 헤드
같은 입력 안의 위치끼리 참고하는 어텐션을 자기 어텐션이라고 한다. 현재 위치의 벡터로 다른 위치와의 연결을 계산하고, 그 위치들의 정보를 가중치에 따라 모은다. 연결을 따지는 표현과 모을 정보를 만드는 표현이 내부에서 구분되지만, 이번 주는 수식이나 행렬 곱까지 들어가지 않는다.
여러 헤드는 이 참고 비중 계산을 서로 다른 방식으로 나란히 수행한다. 한 헤드는 가까운 위치를, 다른 헤드는 멀리 있는 위치를 자주 참고할 수 있다. 하지만 ‘첫 헤드는 주어 담당, 둘째는 대명사 담당’처럼 역할을 미리 정해 두는 것은 아니다. 같은 헤드도 입력에 따라 다른 패턴을 보일 수 있다.
헤드들의 결과를 모은 뒤 다음 변환으로 넘긴다. 따라서 헤드 하나의 큰 가중치만 읽으면 모델 전체가 참고한 정보의 일부만 본 것이다. 층과 헤드를 지정하고 어느 부분을 관찰했는지 기록하는 이유가 여기에 있다.
□ 트랜스포머: 이 과정을 블록으로 반복
트랜스포머는 자기 어텐션을 중심으로 한 블록을 반복하여 문맥을 반영하는 구조다. 토큰마다 벡터가 있고, 한 층에서 다른 위치를 참고해 새 벡터를 만든다. 그 결과를 다음 층에 넘겨 다시 처리한다. RNN처럼 앞 위치의 새 상태가 나올 때까지 각 뒤 위치가 차례로 기다리는 흐름과 다르다.
한 층에서 여러 위치를 함께 계산할 수 있다는 말은 계산이 사라진다는 뜻이 아니다. 위치끼리 얼마나 참고할지 따지고, 그 정보를 결합하고 변환하는 일을 한다. 구조가 바뀌어도 단어를 숫자 목록으로 표현한다는 6~8주차의 바닥은 같다.
선택 상자를 1부터 5까지 옮기며 순서를 따라간다. 이 그림은 노트북의 인코더 블록 개념도다. 처음 입력에서 마지막 출력까지 다음 역할을 구분하면 된다.
| 구성 | 하는 일 | 이 단계에서 묻는 질문 |
|---|---|---|
| 토큰 벡터와 위치 정보 | 내용과 순서를 함께 표현 | 어떤 조각이 어디에 있는가 |
| 여러 헤드의 자기 어텐션 | 다른 위치의 정보를 참고 비중으로 결합 | 다른 위치를 얼마나 참고할까 |
| 연결과 정규화 | 입력의 전달 경로 유지, 값의 크기 조절 | 이전 정보가 다음 계산에도 전달되는가 |
| 피드포워드 신경망 | 각 위치에서 같은 신경망으로 벡터 변환 | 모은 정보를 어떻게 새 표현으로 바꿀까 |
| 연결·정규화와 블록 반복 | 변환 결과를 다음 층으로 전달 | 다음 층에서 무엇을 다시 참고할까 |
피드포워드 단계는 위치마다 같은 변환을 적용한다. 위치끼리 정보를 섞는 역할은 앞의 어텐션 단계다. 연결은 원래 입력을 더하는 경로이며, 정규화는 계산에 들어가는 값의 크기를 조절하는 과정이다. 이름을 암기하기보다 ‘참고하기, 위치별 변환, 정보 전달’이라는 역할을 먼저 구별한다.
□ 함께 읽더라도 어순은 필요하다
토큰을 함께 처리하면 ‘안 먹고 잤다’와 ‘먹고 안 잤다’의 차이가 다시 사라지는 것은 아닐까? 그래서 토큰 벡터에 위치 정보를 함께 넣는다. 어떤 토큰인지만이 아니라 입력에서 어디에 놓였는지도 모델이 사용할 수 있게 한다.
그림은 실제 모델의 위치 정보 계산을 그린 것이 아니라 같은 카드의 어순이 달라지는 상황의 비유다. 카드의 색이 내용이라면 놓인 자리는 위치다. 같은 카드가 모두 있다고 해도 어느 카드 앞뒤에 놓였는지에 따라 읽는 내용이 달라진다. 위치 정보를 넣는 방식은 모델마다 다르지만, 이번 주는 병렬로 처리한다는 것과 순서를 버린다는 것은 다르다는 점을 가져간다.
□ 인코더와 디코더가 보는 방향
노트북의 BERT 계열 모델은 인코더다. 빈칸 앞뒤를 모두 참고할 수 있다. ‘the [MASK] mountain’에서 빈칸 뒤의 mountain도 후보를 고르는 단서가 된다. 뒤의 답을 미리 몰래 읽는 것이 아니라, 앞뒤 문맥의 빈칸을 맞히도록 만들어진 작업이다.
다음 토큰을 생성하는 디코더의 자기 어텐션에는 뒤 위치를 가리는 인과적 마스크가 들어간다. 앞의 입력으로 다음을 예측하는 동안 아직 나오지 않은 뒤의 말을 참고하면 안 되기 때문이다. 다만 추론 시 토큰을 하나씩 생성하는 과정에는 여전히 앞선 결과에 의존하는 순서가 있다. 트랜스포머의 한 층 계산을 병렬화하는 것과 생성 토큰 전체를 한 번에 확정하는 것은 다르다.
| 비교 | 인코더의 빈칸 채우기 | 디코더의 다음 토큰 예측 |
|---|---|---|
| 현재 작업 | 가린 위치의 토큰 맞히기 | 앞에서 이어질 다음 토큰 맞히기 |
| 참고 가능한 위치 | 빈칸 앞과 뒤 | 현재까지의 앞쪽 위치 |
| 뒤를 가리는 이유 | 해당 방식에서는 앞뒤 문맥 사용 | 아직 생성되지 않은 답을 보지 않기 위해 |
| 이번 주 실행 | BERT 계열 작은 모델 | 구조 차이만 설명, 생성 실습은 하지 않음 |
같은 ‘마스크’라도 두 용도를 구분한다. [MASK]는 입력 문장에 넣는 빈칸 토큰이다. 인과적 마스크는 어텐션에서 참고를 금지하는 위치 표시다. 노트북 문장에 [MASK]를 넣었다고 디코더처럼 뒤의 토큰을 가리는 것은 아니다.
□ 공개 원문으로 실제 모델 보기
실제 입력의 출처는 제주관광공사 Hallasan 페이지, 열람일 2026-10-11이다. 원문 짧은 발췌는 ‘At 1,950 m above sea level, it is the highest mountain in South Korea.‘이다. 페이지 제목 Hallasan.을 앞에 붙이고 한 단어를 [MASK]로 치환한다.
- 기본 입력 1:
Hallasan. At 1,950 m above sea level, it is the [MASK] mountain in South Korea. - 기본 입력 2:
Hallasan. At 1,950 m above sea level, it is the highest [MASK] in South Korea.
사람은 it이 한라산을 가리킨다고 읽는다. 작은 모델의 마지막 층 첫 헤드도 한라산을 가장 많이 참고할까? 기본 입력 1의 실제 출력은 다음과 같았다. 이 표는 교육용 가중치와 달리 사전학습 모델에서 계산한 값이다.
it의 참고 비중 순위 | 위치 번호 | 토큰 | 가중치 |
|---|---|---|---|
| 1 | 0 | [CLS] | 0.768 |
| 2 | 12 | level | 0.101 |
| 3 | 13 | , | 0.068 |
| 4 | 14 | it | 0.037 |
| 5 | 15 | is | 0.007 |
한라산이 아니라 [CLS]가 맨 위다. [CLS]는 입력 앞에 넣는 특수 토큰이지 산 이름이 아니다. 그렇다고 이 표만으로 ‘모델은 한라산을 전혀 참고하지 않는다’고 단정할 수도 없다. 앞 층과 다른 헤드, 여러 변환을 거친 결과를 보기 때문이다. 이번에 관찰한 것은 마지막 층 첫 헤드의 it 행 한 줄이다.
이 결과가 실습의 핵심이다. 교육용 모형에서는 원하는 참조를 사람이 넣었으므로 우산 위치가 크게 나온다. 실제 모델에는 그런 정답 그림을 넣지 않았다. 사람이 기대한 참조와 실제로 출력된 참고 비중을 비교하고, 일치하지 않는 부분을 정확히 기록한다.
□ 빈칸 후보는 사실 검증 결과가 아니다
기본 입력 두 개의 빈칸 후보도 비교해 보자. 아래 값은 전체 어휘 분포에서 해당 후보에 준 확률이다. 다섯 후보만 보여 주므로 표의 확률을 합쳐도 1이 될 필요는 없다.
| 순위 | highest를 가린 입력 | 확률 | mountain을 가린 입력 | 확률 |
|---|---|---|---|---|
| 1 | largest | 0.159 | peak | 0.474 |
| 2 | highest | 0.109 | level | 0.141 |
| 3 | tallest | 0.044 | point | 0.079 |
| 4 | oldest | 0.035 | altitude | 0.040 |
| 5 | mountain | 0.030 | elevation | 0.037 |
첫 입력의 원래 단어 highest는 1위가 아니라 2위다. 둘째의 원래 단어 mountain은 상위 다섯 개에 없다. 앞뒤 문맥을 참고한다고 해서 원문 단어를 항상 복원하지는 않는다. 작은 영어 모델이 그 입력에서 학습한 패턴에 따라 제안한 결과다.
표에서 읽을 것은 ‘한라산이 실제로 무엇인지’가 아니라 빈칸 위치에 따라 후보의 종류가 바뀌는지다. the와 mountain 사이를 가리면 크기·높이와 관련된 말이 여러 개 나오고, highest 뒤를 가리면 peak 같은 명사가 나온다. 일부 후보는 어색하다. 자연스러운 후보와 원문과 다른 후보를 함께 기록해야 모델의 한계가 보인다.
□ 긴 문서는 어텐션만으로 끝나지 않는다
어텐션은 떨어진 위치를 참고하는 경로를 만들지만, 모든 관계를 정확히 찾아주는 장치가 아니다. 기본적인 전체 자기 어텐션은 토큰 위치 간 조합을 계산한다. 입력 길이가 늘면 비교할 조합이 빠르게 늘어 계산·메모리 부담이 커진다. 문서를 무한히 넣을 수 있는 것도 아니다.
이번 노트북은 입력을 최대 64토큰으로 제한한다. 길이가 넘으면 뒤가 잘릴 수 있고, 잘린 뒤에 빈칸이 없어졌는지도 확인한다. 모델이 볼 수 있는 범위 안의 내용만 관찰한 것인지, 필요한 조건이 잘려서 보이지 않았는지를 구분해야 한다. 들어온 조건을 놓치는 문제와 아예 입력되지 않은 조건은 원인이 다르다.
□ 강의 2에서 꼭 가져갈 것
- 어텐션은 다른 위치의 정보를 참고 비중에 따라 모으는 방식, 큰 가중치는 정답·사실 확률이 아님
- 자기 어텐션은 같은 입력 안의 위치끼리 참고한다. 여러 헤드는 별도의 비중을 계산하지만 역할이 고정된 것은 아님
- 트랜스포머는 참고하기와 위치별 변환을 블록으로 반복한다. 위치 정보를 넣으므로 함께 처리해도 어순 구별 가능
- 인코더는 앞뒤 빈칸 문맥을, 다음 토큰을 예측하는 디코더는 앞쪽 문맥을 사용. 빈칸 토큰과 인과적 마스크 구분
- 실제
it행의 1위는[CLS]0.768이었다. 한 헤드의 비중을 모델 전체의 이해나 원인으로 단정하지 않기 - 빈칸 위치가 바뀌면 후보도 바뀐다. 후보 확률은 원문 복원·사실 검증 성공률이 아님
□ 활동: 대명사가 가리키는 위치 표시
온라인에서는 코드를 실행하기 전에 사람이 읽은 참조 관계를 남긴다. 아래 설명용 문장의 ‘그것은’이 무엇을 가리키는지 표시하고, 어디까지 확실한지 적는다. 같은 문장에서 우산과 가방을 각각 가리킨다고 읽을 수 있는지 생각해 본다.
‘민지는 제주에서 우산을 샀다. 수진은 가방을 들었다. 그것은 빨갛다.’
| 관찰 | 내가 표시한 위치 | 이유 또는 불확실성 |
|---|---|---|
| ‘그것은’이 우산을 가리키는 해석 | ||
| ‘그것은’이 가방을 가리키는 해석 | ||
| 뜻을 명확히 하려면 바꿀 말 | ||
한라산 원문의 it이 가리키는 대상 |
- 가능한 해석이 둘이면 둘 다 적기, ‘바로 앞 명사니까 반드시 가방’이라고 단정하지 않기
- 원문에서 확인한 대상과 모델이 참고한 위치를 나중에 나란히 비교하기
- 어텐션 숫자를 예상해서 쓰지 않기, 온라인에서는 사람의 참조 위치만 기록
- 선택한 제주 공식 안내문의 대상·기한·예외 위치도 표시, URL과 열람일 함께 기록
정답 위치를 맞히는 것보다 참조 대상과 불확실성을 구분했는지가 중요하다. 대면 시간에는 이 기록을 실제 모델 출력과 비교하는 기준으로 쓴다.
대면 (1시수)
Section titled “대면 (1시수)”노트북 돌려 보기
Section titled “노트북 돌려 보기”□ 노트북에서 하는 일
사람이 지정한 교육용 가중치로 행과 열의 읽는 법을 익힌 뒤, 작은 사전학습 모델의 가중치를 관찰한다. 공개 한라산 원문에서 두 위치를 가려 빈칸 후보를 비교한다. RNN이나 트랜스포머를 새로 학습하거나 구현하지 않는다.
- 실행에 필요한 라이브러리 설치, CPU 사용 확인 (0)
- 여섯 토큰의 교육용 가중치 그림 관찰, 행과 열의 뜻 구분 (1-1)
- 작은 영어 사전학습 모델 준비, 층 2개·헤드 2개 출력 확인 (1-2)
- 실제 토큰 목록과 마지막 층 첫 헤드의 가중치 그림 관찰 (1-3)
it행의 상위 위치와 사람이 표시한 한라산 위치 비교 (1-3)- highest를 가린 첫 입력과 mountain을 가린 둘째 입력의 후보 비교 (1-3, 2)
- 확인 질문 답을 markdown 셀에 기록, 실행 모드와 미관찰 항목 표시 (3)
TODO는 선택적으로 입력 문장 한 곳만 교체하는 자리다. 그대로 두어도 이미 서로 다른 빈칸 위치가 준비되어 있어 전체 관찰이 가능하다. 추가 코드를 작성하는 것은 제출 조건이 아니다.
□ 토큰 목록부터 읽기
기본 입력 1에서는 Hallasan이 hall, ##asa, ##n의 세 토큰으로 나뉜다. 대소문자도 소문자로 바뀐다. 작은 영어 모델의 토크나이저가 고유명사를 처리한 결과다. 이는 2주차에서 본 ‘단어 하나가 토큰 하나와 같지 않다’는 원리가 실제 모델에서 나타난 사례다.
| 위치 | 토큰 | 읽을 내용 |
|---|---|---|
| 0 | [CLS] | 모델이 앞에 붙인 특수 토큰 |
| 1~3 | hall, ##asa, ##n | 한라산 이름이 조각난 위치 |
| 6~8 | 1, ,, 950 | 숫자와 문장부호도 별도 토큰 |
| 14 | it | 이번에 행을 읽는 대명사 |
| 17 | [MASK] | 기본 입력 1에서 가린 위치 |
| 23 | [SEP] | 입력 끝에 붙인 특수 토큰 |
한라산을 표시할 때 위치 1 하나만 표시하면 이름의 일부만 고른 것이다. 1~3의 조각을 함께 보고 사람이 고른 대상과 비교한다. ##는 원문에 쓰인 글자가 아니라 앞 조각에 이어 붙이는 단어 조각 표시다.
□ 그림을 따라 읽기
노트북 그림은 한 헤드의 가중치 행렬이다. 축에는 영어 위치 번호를 쓰고, 번호와 토큰의 대응은 위에 출력한다. 한국어 폰트가 없는 환경에서도 축 글자가 깨지지 않도록 한 설정이다. 가로축은 참고하는 위치, 세로축은 현재 위치다.
- 먼저 세로축에서
it의 위치 14 찾기 - 그 가로줄을 따라 어떤 열이 진한지 관찰, 열 0의
[CLS]와 비교 - 해당 행의 상위 위치 출력으로 실제 숫자 확인, 색만으로 정확한 수치 추정하지 않기
- 한라산 조각 위치 1~3과 상위 다섯 위치의 차이를 기록
- 다른 행의 진한 칸을 보더라도 현재 위치가 달라졌다는 점 구분
가중치가 가장 큰 위치만 보고 ‘이 토큰 때문에 후보가 나왔다’고 쓰지 않는다. 확인한 것은 비중의 패턴이다. 원인을 증명하려면 입력이나 내부 경로를 바꾸며 결과가 어떻게 달라지는지 별도로 검증해야 한다. 이번 과목은 그런 내부 원인 실험까지 요구하지 않는다.
□ 기본 입력 두 개 비교하기
두 입력은 빈칸 하나의 위치만 다르다. 첫 입력에서는 highest가 비어 있고 mountain이 보인다. 둘째에서는 highest가 보이고 mountain이 비어 있다. 문장이 같은 배경을 설명해도 모델이 맞혀야 하는 문장 자리의 역할이 달라진다.
- 첫 입력: largest, highest, tallest 등 후보를 원문 자리와 비교
- 둘째 입력: peak, level, point 등 후보를 highest 다음 자리에 넣어 읽기
- 후보가 문법적으로 어울리는지와 원문 단어를 복원했는지 별도로 기록
- 같은 원문이라고 후보 목록이 같아야 하는 것은 아님
- 후보 1위가 실제 한라산 정보로 맞는지 판단하려면 공식 원문 확인, 모델 확률로 대신하지 않기
□ 선택 TODO에서 볼 것
입력 문장을 바꿔 보고 싶은 학생은 따옴표 안의 기존 문장 한 곳만 교체한다. 영어 문장이고 [MASK]가 정확히 하나 있어야 한다. 공식 문장의 다른 단어를 가리거나 문장을 짧게 만드는 정도로 관찰할 수 있다. 바꾸기 전 결과를 먼저 남긴다.
가중치의 현재 행과 참고 열은 토큰 위치로 표시되므로, 문장을 바꾸면 번호도 바뀔 수 있다. 바꾼 문장에서 it이 14번일 것이라고 가정하지 말고 새 토큰 목록부터 확인한다. 결과가 예상과 같지 않아도 원래 출력 그대로 기록한다. 가중치나 확률을 높게 나오게 만드는 것은 활동 목표가 아니다.
□ 모델을 사용할 수 없을 때
설치나 다운로드에 실패하면 노트북은 교육용 모형으로 계속 진행한다. 실제 모델의 그림과 빈칸 후보는 생기지 않는다. 교육용 모형이 실행됐다는 것과 실제 모델이 준비됐다는 것을 분리해서 적는다. 그림 라이브러리가 없으면 교육용 모형은 숫자 표로도 관찰할 수 있다.
| 증상 | 원인 또는 확인할 것 | 조치 |
|---|---|---|
| 설치 실패 | 연결·패키지 설치 오류 | 출력된 오류 유형 기록, 교육용 관찰 진행 |
| 실제 모델 사용 불가 | 모델 다운로드·가중치 로딩 오류 | 실패 유형 기록, 연결 복구 후 준비 셀부터 재실행 |
| 그래프 대신 숫자 표 출력 | 그림 라이브러리 없음 | 행과 열을 숫자 표로 관찰 |
| 빈칸 개수 오류 | [MASK]가 없거나 여러 개 | 영어 문장에 정확히 한 개 유지 |
| 빈칸이 길이 제한 뒤에 있음 | 64토큰 제한 뒤에서 잘림 | 문장을 짧게 변경하고 토큰 목록 확인 |
| 후보가 어색하거나 원문과 다름 | 작은 모델의 예측 결과 | 오류와 구분, 결과 그대로 기록 |
| 변수 이름 오류 | 위 셀 미실행 또는 런타임 초기화 | 위에서부터 전체 실행 |
다운로드가 실패한 학생에게 같은 표의 숫자를 그대로 베껴 내 모델 결과라고 쓰도록 요구하지 않는다. 강의의 확인된 예시를 읽은 것과 자신의 런타임에서 관찰한 결과를 구분하면 된다. 실패 기록과 어떤 비교를 하려 했는지도 남긴다.
- 기본: 기본값의 교육용 행과 실제 it 행에서 현재 위치·참고 위치·실행 모드 구분
- 심화: 같은 출력의 다른 헤드·층을 보지 않았다는 한계와 모호한 참조 해석 비교
[이론] 수식 없이 구조도 중심으로 설명, 대명사의 참조 위치 표시
- RNN에서 우산 정보가 그것의 위치에 전달되는 경로를 내 말로 설명
- LSTM의 유지·삭제 조절과 모든 관계 보존을 구분하여 서술
- 어텐션을 ‘중요한 단어에 집중’으로 설명 가능, 사람의 중요도·사실 확률과 참고 비중의 차이 함께 기록
- 온라인 활동의 모호한 대명사에서 가능한 해석과 명확하게 고칠 말 제시
[구현] 제공 노트북 실행, 어텐션 가중치 시각화와 학생이 표시한 참조 지점 비교
- 기본값으로 전체 실행, 실제 모델 사용 여부를 먼저 기록
- 교육용 모형의 그것은 행과 실제 모델의 it 행을 구분하여 관찰
- 한라산의 토큰 조각 위치와 실제 상위 참고 위치를 나란히 제시
- 기본 입력 두 개의 빈칸 후보 5개와 확률 기록, 원문 복원 여부와 자연스러움 구분
- 선택적으로 TODO 입력 문장만 교체, 코드 작성·학습·GPU 사용은 요구하지 않음
[실무] 긴 문서를 다루는 서비스가 어려운 이유와 문맥 누락 위험 관찰
- 제주 공식 행정·정책 안내문에서 대상·기한·예외의 위치 확인, URL과 열람일 기록
- 한 부분만 참고했을 때 놓칠 조건 하나와 그 영향을 연결하여 설명
- 입력 길이 제한으로 잘린 경우와 입력 안에 있는 조건을 놓친 경우를 구분
- 실제 신청 가능 여부 판정이나 안내문 수정을 대신하지 않고, 원문 확인의 필요성 제시
□ 제출할 것
- 실행 결과가 포함된
week-09.ipynb, 확인 질문의 markdown 답안 포함 - 실행 모드(실제 모델 / 교육용 모형), 사람의 참조 위치와 모델 출력 비교
- 실제 모델 사용 불가 시 실패 유형·미관찰 항목 표시, 없는 빈칸 후보를 만들어 쓰지 않기
- 선택 TODO를 수정한 경우 기존·수정 입력과 결과 차이 추가
assignments/week-09/<학번>/에 업로드 후 PR 제출, 학번만 사용하고 이름·연락처 제외
결과가 사람의 예상과 일치했는지가 아니라 무엇을 실행했고, 어디를 관찰했으며, 어떤 결론까지 가능한지를 기록하는 활동이다. 실제 모델 실행에 실패했으면 실패와 교육용 관찰을 구분해 쓰고, 시도하지 않은 비교를 성공했다고 쓰지 않는다.
자주 하는 오해 Q&A
Section titled “자주 하는 오해 Q&A”Q1. RNN의 상태는 앞 문장 전체를 저장한 메모인가?
아니다. 상태는 정해진 크기의 벡터다. 앞서 들어온 토큰과 상태를 함께 계산해 새 상태를 만든다. 원문을 그대로 복사해 두는 것이 아니며, 칸마다 ‘사람’, ‘장소’ 같은 고정 이름이 붙어 있지도 않다. 긴 문장에서 필요한 정보를 남기는 일이 어려울 수 있다는 이유가 여기에 있다.
Q2. LSTM은 기억을 유지하니 긴 문서도 정확히 읽는가?
그렇게 보장하지 않는다. LSTM은 무엇을 유지하고 지울지 조절하는 구조로 긴 관계의 정보 전달을 돕는다. 하지만 정해진 크기의 표현을 쓰고 기본 처리에서 앞 단계에 의존한다. 원문에 모호한 대명사가 있으면 앞을 모두 기억해도 답이 하나로 정해지지 않는다. 구조의 도움과 모든 문서의 정확한 이해를 구분한다.
Q3. 어텐션 0.70이면 그 단어가 정답일 확률 70%인가?
아니다. 그 값은 현재 행에서 해당 위치를 참고하는 비중이다. 교육용 모형의 그것은 행에서 우산에 0.70을 넣은 것은 참고 정보를 그렇게 모으도록 사람이 정한 것이다. 대명사의 정답 확률을 학습한 결과가 아니다. 빈칸 후보의 확률은 다른 출력에서 나오며, 그 확률도 실제 사실의 참·거짓 확률은 아니다.
Q4. 실제 어텐션에서 한라산 대신 [CLS]가 크면 모델이 아무것도 이해하지 못한 것인가?
그 행 하나로 모델 전체를 판정할 수 없다. 이번에는 마지막 층 첫 헤드의 it 행을 보았다. 앞 층과 다른 헤드, 위치별 변환을 거친 정보도 결과에 들어간다. [CLS]가 크다는 관찰은 기록하되, ‘한라산은 전혀 쓰지 않았다’ 또는 ‘특수 토큰이 답의 원인이다’라는 결론으로 바로 넘어가지 않는다. 가중치 관찰과 내부 원인 증명은 다르다.
Q5. 여러 헤드는 각각 주어·목적어·대명사를 맡는가?
역할을 그렇게 고정해 두지 않는다. 헤드들은 서로 다른 참고 비중을 학습한다. 어떤 입력에서 문법 관계처럼 보이는 패턴이 나타나더라도 그 헤드가 모든 문장에서 같은 역할만 맡는다는 뜻은 아니다. 교육용 A·B·C는 차이를 보기 위해 사람이 지정한 예시이며 실제 모델의 역할표가 아니다.
Q6. 트랜스포머는 함께 계산하므로 단어 순서를 무시하는가?
아니다. 토큰 벡터에 위치 정보를 함께 사용한다. ‘안 먹고 잤다’와 ‘먹고 안 잤다’가 다른 순서임을 계산에 반영할 수 있다. 한 층에서 여러 위치를 함께 처리하는 것과 순서를 버리는 것은 다르다. 디코더가 새 토큰을 하나씩 생성할 때는 다음 입력이 이전 생성 결과에 의존한다는 점도 구분한다.
Q7. [MASK]를 넣으면 모델이 뒤 문장을 못 보게 되는가?
아니다. 이번 인코더에서 [MASK]는 가린 단어의 자리이고, 그 앞뒤 문맥을 참고해 후보를 만든다. 뒤 위치를 보지 못하게 하는 인과적 마스크는 다음 토큰 예측의 어텐션에 적용하는 다른 장치다. 문장의 빈칸 표시와 참고를 금지하는 위치 표시를 같은 뜻으로 읽지 않는다.
Q8. 빈칸 1위가 largest면 공식 원문의 highest가 틀린 것인가?
아니다. 모델의 후보는 그 입력에서 학습된 패턴으로 계산한 제안이다. 한라산의 실제 설명이 맞는지 확인하려면 공식 원문을 읽어야 한다. 작은 모델이 highest를 2위로 둔 것을 사실의 우열로 읽으면 안 된다. 둘째 입력의 원래 단어 mountain이 상위 다섯 후보에 없었다는 한계도 함께 남긴다.
스스로 점검
Section titled “스스로 점검”- RNN에서 ‘우산을’의 정보가 ‘그것은’까지 전달되는 경로를 설명하라. 상태를 원문 복사본이라고 부르면 안 되는 이유는?
- LSTM이 RNN의 어떤 어려움을 줄이며, 그래도 모든 관계를 보존한다고 할 수 없는 이유는?
- 교육용 그것은 행의 우산 가중치 0.70과 실제 it 행의
[CLS]0.768은 각각 무엇을 뜻하는가? - 트랜스포머에서 위치 정보가 필요한 이유와, 자기 어텐션·피드포워드의 역할 차이는?
- 인코더의
[MASK]와 디코더의 인과적 마스크는 무엇이 다른가? - highest를 가린 입력과 mountain을 가린 입력의 실제 후보를 비교하라. 어떤 관찰은 가능하며 어떤 사실 판단은 불가능한가?
정답 보기
-
상태가 여러 위치에서 갱신되며 다음 위치로 전달된다. 우산을의 정보도 샀다를 거쳐 그것은의 표현에 사용되어야 한다. 상태는 정해진 크기의 숫자 목록이고 원문 전체의 복사본이 아니다. 무엇을 남길지는 학습된 계산에 달려 있다.
-
유지·삭제·출력을 조절하는 구조로 긴 관계의 정보 전달을 돕는다. 하지만 표현 용량과 순차 의존성이 남고, 원문이 모호하면 기억만으로 답이 정해지지 않는다. 긴 문서 이해를 보장하는 장치라고 쓰지 않는다.
-
0.70은 사람이 넣은 교육용 참고 비중, 학습 결과가 아니다. 0.768은 실제 마지막 층 첫 헤드의 it 행에서 [CLS]를 참고한 비중이다. 어느 쪽도 참조 대상이 정답일 확률이 아니다. 실제 모델 전체의 원인이나 이해를 행 하나로 단정할 수 없다.
-
같은 토큰도 위치에 따라 뜻이 달라지므로 순서를 반영해야 한다. 자기 어텐션은 다른 위치의 정보를 참고 비중으로 모으고, 피드포워드는 각 위치에서 같은 신경망으로 표현을 변환한다. 토큰을 함께 처리한다고 어순을 버리는 것이 아니다.
-
[MASK]는 가린 입력 토큰의 자리, 인코더는 앞뒤 문맥을 참고한다. 인과적 마스크는 뒤 위치의 참고를 금지하는 표시다. 다음 토큰 예측에서 아직 나오지 않은 답을 미리 보지 않도록 한다.
-
첫 입력은 largest 0.159, highest 0.109, 둘째는 peak 0.474, level 0.141이 앞에 나온다. 빈칸 위치에 따라 후보 종류가 달라짐을 관찰할 수 있다. 원문 단어를 항상 복원하지 않으며, 한라산의 높이·순위가 사실인지 이 확률로 판정할 수 없다. 실제 사실은 공식 원문에서 확인한다.
이번 주 용어 정리
Section titled “이번 주 용어 정리”| 용어 | 한 줄 뜻 |
|---|---|
| 시퀀스 | 순서가 있는 토큰 목록 |
| 상태 | 앞서 읽은 정보를 다음 위치로 전달하는 벡터 |
| RNN | 이전 상태와 현재 입력으로 새 상태를 만드는 순환 신경망 |
| LSTM | 정보를 유지·삭제·출력하도록 조절하는 RNN 계열 |
| 게이트 | 정보를 얼마나 남기거나 내보낼지 조절하는 장치 |
| 어텐션 | 다른 위치를 참고할 비중을 계산하고 그 정보들을 결합하는 방식 |
| 자기 어텐션 | 같은 입력 안의 위치끼리 참고하는 어텐션 |
| 헤드 | 별도의 참고 비중을 계산하는 단위, 역할이 사전에 고정된 것은 아님 |
| 위치 정보 | 토큰의 위치와 순서를 계산에 반영하는 정보 |
| 트랜스포머 | 자기 어텐션과 위치별 변환 등을 블록으로 반복하는 구조 |
| 피드포워드 | 각 위치에서 같은 신경망으로 표현을 변환하는 단계 |
| 인코더 | 이번 실습에서 앞뒤 문맥을 참고하는 표현 구조 |
| 디코더 | 다음 토큰 예측에서 앞쪽만 참고하도록 가리는 구조 |
| 빈칸 토큰 | 입력에서 가린 단어의 위치를 표시하는 [MASK] |
| 인과적 마스크 | 아직 나오지 않은 뒤쪽 위치의 참고를 금지하는 표시 |
| WordPiece 조각 | 단어를 여러 조각으로 나눈 토큰, ##는 앞 조각에 이어지는 표시 |
이번 주 읽기
Section titled “이번 주 읽기”이번 주의 지정 읽기는 주교재 8장 Transformers다. RNN·LSTM과의 비교는 이번 강의의 상태 전달 예제로 복습하고, 교재에서는 트랜스포머의 구조도와 입력·출력 설명을 먼저 읽는다. 자세한 주교재 서지 정보는 강의계획서를 참고한다. 공식이나 학습 구현을 따라 쓰지 않고, 정보가 어디서 어디로 전달되는지 확인한다.
- BERT 원 논문: 앞뒤 문맥을 사용하는 인코더와 빈칸 학습의 관계, 그림에서 입력 방향 관찰
- 작은 사전학습 모델의 모델 카드: 영어 모델, MIT, 층 2개·표현 크기 128 확인. 이 모델이 한국어 모델이 아니라는 점 구분
- 한라산 공개 원문: 공개 문장과 빈칸 치환 입력 비교, 원문의 사실과 모델 후보 구분
- 수식은 건너뛰기. 읽고 나면 차례로 상태 전달하기와 다른 위치 참고하기의 차이를 한 문장으로 설명
- 10주차 연결: 이번 주의 구조에서 출발하여 사전학습된 모델을 과제에 가져다 쓰는 방식 비교
실습 노트북
Section titled “실습 노트북”교육용 모형에서 어텐션 행을 읽고, 작은 영어 사전학습 모델에서 실제 가중치와 빈칸 후보를 관찰한다. 제주관광공사 한라산 원문의 두 위치를 가린 입력이 기본값으로 제공된다. CPU로 전체 실행하며, TODO는 선택적으로 기존 입력 문장 한 곳만 교체하는 자리다.