배경
- 원래는 모든 내용을 한 파일에 담고 그걸 임베딩 했었다.
- 이번에는 여러 요소(table, text)를 각각 임베딩 해서 합치는 프로세스를 진행했다.
- 각 요소별 차원이 맞지 않아 임베딩에 계속 실패했다.
해결과정
- 현재 사용하고 있는 MiniLM의 최대 임베딩 차원은 384 였다.
- 따라서 모든 임베딩 길이를 384로 고정하기로 했다.
- 임베딩이 384보다 작다면 나머지를 0으로 채우고, 더 길다면 384에서 자르게 했다.
- 이렇게 문제를 해결했지만, 임베딩과 차원의 의미에 대해 더 자세히 알아야 했다.
임베딩(Embedding)이란?
임베딩(Embedding)은 고차원 데이터(텍스트, 이미지, 오디오 등)를 저차원의 벡터 공간으로 변환하는 기술입니다. 이 벡터는 의미적으로 유사한 데이터를 벡터 공간에서 가깝게 배치하는 역할을 합니다. 임베딩은 자연어 처리(NLP)와 컴퓨터 비전 분야에서 주로 사용되며, 모델이 데이터의 의미적 관계를 학습하고 처리할 수 있게 합니다.
임베딩의 주요 특징:
- 차원 축소: 고차원 데이터(텍스트의 경우, 단어들의 집합)를 저차원의 벡터로 변환하여 더 효율적으로 처리할 수 있습니다.
- 의미적 관계 반영: 벡터 공간에서 의미적으로 유사한 데이터(단어, 문장 등)는 서로 가까이 위치하고, 그렇지 않은 데이터는 멀리 위치하게 됩니다.
- 수치적 표현: 임베딩은 수치적인 벡터(숫자 배열)로 표현되므로 머신러닝 모델에서 직접 사용할 수 있습니다.
예시:
단어 임베딩의 경우, "king", "queen", "man", "woman" 같은 단어들이 임베딩 벡터로 변환되었을 때, king - man + woman ≈ queen처럼 의미적인 관계를 벡터 연산으로 나타낼 수 있습니다.
차원(Dimension)의 의미
임베딩 벡터의 차원은 해당 벡터가 표현할 수 있는 정보의 크기를 나타냅니다. 예를 들어, 차원이 384인 임베딩은 벡터가 384개의 숫자로 이루어져 있으며, 각각의 숫자는 원본 데이터의 특정 특징을 나타냅니다.
차원의 의미:
- 차원이 높을수록: 임베딩 벡터가 더 많은 정보를 담을 수 있습니다. 텍스트, 이미지와 같은 복잡한 데이터를 표현할 때, 더 높은 차원의 임베딩이 사용됩니다.
- 차원이 낮을수록: 처리 속도는 빨라지지만, 표현할 수 있는 정보가 줄어듭니다. 임베딩 벡터가 특정 데이터의 세밀한 차이를 잡아내지 못할 수도 있습니다.
임베딩의 차원 예시:
- Word2Vec 모델: 단어를 100차원 또는 300차원으로 임베딩합니다.
- Sentence Transformers 모델: 문장을 384차원, 768차원 등으로 임베딩합니다.
- 이미지 임베딩: 이미지 데이터는 보통 512차원, 1024차원 등으로 변환됩니다.
임베딩 차원이 왜 중요한가?
- 차원이 높을수록: 데이터의 세부적인 정보와 특징을 더 잘 반영할 수 있습니다. 예를 들어, 긴 문장이나 복잡한 이미지를 잘 표현하려면 더 높은 차원의 임베딩이 필요합니다.
- 차원이 낮을수록: 연산량이 줄어들고, 메모리 사용량이 적어집니다. 하지만 차원을 너무 낮추면 중요한 정보를 놓칠 수 있습니다.
임베딩 내에서 차원의 역할:
차원은 벡터 공간에서 각 임베딩이 데이터를 표현하는 방식입니다. 예를 들어, 텍스트 임베딩에서 차원 하나는 "주어의 성별", 다른 차원은 "감정의 강도" 같은 정보를 담을 수 있습니다. 이러한 차원의 조합이 임베딩 벡터의 유사성을 측정하는 데 중요한 역할을 합니다.
요약
- 임베딩: 데이터(텍스트, 이미지 등)를 수치적 벡터로 변환하여 의미적 유사성을 측정할 수 있게 하는 기법.
- 차원: 임베딩 벡터의 길이로, 데이터의 세부적인 특징을 표현할 수 있는 크기를 나타냄.
- 차원의 중요성: 차원이 높으면 더 많은 정보를 담을 수 있지만, 계산 비용이 증가하며, 낮으면 정보 손실이 있을 수 있음.
'langchain 공부' 카테고리의 다른 글
invoke와 get_relevant_documents의 차이 (1) | 2024.10.16 |
---|---|
서버 없는 초 저비용 rag 인프라 구상 (0) | 2024.09.26 |
llm 디코딩 방식 모음 (0) | 2024.09.02 |
langchain 주요 컴포넌트 설명 (2) | 2024.09.02 |
Tokenizer와 embedding(LLM 역사와 발전4) (0) | 2024.09.02 |