목차
1. Analyzer 기본 설정 (standard)
2. 추천 Nori_tokenizer
3. decompound_mode 옵션 3가지 (Nori_tokenizer)
4. N-GRAM
5. N-GRAM 종류
6. N-GRAM 장단점
1. Analyzer 기본 설정 (standard)
아무런 설정을 하지 않으면 Standard Analyzer가 사용되며 한글 타입은 단순 토큰화만되고 형태소 분석 등은 이루어지지 않음
2. 추천 Nori_tokenizer
PUT /library_index
{
"settings": {
"analysis": {
"analyzer": {
"custom_korean_analyzer": {
"type": "custom",
"tokenizer": "nori_tokenizer",
"filter": ["nori_readingform", "lowercase", "nori_part_of_speech"]
}
}
}
}
}
사용된 필터
nori_tokenizer: 기본 형태소 분석기로 한글 텍스트를 형태소 단위로 분석
nori_readingform: 한자가 포함된 텍스트를 한글 읽기 형태로 변환. 이는 한자를 사용하는 책 제목이 한글로도 검색될 수 있도록 설정
lowercase: 영어 책 제목에 포함된 대문자를 소문자로 변환하여, 대소문자 구분 없이 검색할 수 있도록 설정
nori_part_of_speech: 불필요한 품사를 제거하여 인덱싱을 더 효율적으로 생성
사진) nori_part_of_speech 품사코드 정보 (출처 : 꼬꼬마 한국어 형태소 분석기)
stoptags 기본값
"stoptags": [
"E", "IC", "J", "MAG", "MAJ",
"MM", "SP", "SSC", "SSO", "SC",
"SE", "XPN", "XSA", "XSN", "XSV",
"UNA", "NA", "VSV"
]
커스텀 설정 예시
"filter": {
"my_pos_filter": {
"type": "nori_part_of_speech",
"stoptags": ["E", "IC", "J", "MAG", "MM", "SP", "SSC", "SSO", "SC", "SE"]
}
}
3. decompound_mode 옵션 3가지 (Nori_tokenizer)
: 합성어의 저장 방식을 결정
none : 어근을 분리하지 않고 완성된 합성어만 저장
ex) 백두산이 -> 백두산, 이
discard (기본값) : 합성어를 분리하여 각 어근만 저장
ex) 백두산이 -> 백두, 산, 이
mixed : 어근과 합성어를 모두 저장
ex) 백두산이 -> 백두산, 백두, 산, 이
4. N-GRAM
: N-gram은 텍스트를 고정된 크기의 조각(gram)으로 나누는 방법으로, 이러한 조각들을 사용하여 텍스트 분석을 수행
ex)
PUT my_ngram
{
"settings": {
"analysis": {
"filter": {
"my_ngram_f": {
"type": "nGram",
"min_gram": 2,
"max_gram": 3
}
},
"analyzer": {
"my_ngram_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": ["my_ngram_f"]
}
}
}
}
}
GET my_ngram/_analyze
{
"analyzer": "my_ngram_analyzer",
"text": "한글테스트"
}
분석 결과: "한글", "한글테", "글테", "글테스", "테스", "테스트", "스티", "트“
5. N-GRAM 종류
: N-gram은 문장을 몇 개의 단어 개수에 따라 나눌지에 따라 종류가 결정. 문장 부호 전처리 가정 하에 종류별 예시.
문장
-> "오늘 점심 추천 메뉴: 파스타, 피자"
모델명 | 구현 결과 | |
1 | Unigram(N=1) | 오늘, 점심, 추천, 메뉴, 파스타, 피자 |
2 | Bigram(N=2) | 오늘 점심, 점심 추천, 추천 메뉴, 메뉴 파스타, 파스타 피자 |
3 | Trigram(N=3) | 오늘 점심 추천, 점심 추천 메뉴, 추천 메뉴 파스타, 메뉴 파스타 피자 |
4 | 4-gram(N=4) | 오늘 점심 추천 메뉴, 점심 추천 메뉴 파스타, 추천 메뉴 파스타 피자 |
6. N-GRAM 장단점
장점
단순하고 유연한 구현: N-gram 모델은 구현이 비교적 간단하며, 다양한 크기의 N을 선택함으로써 분석의 정밀도와 커버리지를 조절할 수 있는 유연성을 제공.
부분 문자열 검색에 유리: 텍스트를 부분적인 시퀀스로 분해하기 때문에, 완전히 일치하지 않는 검색어에 대해서도 유연한 검색이 가능. 이는 오타가 있거나 부분적으로만 일치하는 검색어에 대해서도 좋은 성능을 보임.
문맥 파악 가능성: 특히 큰 N값을 사용할 경우, 인접한 요소 간의 관계를 반영하여 문맥을 일정 부분 파악 가능. 문서 분류 작업에 유용하게 활용될 수 있음
단점
인덱스 크기와 리소스 사용의 증가: N의 값이 크면 생성되는 N-gram의 수가 기하급수적으로 증가하므로, 데이터 저장과 처리에 필요한 리소스가 상당히 증가.
경계 처리 문제: 텍스트의 시작과 끝에서 N-gram이 제대로 형성되지 않거나, 어절의 경계가 모호해질 수 있음. 특히, 언어에 따라 어절의 경계를 정확히 반영하지 못하는 문제가 발생할 수 있음.
'공부메모 & 오류해결 > Spring Boot' 카테고리의 다른 글
[Spring Boot] Gzip 압축을 통해 로딩 성능 최적화 하기 (0) | 2025.01.14 |
---|---|
[Spring Boot] lombok을 분명 적용했는데 사용이 안될때 (0) | 2024.04.09 |
[Spring Boot + SMTP] 이메일 인증 구현 (0) | 2024.04.01 |
[Spring Boot] LogBack을 사용해서 로그파일 저장하기 (0) | 2024.03.18 |
[Spring Boot] Global Exception으로 에러 처리하기 (0) | 2024.03.15 |
남건욱's 공부기록