SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
대규모 서비스를 지탱하는 기술
Ch.7 알고리즘 실용화
chois79
13년 6월 25일 화요일
Ch.7 에서 다루는 내용
1. 대규모 데이터를 앞둔 알고리즘 선택의 중요성
2. 알고리즘을 제품에 적용하기까지 어떤 과정이
필요한가?
13년 6월 25일 화요일
대상이 되는 데이터가 크면 클수록
알고리즘이나 데이터 구조 선택이 속도에
영향을 미친다
13년 6월 25일 화요일
그럼 알고리즘이 무엇인가?
어떤 값 또는 값의 집합을 입력으로하고
어떤 값 또는 값의 집합을 출력으로 하는
명확하게 정의된 계산 절차
-Introduction to Algorithms
13년 6월 25일 화요일
알고리즘은 왜 배워야 하는가?
1. 컴퓨터 자원은 유한하다
2. 엔지니어의 ‘공통 언어’
3. 알고리즘을 알아둠으로써 새로운
문제에도 대처할 수 있다
13년 6월 25일 화요일
알고리즘의 평가 방법
Order표기법
어떤 함수의 증가 양상을 다른 함수와의
비교로 표현하는 방법
13년 6월 25일 화요일
자주 사용되는 Order 표기
O(1) < O(log n) < O(n log n) < O (n2) < O (n3) ...O(nk) < O(2n)
대규모 데이터를 대상으로 한 경우
n이 클 경우 실용성을 띄는 것은
O(n log n)까지
13년 6월 25일 화요일
데이터 구조
알고리즘과 뗄레야 뗄 수 없는 관계
상수항
알고리즘을 구현하는 중에 입력의 크기에
의존하지 않지만 실행하지 않으면 안되는 처리
함수 호출, if문.. 등.
구현을 포함해서 생각할때는 상수항에 대한
고려도 필요
그밖에 고려사항
13년 6월 25일 화요일
알고리즘의 실제 활용
13년 6월 25일 화요일
하테나 다이어리의
키워드 링크
13년 6월 25일 화요일
키워드 링크란?
글을 작성하면 일부 키워드에 링크가 자동으로
걸려 클릭시 이 키워드를
설명하는 페이지로 이동하는 서비스
13년 6월 25일 화요일
최초 구현 방법
정규 표현으로 구현하는 단순한 방법을 채택
모든 단어를 OR 조건으로 잇는 정규 표현을 사용
(foo|bar|baz ...)
$text =~ s/(foo|bar|baz)/&replace_keyword($1)/ge;
13년 6월 25일 화요일
문제 발생
키워드 갯수가 많이 늘어남!!
13년 6월 25일 화요일
특히 시간이 많이 걸리는 부분
1. 정규 표현을 컴파일 하는 처리
- 미리 정규 표현식을 만들어 저장해 둠으로써 해결
2. 정규표현에서 패턴 매칭하는 처리
- 키워드 링크가 완료된 본문을 캐싱처리
> 근본적인 해결책에 이르지 못함
13년 6월 25일 화요일
패턴매칭에 의한 키워드 링크의 문제점
정규표현식 알고리즘
패턴 매칭에 오토마톤을 사용
패턴 매칭에 실패하면 다음 단어를 시도
(foo|bar|baz ... )
13년 6월 25일 화요일
정규표현을 Trie 방법으로
탐색대상 데이터의 공통 접두사를 모아 놓은 트리 구조
엣지를 순회하면서 종단이 발견될 경우 단어가 포함된 것으로 간주
키워드의 양에 상관 없이 대상의 단어 길이 만큼만 계산
13년 6월 25일 화요일
Trie를 더 빠르게 AC법 도입
패턴 매칭으로 진행되다가 도중에 실패했을 경우,
되돌아 오는 길의 엣지를 다시 Trie에 추가한 데이터 구조를 사용
되돌아 오는 길의 추가는 Trie의 루트부터
너비 우선 탐색으로 구성 가능
13년 6월 25일 화요일
CPAN 라이브러리의 Regexp::List로 치환
Trie에 의해 최적화한 방법을 지원하며,
정규 표현식 사용이 가능
13년 6월 25일 화요일
직접 구현한 AC법
VS. RegexpList
AC법을 직접 구현하여 도입함으로 계산량이 줄어들었지만
정규 표현식의 각종 옵션을 쓰지 못하게 되어 유연성이 결여됨
Regex::List를 채택함으로써 계산량 및 유연성을 모두 확보
13년 6월 25일 화요일
키워드 링크 결론
정규 표현 => AC법 => Regexp:List
처음부터 최적의 구현을 사용하는 것이 옳다고 할 수 없음.
데이터가 작은 동안에는 오히려 단순한 것이 결과도 좋음.
하지만, 대규모가 될 시기를 대비해서 본질적인 문제의
해결방법을 염두에 두는 것이 필요
13년 6월 25일 화요일
하테나 북마크의
기사 분류
13년 6월 25일 화요일
기사 분류란?
새로 도착한 기사를 내용 기반으로 자동으로 분류하여
사용자에게 카테고리로 분류해서 보여주는 기능
하테나 기사 분류는 베이지안 필터라는 원리를 사용
13년 6월 25일 화요일
베이지안 필터의 원리
‘나이브 베이즈의 정리’를 기반으로 하는 알고리즘
P(C|D) 를 구하는 문제
D가 주어졌을때 C가 발생할 확률
즉, D 문서가 주어졌을때 C 카테고리일 확률을 계산
13년 6월 25일 화요일
베이즈 정리
P(A|B) 를 계산 가능한 식으로 변경
P(A|B) * P(B) = P(A^B)
P(A^B) = P(A) * P(B|A)
즉, P(A|B) = P(B|A) * P(A) / P(B)
13년 6월 25일 화요일
베이즈 정리를 적용
원하는 것은 확률 값이 아니라 카테고리 분류 즉, 모든 카테고
리에 대한 확률의 우선 순위
P(C|D) = P(D|C) * P(C) / P(D)
모든 카테고리에 대해 P(D)는 같으므로 생략
P(C), P(D|C)가 중요
13년 6월 25일 화요일
P(D|C), P(C) 구하기
P(C)
특정 카테고리가 출현할 확률
학습 데이터를 통해 C가 나타날 확률을 구함
P(D|C)
문서는 단어의 집합
즉, P(D|C) => P(W1|C) * P(W2|C) .. P(Wn|C)
학습 데이터에서 단어마다 어느 카테고리로 분류되었는지
횟수를 보존한 후 P(D|C)의 근사값을 구함
13년 6월 25일 화요일
알고리즘이 실용화되기까지
베이지안 필터는 구조상으로 심플
주요 부분은 스크립트 언어로 100 ~ 200 정도
But, 적용까지는...
13년 6월 25일 화요일
1. C++ 로 개발한 분류 엔진을 서버화
2. 서버와 통신해서 결과를 얻는 Perl 클라이언트 작성,
웹 애플리케이션에서호출
3. 학습 데이터를 정기적으로 백업할 수 있는 기능 추가
4. 학습 데이터 1,000 건을 수작업으로 준비
5. 바람직한 정밀도가 나오는지 추적하기 위한 통계 구조 작성
정밀도 튜닝
6. 다중화를 고려해서 스탠바이 시스템 구성
7. 웹 애플리케이션 사용자 인터페이스 마련
실무 면에서는 고려해야 할 점은 꽤 많다
실제 베이지안 필터 적용 과정
13년 6월 25일 화요일

Mais conteúdo relacionado

Destaque

프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1HyeonSeok Choi
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatHyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2HyeonSeok Choi
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5HyeonSeok Choi
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6HyeonSeok Choi
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HyeonSeok Choi
 

Destaque (20)

프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Code1_2
Code1_2Code1_2
Code1_2
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
HTTPS
HTTPSHTTPS
HTTPS
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장
 

Semelhante a 대규모서비스를지탱하는기술 7

Machine learning bysogood
Machine learning bysogoodMachine learning bysogood
Machine learning bysogoodS.Good Kim
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical MethodologyKyeongUkJang
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsKyeongUkJang
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층용호 최
 
C++ 태스크 기반 병렬 프로그래밍
C++ 태스크 기반 병렬 프로그래밍C++ 태스크 기반 병렬 프로그래밍
C++ 태스크 기반 병렬 프로그래밍RayKim51
 
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석Kwang Woo NAM
 

Semelhante a 대규모서비스를지탱하는기술 7 (7)

Machine learning bysogood
Machine learning bysogoodMachine learning bysogood
Machine learning bysogood
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep models
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층
 
C++ 태스크 기반 병렬 프로그래밍
C++ 태스크 기반 병렬 프로그래밍C++ 태스크 기반 병렬 프로그래밍
C++ 태스크 기반 병렬 프로그래밍
 
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
 

Mais de HyeonSeok Choi

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2HyeonSeok Choi
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04HyeonSeok Choi
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1HyeonSeok Choi
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HyeonSeok Choi
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HyeonSeok Choi
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HyeonSeok Choi
 

Mais de HyeonSeok Choi (20)

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Bounded Context
Bounded ContextBounded Context
Bounded Context
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Pair RDD - Spark
Pair RDD - SparkPair RDD - Spark
Pair RDD - Spark
 

대규모서비스를지탱하는기술 7

  • 1. 대규모 서비스를 지탱하는 기술 Ch.7 알고리즘 실용화 chois79 13년 6월 25일 화요일
  • 2. Ch.7 에서 다루는 내용 1. 대규모 데이터를 앞둔 알고리즘 선택의 중요성 2. 알고리즘을 제품에 적용하기까지 어떤 과정이 필요한가? 13년 6월 25일 화요일
  • 3. 대상이 되는 데이터가 크면 클수록 알고리즘이나 데이터 구조 선택이 속도에 영향을 미친다 13년 6월 25일 화요일
  • 4. 그럼 알고리즘이 무엇인가? 어떤 값 또는 값의 집합을 입력으로하고 어떤 값 또는 값의 집합을 출력으로 하는 명확하게 정의된 계산 절차 -Introduction to Algorithms 13년 6월 25일 화요일
  • 5. 알고리즘은 왜 배워야 하는가? 1. 컴퓨터 자원은 유한하다 2. 엔지니어의 ‘공통 언어’ 3. 알고리즘을 알아둠으로써 새로운 문제에도 대처할 수 있다 13년 6월 25일 화요일
  • 6. 알고리즘의 평가 방법 Order표기법 어떤 함수의 증가 양상을 다른 함수와의 비교로 표현하는 방법 13년 6월 25일 화요일
  • 7. 자주 사용되는 Order 표기 O(1) < O(log n) < O(n log n) < O (n2) < O (n3) ...O(nk) < O(2n) 대규모 데이터를 대상으로 한 경우 n이 클 경우 실용성을 띄는 것은 O(n log n)까지 13년 6월 25일 화요일
  • 8. 데이터 구조 알고리즘과 뗄레야 뗄 수 없는 관계 상수항 알고리즘을 구현하는 중에 입력의 크기에 의존하지 않지만 실행하지 않으면 안되는 처리 함수 호출, if문.. 등. 구현을 포함해서 생각할때는 상수항에 대한 고려도 필요 그밖에 고려사항 13년 6월 25일 화요일
  • 9. 알고리즘의 실제 활용 13년 6월 25일 화요일
  • 11. 키워드 링크란? 글을 작성하면 일부 키워드에 링크가 자동으로 걸려 클릭시 이 키워드를 설명하는 페이지로 이동하는 서비스 13년 6월 25일 화요일
  • 12. 최초 구현 방법 정규 표현으로 구현하는 단순한 방법을 채택 모든 단어를 OR 조건으로 잇는 정규 표현을 사용 (foo|bar|baz ...) $text =~ s/(foo|bar|baz)/&replace_keyword($1)/ge; 13년 6월 25일 화요일
  • 13. 문제 발생 키워드 갯수가 많이 늘어남!! 13년 6월 25일 화요일
  • 14. 특히 시간이 많이 걸리는 부분 1. 정규 표현을 컴파일 하는 처리 - 미리 정규 표현식을 만들어 저장해 둠으로써 해결 2. 정규표현에서 패턴 매칭하는 처리 - 키워드 링크가 완료된 본문을 캐싱처리 > 근본적인 해결책에 이르지 못함 13년 6월 25일 화요일
  • 15. 패턴매칭에 의한 키워드 링크의 문제점 정규표현식 알고리즘 패턴 매칭에 오토마톤을 사용 패턴 매칭에 실패하면 다음 단어를 시도 (foo|bar|baz ... ) 13년 6월 25일 화요일
  • 16. 정규표현을 Trie 방법으로 탐색대상 데이터의 공통 접두사를 모아 놓은 트리 구조 엣지를 순회하면서 종단이 발견될 경우 단어가 포함된 것으로 간주 키워드의 양에 상관 없이 대상의 단어 길이 만큼만 계산 13년 6월 25일 화요일
  • 17. Trie를 더 빠르게 AC법 도입 패턴 매칭으로 진행되다가 도중에 실패했을 경우, 되돌아 오는 길의 엣지를 다시 Trie에 추가한 데이터 구조를 사용 되돌아 오는 길의 추가는 Trie의 루트부터 너비 우선 탐색으로 구성 가능 13년 6월 25일 화요일
  • 18. CPAN 라이브러리의 Regexp::List로 치환 Trie에 의해 최적화한 방법을 지원하며, 정규 표현식 사용이 가능 13년 6월 25일 화요일
  • 19. 직접 구현한 AC법 VS. RegexpList AC법을 직접 구현하여 도입함으로 계산량이 줄어들었지만 정규 표현식의 각종 옵션을 쓰지 못하게 되어 유연성이 결여됨 Regex::List를 채택함으로써 계산량 및 유연성을 모두 확보 13년 6월 25일 화요일
  • 20. 키워드 링크 결론 정규 표현 => AC법 => Regexp:List 처음부터 최적의 구현을 사용하는 것이 옳다고 할 수 없음. 데이터가 작은 동안에는 오히려 단순한 것이 결과도 좋음. 하지만, 대규모가 될 시기를 대비해서 본질적인 문제의 해결방법을 염두에 두는 것이 필요 13년 6월 25일 화요일
  • 22. 기사 분류란? 새로 도착한 기사를 내용 기반으로 자동으로 분류하여 사용자에게 카테고리로 분류해서 보여주는 기능 하테나 기사 분류는 베이지안 필터라는 원리를 사용 13년 6월 25일 화요일
  • 23. 베이지안 필터의 원리 ‘나이브 베이즈의 정리’를 기반으로 하는 알고리즘 P(C|D) 를 구하는 문제 D가 주어졌을때 C가 발생할 확률 즉, D 문서가 주어졌을때 C 카테고리일 확률을 계산 13년 6월 25일 화요일
  • 24. 베이즈 정리 P(A|B) 를 계산 가능한 식으로 변경 P(A|B) * P(B) = P(A^B) P(A^B) = P(A) * P(B|A) 즉, P(A|B) = P(B|A) * P(A) / P(B) 13년 6월 25일 화요일
  • 25. 베이즈 정리를 적용 원하는 것은 확률 값이 아니라 카테고리 분류 즉, 모든 카테고 리에 대한 확률의 우선 순위 P(C|D) = P(D|C) * P(C) / P(D) 모든 카테고리에 대해 P(D)는 같으므로 생략 P(C), P(D|C)가 중요 13년 6월 25일 화요일
  • 26. P(D|C), P(C) 구하기 P(C) 특정 카테고리가 출현할 확률 학습 데이터를 통해 C가 나타날 확률을 구함 P(D|C) 문서는 단어의 집합 즉, P(D|C) => P(W1|C) * P(W2|C) .. P(Wn|C) 학습 데이터에서 단어마다 어느 카테고리로 분류되었는지 횟수를 보존한 후 P(D|C)의 근사값을 구함 13년 6월 25일 화요일
  • 27. 알고리즘이 실용화되기까지 베이지안 필터는 구조상으로 심플 주요 부분은 스크립트 언어로 100 ~ 200 정도 But, 적용까지는... 13년 6월 25일 화요일
  • 28. 1. C++ 로 개발한 분류 엔진을 서버화 2. 서버와 통신해서 결과를 얻는 Perl 클라이언트 작성, 웹 애플리케이션에서호출 3. 학습 데이터를 정기적으로 백업할 수 있는 기능 추가 4. 학습 데이터 1,000 건을 수작업으로 준비 5. 바람직한 정밀도가 나오는지 추적하기 위한 통계 구조 작성 정밀도 튜닝 6. 다중화를 고려해서 스탠바이 시스템 구성 7. 웹 애플리케이션 사용자 인터페이스 마련 실무 면에서는 고려해야 할 점은 꽤 많다 실제 베이지안 필터 적용 과정 13년 6월 25일 화요일