마법소녀 모질라 파이어폭스

약간 정신이 나가서 http://uncyclopedia.org/wiki/Mozilla_Firefox 를 번역했습니다. (영어가 되시는 분은 원작을 읽어보시기 바랍니다.) Uncyclopedia는 위키피디아를 패러디하는 프로젝트입니다.

소개

모질라 파이어폭스는 21세기의 유명한 마법소녀이다. 사실 그녀는 미국인이지만 많은 유럽인들이 그녀를 일본의 세일러 문에 대한 서구의 대답이라고 생각한다.

마법소녀 모질라 파이어폭스

파이어폭스의 임무는 인류가 수백년 전 브라우저 전쟁 중에 잃어버린 고대 유물을 되찾는 것이다. 이 고대 유물은 "인터웹"[1]이라고 불리는데, 행성 지구의 표면과 대기권에 걸려 있는 거대한 거미줄이다. 사악한 적의 무리, "인터웹 익스플로더"[2]는 거대한 괴물로서 인터웹을 폭파하고 거기에 컴퓨터를 연결하는 사람들을 좀비로 만들기 위해 호시탐탐 기회를 노려왔다.

[1] 인터웹(Interweb). 인터넷이 아닙니다.
[2] 인터웹 익스플로더(Interweb Exploder)는 "폭파"를 뜻하는 영어 단어 explode에서 유래했습니다.

모든 수퍼영웅들이 그렇듯이 파이어폭스에게도 동료가 있다. 그녀의 여동생인 모질라 썬더버드이다. 썬더버드는 파이어폭스의 쿨함과 인기를 부러워하고, 파이어폭스는 하늘을 날아다닐 수 있는 썬더버드를 부러워하기 때문에 항상 사이가 좋지많은 않지만, 그래도 의좋은 자매이다. 썬더버드는 언니의 팬 레터 에이전트로 일하고 있다. 언니에게 도와달라고 하는 편지를 접수하고, 언니가 빠돌이들에게 쓴 답장을 근처의 우체국으로 배달하는 일이다. 하지만 파이어폭스는 세상을 구하느라 너무 바빠서 빠돌이들에게 답장 쓸 시간이 별로 없다.

역사

모질라 미노타우르의 누나인 모질라 피닉스는 평범한 여고생이었지만 충격적인 사건의 그녀의 삶을 바꾸어놓게 된다. 그녀의 아버지인 넷스케이프 씨가 AOL, Inc.[3]에서 해고당하고, 어머니인 모질라 수트는 그 충격에 심장마비로 죽어버린다. (최근 에피소드에서 그녀는 선원으로 돌아온다.)

[3] Inc.는 Interweb Nuking Company의 약자로 알려져 있다.

복수를 결심한 피닉스와 미노타우르는 깊은 산 속에 숨어있다는 게코의 사원을 찾아간다. 게코의 사원의 신성한 마법은 남동생 미노타우르를 날개달린 소녀로 변신시킨다. 피닉스도 날개가 생기고 파이어버드라는 이름을 받았지만, 좀 더 쿨한 걸 원한 파이어버드는 또다시 사원을 찾아가 인간과 여우의 하이브리드가 되어 동생보다 더 섹시해진다.

이제 파이어폭스와 썬더버드라는 이름을 갖게 된 자매는 고아들을 위한 기금을 모으던 모질라 재단을 접수하고, 하이테크 장비를 만든다는 모질라 코퍼레이션를 설립한다. 또한 두 자매는 인터웹을 파괴하려는 악의 세력으로부터 인터웹을 수호하기로 맹세한다.

모질라 코퍼레이션

이 회사는 인터웹 응용프로그램을 만든다고는 하지만, 실제로 어떻게 돈을 버는지는 자매만이 알고 있다. (이후 에피소드에서 이 회사가 사용자들의 영혼을 구글플렉스라는 이름의 어두운 단체에 팔았다는 사실이 밝혀진다는 루머가 무성하다.)

무기

모질라 파이어폭스는 네 가지 스킬을 가지고 있는데, 보통 수퍼영웅들에게는 별로 필요가 없는 스킬들 뿐이다.

* 감추고 있지 않을 때는 꼬리로 무엇이는 태울 수 있다고 한다.
* 외계인이 지구를 공격하면 파이어폭스는 지구보다 두 배는 큰 크기로 변신해서, 지구 전체를 그 꼬리로 품어 죽음의 별[4]로부터 지구를 보호할 수 있다. 안타깝게도 중간 크기로는 변신이 안 되고, 숨을 쉬어야 하기 때문에 변신한 상태로 오래 머물수가 없다.
* 스킨을 바꿀 수 있고, 모질라의 창고에서 어떤 옷이는 소환하여 순식간에 갈아 입을 수 있다.
* "스프레드 파이어폭스" 스킬.

[4] 스타워즈 에피소드 4를 보세요.

파이어폭스는 찾아가는 곳마다 다트를 남기고 다니는데, 다트에는 다음과 같은 글이 적혀 있다. Mozilla/5.0 (X11; Linux) Gecko/20060326 Firefox/1.5.0.3[5].

[5] 원문에는 윈도우/리눅스 개싸움이 싫다고 괄호 안이 검열로 잘려 있지만 여기는 KLDP니 상관 없죠?

이것들을 제외하면 파이어폭스의 전투능력은 그 나이 또래의 보통 여자아이와 별반 다를것이 없다. 그러나 그녀는 확장기능이라 불리는 다양한 장비들을 사용할 수 있다.

확장기능

파이어폭스의 전투는 확장기능이라 불리는 모질라 코퍼레이션이 개발한 하이테크 장비들을 통해 이루어진다. 이들 장비는 파이어폭스의 빠돌이들에 의해 개발되는 것이 보통이며, 이들이 장비의 설계도를 모질라 코퍼레이션으로 보내면 회사는 장비를 제작한 뒤 설계자를 기억소거한다.

파이어폭스는 대개 확장기능들을 들고 다니지 않는다. 그녀는 보통의 여우소녀로 나타나서는 SSL로 보호된 모질라의 창고에서 필요에 따라 확장기능들을 소환한다. 확장기능을 사용해야 할 때가 되면 파이어폭스는 예를 들어 "고 고 애드블록!"이라고 외치는데, 그러면 해당 확장기능이 그녀의 손으로 순간이동된다.


너무 길어지는 것 같으니 다음에 이어서 하죠.

[log4j]어떻게 동작을 하나?

http://logging.apache.org/log4j/docs/

업계 표준(?)인 log4j가 여기서는 생소한 듯 해서 소개 겸, DB 접속/해제하면 로그가 남는 간단한 유틸리티 클래스를 올려봅니다.
어떻게 동작이 되는지를 보이기 위해, 외부에서 프로퍼티를 쓰는 대신에 코드상에서 조절을 할 수 있도록 만들어 보았습니다. (이렇게 쓰는 것이 후일 확장을 필요하면 용이하기 하기도 하고요.)

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

/**
 * 
 */

public class DBUtil {

	private static Object lock = new Object();
	private String whatToDo = "";
	private Connection conn = null;
	protected Logger log = null;
	protected PatternLayout pLayout = null;

	public DBUtil(String driver, String url, String usr, String pwd, String task) {
		whatToDo = task;
		try {
			log = Logger.getLogger(whatToDo);
			synchronized (lock) {
				if (log.getAppender(whatToDo) == null) {
					System.out.println("Creating logger for " + whatToDo);
					File f = new File(System.getProperty("ROOT"), "log");
					f.mkdirs();
					f = new File(f, whatToDo + ".log");
					pLayout = new PatternLayout();
					pLayout.setConversionPattern("%d [%t] (%F:%L) - %c - %m%n");
					DailyRollingFileAppender appender = new DailyRollingFileAppender(
							pLayout, f.getAbsolutePath(), "'.'yyyy-MM-dd");
					appender.setName(whatToDo);
					log.addAppender(appender);
					log.setLevel(Level.ALL);
					info(whatToDo + " task started.");
				}
			}
		} catch (Exception e) {
			System.out.println(e);
		}

		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			log.error("Could not find " + driver);
		}
		
		try {
			conn = DriverManager.getConnection(url, usr, pwd);
		} catch (SQLException e) {
			log.fatal("Could not connect " + url);
		}
		log.debug(url + " connected");

	}

	public void close() throws SQLException {
		if (null != conn) {
			conn.close();
			conn = null;
			info(whatToDo + " task finished.");
		}
	}

	protected void debug(String msg) {
		if (log != null) {
			log.debug(msg);
		} else {
			System.out.println(msg);
		}
	}

	protected void info(String msg) {
		if (log != null) {
			log.info(msg);
		} else {
			System.out.println(msg);
		}
	}

	protected void warn(String msg) {
		if (log != null) {
			log.warn(msg);
		} else {
			System.out.println(msg);
		}
	}

	protected void error(String msg) {
		if (log != null) {
			log.error(msg);
		} else {
			System.out.println(msg);
		}
	}

	protected void fatal(String msg) {
		if (log != null) {
			log.fatal(msg);
		} else {
			System.out.println(msg);
		}
	}

}

통신회사가 고객에 소송…사상 초유의 사태 벌어져

인용:
통신위원회가 '1.25 인터넷 대란에 대해 사업자들에 일부 책임이 있다'고 결정한데 불복, KT·온세·두루넷 등 초고속인터넷 업체들이 문제를 제기한 가입자들을 상대로 민사소송을 제기한 사상 초유의 사태가 벌어졌다.

이에 따라 녹색소비자연대를 통해 재정 신청에 나선 초고속인터넷 가입자들은 서비스 중단으로 고통받은데 이어, 통신회사들로부터 역소송을 당해 법정에 불려다니게 됐다.

11일 녹색소비자연대에 따르면 KT 등 통신회사들이 통신위원회의 재정 결정에 불복, 녹색소비자연대에 재정신청을 위임한 고객들을 상대로 지난해 12월 채무 부존재 확인을 위한 민사소송을 제기한 것으로 뒤늦게 밝혀졌다.

녹색소비자연대의 박찬 부장은 "최근 소장을 받은 사람들이 깜짝 놀라 연락해 왔다"며 "피소송인 숫자는 18명 정도"라고 말했다.

박찬 부장은 또 "현재까지 소송당한 가입자중 하나로통신 고객은 없는 것으로 알고 있으며, 피소송인들은 괜히 나서서 법정 공방에 휘말리게 됐다며 울분과 함께 황당해 하는 분위기"라고 말했다.

녹색소비자연대는 피소송인중 소송을 위임한 사람들을 대신, 법률사무소 청지(장현우 변호사)를 통해 법적 대응에 나설 예정이다.

1.25 인터넷대란에 대한 법적 책임 소재가 분명히 가려지지 않은 가운데 KT 등 관련 통신회사들이 고객을 상대로 소송을 제기하는 일까지 벌어져 향후 사태 전개가 주목된다.

KT 등 초고속인터넷사업자들이 소송에 나서게 된 것은 통신위의 결정을 받아들일 수 없다는 판단 때문으로 보인다. 1.25 인터넷대란에 대해 사업자 일부 책임 판정을 내린 통신위 결정에 승복할 경우 스스로 책임을 인정하는 셈이다. 이는 곧 참여연대와의 소송에서 불리하게 작용할 수 있다는 것.

참여연대는 일반이용자, PC 방, 인터파크, 오마이뉴스와 함께 통신회사, 정통부, MS를 상대로 총 1억9천680만원의 손해배상 소송을 제기, 법적 공방이 진행되고 있다.

통신위 재정결정 후 신청인과 피신청인은 모두 60일 이내에 민사소송을 제기할 수 있다. 따라서 이번 민사 소송은 법적으론 문제가 없다.

통신위원회의 관계자는 "재정제도는 법원에 가면 시간이 오래 걸리기 때문에 정식 재판 전 합의를 위해 도입된 제도"라며 "통신위 재정결정에 대해 신청인이나 피신청인은 불복할 경우 민사소송을 제기할 수 있다"고 설명했다.

KT는 "1.25 인터넷사고 같은 불가항력적인 사고에 대해 통신사업자 책임이 인정될 경우 사업수행상 무한대의 법적 리스크를 부담하는 결과를 초래하게 되기 때문에 불복소송을 제기하게 됐다"고 설명했다.

하지만 대형 통신업체들이 자사 고객을 상대로 역소송을 제기한 데 대해선 도덕적인 논란이 일고 있다.

1.25 인터넷대란은 법원 판례가 없어 'IT사고에 대한 사업자 책임 범위를 어디까지 인정할 것인가'에 관한 원칙을 세우는 시금석의 의미가 있다. 따라서 통신회사 입장에선 12.5 인터넷대란에 대한 법원의 판결이 매우 중대한 사안으로 여길만 하다.

그러나 그렇다고는 해도 자사 고객을 상대로 소송으로 맞대응하는 통신회사들의 처사에 대해 "해도 너무하지 않느냐"는 비난이 일고 있다.

정통부의 1.25 인터넷 대란 사고 원인 발표에 대해 보안 전문가들조차 갸우뚱 하고 있다. 이런 가운데 통신사에 책임이 있다는 문제를 제기했다는 이유만으로 소비자들은 법정에서 뒷감당을 해야 한다.

녹색소비자연대 박찬 부장은 "통신위 재정결정에 따르면 통신사들은 신청인 23명에 대해 1인당 150원~350원을 배상하게 돼 있는데, 통신사들이 불복해 소비자들은 몇백원 때문에 원치 않는 법적공방에 휘말리게 됐다"고 말했다.

그는 "몇몇 신청인들은 민사소송에 응하지 않으면 자동 패소돼 통신사 변호사 비용까지 부담해야 할 지도 모른다는 점에 곤혹스러워 하고 있다"며 "통신회사들에 문제를 제기했다고 해서 법정 분쟁에 휘말리면 누가 또 문제를 제기할 수 있겠느냐고 울분을 토하고 있다"고 전했다.

이 때문에 소비자가 직접 법정에 불려가지 않아도 될 만큼, IT사고에 대한 제대로 된 분쟁 해결시스템을 갖춰야 한다는 지적이 나오고 있다.

내로라할 통신회사들이 하늘 같은 고객을 상대로 민사소송까지 제기하게 된 것은 현행 법제도가 IT사고에 대한 입증 책임을 가리는데 미흡하다고 보기 때문이다.

정보통신망 이용촉진 및 정보보호 등에 관한 법률에 따르면 초고속인터넷업체들은 통신망 안정성 확보의 의무가 있고, 사고시 고의나 과실이 없음을 입증하지 않으면 책임을 면할 수 없다.

따라서 법적 공방이 시작되면, 통신사들은 법정에서 1.25 인터넷대란이 불가항력이었다는 사실을 입증해야 한다.

하지만 이것만으론 부족하다.

첨단 기술이 결합된 IT 상품은 소비자들이 사고 원인에 접근하기 쉽지 않다. 정보와 지식, 자본이 사업자보다 턱없이 부족한 상황에서 공방을 벌이는 건 더더욱 어렵다.

이런 상황에서 모든 걸 법원에서 해결하라는 것은 오히려 소비자의 권리를 축소시킬 수 있다.

따라서 통신위원회 재정신청 제도를 고치거나 소비자보호원에 별도 기구를 둬서 IT 사고시 보다 친소비자적으로 분쟁을 해결할 수 있는 시스템을 만들어야 할 것으로 지적되고 있다.

KT 등 통신회사들은 '1.25 인터넷대란' 이후 이용약관을 개정했다.

종전에는 이용자에게 이용요금 납부나 공공의 안녕질서, 미풍양속을 지켜야 한다는 의무만 있었지만, 여기에 컴퓨터 바이러스와 해킹에 대한 의무를 추가한 것.

이용자가 컴퓨터 바이러스 프로그램을 유포하는 경우 통신사가 이용을 제한할 수 있고, 이용자 스스로도 보호조치를 해야 한다고 규정하고 있다.

무차별 PC를 경유지로 삼아 바이러스가 유포되는 게 최근 추세다.

이런 점에서 (이번 약관 개정은) 국가통신망을 지키기 위해 이용자들에게 보안 의식으로 무장해야 한다는 점을 강조한 했다는 점에서 긍정적이다.

하지만 IT사고, 특히 해킹 바이러스 사고는 사용자 자신이 침해받았는지 혹은 침해했는지 알기가 쉽지 않다.

따라서 이를 이용자 의무로 약관에 규정한 것은 뭔가 불순한 의도가 있지 않느냐는 의혹도 있다.

물론 이 조항만으로 통신회사가 법정에서 사업자 면책을 증명받는 건 아니다. 하지만 통신회사와 이용자간 법정 공방이 벌어졌을 때 사업자에게 유리하게 작용할 수 있다.

녹색소비자연대 박찬 부장은 "1.25인터넷 대란 후 통신 회사들은 소비자 피해 보상과 관련된 회사의 의무는 가만히 둔 채 이용자의 의무만 강조하는 쪽으로 약관을 바꿨다"며 "초고속인터넷 업체의 이용약관은 정통부 신고 사항일뿐 이 약관이 소비자 권리를 어떻게 침해하는 지에 대한 정부의 관심과 감독은 없다고 봐야 한다"고 말했다.

또 "IT 이용약관의 공정성 여부에 대해 공정위에 문제를 제기하려고 해도 현재로선 쉽지 않다"고 토로했다.

/김현아기자 chaos@inews24.com

검색엔진 : Vector space Model

이 문서는 수정될 수 있습니다. 최신문서는 Joinc Wiki에서 확인하세요.

term vector model이라고도 불리우는 Vector space model은 정보필터링, 문서내에서의 정보검색, 색인과 유사도를 계산하기 위한 수학모델로, 다차원 선형공간에서의 Vector 정보를 이용해서 자연어를 포함한 문서의 중요도를 분석하기 위한 방법을 제시한다. 이 모델은 SMART Information Retrieval System에서 가장 먼저 언급되었다.

문서는 색인
어의 vector로 나타낼 수 있을 것이고, 문서의 유사도는 Vector에 위치하 단어들간의 거리로 계산해낼 수 있을 것이다
라는게 이 모델의 대전제다. vector에 위치한 단어들의 유사도는 다음과 같은 간단한 삼각공식으로 나타낼 수 있다.

vector_space_model1.png

TF - IDF 모델

Vector Space Model을 사용하기 위해서는 문서의 Vector 공간에 있는 Term의 가중치(weights)를 계산하고 있어야 한다. 이를 위해서 term frequency - inverse document frequency 모델이 사용되고 있다.

  • TF : 문서 Vector에 존재하는 Term의 갯수
  • IDF : Term을 Vector에 포함하고 있는 모든 문서들
  • Weight = TF * IDF

문서 d가 있다면, Vector d는

vector_space_model2.png

에서

vector_space_model7.png

IDF에서 |D|는 문서의 총갯수이고 vector_space_model5.png 는 Term을 포함한 문서의 갯수다.

예를 들자면 리눅스(:12)라는 쿼리어가 주어졌을 때 유사한 문서는 리눅스를 많이 포함한 문서일 거라고 예상할 수 있다. 이것이 TF다.

일반적인 단어는 여러문서에 걸쳐서 나올 것이고, 이러한 단어를 포함한 문서는 낮은 유사성을 가지게 될것이다. 이것이 IDF다. 예를 들어서 리눅스 유저로 문서를 찾는다고 하면, 리눅스는 전문용어이므로 더 적은 문서에서 발견 될것이고, 리눅스를 포함한 문서는 더 높은 유사도를 부여할 수 있을 것이다.

예제 : 문서의 유사도

이렇게 각 문서에 대해서 Term Vector를 만들었다고 가정을 해보자.

이제 주어진 Term에 대해서 두 문서간의 거리를 구할 수 있게된다. 이 거리가 가까우면 더 유사한문서라고 할 수 있다.

이렇게 Vector화 하는 이유는 눈으로 읽은 문서가 "야구기사"에 관련된 문서인지 "연예기사"에 관련된 문서인지 분리해낼 수 있는 인간과는 달리 컴퓨터는 이를 구분할 수 없기 때문이다.

여기 A, B, C 세개의 문서가 있다고 가정해 보자. 그리고 백터에 위치하는 원소의 값을 다음과 같이 정의 하자.

  1. 번째 원소는 "상상플러스"라는 단어의 빈도수
  2. 번째 원소는 "김제동"
  3. 번째 원소는 "무한도전" 이다.


(A,B)는 상상플러스에 관한 문서이고, (C)는 야구에 관한 문서다. A에서 첫번째 원소인 "상상플러스"의 발생빈도는
10, "김제동"의 발생 빈도수는 5이다. B는 8,9이고, C는 0이라고 하면 다음과 같이 각 문서의 유사도를 계산해낼 수
있다.

  1. d(A,B) = 2^2 + 4^2 = 20
  2. d(A,C) = 10^2 + 5^2 = 125
  3. d(B,C) = 8^2 + 9^2 = 145

비슷한 주제의 문서들끼리 대체로 가까운 거리를 가지고, 다른 주제를 가지는 문서들이 거리가 멀이지는 것을 확인할 수 있을 것이다.

예제 : Term에 대한 문서의 유사도

"리눅스 개발자" 라는 단어를 포함한 문서들이 있다고 가정해 보자. 색인파일이 만들어져 있다면, 이들 문서를 포함한 문서를 찾는
것은 그리 어렵지 않을 것이다. 문제는 "리눅스 개발자"와 더욱더 많은 관련성을 가진 문서를 어떻게 가려내느냐에 있다.

일반적으로 생각해서 문서 d 의 term vector가 만들어져 있다면, 각 term사이의 거리를 구한다음에 모두 더해주면 될 것이다.

  1. 리눅스는 매우 좋은 운영체제이다. 어쩌고 저쩌고.. 한참후에 개발자입장에서 한번 써볼한 하다.
  2. 리눅스는 개발자에게 매우 좋은 운영체제이다. 왜냐하면 어쩌고 저쩌고

컴퓨터는 간단한 거리계산을 이용해서 2번 문서가 주어진 Term에 더 유사한 문서라는 걸 찾아낼 수 있다.

장점

  1. 동음이의어와 다의어 처리가 가능하다.
  2. 결과의 정확도 - relevance scoring - 를 구할 수 있다.
  3. 결과 피드백이 용이하다.

단점

Vector Space Model은 다음과 같은 단점을 가진다.

  1. Term의 갯수가 많아질수록 해당 문서는 더 낮은 similarity 값을 가지게 된다. 이는 큰 문서일 저 평가될 수 있음을 의미한다.
  2. 찾고자 하는 키워드가 정확히 매치되어야 한다. - 이 문제는 좋은 형태소 분석기를 가짐으로써 어느정도 해결할 수 있다. -
  3. 워낙에 광범위한 주제를 다루는 문서가 많고 문서에 포함된 Term의 양도 많기 때문에, 비슷한 주제를 다루는 문서라고 하더라도 전혀다른 Term으로 구성되는 경우가 발생한다.
  4. 느리다.

3번의 경우가 특히 문제가 될 수 있는데, 예를 들어서 설명해보도록 하겠다.

최홍만은 k-1에서 활약하는 격투선수이면서 특유의 쇼맨쉽으로 이런 저런 프로에 게스트 혹은 고정출현을 하고 있다. 그러므로 연예계 문서중 몇개에서는 '최홍만이 어느정도의 빈도수를 가지게 될 것이다. k-1 으로 눈을 돌려서 생각해보면, 최홍만이 출전한 경기와 관련된 문서의 경우 빈도수가 높지만, 그렇지 않은 경기와 관련된 문서인 경우 낮은 빈도수를 가지게 될 것이다.

이것을 가정해서 최홍만의 빈도수를 y축으로 k-1의 빈도수를 x축으로하고 연예방송과 k-1 두종류의 문서를 그래프로 그려보면 아래와 같이 각각의 주제가y축으로 길게 늘어선 형태를 가지게 된다.

o = 연예계 문서 (k-1에 대한 단어가 전혀 나타나지 않음)
x = k-1 관련 문서들
최홍만
|o x
|o x
|o x
|o x
|o x
|o x
+--------------> (K-1)

여기에서 다음의 결론을 얻을 수 있다.

  1. 같은 주제라고 하더라도 y축의 이쪽끝과 저쪽끝의 문서는 거리가 멀어진다.
  2. 다른 주제라고 하더라도 y축상에 있는 문서끼리는 거리가 가깝다.
  3. 결론 : 검색이 제대로 안된다 주제간의 차이를 반영하지 못하기 때문이다.

Markov random walk

두 주제의 성격이 비슷한 경우를 생각해보자. 예를 들자면 리눅스관련 문서와 윈도우즈관련 문서쯤이 되겠다. 다음과 같은 그래프가 만들어진 경우를 생각해 보자.

(단어 2)
^
| o o o
| o o o
| o * x o x
| o x x x
| x x x
|
|
-------------------------------------> (단어 1)

o = 주제 1에 속하는 문서들
x = 주제 2에 속하는 문서들
* = 쿼리

사용자가 *와 같은 쿼리를 줬을때, 올바른 결과는 주제 1에 속한문서들 중 쿼리와 가까이에 있는 문서가 상위에 올라오는 경우다.
그런데 그림을 보면 알겠지만 주제 2에 속하는 문서들중 몇개가 주제 1의 문서들보다 쿼리에 더 가까이 있기 때문에, 이들이
상위에 올라오는 문제가 발생한다. 이 경우 주제 2에 속하는 문서를 어떻게 제거할 것인가가 중요한 이슈가 될 것이다.

문제의 해결을 위해서 쿼리 근처 영역만을 잘라놓고 보도록 하자.

|                o <-A
| D-> o
| C-> o * x <-B
| o
|

직선거리상으로만 보자면 A와 쿼리의 직선 거리가 B와 쿼리의 직선거리보다 멀다. 그렇지만 쿼리와 C, 쿼리와 D, C와 D,
D와 A 각각의 거리는 B의 거리보다 가깝다. 명확하지는 않지만 문제가 풀릴 수도 있다는 생각이 들 것이다. 각각의 포인트로 이동하게 될확률을 곱하는 것이다.

여기에서 확률은 거리에 따라 달라진다. 거리가 가까우면 움직일 확률이 높아지고, 멀면 그만큼 확률이 낮아진다. 이러한 문제를 처리하기 위해서 나온 아이디어가 Markov random walk로, 쿼리의 위치에서 시작을 해서 A 혹은 B로 도착할 때까지 매 턴마다 랜덤하게 임의의 포인트로 이동을 하는 방식이다.

예를들어 query에서 A로 갈수 있는 유망한 경로와 이에 따른 확률값은 다음과 같을 것이다.

  • 쿼리 -> C -> D -> A : 확률값은 P(쿼리->C) * P(C->D) * P(D->A)
  • 쿼리 -> D -> A : 확률값은 P(쿼리->D) * P(D->A)
  • 기타 : 쿼리 -> C -> 쿼리 -> D -> A 등등등

해서 쿼리에서 A까지 도달할 확률은 위의 path들의 확률을 모두 더한게 될 것이다.

반면 쿼리에서 시작해서 B로 갈 수 있는 유망한 경로는 쿼리->B 하나 뿐이다. 쿼리에서 A 혹은 B로 이동하는 확률값은 각 포인트로 이동할 수 있는 확률의 이다. 이는 특정포인트로의 확률이 낮은게 있다면, 전체확률을 크게 낮추게 된다. 위의 그래프에서 C, D, A에서 B로의 거리는 너무 멀기 때문에 확률자체가 낮아지게 되고, 결국 다른 경로를 통한 확률은 쿼리->B보다 낮아질 수 밖에 없게 된다.

즉 두 문서간의 유사성을 판단할때 문서간의 직선거리를 생각하는 대신에 문서에 도착할 확률로 보는 것이다.

Markov Random walk 와 PageRank

PageRank는 문서의 중요도를 위해서 제시한 구글의 알고리즘이다. 예를 들자면 A, B, C, D 4개의 웹문서가 있고, 이중 B와 D가 A를 link 하고 있을 때, A의 Page Rank는

Q(A) = Q(B)/N(B) + Q(D)/N(D)

가 된다. N은 해당 페이지가 가지고 있는 link의 갯수를 의미한다. 이 계산을 모든 웹페이지에 대해서 반복해서 수행하면 된다.

여기에서 Markov Random walk 와 Page Rank와의 관계를 알아보자. 일단 Page Rank는 웹페이지 혹은
링크와 같은 것들을 따로 Vector화 하지 않는다. 그러므로 Markov Random walk를 사용할 수가 없다. 그렇다면,
여러개의 링크중 어떤 링크로 이동할 확률이 가장 큰가를 어떻게 계산할 수 있을까 ?

구글은 random click이라는 아이디어를 생각해 냈다. 예를 들어 A라는 웹페이에 N개의 링크가 있다고 가정 했을 때, random click란 그 중 하나를 무작위로 click할 확률을 의미한다. 이 확률의 계산은 무지 단순하다 1/N 하면 된다. 즉 위의 공식은 아래와 같이 좀더 자세하게 나타낼 수 있을 것이다.

Q(A) = Q(B)*(1/N(B)) + Q(C)*0 + Q(D)*(1/N(D) 

p2.jpg