이전 내용
텍스트 분석 vs NLP
[NLP, Natural Language Processing]
- 머신이 인간의 언어를 이해하고 해석하는 데 더 중점을 두고 기술 발전
- 언어를 해석하기 위한 기계 번역, 자동 질의응답 시스템 등
- 텍스트 분석을 향상하게 하는 기반 기술
[텍스트 분석, Text Mining]
- 비정형 텍스트에서 의미 있는 정보를 추출하는 것에 좀 더 중점을 두고 기술 발전
- 머신러닝, 언어 이해, 통계 등을 활용해 모델을 수립하고 정보를 추출해 비즈니스 인텔리전스나 예측 분석 등의 분석 작업을 주로 수행
- 텍스트 분류, 감성 분석, 텍스트 요약, 텍스트 군집화와 유사도 측정 등 기술 영역 존재
▶ 머신러닝이 보편화되면서 NLP와 텍스트 분석을 구분하는 것이 큰 의미는 없어졌다.
파이썬 기반의 NLP, 텍스트 분석 패키지
- NLTK(Natural Language Toolkit for Python): 파이썬의 가장 대표적인 NLP 패키지. 방대한 데이터 세트와 서브 모듈을 가지고 있으며 NLP의 거의 모든 영역을 커버하고 있다. 그러나 수행 속도 측면에서 아쉬운 부분이 있어 실제 대량의 데이터 기반에서는 제대로 활용되지 못하고 있다.
- Gensim: 토픽 모델링 분야에서 가장 두각을 나타내는 패키지이다. 오래전부터 토픽 모델링을 쉽게 구현할 수 있는 기능을 제공해 왔으며, Word2Vec 구현 등의 다양한 신기능도 제공한다. 많이 사용되고 있는 패키지이다.
- SpaCy: 뛰어난 수행 성능으로 최근 가장 주목을 받고 있으며, 사용되는 애플리케이션이 증가하고 있는 NLP 패키지이다.
텍스트 분석의 이해
[머신러닝 기반의 텍스트 분석 프로세스]
- 텍스트 사전 정제 작업 등의 텍스트 정규화 작업
- 정규화된 단어들을 피처 벡터화로 변환
- 피처 벡터 데이터 세트에 머신러닝 모델을 학습하고 예측, 평가
[텍스트 정규화 작업]
- 텍스트 클렌징 및 대소문자 변경
- 단어 토큰화
- 의미 없는 단어 필터링(Stop words)
- 어근 추출(Stemming / Lemmatization) 등
[피처 벡터화]
텍스트를 word(또는 word의 일부분) 기반의 다수의 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여하여 텍스트를 단어의 조합인 벡터값으로 변환하는 것. (피처 추출이라고도 한다)
- BOW(Bag of Words)
- BOW의 대표 방식: Count 기반
- BOW의 대표 방식: TF-IDF 기반
문서의 문장이 긴 경우 TF-IDF 기반의 피처 벡터가 더 정확한 결과를 도출하는 데 도움이 된다.
피처 벡터 데이터 세트는 희소 행렬이며, 머신러닝 모델은 이러한 희소 행렬 기반에서 최적화되어야 한다.
텍스트 분류(Text Classification)
Text Categorization 이라고도 하는데, 문서가 특정 분류 또는 카테고리에 속하는 것을 예측하는 기법을 통칭하며, 지도학습을 적용한다.
예. 특정 신문 기사 내용이 어떤 카테고리에 속하는지 자동으로 분류, 스팸 메일 검출 프로그램 등
감성 분석(Sentiment Analysis)
텍스트에서 나타나는 감정/판단/믿음/의견/기분 등의 주관적인 요소를 분석하는 기법을 총칭하며, Text Analytics에서 가장 활발하게 사용되고 있는 분야이다. 지도학습과 비지도학습 모두 이용해 적용할 수 있다.
예. 소셜 미디어 감정 분석, 영화나 제품에 대한 긍정 또는 리뷰, 여론조사 의견 분석 등
텍스트 요약 (Summarization)
텍스트 내에서 중요한 주제나 중심 사상을 추출하는 기법을 말한다.
대표적으로 토픽 모델링이 있으며, 머신러닝 기반의 토픽 모델링에 자주 사용되는 기법은 LSA와 LDA가 있다.
텍스트 군집화
비슷한 유형의 문서에 대해 군집화를 수행하는 기법을 말한다. 텍스트 분류를 비지도학습으로 수행하는 방법의 일환으로 사용될 수 있다.
[텍스트 군집화 개선을 위한 방법]
1. 문서 전처리 개선: 군집화가 잘 안 되는 원인 중 하나는 불필요한 단어나 특수문자, 중복 단어가 포함되었기 때문일 수 있다. TF-IDF 벡터화 전에 텍스트를 클리닝하고 불용어(stop words)를 제거하며, 어간 추출(stemming)이나 표제어 추출(lemmatization)도 고려.
2. 적절한 군집 수 설정: K-means와 같은 알고리즘을 사용할 때, 최적의 군집 수(K)를 설정하지 않으면 정확한 군집화가 어렵다. 엘보우 방법(Elbow method) 또는 실루엣 계수(Silhouette Score)를 사용해 최적의 K를 찾는 것이 좋다.
3. 고차원 축소 적용: TF-IDF 벡터화는 차원이 매우 커질 수 있어 성능에 영향을 미친다. 차원 축소 기법인 PCA 또는 TSNE를 사용하여 차원을 줄여 본다.
4. 다른 군집화 알고리즘 시도: K-means 외에 DBSCAN, Hierarchical Clustering과 같은 군집화 알고리즘을 사용해본다. 특히 DBSCAN은 밀도 기반 군집화로, 데이터의 밀도에 따라 더 나은 군집을 형성할 수 있다.
5. TF-IDF 파라미터 조정: max_df 및 min_df 파라미터를 조정해 너무 흔하게 또는 너무 드물게 나타나는 단어를 무시하여 보다 효과적인 벡터화를 시도할 수 있다.
이러한 방법들을 통해 문서 군집화의 성능을 향상시킬 수 있다.
문서 유사도
문서들간의 유사도를 측정해 비슷한 문서끼리 모을 수 있는 방법이다.
문서와 문서 간의 유사도 비교는 일반적으로 코사인 유사도(Cosine Similarity)를 사용한다.
- 코사인 유사도: 벡터와 벡터 간의 유사도를 비교할 때 벡터의 크기보다는 벡터의 상호 방향성이 얼마나 유사한지에 기반한 것으로, 두 벡터 사이의 사잇각을 구해서 얼마나 유사한지 수치로 적용한 것.
[코사인 유사도가 문서의 유사도 비교에 가장 많이 사용되는 이유]
- 문서를 피처 벡터화 변환하면 차원이 매우 많은 희소 행렬이 되기 쉬운데, 이러한 희소 행렬 기반에서 문서와 문서 벡터 간의 크기에 기반한 유사도 지표 (예. 유클리드 거리 기반 지표)는 정확도가 떨어지기 쉽다.
- 문서가 매우 긴 경우 단어의 빈도수도 더 많을 것이기 때문에 빈도수에만 기반해서는 공정한 비교를 할 수 없다.
- 벡터 크기에 영향 없음: 코사인 유사도는 두 벡터의 방향(패턴)을 비교하여 유사도를 계산하기 때문에, 문서의 길이(또는 크기) 차이가 결과에 영향을 주지 않는다. 이는 길이가 다른 문서들 간의 비교에 유리하다.
- 효율적인 계산: 코사인 유사도는 유클리디안 거리보다 계산이 간단하고 고차원에서도 빠르게 유사도를 계산할 수 있어, 문서 간 유사도 비교를 효율적으로 처리할 수 있다.
- 문서 내용의 패턴을 잘 반영: 코사인 유사도는 벡터의 각도에 따라 유사도를 측정하므로, 단어의 존재 패턴이 비슷한 문서들을 효과적으로 그룹화하며, 특히 단어가 많이 겹치는 유사한 주제의 문서에서 코사인 유사도는 정확한 비교를 가능하게 한다.
▶ 따라서 코사인 유사도는 다양한 길이와 복잡성을 가진 문서들 간에 일관성 있고 신뢰성 높은 유사도 비교를 제공하여 문서 유사도 측정에서 가장 많이 활용된다.
한글 텍스트 처리 (KonNLPy)
[KonNLPy 안내]
KoNLPy는 파이썬 프로그래밍 언어로 사용할 수 있도록 만들어졌는데, 그것은 파이썬이 간결하고 우아한 문법구조, 강력한 스트링 연산 기능을 가지고 있을 뿐 아니라 크롤링, 웹프로그래밍, 그리고 데이터 분석을 수행할 수 있는 다양한 패키지를 사용할 수 있는 언어이기 때문이다.
https://konlpy.org/ko/latest/index.html
[KonNLPy 모듈 설치 관련]
텍스트 분석 실습
다음 내용
[출처]
파이썬 머신러닝 완벽 가이드
KonNLPy 사이트
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 텍스트 분석: BOW(Bag of Words) (1) | 2024.10.30 |
---|---|
[머신러닝] 텍스트 분석: 텍스트 정규화 (0) | 2024.10.29 |
[머신러닝] 군집화: 실습 - 고객 세그먼테이션 (1) | 2024.10.28 |
[머신러닝] 군집화: DBSCAN (0) | 2024.10.27 |
[머신러닝] 군집화: GMM (0) | 2024.10.27 |