오늘 할 일: 끝내주게 숨쉬기
article thumbnail
[NLP] 텍스트 전처리: 파이썬에서 띄어쓰기, 문장 분리 라이브러리 사용하기

들어가며 자연어 처리 모델은 입력 데이터의 형태에 굉장히 의존합니다. 동일한 의미를 가진 단어임에도 매번 형태가 달라진다면 모델의 성능을 보장할 수 없습니다. 텍스트를 최대한 규칙적이고 일관된 형태로 변환하기 위해 불필요한 정보들(불용어, 이모티콘, 특수기호, 이메일, 전화번호, 주소 등)를 제거하고, 맞춤법과 띄어쓰기 교정하기, 문장을 분리하기 등 다양한 전처리를 거치는데요,본 포스트에서는 텍스트 전처리 중 띄어쓰기와 문장 분리를 하는 방법들을 알아보겠습니다! 파이썬 ver: 3.8.10 띄어쓰기 적용하기: PyKoSpacing 띄어쓰기가 아예 되어있지 않은 한국어 문장 "아버지가방에들어가신다"는 두 가지 의미로 이해될 수 있습니다. "아버지가 방에 들어가신다"와 "아버지 가방에 들어가신다"로요. 띄어..

article thumbnail
[NLP] 감성 분석과 ABSA(Aspect-Based Sentiment Analysis) 개념

최근 새로운 자연어 처리라는 새로운 태스크를 접하게 되었습니다. 자연어 처리 과제 중에서도 텍스트에 내포된 감성에 대해 분석하는 과제인 "감성 분석(Sentiment Analysis)"과 "ABSA(Aspect-Based Sentiment Analysis)"에 대해 알아보았고, 간단하게 개념을 정리하기 위해 포스트로 남깁니다. 감성분석 ABSA에 대해 이해하기 위해서는 감성 분석에 대해 먼저 알아야겠습니다. 감성 분석이란, "텍스트에서 감정을 파악하는 자연어 처리(NLP, Natural Language Processing) 과제"입니다. 여기서 얘기하는 "텍스트"는 사람의 의견이 담긴 소비자 리뷰, 설문조사 응답, 채팅 등이 될 수 있습니다. 그 의견이 긍정적인지 부정적인지 혹은 중립적인지를 판단하는 것..

article thumbnail
[Tips] 범주형 변수의 카테고리 개수를 줄이는 방법들

들어가며 데이터 탐색을 하다보면 다양하게 골치아픈 상황들을 마주하게 됩니다. 컬럼의 대부분이 비어있다거나, 분명 동일한 값인데 대문자 버전과 소문자 버전이 있다거나, 값의 정의가 시점에 따라 다르거나.. 등등 전처리가 필요한 경우는 신기할 정도로 많이 존재합니다. 그 중 하나가 바로 범주형 변수가 가진 카테고리가 너무 많은 경우입니다. 카테고리가 너무 많은 경우, 타겟과의 연관성을 파악하기도 번거롭고 시각화를 하더라도 한 눈에 들어오질 않습니다. 그 상태로 원핫인코딩을 진행한다면 카테고리마다 변수가 생겨 데이터가 sparse해지고, 트리 계열 모델을 학습한다면 학습 시간이 길어지면서 과적합되는 상황도 발생할 수 있을 것입니다. 위와 같은 단점을 해결하기 위해서는 해당 변수 내 카테고리 개수를 줄여야하는데..

article thumbnail
[sklearn] LabelEncoder와 OrdinalEncoder 비교

들어가며 분석 과제를 하던 도중 범주형 변수를 숫자로 인코딩하기 위해 LabelEncoder가 필요하겠다 싶었습니다. 사용법을 확인하기 위해 사이킷런 공식문서를 살펴봤는데.. LabelEncoder는 타겟 변수 y를 하기 위해 사용하라고 써있더군요. label이 붙는 범주형 변수면 으레 사용 가능하다고 생각했었는데, 제가 오해를 하고 있었습니다. 공식문서를 다시금 잘 살펴보자는 교훈을 얻었네요. 이번 포스트는 LabelEncoder 와 OrdinalEncoder를 각각 소개하고 비교하고자 합니다. 두 인코더 모두 범주형 변수를 숫자로 인코딩하기 위해 쓰이는데요, LabelEncoder는 위에서 언급한 바와 같이 범주형 타겟 변수를, OrdinalEncoder는 범주형 입력 변수를 대상으로 합니다. 각각의..

article thumbnail
[모니터링] 2) 드리프트 감지 방법: KS 검정과 PSI

들어가며 지난 포스트에서 모델 드리프트의 개념과 원인에 대해 알아보았습니다. 시간이 지나면서 모델의 성능이 감소하는 현상을 모델 드리프트라고 하며, 모델 드리프트가 발생하는 주된 이유는 데이터의 분포가 변하기 때문이었습니다. 데이터의 분포가 변한다는 것은 구체적으로, 현재 유입되는 데이터가 모델이 학습했을 때 사용했던 데이터의 양상과 달라졌다는 것을 의미합니다. 모델이 학습되었을 때 바라봤던 데이터와 패턴이 달라지게되면 기대했던 결과와 다른 결과를 낳게 되고, 이는 모델의 성능 하락으로 이어질 수 있습니다. 때문에 모델의 안정적인 운영을 위해서 유입되는 데이터의 분포를 살펴보는 일은 중요합니다. 본 포스트에서는 어떻게 데이터의 분포 변화를 살펴볼 수 있는지 그 방법론에 대해 알아보겠습니다. 데이터는 크게..

article thumbnail
[모니터링] 1) model drift의 개념과 원인(data drift, label drift, concept drift)

들어가며 머신러닝 프로젝트을 수행할 때 성능이 좋은 모델을 개발하고 배포했다고 해서 할 일이 다 끝난 것은 아닙니다. 배포한 모델이 잘 돌아가고 있는지, 예상한대로 결과를 주고 있는지 관찰하는 "모니터링"은 유지보수를 위해 필수적인 과정이죠. 본 포스트에서는 머신러닝 모델을 모니터링할 때 사용하는 "드리프트(drift)"라는 개념과 그 원인에 대해 알아보겠습니다. 모델 드리프트 우리가 개발한 머신러닝 모델이 항상 완벽한 데이터를 입력으로 받지는 않습니다. 모델을 개발할 때 수행하는 여러 전처리 과정들을 생각하면 바로 이해가 되죠. 이런 전처리를 수행하고도 완전히 비어있거나 불완전하거나 혹은 개발 때 학습하지 못했었던 데이터들이 들어올 수도 있습니다. 데이터 엔지니어링 절차에 문제가 없었고 데이터가 만들어..

article thumbnail
[metric] 군집분석 평가 지표 1: 실루엣 계수(Silhouette Coefficient)

군집분석과 실루엣 계수 군집분석(Clustering)은 범주형 타겟에 대한 사전 정보가 없는 경우, 전체를 몇 개 군집으로 그룹화하여 각 군집의 특징을 파악하는 분석 방법론입니다. 그룹화를 수행할 때는 주어진 관측값들 사이의 거리 또는 유사성을 이용합니다. 동일한 군집에 속하는 데이터는 특징이 서로 비슷하고, 서로 다른 군집에 속한 데이터는 그렇지 않도록 구성해야 합니다. 군집분석에 사용되는 대표적인 알고리즘으로는 KMeans, DBSCAN이 있습니다. 일반적인 회귀나 분류 문제의 경우 타겟이 명확하게 존재하는 비지도 학습으로, 모델의 결과와 그 타겟을 비교하여 모델의 성능을 평가할 수 있습니다. 하지만 군집분석의 경우 비지도 학습으로, 비교할 수 있는 타겟이 존재하지 않습니다. 다행히 군집화가 효율적으..

article thumbnail
[annoy] annoy 사용방법: 추천시스템에서 유사 아이템 찾기

annoy: Approximate Nearest Neighbors annoy는 스포티파이에서 개발한 라이브러리로, 벡터들 간의 거리를 계산하여 빠르게 유사한 벡터들을 찾아주는 라이브러리이다. Approximate Nearest Neighbors Oh Yeah의 줄임말로, 직역하자면 근사한 이웃 찾기 아싸? 만세(?) 정도가 될 것 같다. 이름에서부터 느끼다 시피 annoy는 최근접 이웃 알고리즘을 사용한다. annoy를 추천시스템에 적용하기 위해 최근접 이웃을 찾아야하는 경우를 생각해보자. 1. 사용자의 로그가 없을 때: 일반적인 프로필 내용(성별, 나이, 지역 등)을 이용해 사용자와 유사한 특성을 가진 다른 유저들 찾기 → 다른 유저들이 선호했던 아이템들을 사용자에게 추천 2. 사용자의 로그가 쌓인 후..

article thumbnail
RFE와 REFCV: 유의미한 변수를 선택하는 방법

머신러닝으로 타겟을 예측하기 위해 수십, 수백개의 변수를 준비했습니다. 이 많은 변수들을 전부 머신러닝에 인풋 변수로 넣으면 최고의 성능이 나올까요? 항상 그렇지는 않습니다. 타겟과 연관성이 높은 변수도 있지만, 그 중에는 타겟을 예측하는 데에 혼선을 주는 변수들도 있을 수 있기 때문입니다. 게다가 입력변수가 너무 많으면 학습하는 속도도 느려지겠죠. 수집한 많은 변수들 중, 타겟을 예측할 때 유의미하게 사용될 수 있는 변수들을 분석가가 하나씩 살펴보며 취사선택할 수도 있지만 변수가 너무 많은 경우는 수작업이 어렵습니다.. 이때 사용하는 방법으로는 RFE(Recursive Feature Elimination)이 있습니다. RFE (Recursive Feature Elimination) RFE는 변수 선택 ..

article thumbnail
[AutoML] pycaret 패키지를 이용한 분류모델 학습 (2) create_model, tune_model, predict_model, finalize_model

지난 포스트 pycaret 패키지를 이용한 분류모델 학습 (1) 에서는 머신러닝 학습을 위해 환경을 세팅하고, 평가지표를 추가하고, 다양한 모델을 학습하여 비교하는 실습을 했습니다. 이어서 본 포스트에서는 개별 모델 생성, 모델 튜닝, 모델을 이용해 예측하기, 모델 완성하고(finalize) 저장하기를 진행하겠습니다. 1) create_model 머신러닝 모델을 학습하고 Cross Validation을 이용해 검증을 진행하는 함수입니다. 분석가가 학습하고자 하는 알고리즘을 직접 지정하는데, 알고리즘에 적용하고 싶은 하이퍼파라미터도 직접 설정할 수 있습니다. 머신러닝 분석에 대한 방향성이 없을 때는 일단 적용할 수 있는 알고리즘들을 모두 적용해보는 compare_models 함수를 사용할 수 있겠습니다만,..

반응형