오늘 할 일: 갈고 닦기
article thumbnail
[강의] 인프런 입문자를 위한 LangChain 기초 후기

들어가며 RAG 시스템을 사용하며 그 구조에 대해 알고는 있었습니다. 심지어 이 시스템의 성능을 높이려면 어떤 요소를 추가하며 고도화해야하는지도 구상했습니다. 다만 제가 직접 밑단에서부터 구축해본 경험은 없더라구요. 만들어진 시스템을 통해 데이터를 구축하고, API를 사용해 검색과 생성 결과를 얻어본 적은 있지만 파이썬을 사용해 좀 더 기본적인 바탕을 익혀보고자 강의를 수강하였습니다. https://www.inflearn.com/course/%EC%9E%85%EB%AC%B8%EC%9E%90%EB%A5%BC%EC%9C%84%ED%95%9C-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EC%B4%88/dashboard [지금 무료]입문자를 위한 LangChain 기초 강의 | 판다스 ..

article thumbnail
[IR] Rerank: 검색 결과를 재정렬하여 RAG 성능 높이기

들어가며 최근 RAG 성능을 개선해야 하는 실험을 진행했습니다. 도메인 지식과 무관하게 빠르게 적용할 수 있는 기술을 알아보다 rerank를 알게 되었는데요. rerank는 말그대로 검색 결과를 다시(re-) 재정렬하는 사상을 갖고 있습니다. 질문과 답변 쌍을 갖고 있고 rerank를 위한 모델만 있으면 쉽고 빠르게 적용할 수 있어 바로 채택해 실험해보았습니다. 본 포스트에서는 rerank에 대해 간단하게 알아보겠습니다!  [사전지식] LLM, RAG, Retrieval, Rank  Rerank 도입 배경 사용자가 문장을 작성해 검색을 한다고 할 때 이 문장을 "질의(query)"라고 합니다. 검색 프로세스는 질의와 사전에 등록된 데이터를 비교하여 가장 유사한 데이터를 제공합니다. 질의와 데이터(문서, ..

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. 사용자의 로그가 쌓인 후..

반응형