SlideShare une entreprise Scribd logo
1  sur  46
1
김종민
Community Engineer @Elastic
kimjmin@gmail.com / jongmin.kim@elastic.co
Elasticsearch
한글 형태소 분석기
nori
2
오늘 발표는 재탕입니다…
작년 데놀, 그리고 SOSCON, Nori 웨비나
발표자료 만드는데
몇시간이 걸리는데,
몇십 분짜리 발표에 한번만
쓰고 끝내면 아깝잖아요?
3
Elastic?
4
Most think of search as…
5
SEARCH
6
Multilingual
Full Text Search
Stemming
Type ahead
7
Mobile
Geo search
Influenced by Rating
Personalized Ranking
Time Range
8
9
Stemming /
Highlighting
Geo range Filter
Search
Time range Filter
Pagination
Numeric Filter
10
Building search needs ...
11
All this.
SecureMulti-lingual
Query language
Drill down
APIs Enrichment
Alerting
Query Language
Unstructured
Search
Type ahead
High availability
Fast
Highlighting
Scalable
12
Elastic has all this.
Secure
Multi-lingual
Query language
Real-time Drill down
APIs
Data Sources
Enrichment
Alerting
Query Language
Unstructured
Search
Type ahead
High availability
Fast
Highlighting
Scalable
1313
Elastic Stack
Store, Search, & AnalyzeElasticsearch
Visualize & ManageKibana
Beats IngestLogstash
1414
Metrics
Logging
APM
Site
Search
Application
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
Elastic Stack
Store, Search, & Analyze
Visualize & Manage
Ingest
Kibana
Elasticsearch
Beats Logstash
1515
APM Site Search App Search
Solutions
1616
Metrics
Logging
APM
Site
Search
App
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
SaaS
Elastic Cloud
Self Managed
Elastic Cloud
Enterprise
Standalone
Deployment
Elastic Stack
Store, Search, & Analyze
Visualize & Manage
Ingest
Kibana
Elasticsearch
Beats Logstash
1717
SaaS Self Managed
Elastic Cloud Elastic Cloud
Enterprise
Standalone
Elasticsearch
Service
Site Search App Search
1818
Elastic Stack
Store, Search, & AnalyzeElasticsearch
Visualize & ManageKibana
Beats IngestLogstash
Metrics
Logging
APM
Site
Search
Application
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
SaaS
Elastic Cloud
Self Managed
Elastic Cloud
Enterprise
Standalone
Deployment
19
20
RDBMS 에서는 데이터를 테이블 형태로 저장합니다.
열을 기준으로 인덱스를 만듭니다.
책의 맨 앞에 있는 제목 리스트와 같습니다.
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
21
검색엔진에서는 inverted index 라는 구조로
저장합니다.
RDBMS 와 반대 구조입니다.
텍스트를 다 뜯어서 검색어 사전을 만듭니다. (Term 이라고 합니다)
책의 맨 뒤에 있는 페이지를 가리키는 키워드 같습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast 2 jumps 1
The 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
22
실제로는 이렇게 저장됩니다.
텍스트를 저장할 때 몇가지 처리 과정을 거칩니다.
이 과정을 텍스트 분석 (Text Analysis) 라고 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
23
텍스트 분석 과정
문장을 분리합니다. 이 과정을 Tokenizing 이라고 합니다.
보통은 Whitespace Tokenizer 가 사용됩니다.
TOKEN (TERM) TOKEN (TERM) TOKEN (TERM) TOKEN (TERM)
Fast dog jumps quick
The fox lazy rabbits
brown jumping over the
TEXT
The quick brown fox jumps over the lazy dog
Fast jumping rabbits
24
텍스트 분석 과정
Tokenized 된 Term 들을 가공합니다. 이 과정을 Token Filtering 이라고 합니다.
먼저 Lowercase Token Filter로 대소문자를 변환 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast  fast 2 jumps 1
The  the 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
25
텍스트 분석 과정
토큰을 (보통 ascii 순서로) 재 정렬합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
26
텍스트 분석 과정
불용어(stopwords, 검색어로서의 가치가 없는 단어들) 를 제거합니다.
a, an, are, at, be, but, by, do, for, i, no, the, to … 등등
Stop Token Filter 가 사용됩니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
27
텍스트 분석 과정
형태소 분석 과정을 거칩니다. 보통 ~s, ~ing 등을 제거하는 과정입니다.
보통 Snowball Token Filter 를 사용합니다.
한글은 의미 분석을 해야 해서 좀 더 복잡합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy  lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits  rabbit 2
jumping  jump 2
jumps  jump 1
28
텍스트 분석 과정
jumping, jumps가 jump 로 똑같이 바뀌었으므로 토큰을 병합 해 줍니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbit 2
jump 1 , 2
29
텍스트 분석 과정
동의어를 처리합니다.
Synonym Token Filter 를 이용해 동의어 사전을 정의할 수 있습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
30
검색 과정
검색어도 똑같이 텍스트 처리를 합니다.
“The lazy rabbits” 라고 검색하면
The lazy rabbits
lazi
rabbit
1
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
2
31
검색엔진은
RDBMS 검색엔진
데이터 저장 방식 정규화 역정규화
전문(Full Text) 검색 속도 느림 빠름
의미 검색 불가능 가능
Join 가능 불가능
수정 / 삭제 빠름 느림
32
한글 검색
한글은 복합어로 이루어진 언어입니다.
단순한 whitespace 기반이 아닌 단어 사전 기반의 분석이 필요합니다.
• 동해물과 백두산이
– 동해 + 물 / 백두 + 산
– 동 + 해물 / 백 + 두산
• 대학생선교회
– 대학생 + 선교 + 회
– 대학 + 생선 + 교회
33
한글 형태소 분석기
Elasticsearch 에서 사용 가능한 한글 형태소 분석기는
아래와 같은 프로젝트들이 있습니다.
- 아리랑 : 이수명, 정호욱님
- 은전한닢 : 유영호, 이용운님
- open-korean-text : 유호현님
34
2018. 08 – Nori 출시
https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-
korean-language-analysis
35
What is Nori?
• https://github.com/jimczi
• Creator of Kuromoji – Japanese Text Analyzer
• Contributor of MeCab
• 은전한닢의 mecab-ko-dic 사전을 사용합니다.
http://eunjeon.blogspot.com
• Nori는 Kuromoji 엔진의 코드를 fork 해서 mecab-ko-dic 사전을 적용시킨
Elasticsearch 독자적인 형태소 분석기 입니다.
Created by Jim Ferenczi
36
Why Nori?
https://issues.apache.org/jira/browse/LUCENE-8231
37
Why Nori?
https://issues.apache.org/jira/browse/LUCENE-8231
😳
38
How Nori?
https://github.com/apache/lucene-solr/tree/master/lucene/analysis
39
How Nori?
mecab-ko-dic 사전 사이즈 : 약 200MB
40
How Nori?
nori 사전 사이즈 : 24MB
41
How Nori?
mecab-ko-dic 사전 구조
NNG.csv
42
How Nori?
Korean POS (Part Of Speech) Table
출처 : 꼬꼬마 한국어 형태소 분석기
http://kkma.snu.ac.kr/documents/?doc=postag
43
• CSV(array) 형식의 텍스트로
저장된 사전을 FST (finite state
transducer)로 부호화 하고 Binary
구조로 재구성.
• Matrix.def 파일 가변 길이로 변경
후 직렬화
How Nori?
nori 사전 구조 :
44
How Nori?
• 명사와 합성어의 부분들을 부호화  사전에서 중복 제거
• 오른쪽 어절이 왼쪽 어절과 다른 경우에만 저장하고 다르면 저장하지 않음. (중복
제거)
nori 사전 구조 :
45
자세한 사용법은 Elastic 공식 도큐먼트에 있습니다.
https://www.elastic.co/guide/en/elasticsearch/plugins/6.4/analysis
-nori.html
46
https://www.elastic.co
https://www.facebook.com/groups/elasticsearch.kr/
감사합니다

Contenu connexe

Tendances

[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Seongyun Byeon
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편Seongyun Byeon
 
[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델NHN FORWARD
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색NAVER D2
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryif kakao
 
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB DayAmazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB DayAmazon Web Services Korea
 
Dependency Parser, 의존 구조 분석기
Dependency Parser, 의존 구조 분석기Dependency Parser, 의존 구조 분석기
Dependency Parser, 의존 구조 분석기찬희 이
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기CONNECT FOUNDATION
 
분석가를 위한 Aws 기반의 digital 플랫폼 구축
분석가를 위한 Aws 기반의 digital 플랫폼 구축분석가를 위한 Aws 기반의 digital 플랫폼 구축
분석가를 위한 Aws 기반의 digital 플랫폼 구축Nak Joo Kwon
 
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기 [데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기 choi kyumin
 
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게Seongyun Byeon
 

Tendances (20)

[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
 
[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor library
 
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB DayAmazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
 
Dependency Parser, 의존 구조 분석기
Dependency Parser, 의존 구조 분석기Dependency Parser, 의존 구조 분석기
Dependency Parser, 의존 구조 분석기
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
 
분석가를 위한 Aws 기반의 digital 플랫폼 구축
분석가를 위한 Aws 기반의 digital 플랫폼 구축분석가를 위한 Aws 기반의 digital 플랫폼 구축
분석가를 위한 Aws 기반의 digital 플랫폼 구축
 
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기 [데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기
[데이터야놀자2107] 강남 출근길에 판교/정자역에 내릴 사람 예측하기
 
Redis
RedisRedis
Redis
 
Data Science. Intro
Data Science. IntroData Science. Intro
Data Science. Intro
 
Amazon OpenSearch Service
Amazon OpenSearch ServiceAmazon OpenSearch Service
Amazon OpenSearch Service
 
Logstash
LogstashLogstash
Logstash
 
Soma search
Soma searchSoma search
Soma search
 
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
 

Elasticsearch 한글 형태소 분석기 Nori 노리