대규모서비스를지탱하는기술 7
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 324 views

 

Statistics

Views

Total Views
324
Views on SlideShare
324
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 대규모 서비스를 지탱하는 기술Ch.7 알고리즘 실용화chois7913년 6월 25일 화요일
  • Ch.7 에서 다루는 내용1. 대규모 데이터를 앞둔 알고리즘 선택의 중요성2. 알고리즘을 제품에 적용하기까지 어떤 과정이필요한가?13년 6월 25일 화요일
  • 대상이 되는 데이터가 크면 클수록알고리즘이나 데이터 구조 선택이 속도에영향을 미친다13년 6월 25일 화요일
  • 그럼 알고리즘이 무엇인가?어떤 값 또는 값의 집합을 입력으로하고어떤 값 또는 값의 집합을 출력으로 하는명확하게 정의된 계산 절차-Introduction to Algorithms13년 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. RegexpListAC법을 직접 구현하여 도입함으로 계산량이 줄어들었지만정규 표현식의 각종 옵션을 쓰지 못하게 되어 유연성이 결여됨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일 화요일