-
[3월 2주차-3/11(1)]🛠 한국어 전처리 패키지Why Not SW CAMP 5기/수업 기록 2025. 3. 11. 10:36
🚀 SOYNLP
📌 품사 태깅, 단어 토큰화를 지원하는 토크나이저
✅ 비지도 학습으로 토큰화를 하고, 데이터에 자주 등장하는 단어를 분석.
✅ 내부적으로 단어 점수표로 동작하며, 이 점수는 응집 확률(Cohesion Probability)과 브랜칭 엔트로피(Branching Entropy)를 사용.🔹 DoublespaceLineCorpus: 텍스트 파일을 줄 단위로 불러오는 코퍼스 로더
🔹 WordExtractor: 단어 점수표 계산. 비지도 학습 방식으로 텍스트 데이터를 보고 새로운 단어를 찾아내고 점수를 부여할 수 있음.
📌 단어 점수표 (word_score_table)와 응집 확률, 브랜칭 엔트로피 설명
한국어 자연어 처리는 띄어쓰기 문제가 많기 때문에 어떤 문자열이 실제 단어인지 판단하는 것이 중요.
soynlp의 WordExtractor는 이를 해결하기 위해 비지도 학습 방식으로 단어를 점수화.
이 점수 중에서 응집 확률(Cohesion Probability)과 브랜칭 엔트로피(Branching Entropy)가 핵심.
🔹 1. 응집 확률 (cohesion_forward)
🧐 "이 문자열이 하나의 단어로 쓰일 가능성이 얼마나 높은가?"
✅ 개념
- 연속된 글자가 하나의 단어로 쓰일 확률을 측정하는 값
- 해당 단어가 더 긴 문자열 속에서도 하나의 덩어리(단어)로 존재하는지를 계산함.
- 일반적으로 문자열이 길어질수록 응집 확률이 높아지다가, 단어 경계를 지나면 떨어짐.
📌 예제 및 해석
word_score_table['반포한'].cohesion_forward # 0.08838002913645132 응집 확률이 낮음 → 단어일 가능성이 낮음. word_score_table['반포한강'].cohesion_forward # 0.19841268168224552 word_score_table['반포한강공원'].cohesion_forward # 0.37891487632839754 # "반포한강" → "반포한강공원": 응집 확률이 증가함 → 한 단어일 가능성이 커짐. word_score_table['반포한강공원에'].cohesion_forward # 0.33492963377557666 -> 감소 (즉, "반포한강공원"이 하나의 단어일 가능성이 가장 높음)📌 즉, 응집 확률이 가장 높은 지점에서 단어 경계가 결정될 가능성이 큼.
📌 "반포한강공원"이 단어이고 "에"는 조사라서 응집 확률이 감소한 것으로 볼 수 있음.
🔹 2. 브랜칭 엔트로피 (branching_entropy)
🤔 "이 문자열 뒤에 다양한 단어가 붙을 가능성이 얼마나 높은가?"
✅ 개념
- 특정 문자열 뒤에 어떤 글자가 다양하게 붙는지를 확률적으로 측정하는 값.
- 값이 클수록 → 다양한 단어가 뒤에 붙을 수 있음 → 단어의 끝일 가능성이 높음.
- 값이 작을수록 → 특정한 문자만 붙음 → 단어의 중간일 가능성이 높음.
- left_branching_entropy(왼쪽 엔트로피)와 right_branching_entropy(오른쪽 엔트로피)로 나뉨.
📌 예제 및 해석
word_score_table['디스'].right_branching_entropy # 1.6371694761537934 (다음에 여러 단어가 붙을 가능성이 있음) word_score_table['디스플'].right_branching_entropy # -0.0 (다음에 반드시 '레'가 붙음, 즉 단어 중간일 가능성이 큼) # "디스" → "디스플": 엔트로피 감소 (특정 문자만 붙을 가능성이 큼 → 아직 단어가 아님) word_score_table['디스플레이'].right_branching_entropy # 3.1400392861792916 엔트로피 증가 (뒤에 다양한 단어가 붙을 수 있음 → 단어의 끝일 가능성이 큼).📌 즉, 단어가 끝나면 브랜칭 엔트로피가 다시 증가하는 패턴이 있음.
🔹 3. L 토크나이저 (LTokenizer)
✂️ "앞에서부터 응집 확률이 높은 부분을 기준으로 단어를 분리하는 토크나이저"
✅ 개념
- LTokenizer는 응집 확률을 기반으로 단어를 분리하는 토크나이저.
- 입력 문장에서 가장 확률이 높은 단어를 먼저 찾고, 나머지를 재귀적으로 분석.
📌 예제
from soynlp.tokenizer import LTokenizer scores = {word: score.cohesion_forward for word, score in word_score_table.items()} l_tokenizer = LTokenizer(scores=scores) l_tokenizer.tokenize("국제사회와 우리의 노력들로 범죄를 척결하자", flatten=False)[('국제사회', '와'), ('우리', '의'), ('노력', '들로'), ('범죄', '를'), ('척결', '하자')]📌 문장 내에서 응집 확률이 높은 단어들을 먼저 토큰화하여 분리함.
🔹 4. 최대 점수 토크나이저 (MaxScoreTokenizer)
🎯 "띄어쓰기가 없는 문장에서 가장 점수가 높은 단어를 순차적으로 찾아내는 토크나이저"
✅ 개념
- MaxScoreTokenizer는 띄어쓰기 없이 연결된 문장에서 점수가 높은 단어를 우선적으로 분리하는 방식.
- LTokenizer와 다르게 순차적으로 최대 점수를 갖는 단어를 먼저 찾아냄.
📌 예제
from soynlp.tokenizer import MaxScoreTokenizer maxscore_tokenizer = MaxScoreTokenizer(scores=scores) maxscore_tokenizer.tokenize("국제사회와우리의노력들로범죄를척결하자")['국제사회', '와', '우리', '의', '노력', '들로', '범죄', '를', '척결', '하자']📌 띄어쓰기가 없는 문장에서도 의미 있는 단어를 정확하게 찾아 분리할 수 있음.
🔹 5. Customized KoNLPy (ckonlpy)
🛠 "사용자가 직접 단어를 추가하여 형태소 분석을 커스터마이징할 수 있는 KoNLPy 확장 패키지"
✅ 개념
- Customized KoNLPy는 기존 KoNLPy의 분석기에 사용자가 원하는 단어를 추가하여 정확도를 높일 수 있도록 제공됨.
- 형태소 분석 결과에서 원래는 분리되던 단어를 하나의 단어로 인식하도록 학습할 수 있음.
📌 설치 방법
pip install customized_konlpy📌 예제
from ckonlpy.tag import Twitter # Twitter 분석기 생성 twitter = Twitter() # 기존 형태소 분석 결과 twitter.morphs('은경이는 사무실로 갔습니다.') # ['은', '경이', '는', '사무실', '로', '갔습니다', '.'] # '은경이'를 하나의 단어로 인식하도록 추가 twitter.add_dictionary('은경이', 'Noun') # 커스터마이징 후 형태소 분석 결과 twitter.morphs('은경이는 사무실로 갔습니다.') # ['은경이', '는', '사무실', '로', '갔습니다', '.']📌 기존에는 '은'과 '경이'로 분리되었지만, 사용자가 '은경이'를 명사(Noun)로 등록하여 하나의 단어로 인식됨.
📌 add_dictionary()를 활용해 사전을 커스터마이즈하면 신조어나 도메인 특화 단어를 쉽게 반영 가능.
🔹 6. 실전 활용
📌 응집 확률과 브랜칭 엔트로피를 활용하면 한국어 NLP에서 다음과 같은 작업이 가능함.
1️⃣ 신조어 및 도메인 특화 단어 탐색
✅ 기존 사전에 없는 단어도 데이터에서 자동으로 추출 가능.
✅ 예: "메타버스", "배민커넥트", "라이브커머스" 등의 신조어 탐색.2️⃣ 한국어 문장에서 적절한 단어 경계 찾기
✅ 띄어쓰기가 잘못된 문장에서도 올바른 단어 경계를 찾아낼 수 있음.
✅ 예: "서울역근처맛집" → "서울역 근처 맛집"3️⃣ 토큰화 성능 향상
✅ 형태소 분석기와 함께 사용하면 한국어 토큰화의 정확도를 향상 가능.
✅ 예: 기존 형태소 분석기가 "코로나19"를 "코로나 19"로 나눠버릴 경우, 응집 확률을 활용하면 하나의 단어로 인식 가능.4️⃣ 비지도 학습 기반 단어 사전 구축
✅ 새로운 데이터를 학습하며 지속적으로 단어 사전을 업데이트 가능.
✅ 특정 도메인(예: 의료, 금융 등)에서 많이 쓰이는 단어를 자동으로 추가할 수 있음.📌 이러한 기법들을 활용하면 한국어 자연어 처리에서 더욱 정교한 분석과 토큰화를 수행할 수 있음! 🚀
🎯 최종 요약
✅ 응집 확률 (Cohesion Probability): 연속된 글자가 하나의 단어로 쓰일 확률을 측정하여 단어 경계를 찾는 데 활용됨.
✅ 브랜칭 엔트로피 (Branching Entropy): 특정 문자열 뒤에 다양한 단어가 붙을 가능성을 분석하여 단어의 끝을 판별함.
✅ LTokenizer: 응집 확률을 활용해 문장에서 가장 자연스러운 단어 단위를 찾는 토크나이저.
✅ MaxScoreTokenizer: 점수가 높은 단어를 우선적으로 추출하는 방식으로, 띄어쓰기 없는 문장을 효과적으로 분석함.
✅ Customized KoNLPy (ckonlpy): 사용자 정의 사전 추가를 통해 형태소 분석기의 성능을 향상시키는 확장 기능.📌 이러한 기법들을 조합하면 더 정교하고 정확한 한국어 NLP 분석이 가능함! 🚀
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[3월 2주차-3/11(3)]🏆 카운트 기반의 단어 표현 (Bag of Words) (1) 2025.03.11 [3월 2주차-3/11(2)]🧠 언어 모델 (Language Model) (0) 2025.03.11 [3월 1주차-3/7(3)]텍스트 전처리4- 원-핫 인코딩, 데이터의 분리 (0) 2025.03.07 [3월 1주차-3/7(2)]텍스트 전처리3-정수 인코딩, 패딩 (0) 2025.03.07 [3월 1주차-3/7(1)]텍스트 전처리2-정규 표현식 (0) 2025.03.07