흔히 자연어 처리를 처음 배우면, 통계적 언어 모델(SLM)이나 n-gram을 마주치게 되는데
그 때, 다음과 같은 쉼표를 사용한 notation을 접하게 됨.
이는 위 위키독스(딥러닝을 이용한 자연어 처리 입문) 뿐만 아니라 딥러닝 꽃밭 책 역시 찾아봤는데 이런 식으로 표현하더라. 그 밖에도 이런 표기를 쓰는 책이나 페이퍼가 수도 없이 많음
그런데 이는 별로 좋은 notation이 아닌 것 같음. 왜냐하면 쉼표라는 notation이 일반적으로 joint probability P(A, B) = P(A \cap B)를 의미하는데 단어 sequence에서 교환법칙에 관한 다음과 같은 오해를 불러일으킬 수 있음.
"""
아, 만약 단어 시퀀스 W를 W = good bye라고 한다면 P(W) = P(w1, w2) = P(good bye) = P(good, bye)라고 나타낼 수 있구나...
어? 그런데 P(good, bye)는 결합확률이므로 P(good, bye) = P(bye, good)인데 P(bye, good) = P(bye good)이잖아?
그러면 P(good bye) = P(bye good)이란 건데....
실생활에서 엄청 자주 보는 문장(good bye)이랑 거의 볼수 없는 터무니없는 문장(bye good)의 확률이 같다는 건가?? 어떻게 그럴 수 있지???
"""
심지어 다음과 같은 설명 때문에 혼란이 더욱 가중됨
"""
음... P(good bye) = P(good) * P(bye|good)이란 거네...
그러면 조건부 확률의 정의 P(A|B) = P(A, B)/P(B)에 의해 P(bye|good) = P(bye, good)/P(good)이란 거잖아...
잉? 그런데 P(bye, good)=P(bye \cap good)에서 P(bye \cap good)이란게 뭐지???
P(good)은 good이라는 단어가 등장할 확률인데 P(bye \cap good)은 bye라는 단어가 등장할 확률과 good이라는 단어가 등장할 확률의 곱확률???
곱확률이면 동시에 등장한다는 건가?? 텍스트를 읽다가 두 단어가 동시에 등장할 확률을 말하는건가?? 근데 그런게 존재하나???
"""
<나의 생각>
왜 이런 혼란이 발생하냐면 notation이 sequence 정보를 명시하지 않았기 때문임.
우리가 일반적으로 마주하는 문장들은 모두 sequence 정보를 자연스럽게 내제하고 있음.
P(w1, w2)라는 확률은 'w1 w2'로 된 문장을 마주칠 확률이지 w1이라는 단어와 w2라는 단어가 동시에 등장할 확률을 의미하는 것이 아니라는 거임
그래서 위 그림의 An adorable little boy is spreading smiles라는 문장을 분석할 때도 수식에 쉼표를 삽입하지 않음.
따라서 다음의 표기법을 각각 다음과 같이 해석해야함
P(good bye) : 데이터셋(표본 공간, 일상 회화 등)에서 'good bye'가 등장할 확률
P(good) : 데이터셋에서 'good'이 등장할 확률
P(bye|good) : 데이터셋에서 good이 등장한 경우에서 대하여, 그 다음 바로 bye가 등장할 확률 (조건부 확률은 표본공간의 축소라는 개념을 잘 생각할 것)
P(bye, good) : 데이터셋에서 'good'이 등장하는 사건과 데이터셋에서 'bye'가 어떤 단어 w 뒤에 등장하는 사건의 교집합의 확률
특히 마지막에 대하여 사건 bye와 사건 good의 결합확률이라고 이해하면 조금 애매함.
왜냐하면 사건 bye는 마치 "bye가 등장하는 사건"을 의미하는 것처럼 보이는데 "bye가 등장하는 사건"과 "어떤 단어 w 뒤에 bye가 등장하는 사건"은 전혀 다른 것이기 때문임.
그리고 이러한 감춰진 의미는 대부분의 컨텐츠에서 노테이션에 반영되지 않았기 때문에 읽는데 주의해야 함
의견 환영
저거 생성모델 중 autoregressive model의 수식표현임 - dc App
오른쪽 product 연산자를 보면 알수있지만 순서에 대한 정보가 들어가있음 - dc App
autoregressive model에 대한 수식을 내가 처음 듣는 얘기인걸 보면 저 표현을 쓴 컨텐츠에서 그거에 대해서 언급한 적이 없다는 뜻인것 같은데... 그러면 일반적인 표현이 아니지 않을까 내 생각엔 autoregresive model도 마찬가지로 joint probability의 표현을 빌려온거 아님?
그리고 오른쪽 product 역시 조건부 확률의 정의를 빌리고 있는데 조건부 확률 P(X|Y)를 조건부 확률의 정의에 따라 분수꼴로 나타내면 순서 정보가 마찬가지로 사라지는 것 같음.
P(good bye) = P(good) * P(bye|good) = P(good) * P(good \cap bye) / P(good) = P(good \cap bye) = P(bye \cap good) = P(bye) * P(bye \cap good) / P(bye) = P(bye) * P(good|bye) = P(bye good) 으로 모순이 발생하잖아.
P(W)에서 W는 벡터잖아 W=(good, bye) 인데 P(W)=P(good, bye)이게 맞지 그걸 P(good bye)로 해석하는건 말이 안되지 수학시간때 주사위 두개 굴려서 (1, 2)가 나올 확률을 P(1, 2)로 표기하지 P(1 2)로 표기 안하잖아 내 생각에 글쓴이가 단어를 벡터 요소로 생각 안하고 그대로 수식으로 넣다보니 생긴 오해같음
마찬가지로 P(good bye) 이거는 W=(good bye) 인 단일 벡터에 대한 확률이되지 (good, bye)의 확률이 아니고
난 비전쪽이라 잘 모르긴한데 perplexity란 용어가 있던데.. 근데 뭐 그게 본문의 내용을 설명하는 것 같으면서도 결국 조건부 확률을 표현할때 같은 문제가 생기는 듯?
근데 내 생각엔 또.. 이건 니가 placeholder로서 변수와 그 변수에 들어갈 값을 구분 안해서 생기는 문제고, 언어 모델뿐만 아니라 일반 확률 이야기에도 같은 문제를 제기할 수 있다고 봄
p(x,y) 라고 쓰면 각각의 entity는 dimension의 순서까지 포함한다고 보통 사람들이 인식하기 때문에 p(1,2) /= p(2,1) 이라고 생각하고 당연히 너도 그럴거라고 봄. 이 일반적인 상황에서 1,2 등 숫자가 너의 언어모델의 경우엔 good, bye로 변경되었을 뿐임
보통 문자로 변수를 표기하기 때문에 그런 과정에서 혼란이 일어난거 같음. 확률 표시 방법에 문제가 있다는 논조의 유명한 사람이 쓴 글을 석사때 본 거 같은데 잘기억은 안나지만 그것도 관련있을 수 있고.. P_{e1,e2}(good, bye) 로 표시하면 혼란이 없었을 것
쓰고 나니 바로 위에 댓글이 똑같은 의미의 댓들이네 ㄷㄷ
아 먼말인지 이해함. P(w1, w2, ..., wn)이란 표기는 결국 P(X1 = w1, X2 = w2, ... , Xn = wn)이란 표기를 단순화한거고 이때 Xn은 주어진 문장에서 n번째 토큰을 의미하는 확률 변수를 의미한다고 설명하면 된다는 거 맞음? 음... 확실히 이렇게 하면 명확한 듯.
P(X=x) = P_X(x) ~= P(x) P(X=x,Y=y) = P_(X,Y)(x,y) ~= P(x,y) P(y,x) = P_(Y,X)(y,x)로 해석을 해야지 P_(X,Y)(y,x)로 해석하면 안됨