6주차: 단어의 의미 표현, 분포적 통계와 임베딩 기초
단어의 의미 표현, 분포적 통계와 임베딩 기초.
□ 이번 주에 하는 일
- 단어의 뜻은 함께 다니는 단어에 있다는 분포 가설을 본다
- 창(window)으로 이웃을 세어 동시발생 행렬을 만들고, 행을 단어 벡터로 쓴다
- 두 단어 벡터의 코사인 유사도를 계산해, 사람이 느끼는 비슷함과 숫자가 말해 주는 비슷함을 비교한다
빈 카드에는 아무것도 적혀 있지 않다. 그래도 왼쪽 카드는 귤과 관련된 것, 오른쪽 카드는 바다와 관련된 것이라고 짐작할 수 있다. 주위에 무엇이 놓였는지가 카드의 정체를 알려 준다. 이번 주는 이 생각을 단어에 적용한다.
□ 5주차에서 이어지는 자리
5주차 단어 가방은 순서를 버렸고, 가방에 없던 단어는 판단에 아무것도 더하지 못했다. 한계를 줄이는 방향 세 가지 중 하나가 **“뜻이 비슷한 단어끼리 가깝게 표현한다”**였다. 이번 주는 그 방향의 첫 단계다. 단어를 숫자 목록, 즉 벡터로 바꿔 뜻이 비슷한 단어가 숫자로도 비슷하게 나오는지 본다.
2주차와 5주차에서 본 조사 문제도 다시 나온다. 5주차에 직원이 와 직원들이 가 다른 단어였던 것처럼, 이번 주에는 귤을 과 귤은 이 다른 단어로 세어진다. 그것이 어떤 결과를 만드는지가 이번 주의 핵심 관찰이다.
□ 이 문서를 읽는 법
- 수식은 한 개도 나오지 않는다. 코사인 유사도의 공식도 쓰지 않고, 방향을 재는 값이라는 감만 잡는다
- 말뭉치 문장과 방언 표본 문장은 설명용 예시다. 실제 말뭉치에서 온 것이 아니다
- 표와 그림의 유사도는 노트북과 같은 문장, 같은 설정(창 2) 에서 계산한 값이다. 소수 둘째 자리로 반올림했다. 개념 그림이라고 밝힌 그림 하나만 측정값이 아니다
- 벡터 계산을 손으로 하지 않는다. 이번 주에 요구하는 것은 숫자를 읽고 사람의 눈과 비교하는 능력이다
온라인 (2시수)
Section titled “온라인 (2시수)”강의 1: 분포 가설과 동시발생 행렬
Section titled “강의 1: 분포 가설과 동시발생 행렬”□ 분포 가설: 단어의 뜻은 함께 다니는 단어에 있다
처음 보는 단어의 뜻을 어떻게 알게 되는가. 사전을 찾기 전에 그 단어가 어떤 말들과 함께 다니는지를 본다. “귤”이라는 단어를 처음 보는 사람에게 “겨울에 나오고, 밭에서 따고, 깨끗이 씻어 먹는다”고 하면 감을 잡는다. 사전 뜻이 아니라 이웃이 단어를 설명해 준다.
분포 가설은 이것을 원리로 만든 것이다. 단어의 뜻은 그 단어가 함께 다니는 단어에 있다. 영국 언어학자 Firth(1957)의 “You shall know a word by the company it keeps”(단어는 그 단어가 어울리는 친구를 보면 안다)라는 말로 자주 소개된다.
이 가설을 따르면 두 단어가 비슷한 이웃과 함께 다니면 두 단어도 비슷하다. 함께 다닌다는 것을 어떻게 재고, 이웃이 비슷하다는 것을 어떻게 숫자로 비교하는지가 이번 주의 두 단계다.
단어 쌍을 누르면 함께 다니는 문장과 그렇지 않은 문장이 나란히 보인다. 바다가 와 푸르다 는 같은 문장 안에서 이웃이지만, 귤을 과 겨울 은 어느 문장에서도 만나지 못한다.
□ 창(window): 함께 다닌다는 것을 재는 방법
“함께 다닌다”의 기준이 필요하다. 이번 주에 쓰는 방법은 창(window) 이다. 기준 단어에서 왼쪽 오른쪽으로 몇 칸을 볼지 정한다. 창 1은 바로 옆 한 칸, 창 2는 옆 두 칸이다.
그림의 액자가 창이다. 가운데 주황색 카드가 기준 단어이고, 액자 안에 함께 들어온 양옆의 카드가 이웃이다. 창 2라면 양옆 두 장씩이 액자 안에 들어온다. 액자 밖의 카드는 같은 문장에 있어도 이웃으로 치지 않는다. 창은 문장 경계를 넘지 않는다. 한 문장이 끝나면 다음 문장의 단어는 이웃이 아니다.
노트북과 같은 예를 보자. “고기국수를 뜨겁게 먹었다”에서 먹었다 의 이웃은 창 1로는 뜨겁게 하나다. 창 2로 넓히면 뜨겁게 와 고기국수를 둘이 이웃이 된다. “귤밭에서 귤을 따왔다”에서 귤을 의 이웃은 창 1과 창 2가 똑같이 귤밭에서 와 따왔다 다. 문장이 짧으면 창을 넓혀도 새 이웃이 늘지 않는다.
창을 몇 칸으로 할지는 문제가 정한다. 이번 주 노트북은 창 2를 쓴다.
□ 창을 세면 행렬이 된다
이웃을 눈으로만 보지 않고 세어서 표로 만든다. 두 단어가 한 문장에서 창 안에 함께 들어온 횟수를 칸에 쓴다. 이 표가 동시발생 행렬이다. 3주차에 단어 짝을 세어 표를 만들었듯이, 이번 주는 창 안의 단어 쌍을 센다.
그림은 처음에 귤을 과 귤은 의 행을 나란히 보여 준다. 다른 단어를 누르면 그 단어의 행이 나오고, 두 단어를 고르면 두 행을 비교한다.
행렬의 한 행이 단어 하나의 기록이다. 귤을 의 행에는 귤밭에서, 깨끗이, 따왔다, 씻어 넷이 기록되고 나머지 38칸은 모두 0이다. 단어 42개 중 넷과만 함께 다녔기 때문이다. 바다가 의 행에는 여덟 단어가 기록된다. 바다가는 문장 세 개에 나와 이웃이 많다.
표를 볼 때 알아 둘 것이 세 가지 있다.
- 표는 대각선을 기준으로 좌우가 같다.
바다가가푸르다와 함께 나왔다면푸르다도바다가와 함께 나온 것이다. 그래서 [바다가, 푸르다] 칸과 [푸르다, 바다가] 칸은 같은 숫자다 - 칸 대부분이 0이다. 5주차 단어 가방 표와 같은 모양이다. 이런 표를 희소하다고 부른다. 이번 주 행렬은 칸 1764개 중 0이 아닌 칸이 120개(6.8%)다. 단어 대부분은 행에서 두세 칸만 0이 아니다
- 2 이상인 칸도 있다.
아주와푸르다는 두 문장에서 함께 나와 칸이 2다. 한 번만 함께 나온 쌍보다 강하게 기록된다
이 행렬에서 한 행을 떼어 내면 단어 하나의 숫자 목록이 된다. 이것이 단어 벡터다. 벡터의 좌표 하나하나가 “이 이웃과 몇 번 함께 나왔나”를 뜻한다. 강의 2에서 두 단어의 벡터를 비교하는 방법을 본다.
○ 자주 나오는 단어의 착시: PMI
동시발생 행렬의 칸에는 그냥 횟수가 들어간다. 그런데 횟수에는 착시가 있다. 큰 말뭉치에서 했다 같은 말은 거의 모든 명사 옆에 나온다. 횟수만 보면 모든 명사가 했다 를 이웃으로 공유해 서로 비슷해 보인다. 반대로 해녀 와 물질 은 드물게 나오지만, 나올 때는 거의 함께 나온다.
PMI(점별 상호정보) 는 이 착시를 줄이는 점수다. 두 단어가 실제로 함께 나온 횟수를, 두 단어가 서로 상관없이 흩어져 있을 때 우연히 함께 나올 것으로 기대되는 횟수와 비교한다.
- 기대보다 훨씬 자주 함께 나오면 점수가 높다.
해녀와물질이 그렇다 - 기대만큼만 함께 나오면 점수가 0 근처다. 어디에나 나오는
했다가 그렇다
횟수 대신 PMI를 칸에 넣으면 “흔해서 함께 나온 쌍”은 약해지고 “특별히 함께 다니는 쌍”은 강해진다. 이번 주는 이름과 아이디어까지만 만난다. 공식은 다루지 않고, 노트북도 횟수를 그대로 쓴다. 드문 쌍이 한 번 우연히 함께 나와도 높은 PMI를 받을 수 있으므로, 이 점수만으로 관계를 확정하지 않는다.
□ 강의 1에서 꼭 가져갈 것
- 분포 가설은 단어의 뜻은 함께 다니는 단어에 있다는 생각이다. 이웃이 비슷하면 두 단어도 비슷하다
- 창은 기준 단어 주위를 몇 칸 볼지 정한 범위다. 창 1은 옆 한 칸, 창 2는 옆 두 칸이고, 문장 경계를 넘지 않는다
- 창 안의 동시등장을 세면 동시발생 행렬이 되고, 그 한 행이 단어 벡터다
- 이번 주 행렬은 42 x 42, 칸 1764개 중 0이 아닌 칸은 120개(6.8%)다. 대부분 0인 희소 행렬이다
- 흔한 단어는 횟수만으로 과대평가된다. PMI 는 기대보다 자주 함께 나오는지를 보는 점수다
강의 2: 코사인 유사도, 그리고 사람의 눈과 통계의 눈
Section titled “강의 2: 코사인 유사도, 그리고 사람의 눈과 통계의 눈”□ 벡터를 화살표로 보기
단어 벡터는 좌표가 42개라 그림으로 그릴 수 없다. 그래서 먼저 좌표가 두 개인 벡터로 감을 잡는다. 좌표 두 개짜리 벡터 [2, 1]은 원점에서 오른쪽으로 2, 위로 1 간 곳을 가리키는 화살표다.
두 벡터를 비교하는 값이 코사인 유사도다. 두 화살표가 얼마나 같은 방향을 보는지 재는 값이고, 같은 방향이면 1, 직각이면 0, 반대 방향이면 -1이다.
벡터 단추를 눌러 A와 B를 바꿔 보자.
- [2, 1]과 [1, 2]는 0.80이다. 비슷한 방향이다
- [2, 1]과 [-1, 2]는 0.00이다. 직각이다
- [2, 1]과 [-2, -1]은 -1.00이다. 정확히 반대 방향이다
- [2, 1]과 [4, 2]는 1.00이다. 화살표 길이는 두 배지만 방향이 같다
단어 벡터도 좌표가 42개일 뿐 똑같다. 좌표 평면에서 잡은 감을 그대로 가져가면 된다.
□ 왜 길이가 아니라 방향인가
이정표 세 개는 길이가 다르지만 가리키는 곳은 같다. 코사인 유사도는 이정표의 길이를 보지 않고 가리키는 방향만 본다. 단어 벡터에서 이것이 왜 중요한가.
- 자주 나오는 단어는 칸 숫자가 크다. 화살표가 길다
- 드물게 나오는 단어는 칸 숫자가 작다. 화살표가 짧다
- 길이로 비교하면 흔한 단어끼리만 비슷해 보인다. 어떤 이웃과 다니는지가 아니라 얼마나 많이 나왔는지를 비교하는 셈이 된다
방향은 어떤 이웃들과 어떤 비율로 함께 다니는지만 담는다. 말뭉치에 열 번 나온 단어와 한 번 나온 단어라도, 같은 이웃들과 같은 비율로 다니면 유사도가 1이다. 분포 가설이 묻는 것이 바로 이것이다.
□ 0.41은 어디서 오는가
단어 벡터의 코사인 유사도는 겹치는 이웃에서 나온다. 이번 주처럼 0 이상의 횟수 벡터에서는 겹치는 좌표가 하나도 없으면 0이다. 이웃과 각 횟수의 비율까지 같으면 1이다. 중간값은 겹친 이웃의 수뿐 아니라 각 이웃과 함께 나온 횟수에도 영향받는다.
| 단어 쌍 | 각자의 이웃 수 | 겹친 이웃 | 유사도 |
|---|---|---|---|
고기국수를 ~ 갈치조림을 | 2개, 2개 | 먹었다 | 0.50 |
바다가 ~ 하늘이 | 8개, 3개 | 아주, 푸르다 | 0.41 |
귤을 ~ 귤은 | 4개, 3개 | 없음 | 0.00 |
바다가와 하늘이는 겹친 이웃이 둘로 더 많은데도 고기국수를과 갈치조림을보다 값이 낮다. 바다가가 문장 세 개에 나와 겹치지 않는 이웃을 여섯 개나 더 가졌기 때문이다. 겹친 수만이 아니라 겹친 좌표의 횟수와 벡터의 방향을 함께 보아야 하는 이유다. 계산은 노트북이 한다. 여기서는 이 감만 가져간다.
□ 사람의 눈과 통계의 눈
분포 가설이 맞다면 사람에게 비슷한 단어가 숫자로도 비슷하게 나와야 한다. 그럴까. 노트북과 같은 말뭉치의 다섯 쌍을 두 눈으로 비교해 보자.
| 단어 쌍 | 사람의 눈 | 통계의 눈 | 두 눈 |
|---|---|---|---|
고기국수를 ~ 갈치조림을 | 둘 다 음식 | 0.50, 먹었다 공유 | 같다 |
바다가 ~ 하늘이 | 같은 자리에 쓰이는 말 | 0.41, 아주·푸르다 공유 | 같다 |
귤을 ~ 귤은 | 같은 과일 | 0.00, 겹치는 이웃 없음 | 다르다 |
귤을 ~ 감귤 | 같은 과일 | 0.00 | 다르다 |
맑다 ~ 우도 | 관련 없음 | 1.00 | 다르다 |
사람에게 비슷한 단어가 숫자로도 비슷하게 나오는 경우와 그렇지 않은 경우가 같은 말뭉치 안에 함께 있다. 어긋남은 두 방향으로 일어난다.
- 사람은 비슷한데 통계는 0.
귤을과귤은이 0.00인 이유는 뜻이 달라서가 아니다. 귤을은귤밭에서,따왔다,깨끗이,씻어와, 귤은은겨울,과즙이,달고와만 함께 다녀 겹치는 이웃이 없다. 같은 대상을 가리켜도 조사가 갈라 놓으면 통계는 알아보지 못한다. 4주차에서 형태소 분석기로 조각을 나눈 이유가 여기서 다시 나타난다 - 사람은 무관한데 통계는 1.00. 다음 절에서 본다
반대로 두 눈이 같은 경우도 있다. 바다가 와 하늘이 는 “제주 바다가 아주 푸르다”, “가을 하늘이 아주 푸르다”처럼 같은 자리에 끼어 들었다. 뜻은 다르지만 쓰이는 자리가 같다. 분포 가설이 말하는 비슷함은 이런 비슷함이다. 사전의 동의어라기보다 같은 자리에 들어갈 수 있는 말이다.
□ 적은 자료의 함정: 1.00이 같은 뜻은 아니다
노트북 1-5는 말뭉치 전체에서 유사도가 가장 높은 쌍도 보여 준다. 1위는 맑다 ~ 우도 1.00, 2위는 감귤 ~ 선물했다 1.00이다. 사람에게 섬 이름과 날씨 말은 비슷하지 않다.
이유는 한 문장에 있다. “우도 바다가 더 맑다”에서 우도의 창 2 이웃은 바다가, 더 이고, 맑다의 창 2 이웃도 바다가, 더 다. 두 단어는 이 문장에만 나와서 이웃이 똑같다. 그래서 방향이 같고 1.00이 된다.
비슷한 일이 또 있다. 귤은 은 감귤 과는 0.00이지만 하늘에 와는 0.33이다. “겨울 귤은 달고”와 “겨울 하늘에 별이”에서 둘 다 겨울 을 이웃으로 가졌기 때문이다.
5주차에서 본 적은 자료의 함정과 같은 모양이다. 문장이 13개뿐이면 한두 문장이 유사도를 통째로 정한다. 다양한 문장이 충분히 늘어나면 이 한 문장의 영향이 줄어들 수 있다. 다만 같은 틀의 문장만 반복해서 늘리면 잘못된 유사성이 그대로 남을 수 있다. 실제 임베딩이 큰 말뭉치로 만들어지는 이유가 이것이다.
□ 창을 넓히면
창을 넓히면 함께 세어지는 쌍이 늘어난다. 행렬의 0이 아닌 칸이 창 1에서 72개(4.1%), 창 2에서 120개(6.8%), 창 3에서 142개(8.0%)로 늘어난다. 그러면 유사도는 어떻게 될까.
| 단어 쌍 | 창 1 | 창 2 | 창 3 |
|---|---|---|---|
고기국수를 ~ 갈치조림을 | 0.00 | 0.50 | 0.50 |
바다가 ~ 하늘이 | 0.29 | 0.41 | 0.41 |
귤을 ~ 귤은 | 0.00 | 0.00 | 0.00 |
귤은 ~ 하늘에 | 0.50 | 0.33 | 0.25 |
- 오르는 쌍.
고기국수를과갈치조림을은 서로 다른 문장에서 각각먹었다와 두 칸 떨어져 있다. 창 1로는 먹었다가 이웃에 들어오지 않아 0.00이다. 창 2부터 먹었다가 함께 세어져 0.50이 된다.바다가와하늘이도 창 2부터푸르다가 더해져 0.29에서 0.41로 오른다 - 그대로인 쌍.
귤을과귤은은 창을 3까지 넓혀도 0.00이다. 두 단어는 같은 문장에 나온 적도 없고 이웃도 겹치지 않는다. 원인은 창이 아니라 말뭉치와 자르기에 있다 - 내려가는 쌍. 창 1에서
귤은의 이웃은겨울,달고이고하늘에의 이웃은겨울,별이다. 이웃 둘 중겨울하나를 공유해 0.50이다. 창을 넓히면과즙이,잔뜩(창 2),많다,있다(창 3)처럼 겹치지 않는 이웃만 새로 들어와 겹친 비율이 떨어진다
창을 넓힌다고 유사도가 늘 오르는 것은 아니다. 넓은 창은 멀리 있는 관계를 잡는 대신 관계없는 이웃도 함께 끌어온다.
□ 5주차의 한계를 잇는 방법
5주차의 마지막 문장을 다시 보자. “예쁘고 감성적인 숙소였다”의 세 단어는 가방에 없어 판단에 아무것도 더하지 못했고, 판정은 부정이었다.
단어를 벡터로 두면 처음 보는 단어도 이미 본 단어와 가까운 자리에 놓일 수 있다. 예쁘고 가 좋았다 근처에 있으면 좋았다의 근거를 빌려 쓴다. 가방에 없던 단어가 판단에 끼지 못했던 한계가 줄어드는 방향이다.
토글을 바꿔도 문장은 같다. 달라지는 것은 단어를 가방의 칸으로 보느냐, 벡터의 자리로 보느냐다. 이 그림의 단어 자리는 개념 그림이다. 이번 주 말뭉치의 측정값이 아니다. 이 방향이 실제로 통하려면 예쁘고 가 들어 있는 큰 말뭉치로 벡터를 먼저 만들어 두어야 한다. 이번 주에 만드는 동시발생 행렬이 그 첫 단계다.
□ 왜 지금 이것을 배우는가
- 단어를 벡터로 바꾸는 생각은 이후의 모든 모델이 딛고 서는 바닥이다. 검색, 추천, 번역, 큰 언어모델 모두 단어와 문장을 벡터로 바꿔 계산한다
- 이번 주 벡터는 희소하고, 말뭉치가 작으면 우연에 크게 흔들린다. 7주차는 이 희소한 벡터 대신 좌표가 수십에서 수백 개인 밀집 벡터를 신경망으로 학습하는 방법을, 8주차는 단어 대신 문장을 벡터로 바꿔 비교하는 방법을 다룬다
- 모델이 바뀌어도 **“이웃이 비슷하면 비슷하다”**는 분포 가설과 방향으로 비교한다는 생각은 그대로 쓰인다
□ 강의 2에서 꼭 가져갈 것
- 코사인 유사도는 두 벡터의 방향이 같은지 재는 값이다. 같은 방향 1, 직각 0, 반대 -1. 길이는 보지 않는다
- 단어 벡터의 유사도는 겹친 이웃의 비율에서 나온다. 겹친 이웃이 없으면 0.00이다
- 두 눈은 두 방향으로 어긋난다. 같은 과일인데 0.00(
귤을~귤은), 무관한데 1.00(맑다~우도) - 분포 가설이 말하는 비슷함은 같은 자리에 쓰이는 말이다. 자료가 적으면 한 문장이 유사도를 통째로 정한다
- 창을 넓히면 유사도가 오르기도, 그대로이기도, 내려가기도 한다.
귤을~귤은의 0.00은 창으로 풀리지 않는다
□ 활동: “비슷한 단어” 다섯 쌍
비슷하다고 느껴지는 단어 다섯 쌍을 적고, 각 쌍마다 왜 비슷하다고 느꼈는지 한두 문장으로 서술한다.
| 번호 | 단어 쌍 | 왜 비슷하다고 느꼈나 |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 |
사람의 눈으로 적는다. 정답을 맞히는 활동이 아니다. 뜻이 같아서일 수도 있고, 같은 자리에 쓰이는 말이라서일 수도 있고, 함께 떠오르는 말이라서일 수도 있다.
○ 사람의 기준과 분포의 기준
활동을 적을 때 쓰는 기준은 사람의 것이다. 뜻이 같아서, 감각이 비슷해서, 함께 떠올라서. 분포 가설이 쓰는 기준은 하나다. 함께 다니는 단어가 같은가다.
적어 둔 다섯 쌍을 다시 보며 스스로 물어 본다.
- 이 두 단어는 같은 문장 자리에 바꿔 넣을 수 있는가. “바다가 아주 푸르다”의 바다가 자리에 하늘이가 들어가듯이
- 이 두 단어는 조사나 어미만 다른가. 그렇다면 띄어쓰기로 자른 통계는 다른 단어로 볼 것이다
- 이 두 단어는 반대말인가. 반대말도 같은 자리에 쓰이므로 분포로는 비슷하게 나오기 쉽다
두 기준이 어디서 같고 어디서 갈리는지가 이번 주의 출발점이다. 적어 둔 쌍은 대면 시간에 두 기준을 나란히 놓고 비교하는 재료로 쓴다.
대면 (1시수)
Section titled “대면 (1시수)”노트북 돌려 보기
Section titled “노트북 돌려 보기”□ 노트북에서 하는 일
문장 13개로 말뭉치를 만들고 창을 세워 동시발생 행렬을 만든 뒤, 행을 단어 벡터로 써서 코사인 유사도를 계산한다. 손대지 않아도 끝까지 돌아가고, TODO는 창 크기를 바꾸는 한 곳뿐이다.
노트북의 흐름은 다음과 같다.
- 문장 13개를 나란히 놓고 전체 단어 42개를 센다 (1-1)
- 창으로 이웃을 보인다.
먹었다와귤을을 창 1, 2로 훑는다 (1-2) - 동시발생 행렬을 만든다. 42 x 42, 칸 1764개, 0이 아닌 칸 120개(6.8%). 단어 여덟 개를 골라 표로 본다 (1-3)
- 다섯 단어의 행을 단어 벡터로 나란히 놓고 겹치는 좌표를 본다 (1-4)
- 코사인 유사도를 계산한다. 좌표 두 개짜리 예시, 단어 쌍 여덟 개,
귤을과 가장 비슷한 단어 세 개, 말뭉치 전체에서 가장 비슷한 쌍 세 개 (1-5) - 방언 표본으로
바당에서와바다에서를 비교한다 (1-6) - TODO에서 창을 1, 2, 3으로 바꾸며 유사도가 어떻게 달라지는지 본다 (2)
□ 귤을의 이웃 읽는 법
1-3과 1-4에서 귤을 의 행을 원래 문장과 나란히 놓고 확인한다.
- 귤을의 이웃은
귤밭에서,깨끗이,따왔다,씻어넷이다. 각각 몇 번째 문장에서 왔는지 찾아 본다. 8번과 13번 문장이다 - 귤은의 이웃은
겨울,과즙이,달고셋이다. 귤을과 겹치는 단어가 하나도 없다 - 바다가와 하늘이는
아주,푸르다두 단어를 겹친다. 1-5의 0.41이 바로 여기서 온다 - 1-5의 목록에서 귤을과 가장 비슷한 단어는
먹었다(0.41)다. 둘 다깨끗이,씻어를 이웃으로 갖기 때문이다. 그다음이따왔다(0.35)와귤밭에서(0.35)다. 사람이 고르는귤은이나감귤은 목록에 없다. 두 눈의 차이를 보여 주는 가장 좋은 예다
□ 1-3의 표 읽는 법
1-3의 마지막 출력은 42 x 42 행렬에서 단어 여덟 개만 잘라 낸 표다.
- 대각선 왼쪽 아래와 오른쪽 위가 거울처럼 같은지 확인한다
- [아주, 푸르다] 칸이 2인 것을 찾는다. 두 문장에서 함께 나왔기 때문이다
- 귤을의 줄은 여덟 칸이 모두 0이다. 귤을과 먹었다는 이웃
깨끗이,씻어를 공유해 유사도가 0.41이지만, “귤을 깨끗이 씻어 먹었다”에서 세 칸 떨어져 있어 창 2 안에 함께 들어온 적은 없다. 함께 나오는 것과 이웃이 비슷한 것은 다른 일이다
□ 1-6 방언 표본 읽는 법
1-6은 바당에서 와 바다에서 를 세 경우로 비교한다. 설명용으로 만든 표본 문장이다.
| 경우 | 방언 문장 | 표준어 문장 | 유사도 |
|---|---|---|---|
| 이웃이 같다 | 바당에서 물질을 했다 | 바다에서 물질을 했다 | 1.00 |
| 이웃 하나가 방언 | 바당에서 하영 놀았다 | 바다에서 많이 놀았다 | 0.50 |
| 이웃도 모두 방언 | 바당에서 하영 놀멍 쉬멍 | 바다에서 많이 놀며 쉬며 | 0.00 |
같은 뜻의 두 단어라도 주변 말이 겹치면 비슷하게, 주변 말까지 방언이면 남남으로 나온다. 여섯 문장을 한 말뭉치에 섞어도 0.375에 그친다. 자세한 해석은 [실무] 활동에서 한다.
□ TODO에서 볼 것
- 창 1. 0이 아닌 칸이 72개(4.1%)로 줄어든다.
고기국수를~갈치조림을이 0.00으로 내려간다. 먹었다가 이웃에서 빠지기 때문이다. 바다가~하늘이는 0.29로 낮아지지만 0이 되지는 않는다.아주가 아직 겹치기 때문이다 - 창 3. 0이 아닌 칸이 142개(8.0%)로 늘어난다. 확인 쌍 네 개는 창 2와 같다. 새로 겹치는 이웃이 없다
귤을~귤은은 창을 어떻게 바꿔도 0.00이다. 두 단어의 이웃이 아예 겹치지 않는다- 단어 수는 창을 바꿔도 42개 그대로다. 창은 행렬 칸의 숫자를 바꾸지, 행렬의 크기를 바꾸지 않는다
□ 자주 막히는 지점
| 증상 | 원인 | 조치 |
|---|---|---|
ModuleNotFoundError: No module named 'pandas' | 설치 셀을 건너뛰었거나 런타임이 끊겼다 | 설치 셀부터 다시 실행한다 |
NameError: name 'build_matrix' is not defined | 런타임이 다시 시작되어 위 셀의 결과가 사라졌다 | 메뉴에서 모두 실행을 누르거나 위에서부터 다시 실행한다 |
TypeError: can only concatenate str (not "int") to str | window = "2" 처럼 숫자에 따옴표를 붙였다 | window = 2 처럼 숫자만 쓴다 |
| 모든 유사도가 0.00이고 0이 아닌 칸이 0개다 | window = 0 을 넣었다. 이웃을 한 칸도 보지 않는다 | 1 이상의 숫자를 넣는다 |
| TODO 셀 결과가 창 2와 같다 | window 값을 바꾸지 않았거나 셀을 다시 실행하지 않았다 | window = 1 처럼 값을 바꾸고 셀을 다시 실행한다 |
- 기본: 기본값 창 2의 행과 단어 쌍 하나를 골라, 공유 이웃과 사람의 판단 차이 설명
- 심화: 같은 노트북의 TODO 한 곳에서 창 1·2·3을 비교하고, 유사도가 내려가는 반례의 이유 설명
[이론] 벡터를 좌표 평면 그림으로 먼저 이해한 뒤 수치로 이동. 사람이 느끼는 유사성과 통계적 유사도의 차이를 대조
- 강의 2에서 좌표 평면의 [2, 1]과 [1, 2]로 방향 감을 잡은 뒤 42칸짜리 단어 벡터로 이동했다. [2, 1]과 [4, 2]가 1.00인 이유를 한 문장으로 적는다
- 사람의 눈과 통계의 눈 그림의 다섯 쌍을 두 눈으로 각각 나열하고, 두 눈이 어느 방향으로 어긋나는지 표로 정리한다
- 활동에서 적은 다섯 쌍 중 하나를 골라, 분포의 기준으로는 비슷하게 나올지 예상과 이유를 적는다
- 유사도를 계산하는 것이 아니라, 두 눈의 차이를 설명했는지로 채점한다
[구현] 동시발생 행렬을 데모 따라 만들고 코사인 유사도를 계산
- 노트북 1-1부터 1-6까지 창 보기, 행렬 만들기, 유사도 계산, 방언 표본 순서로 실행한다
- TODO 셀에서 창을 1, 2, 3으로 바꾸고, 매번 0이 아닌 칸 수와 확인 쌍 네 개의 유사도를 기록한다
고기국수를~갈치조림을이 0.00에서 0.50으로 바뀌는 창 크기와 그 이유를 한 문장으로 적는다- 코드가 돌지 않아도 무엇을 확인하려 했는지 쓰면 부분 점수를 받는다
[실무] 한국어에서 분포 가설이 잘 맞는 경우와 어긋나는 경우를 수업용 표본으로 관찰. 승인된 공개 말뭉치는 확보한 경우에만 추가 관찰. 방언·표준어 대응쌍에서 “같은 뜻 다른 표기”가 분포적으로 어떻게 보이는지 확인
- 세 경우를 눌러 본다. 제주어
바당은 표준어바다다. 같은 뜻인데, 주변 말이 겹치면 1.00, 주변 말 하나가 방언이면 0.50, 주변 말까지 모두 방언이면 0.00이 나온다 - 실제 방언 발화에서는 방언 단어가 방언 단어와 함께 나오기 쉽다.
하영(많이),놀멍(놀며) 같은 말이바당옆에 붙는다. 그래서 대응쌍이 분포에서 서로 다른 섬으로 갈라지기 쉽다. 방언 말과 표준어 말을 한 말뭉치에 섞어도 갈라짐은 남는다. 표본 여섯 문장을 섞은 결과가 0.375다 - 대응쌍은 한 방향으로만 어긋나지 않는다. 제주어로
감저는 고구마,지슬은 감자를 가리킨다. 표기가 다른데 뜻이 같은 쌍도 있고, 비슷한 소리가 지역마다 다른 것을 가리키는 경우도 있다. 임베딩을 만들 때 방언과 표준어를 어떻게 다루는지가 결과를 좌우한다 - 실제 관찰에 쓰는 자료의 후보는 AI Hub 「한국어 방언 발화(제주도)」의 방언·표준어 텍스트 대응쌍이다. 이 노트북에는 실제 원문이 포함되지 않는다. 이 자료는 각자 AI Hub에서 이용 승인을 받아 쓴다. 승인 뒤에는 용량이 큰 음성 파일은 받지 않고 텍스트 대응쌍만 내려받는다. 받은 자료는 공개 저장소나 수업 플랫폼에 올리지 않고 각자의 Colab 세션에만 둔다. 승인에 시간이 걸리므로 아직 신청하지 않았다면 이번 주에 바로 신청하고, 승인 전에는 노트북 1-6의 표본으로 먼저 활동한다
- 같은 뜻이 분포에서 갈라져 보이는 이유를 설명했는지로 채점한다. 공개 자료 승인 여부를 개념 이해의 정답 조건으로 삼지 않으며, 수업용 표본과 실제 자료의 관찰을 구분한다
자주 하는 오해 Q&A
Section titled “자주 하는 오해 Q&A”Q1. 유사도가 0이면 아무 관련도 없다는 뜻인가?
아니다. 0은 관련이 없다는 뜻이 아니라 이 말뭉치에서 겹치는 이웃이 하나도 없었다는 기록이다. 귤을 과 귤은 은 사람에게 같은 과일인데 0.00이 나왔다. 통계의 눈이 이 말뭉치 안에서는 관련을 발견하지 못했을 뿐이다. 말뭉치를 바꾸거나 단어를 다르게 자르면 값이 달라진다.
Q2. 유사도가 1.00이면 뜻이 같다는 뜻인가?
아니다. 1.00은 이 말뭉치에서 두 단어의 이웃이 같은 비율로 겹쳤다는 기록이다. 맑다 와 우도 는 “우도 바다가 더 맑다” 한 문장에서 이웃이 똑같아 1.00이 나왔지만, 뜻은 전혀 다르다. 문장이 적으면 이런 우연이 크게 작동한다. 다양한 문맥을 더 관찰하면 이런 우연의 영향이 줄어들 수 있지만, 크기만 늘린다고 의미 표현이 정확해지는 것은 아니다.
Q3. 창이 넓을수록 좋은 것 아닌가?
아니다. 창을 넓히면 함께 세어지는 쌍이 늘어나 고기국수를 ~ 갈치조림을 같은 경우가 잡힌다. 반대로 관계없는 이웃도 함께 끌어와 귤은 ~ 하늘에 처럼 유사도가 0.50에서 0.33, 0.25로 내려가는 쌍도 생긴다. 넓을수록 좋은 것이 아니라 문제에 맞는 창이 따로 있다. 그리고 귤을 ~ 귤은 처럼 창과 상관없이 0.00인 문제도 있다.
Q4. 귤을, 귤은, 감귤이 모두 0.00인 것은 계산이 고장 난 것인가?
고장이 아니라 말뭉치와 자르기의 문제다. 귤을 은 조사까지 붙은 통째 조각으로 세이고, 귤은, 감귤 은 다른 문장에서 다른 이웃과 나온다. 4주차에서 형태소 분석기로 조각을 나눴던 이유와 같은 뿌리다. 이런 어긋남을 줄이는 길은 말뭉치를 늘리는 것과 단어를 더 잘게 나누는 것이다. 조사를 떼어 귤 로 세면 귤을과 귤은의 이웃이 한 행으로 모인다.
Q5. 분포로 보면 반대말도 비슷하게 나오는가?
그렇다. “국물이 뜨겁다”와 “국물이 차갑다”처럼 반대말은 같은 자리에 쓰이는 경우가 많아 이웃이 겹친다. 분포 가설은 “같은 자리에 들어갈 수 있는 말”을 비슷하다고 잡아내므로, 뜻이 정반대인 말도 높은 유사도를 받을 수 있다. 통계의 눈이 말하는 비슷함은 동의어와 같지 않다는 좋은 예다.
Q6. PMI가 궁금하다. 이번 주에 계산하는가?
계산하지 않는다. PMI(점별 상호정보)는 두 단어가 함께 나온 횟수를 두 단어가 서로 상관없이 흩어져 있을 때 기대되는 횟수와 비교해 점수를 매기는 방법이다. 했다 처럼 어디에나 나오는 단어는 횟수가 커도 기대만큼이라 점수가 낮고, 해녀 와 물질 처럼 특별히 함께 다니는 쌍은 점수가 높다. 이번 주는 이름과 아이디어까지만 만난다.
Q7. 코사인 유사도가 -1이 되려면 어떤 벡터여야 하는가?
방향이 정확히 반대여야 한다. 좌표 평면에서 [2, 1]과 [-2, -1]이 -1이다. 단어 벡터의 좌표는 동시발생 횟수라 0 이상이므로, 이번 주 단어 쌍의 유사도는 0 이상으로 나온다. -1이 나오려면 음수 좌표가 있는 벡터가 필요하다. 7주차의 밀집 벡터는 음수 좌표를 가질 수 있다.
Q8. 희소하다는 무슨 뜻이고, 왜 문제가 되는가?
좌표 대부분이 0이라는 뜻이다. 이번 주 행렬은 칸 1764개 중 0이 아닌 칸이 120개(6.8%)다. 대부분 0이면 단어 쌍 대부분의 유사도가 0에 머물러, 비슷한 단어를 가리는 힘이 약하다. 게다가 실제 말뭉치는 단어가 수만 개라 행 하나가 수만 칸이 된다. 희소하고 긴 표를 좌표 수백 개짜리 밀집 벡터로 바꾸는 방법이 7주차에 나온다.
스스로 점검
Section titled “스스로 점검”- 분포 가설을 한 문장으로 말하라.
- 창(window)이 무엇이며, 창 1과 창 2는 무엇이 다른가?
- 동시발생 행렬의 한 행이 단어 벡터가 되는 이유를 설명하라.
- 좌표 평면에서 [2, 1]과 [4, 2]의 유사도는 얼마이고, 왜 그런가?
귤을~귤은유사도가 0.00인 이유를, 사람의 눈과 통계의 눈으로 나눠 설명하라.고기국수를~갈치조림을유사도가 창 1에서 0.00, 창 2에서 0.50이 되는 이유를 단어 하나로 설명하라.맑다~우도가 1.00인데 뜻이 같다고 할 수 없는 이유는?바당에서~바다에서가 1.00이 되는 경우와 0.00이 되는 경우는 무엇이 다른가?
정답 보기
-
단어의 뜻은 그 단어가 함께 다니는 단어에 있다. 사전 뜻이 아니라 이웃이 단어를 설명한다. 그래서 이웃이 비슷한 두 단어는 비슷하다고 본다.
-
기준 단어 주위를 볼 칸 수다. 창 1은 바로 옆 한 칸, 창 2는 옆 두 칸이다. 창이 넓어지면 이웃이 늘어나고 행렬의 0이 아닌 칸이 늘어난다(72개에서 120개로). 문장이 짧으면 창을 넓혀도 이웃이 늘지 않는다.
-
행의 칸 하나는 그 단어가 이웃과 창 안에 함께 들어온 횟수다. 행 전체를 읽으면 그 단어가 어떤 단어들과 어떻게 함께 다녔는지 기록이 된다. 두 단어를 비교할 때는 행끼리 비교하면 되므로 행을 단어 벡터로 쓴다.
-
1.00이다. [4, 2]는 [2, 1]과 방향이 같고 길이만 두 배다. 코사인 유사도는 길이를 보지 않고 방향만 본다. 그래서 자주 나온 단어와 드물게 나온 단어도 같은 이웃과 같은 비율로 다니면 1이 된다.
-
사람의 눈: 둘 다 귤이라 같은 과일이다. 통계의 눈: 귤을은
귤밭에서,깨끗이,따왔다,씻어와, 귤은은겨울,과즙이,달고와만 함께 다녀 겹치는 이웃이 없다. 같은 대상을 가리켜도 조사가 갈라 놓으면 통계는 알아보지 못한다. -
먹었다다. 두 음식은 서로 다른 문장 “고기국수를 뜨겁게 먹었다”와 “갈치조림을 뜨끈하게 먹었다”에서 각각먹었다와 두 칸 떨어져 있다. 창 1로는 먹었다가 이웃에 들어오지 않지만, 창 2부터 함께 세어져 유사도가 0.50이 된다. -
두 단어가 “우도 바다가 더 맑다” 한 문장에만 나와 이웃이
바다가,더로 똑같기 때문이다. 뜻이 비슷해서가 아니라 자료가 적어 한 문장이 유사도를 정했다. 다양한 문맥을 더 확보하면 이 한 문장의 영향이 줄어들 수 있다. -
주변 말이 겹치느냐다. “바당에서 물질을 했다”와 “바다에서 물질을 했다”는 이웃이 같아 1.00이다. “바당에서 하영 놀멍 쉬멍”과 “바다에서 많이 놀며 쉬며”는 주변 말까지 방언이라 겹치는 이웃이 없어 0.00이다.
이번 주 용어 정리
Section titled “이번 주 용어 정리”| 용어 | 한 줄 뜻 |
|---|---|
| 분포 가설 | 단어의 뜻은 그 단어가 함께 다니는 단어에 있다는 생각 |
| 말뭉치 | 분석 대상이 되는 글의 모음. 이번 주는 제주 이야기 문장 13개 |
| 창 (window) | 기준 단어 주위를 몇 칸 볼지 정한 범위. 문장 경계를 넘지 않는다 |
| 문맥 | 창 안에 함께 들어온 이웃 단어들 |
| 동시발생 행렬 | 두 단어가 창 안에 함께 들어온 횟수를 칸에 적은 표. 대각선을 기준으로 좌우가 같다 |
| 벡터 | 숫자 목록. 좌표 평면에서는 원점에서 한 점을 가리키는 화살표로 그린다 |
| 단어 벡터 | 동시발생 행렬의 한 행. 단어를 숫자 목록으로 표현한 것 |
| 희소 벡터 | 좌표 대부분이 0인 벡터. 이번 주 행은 42칸 중 대부분 두세 칸만 0이 아니다 |
| 밀집 벡터 | 좌표 대부분이 0이 아닌 짧은 벡터. 7주차에 만난다 |
| 코사인 유사도 | 두 벡터의 방향이 같은지 재는 값. 같은 방향 1, 직각 0, 반대 -1. 길이는 보지 않는다 |
| PMI (점별 상호정보) | 함께 나온 횟수를 우연히 기대되는 횟수와 비교한 점수. 이번 주는 이름과 아이디어만 |
| 대응쌍 | 같은 대상을 가리키는 방언 말과 표준어 말. 바당과 바다 |
이번 주 읽기
Section titled “이번 주 읽기”주교재 5장 Embeddings. 6주차와 7주차에 걸쳐 읽는다. 자세한 서지 정보는 강의계획서를 참고한다.
- 이 장은 수식이 많다. 수식이 나오는 부분은 넘어간다. 이 과목의 시험 범위가 아니다
- 단어를 벡터로 표현하고 비슷한 단어를 찾는 부분을 찾아 읽는다. 이번 주에 본 동시발생 행렬과 코사인 유사도가 바로 그 준비다
- 교재의 예제는 영어다. 단어를 벡터로 둔다는 아이디어는 언어와 무관하다. 한국어에서는 조사가 단어에 붙어 하나의 조각으로 세어진다는 점(
귤을과귤은)이 영어와 다르다는 점만 떠올려 본다
실습 노트북
Section titled “실습 노트북”문장 13개로 동시발생 행렬을 만들고 행을 단어 벡터로 써서 코사인 유사도를 계산한다. 방언 표본으로 같은 뜻 다른 표기가 어떻게 보이는지도 확인한다. TODO는 창 크기를 바꾸는 한 곳이다.