데이터 분석(61)
-
LangChain을 이용한 RAG - (2) 문서 임베딩 편
2024.07.01 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (1) 이론편 임베딩 방식"문서를 어떻게 벡터화하지?"라는 근본적인 질문에는 Word2Vec, BERT 같은 임베딩 모델에 대해 직접 찾아보는 것을 추천한다.여기서는 LangChain을 이용하여 임베딩을 수행하는 방법을 설명하고자 한다. (1) 파일 불러오기pdf, csv, txt, docx 파일, 데이터프레임 등 다양하게 불러올 수 있다. `DirectoryLoader`를 이용하여 여러 파일을 동시에 불러올 수도 있다.from langchain.document_loaders import PyPDFLoader, CSVLoader, TextLoader, Docx2txtLoader, DataFrameLoader, Dire..
2024.07.06 -
LangChain을 이용한 RAG - (1) 이론편
RAG란Retrieve-Augmented Generation으로 굳이 한국어로 번역하자면 검색-증강 생성이 된다. 이는 LLM이 학습하지 않은 정보에 대해 답변을 잘 하지 못하는 문제를 해결하기 위해 나온 방법이다. GPT-3.5가 2021년까지의 데이터로 학습이 되었기 때문에 그 이후의 질문을 하면 대답을 잘 하지 못하거나 엉뚱한 답을 한다. 하지만 one-shot 프롬프트나 few-shot 프롬프트 엔지니어링을 통해 원하는 답을 만들게 할 수 있는데 이를 응용한 것이 RAG이다. 좀 더 쉽게 설명하자면, 프롬프트 안에 "정답지"를 주고 그 정보를 이용하여 답을 하게 만들게 하는데 결국 오픈북 시스템과 비슷하다고 볼 수 있다. RAG의 필요성그럼 이런 의문점이 생길 것이다. "정답을 알고 있는데 왜 굳..
2024.07.01 -
Jupyter에서 LLM response를 stream 형태의 Markdown으로 보기
1. 배경OpenAI나 Bedrock API 등의 LLM을 이용하여 프롬프트, 파라미터 조정 등 챗봇 테스트를 진행하고자 하는 경우가 있다. streamlit을 이용하여 챗봇 화면을 구성하여 테스트를 진행할 수도 있으나 jupyter notebook (혹은 jupyter lab)에서 수행하는 것이 더 적절할 때가 있다. 이럴 때 stream 형태(ChatGPT, Copilot처럼 토큰마다 답변이 생성되어 나오는 형태)로 답변을 받고자 했다. 물론 토큰 단위로 `print(..., end='')`하면 출력되는 값을 실시간으로 확인할 수 있지만 나는 답변을 Markdown으로 바꿔서 확인하고 싶었다. 챗봇 클래스를 만들어 이전 대화가 이어지게 하는 건 덤. 2. OpenAI API를 이용한 챗봇 클래스 구..
2024.06.25 -
분류 모델의 shap value를 확률값으로 확인하기
1. 배경 상황shapley value는 설명 가능한 AI(XAI) 중 하나로 모델이 "왜" 그렇게 예측을 했는지를 설명해주는 방법이다. python의 `shap` 라이브러리를 이용하여 계산할 수 있다. shapley value는 분류 모델과 회귀 모델 둘 다 계산할 수 있는데, 이 중 분류 모델의 경우 아래와 같이 확률 예측 범위(0~1)를 벗어난 값을 보여준다.위는 소득 분류 데이터를 XGBoost로 학습하여 class가 1인 데이터에 대한 이미지다. 이 이미지를 해석하면전체 데이터에 대한 기댓값 -1.443에 비해 특정 데이터에 대한 예측 값은 -0.223이었고, 그렇게 되는데 영향을 주는 건 relationship, marital-status 순이다. 그 둘은 양의 영향을 주었다. 난 분명 이진 ..
2024.05.27 -
shap 명목형 변수 표기 방법 바꾸기
1. 배경 상황테이블 형태 데이터를 가지고 예측 모델을 만들 때 보통 명목형(object) 변수를 라벨 인코딩 혹은 원-핫 인코딩을 수행하여 모델이 학습할 수 있도록 변환한다. 이후 shap을 시각화하면 각 컬럼이 어떤 값이어서 영향을 줬는지에 대한 해석이 어려워진다.예를 들어, 모든 컬럼값이 명목형 변수인 버섯 데이터의 식용 여부를 예측하는 모델을 만들고 shap value를 계산했을 때 아래처럼 확인이 된다.더보기from sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_splitdf_encoded = df.copy()for column in df.select_dtypes('object'): ..
2024.05.21 -
선형회귀로 시계열 예측 모델 만들 때 조심할 점
1. 데이터 선정 데이터 수도 많고 트렌드와 주기성도 매우 잘 보이는 Mauna Loa CO2 daily means 데이터를 이용하였다. Global Monitoring Laboratory - Carbon Cycle Greenhouse Gases (noaa.gov) 2. 데이터 전처리 선형적으로 증가하는 트렌드도 보이고 1년 주기로 증감을 반복하는 패턴이 보인다. 트렌드와 패턴을 고려한 x인자를 만들자. $y = c_0 + c_1 x + c_2 x^2 + c_3 x^3 + c_4 \sin(\frac{2\pi x} {T}) + c_5 \cos(\frac{2\pi x} {T}) + c_6 \sin(\frac{4\pi x} {T}) + c_7 \cos(\frac{4\pi x} {T}) \text{ where ..
2024.04.16 -
시계열 이상탐지 (4) - 딥러닝의 시대
이하 내용은 MIT - Data to AI Lab에서 작성한 글을 일부 번역 및 요약한 것입니다. Part 1 Time series anomaly detection — in the era of deep learning 시계열 이상 탐지란 시계열 데이터: 시간을 인덱스로 가지는 점들의 집합 이상치(anomaly): 가끔 등장하는 시계열 내에 속하지 않는 데이터(정상 패턴과 다른 패턴) 이상치의 종류 - 점 이상치(Point anomalies): 낮은 밀도 영역에 속하는 단일 값. 많이 모여있으면 집합 이상치(collective anomalies)라고 불림 - 맥락적 이상치(Contextual anomalies): 낮은 밀도 영역에 속하지는 않지만 지역적으로 이상한 값들로, 시작 시간과 끝 시간으로 이루어진..
2024.03.25 -
시계열 이상탐지 (3) - VAE, TadGAN
VAE VAE(Variation AutoEncoder): 오코인코더의 변형으로 잠재 벡터가 아닌 평균과 분산을 이용한 잠재 공간(Latent Space)으로 압축하는 모델로 생성 모델로 많이 사용됨 - Reconstruction-Based - LSTM-AE와 동일한 방식으로 임계치 선정 및 모델 평가 TadGAN TadGAN: Time Series Anomaly Detection Using Generative Adversarial Networks TadGAN(Time Series Anomaly Detection Using Generative Adversarial Networks): GAN을 시계열 이상탐지에 응용한 모델. - $E$: 인코더. 생성자에 들어가기 전 랜덤 벡터(z)와 구분할 수 없도록 학습..
2024.03.22 -
torch와 tensorflow를 CNN 코드로 비교하기
Fashion MNIST 데이터 불러오기 torch의 경우 데이터를 불러올 때 Compose를 통해 normalize를 하고 배치 사이즈를 지정하여 iterator를 만든다. BATCH_SIZE = 64 from torchvision import datasets, transforms from torch.utils.data import DataLoader, random_split transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=(0.5,), std=(0.5,)) ]) full_train_dataset = datasets.FashionMNIST('dataset/', train=True, download=True..
2024.03.21 -
시계열 이상탐지 (2) - LSTM-DT, LSTM-AE, AER
LSTM-DT Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding LSTM-DT(Long Short-Term Memory with Dynamic Thresholding): LSTM 모델을 학습하여 값들을 예측하고, 실제값과 예측값의 차이를 가지고 이상치를 판단하는 모델. 이상치를 판단하는 임계값(threshold)은 동적으로 정해지는 것이 특징. - Prediction-Based - 입력 데이터의 평균과 분산을 계산하여 임계값을 조절함 - $e_s$: smoothed errors로 EWMA(지수가중이동평균)으로 계산 - 임계값 ε, z는 2~10 사이의 정수 - 임계값을 넘어가면 이상치 LSTM-AE Unsup..
2024.03.20