[statistics] naive bayesian with aspect model - dsindex/blog GitHub Wiki
motivation : Named Entity Disambiguation with Freebase
naive bayesian
을 가지고 동명이인에 대한 중의성해소를 한다고 하자. (예를 들어서, '농수선수 이상민'과 '가수 이상민'을 구분)
일반적으로 사용하는 naive bayesian 분류기의 경우 class 확률 p( c )와 feature 확률 p(f | c)을 계산해 두는 것이 핵심이다. aspect model의 경우 feature w(혹은 단어 w)가 어떤 variable z에서 생성되었고, c가 주어졌을 때 z의 분포를 안다면 아래와 같이 계산한다.
p(f, c) = p(c) * sum { p(f | z) * p(z | c) } over all z
naive bayesian에서는
p(f | c) = count(f, c) / sum { count(f', c) } over all f' in c
이와 같이, 해당 class에 속하는 feature의 상대적 중요도를 가지고 feature 확률을 계산하는데, 여기서 feature f는, 예를 들어서, '연예 카테고리'에서 많이 나올 수도 있고 '스포츠 카테고리'에 많이 나올 수도 있다. 이렇게 단어의 카테고리 값을 z라고 보면, naive bayesian 수식에 p(f | z)를 넣어서 활용해볼수 있지 않을까?
예를 들어서,
p(f | c) = { count(f, c) + sum { ( p(f | z) * p(z | c) ) } } over all z in Z(c)
/
S over all f
S는 normalizing factor
Z(c)는 c가 가능한 카테고리 값
( z에는 '연예인', '스포츠', '정치', '경제', '사회' 등등이 있다고 하자. )
확률이 z를 고려하지 않았을때, p('감독' | '농구선수 이상민') feature 확률은 p(f | c) 순으로 랭킹해서 그다지 상위에 오지 않았다고 하자. z 값을 고려한다면 어떻게 될까? '농구선수 이상민' 클래스가 가질 수 있는 카테고리 값 분포가 아래와 같다면 :
'스포츠' : 0.9
'사회' : 0.1
'연예' : 0.1
...
p('감독' | z='스포츠')*p('스포츠' | '농구선수 이상민') +
p('감독' | z='사회')*p('사회' | '농구선수 이상민') +
p('감독' | z='연예')*p('연예' | '농구선수 이상민')
이 값을 더해서 p(f | c)를 계산하면 p(f | c) 랭킹에서 다른 feature들보다 p('감독' | '농구선수 이상민')이 좀 더 상위로 올라갈 수 있을 것이다.
- 이 방법의 기본 가정
중의성 해소하려는 class c가 어떤 카테고리 z에 속하는 membership distribution을 알고 있어야한다.