Knowledge-Based System (KBS) - comp. program that reasons and uses a knowledge base to solve complex problems


초기의 KBS 에 대한 개념

Robot 에게 지시 -> 
'지금 위치해 있는 강의실을 나가 엘리베이터를 타고 밖으로 나가라' -> 
강의실을 나간다 -> 알고리즘을 기반으로 상황 파악 -> 경우의 수에 따라 판단 

(이전에는 이것이 바로 KBS 라고 생각했다. i.e. 위 예시는 KBS 에 대한 초기 인식을 나타낸다.)


근래 들어 KBS 에 대한 개념 

구글에 "korea president" 를 검색하면, 정말 "korea president"라는 단어가 들어간 document 를 return 하는 게 맞다. 
하지만 실질적으로 사람들이 원하는 건, 단순히 PageRank 스코어가 높은(link가 많이 달린 i.e. reference가 많이 달린) document 가 아니라 
사람들이 일반적으로 Korea President 라고 했을 때 "연상"지어 생각하는(association) 객체'인 것이다. 
즉, 'Park Geun-Hye' 에 대한 정보가 바로 떠야하는 것. 비록 PageRank Score 가 높지 않더라도 추측(implication score?) 혹은 inferential probability 가 높은 결과를 return하는 것이다.

그럼 여기서 이러한 궁금증이 생긴다.

이 접근법과 PageRank 랑 fundamentally 다른가...? 
PageRank 알고리즘의 코드를 약-간 수정한 수준인가 아니면 아이에 가정과 접근법 자체가 다른가?

* side_info: Freebase <- Google 에서 만든 Knowledge-Based System

결론부터 이야기하자면, PageRank는 알고리즘으로 각 웹 페이지의 가 전체 웹 상에서 얼마나 '상대적으로' 많은 link가 걸렸는지를 기준으로 ranking을 매겨서 보여준다. 직관적 이해를 원한다면, 예를 들어 각 페이지 상에서 F12 를 누르면 그 페이지의 소스코드가 뜬다. 물론 이건 페이지의 depth 를 고려 안 한 거지만 어쨌든 아이디어는 이 코드 내부에 다른 웹 페이지에 대한 hyperlink가 포함되어 있으면 Google 이 사용하는 indexing machine 이 이것을 감지하고 score를 매기고 나중에 전체 인터넷에 존재하는 웹 페이지들에 한해서 반복적으로 이것을 수행하고 난 뒤에 its relatively linked score 를 정하는 것이다.

Knowledge-Based System은 Taxonomy 라는 것을 쓴다. 이것은 어떠한 객체(여기서 객체라 함은, '인물', '사물', '동물' 등 모든 존재하는 것들을 지칭하는 것이다)를 카테고리화 해놓은 구조이다. 
예를 들어,

'홍 길동' 이라는 인물이 있다고 하자.
이 사람을 카테고리를 통해 정의한다고 하자.

인간 -> 한국인 -> 서울 (주거) -> 강동구 -> 홍길동 ...(1)

뭐 이런 식으로 카테고리를 매긴 것을 taxonomy 라고 보면 된다.

너무나 대충 만든 taxonomy 라는 느낌이 진하게 느껴질 것이다.
많은 사람이 공감할 만한 접근법이 아니고 강동구에 사는 사람이 엄청 많은데 바로 홍길동으로 넘어갔기 때문이다. 
하지만 그건 디테일한 부분이니 그냥 저런 식으로 카테고리화가 되는 구나 라고 이해하기만 하면 된다. 

하지만 느꼈겠듯이 '홍 길동'을 카테고리화 하는 방법은 저것만 있는 것이 아니다.

'홍 길동'은 위와 같이 카테고리화(정의) 할 수도 있고, 다음과 같이 카테고리화 할 수도 있다.

학생 -> xx 고등학교 -> 2학년 3반 -> 13번 -> 홍 길동 ....(2)

그래서 지금 현재 이야기할 KBS는 ODP-based KBS 인데 앞에 'ODP-based' 라는 표현은 단순히 ODP(Open Directory Project)라는 
오픈 소스 플랫폼에서 전 세계 사람들이 참여하여 지정한 taxonomy (카테고리 목록) 을 기반으로 특정 단어의 카테고리 sequence 를
정하고, 따로 개발하거나 사용하는 알고리즘을 써서 여러가지 카테고리 

For clarity, let's enumerate the steps coordinated by the KBS mechanism (in this case, ODP-based KBS)

KBS는 어디에서 정의해놓은, 지정해놓은 taxonomy pool 에서 가지고 와서 (1) 와 (2) 처럼 여러 카테고리 sequence 중에서
score 가 높은 것 (i.e. 기준에 따라 달라지겠지만, 어쨌든 사람들이 원하는 기준-e.g. 연상될 확률이 높은 것) 을 결과로 return 해줄 것이다.
scoring 을 해서 제공


한 가지 예를 더 들어보자.

e.g.
apple 을 query 로 KBS 에 날렸다.

apple 의 경우, 
여러가지 sequence of category가 존재할 것이다
"food/fruit/apple" ...(1)
"company/IT/software/apple"...(2)
"company/IT/hardware/apple"...(3) 

여기서 알고리즘이 한 번 돌고나면 예를 들어, (1) 은 score = 0.37, (2) 는 score =0.65, (3) 은 score=0.47 이라는 값을 반환한다고 가정하자.
그러면 (2) 가 score=0.65 로서 제일 높기 때문에 "company/IT/software/apple" 을 return할 것이다.


* side-info:
DBPedia - crowd-sourced community
Syntactic matching vs. Semantic matching 

How do you make Taxonomy?
1) ODP-based Taxonomy (ODP = open directory project)

Taxonomy를 Tree 형태로. 물론, 엄밀히 말하면 taxonomy와 tree는 다르다. 왜냐면 taxonomy는 중간 node도 
미리 Taxonomy 만들어놓고 Pool of Ads 에서 matching 되는 광고를 assign





WRITTEN BY
서상호

,