intelligence_model
-
문자열 유사도 측정
- Levenshtein 거리
- Levenshtein 거리는 두 문자열 간의 최소 편집 거리를 계산하는 방법. 편집 거리는 한 문자열을 다른 문자열로 변환하기 위해 필요한 삽입, 삭제, 교체 작업의 최소 개수.
- 삽입 (Insertion): 한 문자를 문자열에 삽입하는 작업
- 삭제 (Deletion): 문자열에서 한 문자를 삭제하는 작업
- 교체 (Substitution): 문자열에서 한 문자를 다른 문자로 교체하는 작업
- 예) 두 문자열 "kitten"과 "sitting"의 Levenshtein 거리를 계산
- "kitten" -> "sitten" (k를 s로 교체) -> 1회 교체
- "sitten" -> "sittin" (e를 i로 교체) -> 2회 교체
- "sittin" -> "sitting" (n을 g로 교체) -> 3회 교체
- 예) 두 문자열 "kitten"과 "sitting"의 Levenshtein 거리를 계산
- Levenshtein 거리
-
문자열 유사도 측정
- cosine similarity
- 두 벡터 간의 코사인 각도를 기반으로 유사도를 측정하는 방법. 문자열을 벡터로 변환한 후, 두 벡터의 내적을 그 벡터들의 크기의 곱으로 나눈 값을 사용하여 유사도를 계산. 결과 값은 -1과 1 사이의 값을 가지며, 1은 완전한 유사성을 의미하고 0은 유사성이 없음을 의미합니다. -1은 반대 방향의 벡터를 나타냄.
- 벡터화 (Vectorization): 문자열을 벡터로 변환
- 코사인 각도 (Cosine Angle): 두 벡터 간의 각도를 계산
- 두 벡터 간의 코사인 각도를 기반으로 유사도를 측정하는 방법. 문자열을 벡터로 변환한 후, 두 벡터의 내적을 그 벡터들의 크기의 곱으로 나눈 값을 사용하여 유사도를 계산. 결과 값은 -1과 1 사이의 값을 가지며, 1은 완전한 유사성을 의미하고 0은 유사성이 없음을 의미합니다. -1은 반대 방향의 벡터를 나타냄.
- cosine similarity
-
CLIP : contrastive language-image pre-training
- 이미지와 텍스트 데이터를 같이 활용 모델
- 따로 라벨링 대신 텍스트 그대로 사용 (zero-shot예측능력 높음)
- N개의 커플 데이터(이미지, 텍스트)이 input으로 주어지면 NxN배열의 데이터가 생성되고, 실제 커플 데이터는 코사인 유사도를 최대화하고, 나머지는 최소화로 학습
local에서 llm모델
- ollama 설치 (https://ollama.com/download)
- 가이드 (https://github.com/ollama/ollama)
- ollama run llama2 :: 설치 및 실행
- /bye :: 나가기
-
데이터 로딩 최적화: 데이터를 부분적으로 로드하거나 필요한 데이터만 로드하여 메모리 사용을 최소화. pandas
라이브러리의read_csv함수에서usecols,dtype,nrows` 등의 파라미터를 사용하여 필요한 데이터만 로드. -
효율적인 데이터 구조 사용: 데이터 유형에 따라 적절한 데이터 구조를 선택. 큰 데이터 세트에 대해
pandas대신Dask나Vaex같은 라이브러리를 사용하면 데이터를 병렬로 처리하고, 메모리를 초과하는 작업을 디스크에서 수행. -
벡터화된 연산 사용:
NumPy나pandas와 같은 라이브러리 함수를 사용하여 벡터화된 연산을 수행 -
데이터 클리닝 파이프라인 구축: 데이터 정제 단계를 함수로 만들어 재사용 가능하게 구축. 데이터 정제 과정을 표준화, 에러 줄임
-
병렬 처리: 데이터 정제 작업을 여러 CPU 코어에 분산시켜 처리 속도를 향상 :: Python의
concurrent.futures모듈이나multiprocessing라이브러리를 사용
- pyhton langchain
- pip install langchain[all]
- pip install langchain[llms]
- 일반적인 언어 모델만 설치
- pip install langchain
- 최소 기본 설치
- pip install langchain[llms]
- pip install langchain[all]
인공지능 모델의 성능을 극대화하기 위해 데이터 전처리는 매우 중요한 단계입니다. 특히 고급 전처리 방법은 모델의 일반화 능력과 성능을 크게 향상시킬 수 있습니다. 아래에는 고급 전처리 방법 중 몇 가지를 소개합니다.
1. 이상치 처리 (Outlier Handling)
- 이상치 탐지: 이상치를 탐지하는 방법으로는 IQR(Interquartile Range), Z-점수(Z-score) 또는 도메인 지식을 활용한 방법이 있습니다.
- 이상치 제거 또는 대체: 이상치를 제거하거나, 평균값, 중앙값 등으로 대체할 수 있습니다. 경우에 따라서는 모델이 이상치를 잘 처리할 수 있도록 이상치만 따로 학습할 수 있도록 할 수도 있습니다.
2. 결측치 처리 (Missing Value Handling)
- 결측치 대체: 결측값을 평균, 중앙값, 최빈값, 또는 KNN, 회귀 모델 등을 이용해 대체할 수 있습니다.
- 결측치 예측: 보다 복잡한 방법으로는 결측값 자체를 예측하는 모델을 만들어서 결측치를 채우는 방법이 있습니다.
- 결측치 제거: 결측치가 너무 많거나 대체가 어려운 경우 해당 데이터를 제거할 수 있습니다.
3. 특성 엔지니어링 (Feature Engineering)
- 특성 생성: 도메인 지식 또는 데이터 탐색을 통해 기존 데이터로부터 새로운 특성을 생성할 수 있습니다. 예를 들어, 시간 데이터로부터 요일, 주말 여부, 계절 등을 생성할 수 있습니다.
- 다항 특성 생성: 다항 특성(Polynomial Features)을 사용하여 비선형 관계를 모델링할 수 있습니다.
- 상호작용 항 (Interaction Terms): 두 개 이상의 변수를 곱하거나 조합하여 새로운 특성을 만들 수 있습니다.
4. 차원 축소 (Dimensionality Reduction)
- PCA (주성분 분석): 데이터의 분산을 최대한 보존하면서 차원을 축소하는 방법입니다.
- LDA (선형 판별 분석): 클래스를 분리하는 데 유용한 특성을 찾기 위해 차원을 축소합니다.
- t-SNE 및 UMAP: 비선형 차원 축소 기법으로, 고차원 데이터의 구조를 저차원 공간에 잘 투영하여 시각화할 때 주로 사용합니다.
5. 비대칭 데이터 처리 (Handling Imbalanced Data)
- Oversampling (예: SMOTE): 소수 클래스의 데이터를 증가시키는 방법으로, 대표적인 기법으로는 SMOTE가 있습니다.
- Undersampling: 다수 클래스의 데이터를 줄이는 방법으로, 데이터의 균형을 맞출 수 있습니다.
- Class Weight 조정: 모델 학습 시 손실 함수를 조정하여 소수 클래스에 더 큰 가중치를 부여하는 방법입니다.
6. 정규화 및 스케일링 (Normalization & Scaling)
- Min-Max Scaling: 데이터를 0과 1 사이로 스케일링합니다.
- 표준화 (Standardization): 데이터를 평균이 0, 분산이 1이 되도록 변환합니다.
- 로버스트 스케일링 (Robust Scaling): 중앙값과 IQR을 사용해 스케일링하여 이상치의 영향을 최소화합니다.
7. 데이터 증강 (Data Augmentation)
- 특히 이미지, 텍스트와 같은 비정형 데이터를 다룰 때 데이터 증강을 통해 데이터셋의 크기를 늘리고 모델의 일반화 성능을 향상시킬 수 있습니다. 예를 들어, 이미지 회전, 이동, 크기 조절, 텍스트의 동의어 교체 등이 있습니다.
8. 타깃 인코딩 (Target Encoding)
- 범주형 변수를 타깃 변수와의 통계적 관계를 반영해 수치형 변수로 변환하는 기법입니다. 예를 들어, 각 카테고리의 평균 타깃 값을 사용해 변수를 변환할 수 있습니다.
9. 노이즈 추가 (Adding Noise)
- 모델의 과적합을 방지하기 위해 데이터에 의도적으로 노이즈를 추가하여 학습할 수 있습니다. 이는 모델의 일반화 성능을 높이는 데 도움이 될 수 있습니다.
이러한 전처리 방법들은 데이터의 특성과 문제의 종류에 따라 선택적으로 적용할 수 있습니다. 각 방법의 효과를 비교하고 조정하면서 최적의 전처리 파이프라인을 구축하는 것이 중요합니다.