텍스트(또는 이미지, 코드 등 비정형 데이터)를 고정된 크기의 숫자 벡터로 변환하는 것
예:
“커피” → [0.12, -0.32, 0.55, ..., 0.08] (예: 1536 차원의 벡터)
이 숫자 벡터는 컴퓨터가 텍스트 의미를 수치적으로 이해하도록 만드는 방식이다.
텍스트를 그대로 비교하면 사람처럼 의미를 이해하지 못함
하지만 임베딩 벡터로 바꾸면:
예:
“커피 주문” ↔ “음료 주문하기” → 높은 유사도
“커피 주문” ↔ “날씨 정보” → 낮은 유사도
이걸 Vector Search 또는 Semantic Search 라고 함
EmbeddingModel.embed(text) - 텍스트 -> Embedding 객체 생성embedding.becrot() - 벡터(float[])추출EmbeddingStore.add(embedding, textSegment) - 벡터와 텍스트를 함께 저장 및 검색 다양한 임베딩/검색 시스템에서 텍스트 조각(chunk)을 표현하는 클래스.
보통 하나의 문서 전체가 아닌 문단, 문장 단위의 텍스트를 담으며, 임베딩 벡터와 함께 저장소에 저장된다.
val embedding = embeddingModel.embed(segment.text()).content()
embeddingStore.add(embedding, segment)
실제 저장소에는 벡터만 있는 것이 아니라 텍스트 + 벡터의 쌍이 함께 저장됨
⇒ 임베딩이란 텍스트의 의미를 수치화 한 벡터로, Azure AI Search 에서 문장을 비교하고 검색하기 위해 사용하는 핵심 기술이다.
Azure AI Search 나 LangChain4j 에서는 이를 기반으로 벡터 인덱싱 및 유사도 검색을 구현한다.
1. 텍스트 -> TextSegment로 분할
2. TextSegment.text() -> 임베딩 벡터화 (Embedding)
3. (Embedding, TextSegment) 쌍으로 저장소에 저장
4. 검색어도 벡터화 -> 저장된 벡터들과 유사도 비교
5. 유사도 높은 것 변환 -> TextSegment.text()로 원문 확인
https://docs.langchain4j.dev/apidocs/dev/langchain4j/data/embedding/Embedding.html