Language Model (2)

점심시간을 틈타 Language Model의 마지막 포스팅을 해본다.

먼저번 포스팅헤서 P(q|Md)를 구하는게 목적이라는 언급을 했었고, 그 값을 구하기 위한 식을 만들었다.

그럼 문서 기반으로 정확히 식을 구하기 위해 어떻게 해야 할까?

사용자 삽입 이미지

모든 쿼리에 대해서 문서에 대한 t.f(term frequency)를 구하고 문서에 존재하는 모든 텀의 갯수를 dl이라는 변수에 할당을 해서 위와 같은 식으로 model과 쿼리의 확률을 구하는것이다.

그런데 여기서 문제가 생긴다. 그 문제라 하면 쿼리에는 존재하나 문서에 존재하지 않을 경우 위 식은 0이 되어 버린다는것이다. 이는 고질적으로 사람과 컴퓨터간의 이슈중에 하나이다. (0이라는 숫자…. 너무 깡패같다.) 이런 면에서 봤을때 cosine similality가 좀더 resonable한 결과를 가져오는거 같다는 생각을 지울 수 없군.

그리고 또 한가지 문제는 문서에서 한번 나오는 단어가 너무 over estimate될 수 있다는 것이다.  우연하게 한번 출연할 경우 문서의 길이가 짧을 경우 랭킹이 터무니 없이 높게 나올 수 있다는것이다. (그런 케이스가 쌓이게 되면 문서간 랭킹의 간격이 커질것이다.)

이런 term의 count에 관련된 문제는 여러 normalization 방법으로 해결을 하고 있기도 하다.(선형 보간법 같은 방법이 좋은 해결책이 될 수 있다고 한다.)

0-count의 문제는 collection 개념으로 확장해 t.f가 0인 문서들은 cf/cs 라는 공식으로 대체한다. 문서 내의 존재 확률을 확장해서 전체 collection의 확률로서 term을 본다면 그리 큰 차이는 없다는게 이 식을 제안한 사람의 생각인 것이다. (cf : collection 내의 freg, cs : collection내의 전체 토큰 수)

이런 0에 관한 문제와 우연하게 한번 나오는 문제는 두개다 우리가 참고해야될 data가 부족한것에 따라 나오는 현상이다.

그래서 전체 collection의 정보를 아예 식에다 넣어 버린 최종식이 나온다.

사용자 삽입 이미지

Mc는 collection의 해당 term에 대한 모델이고 Md는 아까와 같이 문서의 모델이다.

잘 보면 이 식은 PageRank 알고리즘의 Random surfer 처리를 위한 식하고 비슷하고, 또한 네트웍쪽에서의 window 사이즈 계산시 실측값과 계산값을 가지고 예측값을 도출하는식과 비슷하다.(이런 식들이 책이나 논문을 보면 의외로 많이 나온다.)

이런종류의 식은 estimated 된 값과 계산된 값을 적절하게 lambda값으로 수치를 조절하기 편한 식인거 같다. 그래고 또한 lambda값을 구하기 위해 실험을 수반할 필요성을 역설하는 식이기도 하고 말이다.

논문에 따르면 lambda값이 클 경우는 짧은 쿼리의 경우 적당했고, 작을 경우는 긴 쿼리에 적당 했다고 나온다.

이상 이 정도로 정리하고자 한다. ^^;

Language Model 어느정도 정리가 되었으니 다른 알고리즘과 비교자료도 한번 찾아봐야 겠다.

사실 이놈을 분석한 계기는 스팸처리 때문이다. 이 알고리즘을 바탕으로 문서 유사도를 학습없이 간단하게 판단할 수 있기 때문이다. 물론 전체 collection에 대한 lookup이 필요하겠지만 말이다.

 

CC BY-NC 4.0 Language Model (2) by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.