5주차: 통계적 텍스트 분류와 문서 분류
통계적 텍스트 분류와 문서 분류.
□ 이번 주에 하는 일
- 글 전체를 긍정과 부정, 스팸과 정상처럼 두 바구니 중 하나로 나누는 문제를 본다
- 문장을 단어 가방으로 바꾸고, 가방 위에서 판단하는 방법을 본다
- 분류기를 직접 학습시키고, 모델이 어떤 단어를 보고 판단했는지 읽는다
□ 4주차에서 이어지는 자리
지난 두 주는 글 안의 한 자리 한 자리를 다뤘다. 3주차에는 다음 자리에 올 말을 골랐고, 4주차에는 조각마다 품사 이름표를 붙였다.
이번 주는 글 전체가 바구니 하나로 들어간다. 리뷰 한 건, 메일 한 통을 받아서 그것이 긍정인지 부정인지, 스팸인지 정상인지 판정한다. 입력도 답도 하나씩이다. 4주차에서 “앞뒤가 서로를 돕는다”며 줄 전체를 봐야 했다면, 이번 주는 글 하나가 판단의 단위가 된다.
3주차에서 가져오는 것도 하나 있다. 세어서 표를 만든다. 이번 주에도 글을 먼저 숫자 표로 바꾸고, 판단은 그 표 위에서 한다.
□ 이 문서를 읽는 법
- 수식은 한 개도 나오지 않는다. 계산은 더하기, 빼기와 간단한 비율 정도만 나온다
- 리뷰 문장은 설명용 예시다. 실제 숙소의 리뷰가 아니다
- 단어 점수와 판정 확률은 노트북과 같은 리뷰 열 건, 같은 설정으로 학습한 모델에서 가져왔다. 소수 둘째 자리로 반올림해서 노트북 출력과 마지막 자리가 1쯤 다를 수 있다. 문턱 그림의 리뷰 12건만 설명용으로 만든 확률이다
- 분류기 계산을 손으로 하지 않는다. 이번 주에 요구하는 것은 결과를 읽고 근거를 찾는 능력이다
온라인 (2시수)
Section titled “온라인 (2시수)”강의 1: 문서 분류 문제와 단어 가방
Section titled “강의 1: 문서 분류 문제와 단어 가방”□ 문서 분류는 어떤 문제인가
분류기에 들어가는 것은 문서다. 리뷰 한 건, 메일 한 통이다. 나오는 것은 미리 정해 둔 클래스 중 하나다. 클래스는 분류기가 내놓을 수 있는 답의 목록이다.
토글을 바꿔 보면 알 수 있듯, 문제 모양은 완전히 같다. 스팸 필터와 리뷰 감성 분석은 다른 문제지만 들어가는 것과 나오는 것의 형태만 놓고 보면 하나다. 이번 주에 배울 것은 이 공통 모양이다.
익숙한 예를 먼저 보자.
- 스팸 필터. 메일을 스팸과 정상으로 나눈다
- 감성 분석. 리뷰를 긍정과 부정으로 나눈다
- 기사 분류. 뉴스를 경제, 스포츠, 정치로 나눈다
앞의 둘은 클래스가 두 개, 기사 분류는 세 개다. 이번 주는 클래스가 두 개인 경우만 다룬다. 두 개를 이해하면 여러 개로 넓히는 것은 어렵지 않다.
4주차의 품사 태깅과 무엇이 다른지 표로 정리하면 이렇다.
| 4주차 품사 태깅 | 5주차 문서 분류 | |
|---|---|---|
| 입력 | 조각들의 줄 | 문서 하나 |
| 출력 | 조각마다 이름표 | 클래스 하나 |
| 판단 단위 | 줄 전체 | 글 전체 |
□ 사람이 정답을 붙인 예시에서 배운다
분류기는 규칙을 사람이 적어 주는 방식이 아니다. “친절이 나오면 긍정” 같은 규칙을 하나하나 쓰는 대신, 사람이 정답을 붙여 둔 리뷰를 보여 주고 거기서 스스로 배우게 한다.
| 리뷰 | 사람이 붙인 정답 |
|---|---|
| 바다가 보이는 객실이 정말 좋았다 | 긍정 |
| 직원이 불친절하고 방이 더러웠다 | 부정 |
아래 그림에서 리뷰 카드를 눌러 보자. 사람이 붙여 둔 정답대로 바구니에 담긴다. 이번 주의 목표는 이 일을 기계에게 맡기는 것이다.
이렇게 정답이 붙은 예시를 학습 자료라고 부른다. 노트북에서는 긍정 다섯 건, 부정 다섯 건, 모두 열 건을 쓴다. 분류기가 아는 것은 이 열 건에서 배운 것이 전부다. 이 사실이 이번 주 내내 중요하게 쓰인다.
□ 문장을 단어 가방으로
분류기는 글을 그대로 읽지 못한다. 먼저 숫자로 바꿔야 한다. 이번 주에 쓰는 방법은 단어 가방(Bag-of-Words) 이다.
이름 그대로 떠올리면 된다. 문장을 단어 카드로 잘라 한 줄로 놓았다가 자루에 쏟아 넣는다. 자루를 들여다보면 어떤 카드가 몇 장 들었는지는 알 수 있지만, 어느 카드가 먼저였는지는 알 수 없다.
문장을 누를 때마다 단어가 가방으로 들어간다. 세 번째 문장에서는 좋았고 가 두 번 들어가 x2 로 표시된다. 가방에는 두 가지만 남는다.
- 어떤 단어가 들어 있었는지
- 각 단어가 몇 번 나왔는지
그리고 버려지는 것이 하나 있다. 단어의 순서다. “객실이 좋았다”와 “좋았다 객실이”는 가방이 완전히 같다. 사람에게는 순서가 뜻을 만들지만, 단어 가방은 순서를 보지 않는다. 4주차의 품사 태깅은 앞뒤 순서가 이름표를 갈라 주는 문제였다. 이번 주는 처음부터 순서를 버리고 시작한다.
왜 버려도 되는가. 감성 분류에는 대개 어떤 단어가 나왔는지만으로 충분한 단서가 있기 때문이다. “더러웠다”가 나왔으면 순서와 관계없이 부정의 근거다. 순서를 버리면 계산이 아주 단순해지고, 적은 자료로도 돌아간다. 대신 “가격은 비쌌다. 그래도 좋았다.”와 “좋았다. 그래도 가격은 비쌌다.”를 가르지 못하는 한계가 생긴다. 사람에게 앞 문장은 만족, 뒤 문장은 아쉬움으로 끝나지만 두 문장의 가방은 완전히 같다. 그 한계는 뒤에서 다시 본다.
□ 가방을 표로 만들면
표의 한 줄이 리뷰 한 건, 한 칸이 단어 하나다. 칸의 숫자는 그 리뷰에 그 단어가 나온 횟수다. 리뷰 네 건은 노트북 학습 리뷰 열 건 중 일부이고, 번호도 노트북 1-2의 표와 같다. 단어 이름을 누르면 그 단어가 나온 칸이 밝아진다.
리뷰 여러 건을 세어 만든 이 표가 분류기가 보는 전부다. 원래 문장은 더 이상 보지 않는다. 글이 숫자 표로 바뀌었으니 이제 판단은 표 위에서 일어난다.
표를 볼 때 알아 둘 것이 세 가지 있다.
- 칸 목록은 학습 자료가 정한다. 표의 칸은 학습 리뷰에 한 번이라도 나온 단어로 만들어진다. 노트북의 리뷰 열 건에서는 40칸이 나온다. 여기에 없는 단어는 나중에 새 문장에 나와도 들어갈 칸이 없다
- 칸 대부분은 0이다. 리뷰 한 건에는 전체 단어 중 몇 개만 나오기 때문이다. 그림은 칸을 다섯 개만 보였지만 실제 표는 훨씬 넓고 대부분 비어 있다
- 띄어쓰기로 자른다. 노트북은 문장을 띄어쓰기 단위로 자르고 마침표 같은 부호는 떼어 낸다
마지막 항목에서 2주차에서 본 문제가 다시 나온다. 띄어쓰기로 자르기 때문에 좋았다 와 좋은 은 다른 단어가 되고, 객실이 는 조사가 붙은 채 하나의 단어로 센다. 직원이 와 직원들이 도 서로 다른 칸이다. 같은 뜻의 말이라도 어미와 조사가 다르면 다른 단어로 취급된다. 4주차에서 형태소 분석기로 조각을 나눴던 이유가 이것인데, 이번 주 실습에서는 이 문제를 안고 그대로 간다. 무엇이 문제가 되는지 직접 보기 위해서다.
○ 한 글자 단어는 버리지 않는다
노트북에서 쓰는 도구는 기본 설정에서 두 글자 이상인 단어만 남긴다. 그대로 두면 잠을 못 잤다 의 못 이 가방에 들어가지도 못하고 버려진다. 한국어에는 못, 안, 잘 처럼 판단에 중요한 한 글자 단어가 많아서, 노트북은 한 글자 단어도 남기도록 설정을 하나 바꿔 두었다. 도구의 기본값이 우리 언어에 맞는지 한 번씩 확인해야 한다는 좋은 예다.
□ 분류기는 가방 위에서 무엇을 하나
학습이 끝난 분류기의 머릿속에는 단어마다 점수가 매겨져 있다. + 점수는 리뷰를 긍정 쪽으로 밀고, - 점수는 부정 쪽으로 민다. 이번 주에 쓰는 분류기의 이름은 로지스틱 회귀다.
단어를 눌러 보면 점수와 함께 그 단어가 나온 학습 리뷰가 보인다. 하나씩 눌러 보면 이상한 점이 눈에 들어온다.
- 긍정 점수가 가장 큰 단어는
좋았다가 아니라객실이다 - 부정 점수가 가장 큰 단어는
더러웠다가 아니라나서다 직원들이는 +,직원이는 - 점수다. 같은 “직원”에 복수 표지가 붙었는지에 따라 형태가 달라 점수 방향도 반대다
사람이라면 객실이 나 나서 를 감정의 근거로 고르지 않는다. 모델은 왜 이런 점수를 매겼을까. 점수가 어떻게 정해지는지 보면 답이 나온다.
□ 점수는 어떻게 정해지나: 맞히고 고치기를 되풀이한다
학습은 다음 순서로 진행된다.
- 모든 단어의 점수를 0에서 출발시킨다. 이 상태에서는 어떤 리뷰를 넣어도 긍정인지 부정인지 반반이다
- 학습 리뷰 열 건을 넣어 보고 정답과 비교한다
- 정답이 긍정인데 긍정 쪽으로 덜 기울었으면, 그 리뷰에 든 단어들의 점수를 조금 올린다. 정답이 부정인데 부정 쪽으로 덜 기울었으면 조금 내린다. 많이 틀렸을수록 크게 고친다
- 2와 3을 여러 번 되풀이한다. 더 고쳐도 나아지지 않으면 멈춘다
이 과정을 알면 앞의 이상한 점수가 설명된다.
| 관찰 | 이유 |
|---|---|
객실이 가 +0.44로 가장 크다 | 긍정 리뷰 두 건에 나와서 두 리뷰가 고쳐질 때마다 함께 올라갔다 |
나서 가 -0.46으로 가장 작다 | “냄새가 나서”, “고장 나서”. 부정 리뷰 두 건에 나왔다 |
조식이, 맛있고, 직원들이, 친절했다 가 모두 +0.27 | 넷 다 같은 긍정 리뷰 한 건에만 나왔다. 늘 함께 올라가서 점수가 똑같다 |
직원이 는 -0.25, 직원들이 는 +0.27 | 복수 표지와 조사 결합 모양이 달라 다른 칸이다. 하나는 부정 리뷰에, 하나는 긍정 리뷰에 나왔다 |
세 번째 줄이 특히 중요하다. 사람은 “조식이 맛있고 직원들이 친절했다”에서 맛있고 와 친절했다 가 긍정의 이유이고 조식이 는 그냥 주어라는 것을 안다. 모델은 그 리뷰의 어느 단어가 진짜 이유인지 모른다. 한 리뷰에만 나온 단어들에게 공을 똑같이 나눠 줄 뿐이다.
만약 어떤 단어가 긍정 리뷰에도 부정 리뷰에도 고르게 나왔다면, 올라갔다 내려갔다 하면서 점수가 0 근처에 머물렀을 것이다. 이번 자료는 열 건뿐이라 그런 단어가 하나도 없다. 그래서 객실이 처럼 뜻으로는 중립인 말도 우연히 한쪽 리뷰에만 나왔다는 이유로 큰 점수를 받았다.
○ 세어서 점수를 만드는 방법도 있다
3주차처럼 세기만 해서 단어 점수를 만드는 분류기도 있다. 긍정 리뷰와 부정 리뷰에서 그 단어가 나온 비율을 비교하는 방식이고, 나이브 베이즈라고 부른다. 로지스틱 회귀는 세는 대신 맞히고 고치기를 되풀이해서 점수를 찾는다. 점수를 만드는 방법은 달라도 단어마다 점수를 두고, 문장에 든 단어의 점수를 더해 판단한다는 모양은 같다. 이번 주 노트북은 로지스틱 회귀를 쓴다.
□ 강의 1에서 꼭 가져갈 것
- 문서 분류는 문서 하나를 받아 클래스 하나를 내놓는 문제다. 스팸 필터도 감성 분석도 같은 모양이다
- 문장은 단어 가방으로 바꾼다. 무엇이 몇 번 나왔는지는 남고 순서는 버려진다. 칸 목록은 학습 자료에 나온 단어로 정해진다
- 분류기는 학습을 거쳐 단어마다 점수를 갖는다. 점수는 정답을 맞히도록 조금씩 고치기를 되풀이해서 정해진다
- 모델은 단어의 뜻을 모른다. 어느 쪽 리뷰에 나왔는지만 안다. 그래서 자료가 적으면
객실이같은 중립어도 근거가 된다
강의 2: 점수 합과 문턱, 그리고 두 가지 오류
Section titled “강의 2: 점수 합과 문턱, 그리고 두 가지 오류”□ 점수를 합하고 문턱과 비교한다
분류기의 판단은 저울 달기와 비슷하다. + 점수를 가진 단어는 한쪽 접시에, - 점수를 가진 단어는 반대쪽 접시에 올린다고 생각하면 된다. 점수가 클수록 무거운 추다. 저울이 어느 쪽으로 기우는지가 판정이다.
절차로 쓰면 세 단계뿐이다.
- 기본 점수에서 출발한다. 노트북 모델에서는 -0.06이다
- 가방에 든 단어마다 점수를 더한다. 같은 단어가 두 번 나왔으면 두 번 더한다. 가방에 없는 단어는 더할 점수가 없어서 건너뛴다
- 합계를 문턱 0과 비교한다. 0 이상이면 긍정, 0 미만이면 부정
기본 점수는 문장에 아는 단어가 하나도 없을 때 남는 점수다. 학습 자료의 긍정과 부정이 다섯 건씩 같아서 0에 아주 가깝다. 저울로 치면 빈 저울이 처음부터 부정 쪽으로 아주 살짝 기울어 있는 셈이다. 만약 학습 자료에 부정 리뷰가 훨씬 많았다면 기본 점수가 부정 쪽으로 더 기울었을 것이다.
이 그림은 노트북 모델의 점수를 그대로 넣은 작은 분류기다. 예시를 누르거나 문장을 직접 고쳐 써 보자. 예시 다섯 개의 계산은 이렇다.
| 문장 | 계산 | 합계 | 판정 (긍정 확률) |
|---|---|---|---|
| 객실이 좋았다 | -0.06 + 0.44 + 0.42 | +0.80 | 긍정 (0.69) |
| 방이 더러웠다 | -0.06 - 0.25 - 0.25 | -0.56 | 부정 (0.36) |
| 좋았다 좋았다 좋았다 | -0.06 + 0.42 + 0.42 + 0.42 | +1.20 | 긍정 (0.77) |
| 직원이 친절했다 | -0.06 - 0.25 + 0.27 | -0.04 | 부정 (0.49) |
| 직원들이 불친절했다 | -0.06 + 0.27, 불친절했다 는 가방에 없음 | +0.21 | 긍정 (0.55) |
분류기가 하는 일은 이 덧셈과 비교 하나뿐이다. 영리해 보이는 판단도 열어 보면 점수 합과 문턱 비교다.
아래 두 줄은 사람의 판단과 반대로 나왔다. 둘 다 이유가 분명하다.
직원이 친절했다는 부정이 됐다.직원이가 부정 리뷰에 나온 모양이라 -0.25를 가졌고,친절했다의 +0.27과 거의 상쇄된 뒤 기본 점수 -0.06이 합계를 0 아래로 끌어내렸다직원들이 불친절했다는 긍정이 됐다. 학습 자료에는불친절하고만 있고불친절했다는 없어서, 가장 중요한 단어가 통째로 무시됐다. 남은직원들이의 +0.27이 판정을 정했다
두 문장 모두 복수 표지·조사·어미 모양 때문에 틀렸다. 강의 1에서 본 띄어쓰기 자르기의 한계가 판정 결과로 드러난 것이다.
순서를 버린 한계도 여기서 보인다. 그림에 “가격은 비쌌다 그래도 좋았다”와 “좋았다 그래도 가격은 비쌌다”를 차례로 넣어 보자. 두 문장은 가방이 같아서 확률도 똑같이 0.59다. 사람은 “그래도” 뒤에 오는 말이 전체 톤을 정한다는 것을 알지만, 분류기는 그 순서를 보지 못하고 점수만 더한다.
□ 합계를 확률로 읽기
노트북에서 predict_proba 라는 이름의 출력을 보게 된다. 이것은 점수 합을 0과 1 사이의 긍정 확률로 바꾼 값이다.
슬라이더를 움직여 보자. 점수 합이 커질수록 긍정 확률이 1에 가까워지고, 작아질수록 0에 가까워진다. 끝까지 1이나 0에 닿지는 않는다. 그리고 합계 0이 곧 확률 0.5다. 그래서 “합계가 0 이상이면 긍정”과 “확률이 0.5 이상이면 긍정”은 같은 규칙을 두 가지로 말한 것이다.
왜 확률로 바꿔서 보여 주는가. 판정만 주면 모델이 어느 쪽으로 얼마나 기울었는지 알기 어렵기 때문이다. 합계 +0.1로 이긴 긍정과 +3.0으로 이긴 긍정은 판정이 같지만 확신의 크기가 다르다. 확률은 그 차이를 알려 준다. 0.51과 0.95는 같은 긍정이지만 모델 점수의 기울기는 다르다. 다만 0.95를 “실제로 95퍼센트 맞는다”고 읽으려면 별도의 시험 자료에서 확률이 맞게 보정됐는지 확인해야 한다. 열 건으로 학습한 이 모형에서는 그런 검증을 하지 않았다.
노트북을 돌려 보면 확률이 생각보다 낮다. 객실이 좋았다 처럼 사람에게 분명한 문장도 0.69이고, 학습에 쓴 긍정 리뷰조차 0.73에서 0.8 정도다. 이유는 두 가지다.
- 점수가 지나치게 커지지 않도록 누르는 설정이 기본으로 켜져 있다. 이 설정을 끄면 이 예시처럼 학습 자료가 분리되는 경우 점수가 지나치게 커질 수 있고, 표시를 반올림하면 확률이 1.00이나 0.00처럼 보일 수 있다. 리뷰 열 건만 보고 과하게 확신하지 않게 하는 안전장치다
- 학습 자료가 열 건뿐이다. 단어마다 본 횟수가 한두 번이라, 누르는 설정을 이길 만큼 근거가 쌓이지 않는다
점수 합을 확률로 바꿀 때 쓰는 S자 모양 곡선을 로지스틱 함수라고 부른다. 로지스틱 회귀라는 이름이 여기서 왔다. 곡선의 수식은 이 과목에서 다루지 않는다. 슬라이더에서 본 것, 합계가 확률로 이어진다는 모양까지가 이번 주의 범위다.
□ 가방에 없는 단어
같은 분류기에 이번에는 “예쁘고 감성적인 숙소였다”를 넣었다. 사람에게는 명백히 긍정처럼 읽힌다. 그런데 예쁘고, 감성적인, 숙소였다 는 모두 학습 자료에 없던 단어다. 점선으로 표시된 가방에 없는 단어는 점수도 없고 판단에 아무것도 넣지 않는다. 남는 것은 기본 점수 -0.06뿐이라 확률은 0.49, 판정은 부정이다.
단어 가방에 없는 말은 분류기의 눈에 보이지 않는다. 이것은 분류기의 고장이 아니라 단어 가방 방식의 구조다. 학습에서 본 적 없는 말은 칸 자체가 없으니 점수가 존재할 수 없다.
모양이 조금만 달라도 마찬가지다. 학습 자료의 숙소가 와 이 문장의 숙소였다 는 사람에게는 같은 “숙소”지만 가방에서는 전혀 다른 단어다. 불친절하고 와 불친절했다, 좁고 와 좁았다 도 그렇다. 4주차에서 분석기가 사전에 없는 제주 지명을 틀렸던 것과 같은 뿌리다. 재료에 없던 말은 다루지 못한다.
이 한계를 줄이는 방향은 세 가지다.
- 학습 자료를 늘린다. 가장 확실하지만 사람이 정답을 붙이는 수고가 든다
- 단어를 더 잘게 나눈다. 4주차의 형태소 분석처럼
숙소와였다를 떼면숙소는 아는 단어가 된다 - 뜻이 비슷한 단어끼리 가깝게 표현한다.
예쁘고를 처음 봐도좋았다와 비슷한 말이라는 것을 알 수 있게 한다. 6주차부터 다룰 단어 임베딩이 이 방향이다
□ 적은 자료가 만든 엉뚱한 근거
강의 1에서 객실이 가 가장 큰 긍정 점수를 받은 것을 봤다. 이것이 실제 판정에서 어떤 일을 일으키는지 보자.
| 문장 | 쓰인 단어 | 판정 (긍정 확률) |
|---|---|---|
| 객실이 좁았다 | 객실이 +0.44, 좁았다 는 가방에 없음 | 긍정 (약 0.6) |
| 방이 좋았다 | 방이 -0.25, 좋았다 +0.42 | 긍정 (0.53) |
“객실이 좁았다”는 불만인데 긍정으로 나왔다. 불만을 담은 단어 좁았다 는 가방에 없고, 남은 객실이 가 긍정 리뷰 두 건에 나왔다는 이유로 긍정 쪽으로 밀었다. “방이 좋았다”는 긍정으로 맞혔지만 겨우 이겼다. 방이 가 부정 리뷰에 나왔다는 이유로 -0.25를 가졌기 때문이다. 객실과 방은 같은 것인데 한쪽은 +, 한쪽은 - 근거가 되어 있다.
이것이 적은 자료의 함정이다. 모델은 “왜”를 모르고 “어디에 같이 나왔는지”만 안다. 자료가 열 건이면 우연히 한쪽에만 나온 말이 근거 행세를 한다. 자료를 늘릴 때 객실이가 긍정·부정 양쪽에 고르게 나타나면 그 단어의 우연한 영향이 줄 수 있다. 같은 편향의 자료만 더 모으면 큰 자료에서도 잘못된 근거가 남는다. 그래도 우연은 완전히 사라지지 않기 때문에, 모델이 어떤 단어를 근거로 썼는지 사람이 확인하는 일이 항상 필요하다. 이번 주 학습활동이 바로 그 확인이다.
□ 정확도는 어떻게 재나
정확도는 맞힌 문장 수를 전체 문장 수로 나눈 값이다. 열 건 중 여덟 건을 맞히면 0.8이다.
중요한 것은 어떤 문장으로 재느냐다. 노트북에서 두 가지 정확도가 나온다.
| 무엇으로 쟀나 | 노트북 결과 | 의미 |
|---|---|---|
| 학습에 쓴 리뷰 열 건 | 1.0 | 본 문제를 다시 푸는 암기 점수 |
| 처음 보는 새 문장 세 건 | 0.67 | 처음 보는 문제를 푸는 실력 점수 |
학습 정확도 1.0은 자랑할 것이 못 된다. 답을 보고 공부한 문제를 다시 푼 것이다. 새 문장 세 건 중 틀린 하나는 앞에서 본 “예쁘고 감성적인 숙소였다”다. 그래서 실제로는 학습에 쓰지 않은 문장을 따로 떼어 두고 그것으로 정확도를 잰다. 이 문장들을 시험 자료라고 부른다. 세 건은 실력을 재기에는 너무 적고, 이번 주에는 두 정확도가 다르다는 것을 보는 데까지만 쓴다.
□ 틀리는 것은 두 가지다
분류기는 틀린다. 그리고 틀리는 방법은 정확히 두 가지다. 긍정인 것을 부정으로 틀리거나, 부정인 것을 긍정으로 틀리거나.
표의 네 칸 중 대각선 두 칸은 맞은 것이고, 나머지 두 칸이 오류다. 토글을 바꿔 보면, 어느 오류가 더 비싼지는 시나리오가 정한다.
| 시나리오 | 더 비싼 오류 | 이유 |
|---|---|---|
| 스팸 필터 | 정상 메일을 스팸으로 버림 | 중요한 메일 하나를 잃는 것이 스팸 몇 통을 참는 것보다 크다 |
| 관광 리뷰 감성 | 정해진 답이 없다 | 결과를 누가 받아 어디에 쓰는지에 따라 달라진다. 활동 B와 대면 토론에서 다룬다 |
○ 정확도만 보면 속는다
메일 100통 중 스팸이 5통이라고 하자. 무조건 “정상”이라고만 답하는 분류기가 있다. 이 분류기는 95통을 맞히니 정확도가 0.95다. 그런데 스팸은 한 통도 잡지 못한다. 스팸 필터로서는 쓸모가 없다.
정확도만으로 좋은 분류기를 판단할 수 없다는 말의 뜻이 여기 있다. 한쪽 클래스가 훨씬 많으면 정확도가 높게 나오기 쉽고, 두 분류기의 정확도가 같아도 어느 쪽으로 틀리는지가 다르면 쓸모가 다르다. 그래서 오류를 두 칸으로 나눠 따로 본다. 교재나 다른 자료에서 이 두 칸을 따로 재는 이름을 만나게 된다.
- 정밀도(precision). 스팸이라고 판정한 것 중 진짜 스팸의 비율이다. “스팸 판정을 얼마나 믿을 수 있나”
- 재현율(recall). 진짜 스팸 중 스팸이라고 잡아낸 비율이다. “스팸을 얼마나 빠짐없이 잡나”
위의 “무조건 정상” 분류기는 정확도 0.95지만 재현율이 0이다. 이름을 외울 필요는 없다. 오류를 두 방향으로 나눠 본다는 생각만 가져가면 된다.
□ 문턱을 옮기면
지금까지 문턱은 긍정 확률 0.5였다. 이 문턱은 옮길 수 있다.
설명용으로 만든 리뷰 12건을 긍정 확률 순서로 늘어놓은 그림이다. 문턱 오른쪽은 긍정, 왼쪽은 부정으로 판정되고, 틀린 판정에는 테두리가 생긴다. 슬라이더로 문턱을 옮겨 보자.
| 문턱 | 긍정 판정 | 놓친 긍정 (긍정을 부정으로) | 잘못 올린 부정 (부정을 긍정으로) |
|---|---|---|---|
| 0.2로 내림 | 11건 | 0건 | 5건 |
| 0.5 그대로 | 6건 | 1건 | 1건 |
| 0.8로 올림 | 2건 | 4건 | 0건 |
- 문턱을 올리면 아주 확실한 것만 긍정이 된다. 부정을 긍정으로 잘못 올리는 일은 줄지만, 진짜 긍정을 부정으로 놓치는 일이 는다
- 문턱을 내리면 반대다. 긍정을 놓치는 일은 줄지만, 부정이 긍정으로 섞여 드는 일이 는다
같은 점수에서 문턱을 올리면 놓친 긍정은 줄지 않고, 잘못 올린 부정은 늘지 않는다. 실제 수가 그대로인 구간도 있다. 이 그림은 두 클래스의 점수가 겹치므로 문턱만 바꿔 양쪽 오류를 모두 0으로 만들 수 없다. 다른 자료에서 두 클래스가 완전히 분리되면 양쪽이 0인 문턱이 있을 수도 있다.
그래서 실무에서는 시나리오에 따라 문턱을 옮긴다. 이때 어느 클래스의 확률에 거는 문턱인지를 분명히 해야 헷갈리지 않는다.
- 스팸 필터. 스팸 확률 문턱을 높게 잡는다. 아주 확실할 때만 스팸함으로 보내니 정상 메일을 버리는 일이 준다. 대신 스팸이 조금 더 새어 들어온다
- 부정 리뷰 감시. 부정 리뷰를 놓치면 안 되는 일이라면 긍정 확률 문턱을 높게 잡는다. 확실히 긍정인 것만 긍정으로 두고 나머지는 부정 쪽으로 올려 사람이 확인한다. 대신 멀쩡한 긍정 리뷰도 확인 목록에 섞인다
문턱은 분류기가 정하는 것이 아니라 문제가 정한다.
□ 왜 지금 이것을 배우는가
- 문서 분류는 지금도 가장 흔한 자연어처리 과제다. 스팸 걸러내기, 문의 메일 분류, 리뷰 감시가 모두 이 모양이다
- 이번 주에 만난 한계 세 가지, 순서를 버림, 모르는 단어, 조사와 어미 모양은 뒤 주차들이 하나씩 푸는 문제다. 6~8주차는 단어와 문장의 뜻을 숫자로 표현하는 방법을, 9주차는 순서를 보는 모델을 다룬다
- 모델이 바뀌어도 점수, 문턱, 두 가지 오류, 근거 확인이라는 생각은 그대로 쓰인다. 큰 언어모델에 분류를 맡길 때도 결과를 받는 사람이 문턱과 오류 비용을 정해야 한다
□ 강의 2에서 꼭 가져갈 것
- 분류기의 판단은 기본 점수 + 단어 점수의 합을 문턱과 비교하는 것이다. 확률은 그 합을 0과 1 사이로 바꾼 값이고, 합계 0이 확률 0.5다
- 가방에 없는 단어는 점수도 없고 판단에 영향도 없다. 모양이 조금만 달라도 모르는 단어가 된다
- 자료가 적으면 우연히 한쪽에만 나온 말이 근거 행세를 한다. 모델이 무엇을 근거로 썼는지 확인해야 한다
- 실력은 학습에 쓰지 않은 문장으로 잰다. 정확도만 보지 말고 두 가지 오류를 나눠 본다
- 문턱을 옮기면 두 오류 사이에 교환 관계가 생길 수 있다. 같은 수로 남는 구간도 있다. 문턱을 정하는 것은 문제다
□ 활동 A: 리뷰를 직접 분류하기
아래 리뷰 다섯 건을 긍정과 부정으로 분류하고, 판단 근거가 되는 단어를 하나씩 표시한다.
| 리뷰 | 내 판정 | 근거 단어 |
|---|---|---|
| 뷰는 좋았지만 방이 좁았다 | ||
| 조식이 맛있고 직원들이 친절했다 | ||
| 사진과 다르고 소음이 심했다 | ||
| 가격 대비 만족스러운 숙박이었다 | ||
| 위치는 좋은데 냄새가 났다 |
첫 번째와 다섯 번째 리뷰를 눈여겨보자. 긍정 단어와 부정 단어가 한 문장에 섞여 있다. 사람은 앞뒤를 읽고 전체 톤을 판단하지만, 단어 가방은 순서를 버리고 점수만 더한다.
내 답을 먼저 적은 뒤에 아래를 열어 본다.
노트북 모델은 이렇게 판정했다
| 리뷰 | 쓰인 단어와 점수 | 가방에 없는 단어 | 판정 (긍정 확률) |
|---|---|---|---|
| 뷰는 좋았지만 방이 좁았다 | 방이 -0.25 | 뷰는, 좋았지만, 좁았다 | 부정 (0.42) |
| 조식이 맛있고 직원들이 친절했다 | 네 단어 모두 +0.27 | 없음 | 긍정 (0.73) |
| 사진과 다르고 소음이 심했다 | 사진과 -0.25, 다르고 -0.25, 소음이 -0.23 | 심했다 | 부정 (0.31) |
| 가격 대비 만족스러운 숙박이었다 | 네 단어 모두 +0.27 | 없음 | 긍정 (0.73) |
| 위치는 좋은데 냄새가 났다 | 냄새가 -0.23 | 위치는, 좋은데, 났다 | 부정 (0.43) |
판정은 사람과 비슷하게 나왔을 수 있다. 그런데 근거를 보면 이야기가 다르다.
- 첫 번째 리뷰는
방이하나로 부정이 됐다. 사람이 근거로 고를좁았다는 가방에 없다.방이는 우연히 부정 리뷰에 나왔던 중립어다 - 두 번째와 네 번째는 학습 리뷰와 똑같은 문장이다. 맞히는 것이 당연하고, 실력을 보여 주지 않는다
- 세 번째에서 사람은
심했다를 근거로 고르기 쉽지만 모델은 그 단어를 모른다. 학습 자료에는심해서만 있다 - 다섯 번째는
냄새가하나가 판정을 정했다.좋은데는 가방에 없어서 긍정 쪽 힘이 하나도 들어가지 않았다
○ 사람의 근거와 모델의 근거
[이론] 활동의 핵심은 정답이 아니라 근거 비교다.
- 내가 고른 근거 단어를 적는다.
친절처럼 조사를 뗀 모양일 수도 있고직원들이처럼 통째일 수도 있다 - 노트북 1-4의 점수 목록에서 같은 단어를 찾는다. 없다면 어떤 모양으로 저장되어 있는지 확인한다
- 사람은 뜻으로 고르고 모델은 어느 쪽 리뷰에 나왔는지로 고른다. 모델의 근거는 늘 조사까지 붙은 통째 조각이다. 이 두 차이가 보이면 이번 주의 절반을 이해한 것이다
□ 활동 B: 오분류의 비용 따져 보기
[실무] 관광 리뷰 감성 분류기가 틀렸다고 하자.
- 긍정 리뷰를 부정으로 분류하면 무슨 일이 생기는가
- 부정 리뷰를 긍정으로 분류하면 무슨 일이 생기는가
- 숙박업소 평판 관리 관점에서 어느 쪽 오류가 더 큰 문제인지, 그 이유를 한 문장으로 적는다
정답은 없다. 이유를 들어 근거를 대는 것이 활동이다. 스팸 필터 예에서 본 것처럼, 같은 오분류라도 결과를 받는 사람에 따라 비용이 다르다는 것이 이 활동의 목적이다.
대면 (1시수)
Section titled “대면 (1시수)”노트북 돌려 보기
Section titled “노트북 돌려 보기”□ 노트북에서 하는 일
리뷰 열 건(긍정 5, 부정 5)으로 단어 가방을 만들고 분류기를 학습시킨다. 설치 셀, 확인 셀, 학습 코드가 순서대로 있고 손대지 않아도 돌아간다. TODO는 리뷰 문장을 바꿔 넣는 한 곳뿐이다.
노트북의 흐름은 다음과 같다.
- 리뷰 열 건을 나란히 놓는다 (1-1)
- 문장을 단어 가방으로 바꿔 표를 만든다. 10문장 x 40단어 표가 나온다 (1-2)
- 분류기를 학습시키고 학습 문장 정확도와 기본 점수를 본다 (1-3)
- 단어 점수 목록을 읽는다 (1-4)
- 새 문장 세 개를 넣어 예측하고, 새 문장 정확도를 잰다 (1-5)
- TODO에서 내 리뷰를 넣고, 판정에 쓰인 단어와 점수를 본다 (2)
□ 점수 목록 읽는 법
노트북 1-4는 긍정 쪽으로 미는 단어 여덟 개와 부정 쪽으로 미는 단어 여덟 개를 보여 준다. 대략 이렇게 나온다.
- 긍정 쪽 1, 2위는
객실이(0.44)와좋았다(0.42)다. 그 아래는 0.27로 점수가 같은 단어가 여덟 개나 되어, 목록에 어느 것이 올라오는지는 중요하지 않다 - 부정 쪽 1위는
나서(-0.46)이고, 그 아래는 -0.25인 단어들이다
이 목록을 원래 리뷰 열 건과 나란히 놓고 확인한다.
- 그 단어가 정말 긍정(또는 부정) 리뷰에서 나왔는가
- 감정과 상관없는 단어가 섞여 있는가. 있다면 몇 번째 리뷰에서 왔는가
- 같은 뜻인데 조각이 다른 단어가 각각 따로 점수를 가지는가
마지막 질문이 2주차의 복습이다. 직원이 와 직원들이 가 따로, 그것도 반대 부호로 있다면 단어 가방은 조사와 어미까지 포함한 통째 조각에 점수를 매기는 셈이다.
□ 새 문장 예측 읽는 법
노트북 1-5의 세 문장은 긍정 0.69, 부정 0.36, 그리고 0.49가 나온다. 세 번째를 눈여겨보자.
- 사람에게는 명백히 긍정처럼 읽히는 문장이다
- 그런데 문장의 모든 단어가 학습 자료에 없던 것이어서 근거가 없다
- 기본 점수만 남아 확률이 0.49, 판정이 부정으로 틀린다. 새 문장 정확도가 0.67인 이유가 이것이다
여기서 오해가 하나 생기기 쉽다. 0.5 근처라는 결과만으로는 이유를 알 수 없다. 긍정 단어와 부정 단어가 섞여 상쇄된 경우와, 아는 단어가 하나도 없는 경우가 같은 숫자로 나온다. 노트북 2의 TODO에서 직원이 친절했다 와 예쁘고 감성적인 숙소였다 를 차례로 넣어 보자. 둘 다 0.49인데, 마지막 줄의 판정에 쓰인 단어 목록이 전혀 다르다.
□ 자주 막히는 지점
| 증상 | 원인 | 조치 |
|---|---|---|
ModuleNotFoundError: No module named 'sklearn' | 설치 셀을 건너뛰었거나 런타임이 끊겼다 | 설치 셀부터 다시 실행한다 |
NameError: name 'vectorizer' is not defined | 런타임이 다시 시작되어 위 셀의 결과가 사라졌다 | 메뉴에서 모두 실행을 누르거나 위에서부터 다시 실행한다 |
SyntaxError | 문장을 바꾸다 따옴표를 지웠거나 한쪽만 남았다 | my_review = "..." 처럼 따옴표 한 쌍 안에 문장을 넣는다 |
| 예측 확률이 계속 0.49 근처다 | 아는 단어가 없거나 긍정·부정 점수가 상쇄됐다 | 판정에 쓰인 단어 목록을 확인하고, 학습 리뷰에 있는 단어를 섞어 넣어 본다 |
| 정확도가 1.0으로 나온다 | 학습 문장을 다시 보고 맞히는 것이라 정상이다 | 실력은 1-5의 새 문장 정확도로 본다 |
이해관계자 토론
Section titled “이해관계자 토론”Q2 이해관계자. 같은 분류기라도 결과를 받는 사람에 따라 기준이 달라진다.
스팸 필터에서 스팸을 놓치는 것과 정상 메일을 버리는 것 중 무엇이 더 큰 문제인가. 강의 2의 표에서 봤듯 이 수업 예시는 정상 메일을 보존하는 비용이 더 크다고 가정했다. 실제 비용은 사용 목적에 따라 달라진다. 그런데 같은 질문을 관광 리뷰에 던지면 답이 갈린다.
- 숙박업소 입장. 부정 리뷰를 긍정으로 놓치면 불만을 모르고 지나가 평판 관리에 실패한다
- 이용객 입장. 부정 리뷰가 긍정으로 섞이면 실제보다 좋은 숙소로 보고 고르게 된다. 긍정 리뷰가 부정으로 가면 좋은 숙소를 놓친다
- 플랫폼 입장. 어느 쪽이든 오분류가 쌓이면 리뷰 요약 전체에 대한 신뢰가 무너진다
같은 분류기, 같은 오분류인데 누가 결과를 받느냐에 따라 비용이 다르다. 문턱을 어디에 둘지는 기술 결정에 앞서 이해관계자의 판단이 들어가는 자리다.
토론은 이렇게 진행한다.
- 세 입장 중 하나를 맡는다
- 그 입장에서 더 비싼 오류를 고른다
- 긍정 확률 문턱을 0.5보다 올릴지 내릴지 정하고, 그 대가로 어떤 오류가 늘어나는지 한 문장으로 말한다
□ 기본·심화 학습 경로
- 기본: 리뷰 열 건으로 학습한 출력과 새 문장 세 건 결과 비교. TODO 리뷰 한 곳만 변경
- 심화: 같은 출력에서 사람이 고른 근거와 모델의 점수 근거 대조. 문턱 그림의 0.2·0.5·0.8에서 두 오류 비용을 각각 해석
- 두 경로 모두 제공 코드를 실행한 결과 해석 중심. 추가 구현이나 별도 TODO 요구 없음
[이론] 사람이 표시한 근거 단어와 모델이 쓴 특징을 비교해, 모델이 무엇을 보고 판단하는지 확인
- 활동 A의 근거 단어와 노트북 1-4의 점수 목록을 나란히 놓는다
- 같은 단어를 가리켰는지, 모양이 달랐는지, 모델이 감정과 상관없는 단어를 근거로 썼는지 표로 정리한다
- 점수가 매겨진 단어를 맞히는 것이 아니라, 사람 근거와 모델 근거의 차이를 설명했는지로 채점한다
[구현] 감성 분류기를 데모 따라 학습시키고 성능 측정. 과제 2 - 한국어 리뷰 감성 분류 및 결과 해석
- 노트북의 TODO 셀에서 내 리뷰를 넣고 판정과 확률을 기록한다
- 판정에 쓰인 단어와 점수를 출력에서 확인하고, 근거가 된다고 생각하는 것 하나를 고른다
- 1-3의 학습 문장 정확도와 1-5의 새 문장 정확도를 옮기고, 두 값이 왜 다른지 한 문장으로 적는다
- 코드가 돌지 않아도 무엇을 확인하려 했는지 쓰면 부분 점수를 받는다
[실무] 정확도만으로 좋은 분류기를 판단할 수 없음을 오분류 사례로 확인. 관광 리뷰 오분류가 숙박·음식점 평판에 미치는 영향을 놓고 어느 쪽 오류가 더 비싼지 판단
- 활동 B의 두 오류 상황을 각각 한 문장으로 적는다
- 어느 쪽이 더 비싼지와 이유를 적는다
- 정답 방향이 아니라 근거의 명확함으로 채점한다. 실제 기업 리뷰 확보를 전제하지 않고 이 페이지의 수업용 예시로 토론한다
자주 하는 오해 Q&A
Section titled “자주 하는 오해 Q&A”Q1. 단어 순서를 버리면 문장 뜻이 다 사라지는 것 아닌가?
상당 부분 사라진다. 그래도 감성 분류에는 남는 것이 충분히 많다. “더러웠다”, “친절했다” 같은 단어가 나왔다면 순서와 관계없이 강한 단서다. 다만 “가격은 비쌌다. 그래도 좋았다.”와 “좋았다. 그래도 가격은 비쌌다.”를 가르지 못하는 것처럼 순서가 뜻을 만드는 부분은 포기한 방식이다. 버린 것과 남은 것을 구분해 보는 것이 이번 주의 포인트다. 순서를 다시 살리는 방법은 9주차에서 다룬다.
Q2. 확률이 0.5 근처면 애매한 문장이라는 뜻인가?
그럴 수도 있고 아닐 수도 있다. 확률만으로는 가를 수 없다. 0.5 근처가 나오는 경우는 두 가지다.
- 근거가 서로 부딪친 경우.
직원이 친절했다는직원이-0.25와친절했다+0.27이 상쇄되어 0.49가 나온다. 근거는 있는데 양쪽으로 갈렸다 - 근거가 아예 없는 경우.
예쁘고 감성적인 숙소였다는 아는 단어가 하나도 없어 기본 점수만 남아 0.49가 나온다
두 문장은 확률이 같지만 이유가 전혀 다르다. 확률을 읽을 때는 어떤 단어가 점수에 들어갔는지를 함께 확인해야 한다. 노트북 2의 마지막 줄이 그 근거를 알려 준다.
Q3. 학습 문장 정확도가 1.0이면 완벽한 분류기인가?
아니다. 본 적 있는 문장을 다시 맞히는 것이라 높게 나오는 것이 정상이다. 답을 보고 공부한 문제를 다시 푸는 것과 같다. 일반화 성능은 학습에 쓰지 않은 자료에서 따로 확인해야 한다. 노트북의 학습 정확도는 1.0, 교수 작성 새 문장 세 개의 정확도는 0.67이다. 이 차이는 해당 표본에서 나타난 관찰이며, 암기의 정도나 전체 리뷰에 대한 실력을 두 숫자만으로 확정할 수 없다.
Q4. 정확도가 높으면 그 분류기를 써도 되는가?
어느 쪽으로 틀리는지까지 봐야 한다. 메일 100통 중 스팸이 5통이면 무조건 “정상”이라고만 하는 분류기도 정확도 0.95가 나온다. 정확도가 같은 두 분류기라도 하나는 스팸을 잘 걸러내고 정상 메일을 가끔 버리고, 다른 하나는 정상 메일을 지키지만 스팸을 자주 놓친다. 정상 메일을 보존하는 비용이 더 중요한 스팸 필터라면 후자를 택할 수 있다. 모든 스팸 필터에 같은 선택이 정답인 것은 아니다. 부정 리뷰 감시라면 부정을 덜 놓치는 쪽이 나을 수 있다. 그래서 실무에서는 정확도와 함께 오류의 종류와 비용을 따져 보고, 시나리오에 맞게 문턱을 옮겨 쓴다. 이 판단은 결과를 받는 사람이 참여해야 한다.
Q5. 모델이 “객실이”를 가장 강한 긍정 근거로 쓰는 것은 고장인가?
고장이 아니라 자료가 적어서 생긴 우연이다. 학습 리뷰 열 건 중 객실이 는 긍정 리뷰 두 건에만 나왔다. 모델은 뜻을 모르고 어느 쪽에 나왔는지만 보니, 이 단어를 긍정의 신호로 배운 것이 당연하다. 자료를 늘릴 때 객실이가 불만 리뷰에도 고르게 나오면 우연한 영향이 줄 수 있다. 같은 종류의 편향된 자료만 늘리면 그렇지 않을 수 있다. 다만 자료가 많아도 비슷한 우연은 남는다. 그래서 점수 목록을 사람이 읽고 이상한 근거를 찾아내는 일이 분류기를 쓰는 사람의 몫으로 남는다.
Q6. 이름에 “회귀”가 들어가는데 분류기가 맞는가? 나이브 베이즈와는 무엇이 다른가?
분류기로 쓴다. 로지스틱 회귀가 속으로 예측하는 것은 0과 1 사이의 확률이라는 숫자다. 숫자를 예측하는 방법을 회귀라고 부르는 데서 이름이 왔다. 그 확률을 문턱과 비교해 클래스를 고르니 결과적으로 분류기가 된다. 나이브 베이즈는 단어 점수를 세어서 만들고, 로지스틱 회귀는 맞히고 고치기를 되풀이해서 찾는다. 점수를 더해 판단한다는 모양은 같다.
Q7. 긍정 확률 0.95이면 실제로 95퍼센트 맞는가?
예측 확률과 실제 정답률의 구분. 이 모델의 predict_proba는 학습된 점수를 변환한 값. 0.95인 새 사례들이 실제로 약 95퍼센트 맞는지는 별도 시험 자료에서 확인해야 함. 열 건으로 학습하고 세 문장으로 비교한 수업 예시에서는 그 검증을 하지 않았음.
Q8. 문턱을 아주 조금 옮겨도 오류 수가 반드시 바뀌는가?
문턱을 넘는 사례가 있을 때 판정 변화. 예시 점수 사이 빈 구간에서 문턱을 움직이면 판정 수와 오류 수가 그대로일 수 있음. 이 그림에서는 0.5와 0.8을 비교해 판정이 실제로 바뀐 사례를 확인. 두 클래스가 겹친 정도는 자료마다 다름.
스스로 점검
Section titled “스스로 점검”- 단어 가방에 남는 것과 버려지는 것을 각각 하나씩 말하라.
객실이 좋았다와좋았다 객실이를 단어 가방으로 만들면 어떻게 되는가?- 학습에 없던 단어만 들어 있는 문장을 넣으면 확률이 어떻게 되는가? 그 이유는?
- 노트북 모델에서
직원이 친절했다가 부정으로 나온 이유를 점수로 설명하라. - 메일 100통 중 스팸이 5통이다. 무조건 “정상”이라고 하는 분류기의 정확도는 얼마이고, 이 분류기의 문제는 무엇인가?
- 긍정 확률 문턱을 0.5에서 0.8로 올리면 긍정 판정의 수와 두 가지 오류의 수가 각각 어떻게 되는가?
정답 보기
-
어떤 단어가 몇 번 나왔는지는 남고, 단어의 순서는 버려진다. 가방에 단어를 쏟아 넣었다고 생각하면 순서가 남아 있을 수 없다는 것이 자연스럽게 이해된다.
-
완전히 같은 가방이 된다. 들어 있는 단어와 개수가 같으니 분류기의 눈에는 구별되지 않는다. 사람에게는 어순이 다르게 읽히지만 단어 가방은 그 차이를 볼 수 없다.
-
확률이 0.5 근처에 머문다. 가방에 없는 단어는 칸도 점수도 없어 판단에 아무것도 더하지 못한다. 기본 점수만 남는데, 노트북 모델의 기본 점수는 -0.06이라 확률이 0.49가 되고 판정은 부정으로 기운다. 사람에게는 분명히 긍정처럼 읽히는 문장이라도 마찬가지다.
-
직원이가 부정 리뷰에 나온 모양이라 -0.25를 가졌기 때문이다. 기본 점수 -0.06에직원이-0.25,친절했다+0.27을 더하면 합계가 -0.04로 0보다 작다. 긍정 리뷰에 나온 것은직원들이이고, 복수 표지와 조사 결합 모양이 달라 가방에서는 다른 단어다. -
정확도는 0.95지만 스팸을 한 통도 잡지 못한다. 한쪽 클래스가 훨씬 많으면 한쪽으로만 답해도 정확도가 높게 나온다. 그래서 정확도만 보지 말고 스팸을 놓친 수와 정상 메일을 버린 수를 따로 봐야 한다.
-
긍정 판정은 줄거나 그대로다. 잘못 올린 부정은 줄거나 그대로이고, 놓친 긍정은 늘거나 그대로다. 이 그림의 0.5에서 0.8로 바꾸는 예에서는 각각 6건→2건, 1건→0건, 1건→4건이다. 문턱이 높아지면 긍정으로 판정되려면 더 큰 확률이 필요해지기 때문이다. 한쪽을 조이면 다른 쪽이 늘어나는 교환 관계라, 알맞은 문턱은 시나리오가 정한다.
이번 주 용어 정리
Section titled “이번 주 용어 정리”| 용어 | 한 줄 뜻 |
|---|---|
| 문서 분류 | 문서 하나를 받아 미리 정한 클래스 중 하나로 나누는 일 |
| 클래스 | 분류기가 내놓을 수 있는 답의 목록. 스팸·정상, 긍정·부정 등 |
| 감성 분석 | 글의 긍정과 부정을 판단하는 문서 분류 |
| 학습 자료 | 사람이 정답을 붙여 둔 예시. 분류기는 여기서만 배운다 |
| 단어 가방 (Bag-of-Words) | 문서를 단어 목록과 등장 횟수로 바꾸는 방법. 순서는 버린다 |
| 특징 | 분류기가 판단에 쓰는 입력 값. 여기서는 단어별 등장 횟수 |
| 가중치 | 단어마다 매겨진 점수. 긍정으로 밀거나 부정으로 민다 |
| 기본 점수 | 단어와 상관없이 늘 더해지는 점수. 아는 단어가 없을 때 남는 값 |
| 학습 | 정답을 맞히도록 점수를 조금씩 고치기를 되풀이하는 과정 |
| 로지스틱 회귀 | 단어 점수를 학습해 점수 합으로 분류하고, 합을 확률로 바꿔 주는 대표적인 분류기 |
| 나이브 베이즈 | 단어 점수를 세어서 만드는 분류기. 점수를 더해 판단하는 모양은 같다 |
| 점수 합 | 기본 점수에 문장 속 단어들의 가중치를 모두 더한 값 |
| 문턱 (임계값) | 판정이 바뀌는 기준선. 여기서는 합계 0, 확률 0.5 |
| 예측 확률 | 점수 합을 0과 1 사이로 바꾼 값. 모델이 어느 클래스 쪽으로 기울었는지 나타낸다. 실제 정답률과 일치하는지는 별도 확인 |
| 미등록 단어 | 학습 자료에 없던 단어. 칸이 없어 판단에 영향을 주지 못한다 |
| 정확도 | 맞힌 문장 수를 전체 문장 수로 나눈 값 |
| 시험 자료 | 실력을 재려고 학습에 쓰지 않고 떼어 둔 문장 |
| 오분류 | 분류기가 틀린 판정. 긍정을 부정으로, 부정을 긍정으로 두 가지다 |
| 정밀도 / 재현율 | 판정을 얼마나 믿을 수 있나 / 얼마나 빠짐없이 잡나. 오류를 두 방향으로 나눠 재는 이름 |
| 오류 비용 | 오분류가 결과를 받는 사람에게 입히는 손해. 시나리오마다 다르다 |
이번 주 읽기
Section titled “이번 주 읽기”주교재 4장 Logistic Regression. 예측 확률을 실제 정답률로 해석하기 전에 별도 확인이 필요하다는 점은 scikit-learn 확률 보정 문서 참고(선택 읽기, 보정 구현은 수업 범위 밖). 자세한 서지 정보는 강의계획서를 참고한다.
- 이 장은 수식이 많다. 수식이 나오는 부분은 넘어간다. 이 과목의 시험 범위가 아니다
- 분류 문제의 소개 부분과 스팸·감성 분석 예제 부분을 찾아 읽는다
- 교재의 예제는 영어다. 영어도 한국어도 단어 가방이라는 점만 확인하면 충분하다. 영어는 띄어쓰기가 단어와 거의 맞아서, 이번 주에 본 조사 문제가 훨씬 덜하다는 점도 비교해 본다
실습 노트북
Section titled “실습 노트북”리뷰 열 건으로 단어 가방을 만들고 분류기를 학습시킨다. 새 문장을 넣어 예측하고 정확도를 잰 뒤, 모델이 어떤 단어를 보고 판단했는지 확인한다. TODO는 리뷰 문장을 바꿔 넣는 한 곳이다.