LLM을 활용한 실전 AI 애플리케이션 개발
- 허정준
🧭 임베딩 모델로 데이터 의미 압축하기
지금까지 텍스트를 숫자로 표현하려던 다양한 시도들이 있었음..
- 원핫 인코딩 : 텍스트를 숫자로 표현하지만 의미를 담지는 못함
- 문장 임베딩 : 문장을 벡터로 표현하는 임베딩
- 하이브리드 검색 : 키워드 검색 + 의미 검색 ( 관련도 높이기)
발전~!~!
텍스트를 의미를 담아 더 압축적인 임베딩 벡터를 만드는 방향으로 발전해 옴
기본적으로 사용할 임베딩 모델
: OpenAI의 text-embedding-ada-002
젤유명한듯
🗃️ 텍스트 임베딩 이해하기
텍스트 임베딩 / 문장 임베딩
임베딩 :
데이터의 의미를 압축한 숫자 배열
컴퓨터는 숫자만 이해할 수 있기 때문에..
밀집 임베딩 ( dense embedding )
🥞 문장 임베딩 방식의 장점
단어나 문장 사이의 "관계"를 계산할 수 있음
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
smodel = SentenceTransformer('snunlp/KR-SBERT-V40K-klueNLI-augSTS')
dense_embeddings = smodel.encode(['학교', '공부', '운동'])
cosine_similarity(dense_embeddings) # 코사인 유사도
# array([[1.0000001 , 0.5950744 , 0.32537547],
# [0.5950744 , 1.0000002 , 0.54595673],
# [0.32537547, 0.54595673, 0.99999976]], dtype=float32)
유클리드 함수나 코사인 유사도를 이용해서 거리(관련도) 계산하기
🥞 원핫 인코딩 / one-hot encoding
- "샤인머스켓" → 1
- "망고스틴" → 2
- "블루베리" → 3
샤인머스켓이 블루베리보다 더 작아? (?)
단어와 단어 사이에 아무런 관계를 표현하지 않고 나타내기
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
word_dict = {"school": np.array([[1, 0, 0]]),
"study": np.array([[0, 1, 0]]),
"workout": np.array([[0, 0, 1]])
}
# 두 단어 사이의 코사인 유사도 계산하기
cosine_school_study = cosine_similarity(word_dict["school"], word_dict['study']) # 0
cosine_school_workout = cosine_similarity(word_dict['school'], word_dict['workout']) # 0
- "샤인머스켓" → [1, 0, 0]
- "망고스틴" → [0, 1, 0]
- "블루베리" → [0, 0, 1]
근데 과일끼리의 연관성도 살릴 수 없음..
🥞 백오브워즈 / bag-of words
"비슷한 단어가 많이 나오면 비슷한 문장 또는 문서이다"
=> 해당 단어에 등장한 단어와 그 등장 횟수 집계
단어의 빈도를 이용해서 카테고리화
훌륭히 작동..
- 하지만 조사 같은 건 어디에서나 많이 나옴
- AI 같은 핫한 키워드는 카테고리를 가리지 않고 많이 나옴
=> 단어의 빈도만으로 해석할 수 없는 문서의 의미 존재 문제
🥞 TF-IDE / term Frequency-Inverse Document Frequency
백오브워즈의 "어느 문서에나 나오는 단어" 문제를 해결
=> 많은 문서에 등장하는 단어의 중요도를 작게 설정
TF-IDF(w) = TF(w) : 특정 문서에서 특정 단어 w가 등장한 횟수 * log(N : 전체 문서의 수 / DF(w) :특정 단어 w가 등장한 문서 개수)
위의 텍스트 임베딩 방법은 문서에 등장하는 단어 수만큼 차원이 커지는 단점이 있음
대부분의 값이 0인 벡터들(희소sparse 벡터)이 많음
=> 벡터 사이의 관계를 표현하기 어려움
의미를 압축해서 담고 있는 "밀집 임베딩 dense embedding"
🥞 워드투백
단어가 함께 등장하는 빈도 정보를 활용해 단어의 의미를 압축하여 임베딩
AI는 ML과, 한강은 라면과 함께 많이 등장함
인공신경망을 이용해 단어의 의미를 압축하기
: 특정 단어 주변에 있는 단어들을 예측하는 모델을 만들자
1) CROW
주변 단어로 가운데 있는 단어를 예측하기
2) 스킵그램
가운데 있는 단어로 주변 단어 예측하기
=> 단어와 단어 사이에 관계를 계산할 수 있음
=> 관계(거리)에도 의미를 담을 수 있음
ㅎㅎ.. 터미널에 브랜치 보이게 하려고 커스텀하다가
그만..
'🤖 AI > AI' 카테고리의 다른 글
🔬임베딩 모델로 데이터 의미 압축하기 : 의미 검색 구현 (0) | 2025.01.20 |
---|---|
🔬임베딩 모델로 데이터 의미 압축하기 : 문장 임베딩 (0) | 2025.01.17 |
🔬LLM 어플리케이션 개발하기 : 데이터 로깅 (0) | 2025.01.16 |
🔬LLM 어플리케이션 개발하기 : 데이터 검증 (0) | 2025.01.16 |
🔬LLM 어플리케이션 개발하기 : LLM 캐시 (7) | 2025.01.15 |