LangChain과 OpenAI를 활용한 텍스트 임베딩 가이드

GoGoComputer·2024년 10월 30일
0

LangChain Basics

목록 보기
16/40
post-thumbnail

LangChain과 함께하는 텍스트 임베딩 강좌에 오신 것을 환영합니다.

이번 강좌에서는 LangChain을 사용하여 텍스트를 벡터로 변환하고, 이를 활용하는 방법에 대해 자세히 알아보겠습니다. 또한, 마지막에는 실제로 실행 가능한 전체 코드를 제공하여 직접 실습해보실 수 있도록 하겠습니다. OPENAI_API_KEY.env 파일에 저장하여 불러오는 방식으로 진행하겠습니다.

1. LangChain과 텍스트 임베딩

LangChain은 텍스트를 벡터화된 표현으로 변환하는 다양한 임베딩(Embedding) 모델을 지원합니다. 이러한 벡터화된 표현은 자연어 처리 및 인공지능 모델에서 텍스트의 의미를 수치화하여 계산에 활용할 수 있게 해줍니다.

1.1 텍스트 임베딩의 중요성

  • 의미 파악: 벡터로 변환된 텍스트는 컴퓨터가 텍스트의 의미적 유사성을 계산할 수 있게 합니다.
  • 검색 및 추천 시스템: 벡터화를 통해 유사한 문서를 빠르게 찾을 수 있습니다.
  • 모델 입력: 딥러닝 모델에 텍스트를 입력하기 위해서는 수치형 데이터로의 변환이 필요합니다.

2. 임베딩 모델 선택 시 주의사항

중요한 점은 초기 임베딩 모델을 신중하게 선택해야 한다는 것입니다. 그 이유는:

  • 호환성 문제: 서로 다른 임베딩 모델에서 생성된 벡터들은 서로 호환되지 않습니다.
  • 재임베딩 필요성: 만약 기존에 A 모델로 임베딩한 문서가 있는데, 이후에 B 모델로 변경하게 되면, 기존의 모든 문서를 다시 임베딩해야 합니다.
  • 원본 데이터 보관: 따라서 원본 텍스트 데이터를 보관하고 있어야 새로운 임베딩 모델로 재임베딩할 수 있습니다.

3. LangChain으로 텍스트 임베딩하기

이제 LangChain을 사용하여 텍스트를 어떻게 임베딩하는지 알아보겠습니다.

3.1 사전 준비

  • 필요한 패키지 설치
pip install langchain openai python-dotenv
  • .env 파일 생성 및 API 키 저장
OPENAI_API_KEY=your_openai_api_key_here

3.2 코드 구현

# 필요한 모듈 임포트
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import CSVLoader
import os
from dotenv import load_dotenv

# .env 파일에서 API 키 로드
load_dotenv()
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')

# OpenAI 임베딩 인스턴스 생성
embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)

# 임베딩할 텍스트 예시
text = "OpenAI를 사용하여 텍스트를 N차원 벡터로 임베딩합니다."

# 텍스트 임베딩
embedded_text = embeddings.embed_query(text)

# 임베딩 결과 확인
print(f"임베딩 벡터의 차원: {len(embedded_text)}")
print(f"임베딩 벡터의 내용: {embedded_text[:5]}...")  # 벡터의 일부만 출력

3.3 설명

  • OpenAIEmbeddings 클래스를 사용하여 OpenAI의 임베딩 모델을 활용합니다.
  • embed_query 메서드를 통해 단일 텍스트를 임베딩합니다.
  • 임베딩된 결과는 벡터(숫자의 리스트)로 반환됩니다.

4. 문서 임베딩

단일 텍스트가 아니라 CSV 파일과 같은 문서 내의 여러 텍스트를 임베딩해보겠습니다.

4.1 CSV 로더를 사용한 문서 로드

# CSVLoader를 사용하여 데이터 로드
loader = CSVLoader(file_path='data/penguins.csv', encoding='utf-8')
data = loader.load()

# 로드된 데이터 확인
print(f"로드된 문서의 수: {len(data)}")
print(f"첫 번째 문서의 내용:\n{data[0].page_content}")

4.2 문서에서 텍스트 추출 및 임베딩

# 문서에서 텍스트 추출
texts = [doc.page_content for doc in data]

# 문서 임베딩
embedded_docs = embeddings.embed_documents(texts)

# 임베딩된 문서 벡터의 수 확인
print(f"임베딩된 문서 벡터의 수: {len(embedded_docs)}")

4.3 설명

  • CSVLoader를 사용하여 CSV 파일을 로드합니다.
  • 각 문서는 Document 객체로 표현되며, page_content 속성에 텍스트가 저장되어 있습니다.
  • 리스트 컴프리헨션을 사용하여 모든 문서의 텍스트를 추출합니다.
  • embed_documents 메서드를 통해 텍스트의 리스트를 임베딩합니다.
  • 결과적으로 각 문서에 대한 임베딩 벡터의 리스트가 생성됩니다.

5. 주의사항 및 추가 정보

  • API 호출 비용: 임베딩을 생성할 때마다 OpenAI API를 호출하게 되므로, 비용이 발생합니다. 따라서 대량의 텍스트를 임베딩할 때는 비용을 고려해야 합니다.
  • 출력 제한: 임베딩된 벡터는 매우 길 수 있으므로, 출력할 때 전체를 출력하지 않도록 주의합니다.
  • 벡터 스토어 활용: 생성된 임베딩 벡터는 추후에 검색이나 유사도 계산 등에 사용하기 위해 벡터 스토어(예: ChromaDB)에 저장할 수 있습니다.

6. 전체 코드

# 필요한 모듈 임포트
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import CSVLoader
import os
from dotenv import load_dotenv

# .env 파일에서 API 키 로드
load_dotenv()
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')

# OpenAI 임베딩 인스턴스 생성
embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)

# 임베딩할 텍스트 예시
text = "OpenAI를 사용하여 텍스트를 N차원 벡터로 임베딩합니다."

# 텍스트 임베딩
embedded_text = embeddings.embed_query(text)

# 임베딩 결과 확인
print(f"임베딩 벡터의 차원: {len(embedded_text)}")
print(f"임베딩 벡터의 내용: {embedded_text[:5]}...")  # 벡터의 일부만 출력

# CSVLoader를 사용하여 데이터 로드
loader = CSVLoader(file_path='data/penguins.csv', encoding='utf-8')
data = loader.load()

# 로드된 데이터 확인
print(f"로드된 문서의 수: {len(data)}")
print(f"첫 번째 문서의 내용:\n{data[0].page_content}")

# 문서에서 텍스트 추출
texts = [doc.page_content for doc in data]

# 문서 임베딩
embedded_docs = embeddings.embed_documents(texts)

# 임베딩된 문서 벡터의 수 확인
print(f"임베딩된 문서 벡터의 수: {len(embedded_docs)}")

# 첫 번째 임베딩 벡터 확인
print(f"첫 번째 임베딩 벡터의 차원: {len(embedded_docs[0])}")
print(f"첫 번째 임베딩 벡터의 내용: {embedded_docs[0][:5]}...")  # 벡터의 일부만 출력

7. 실행 방법

  1. 패키지 설치
pip install langchain openai python-dotenv
  1. .env 파일 생성 및 API 키 저장
  • 프로젝트 디렉토리에 .env 파일을 생성하고 다음과 같이 작성합니다:
OPENAI_API_KEY=your_openai_api_key_here
  1. CSV 파일 준비
  • data 폴더를 생성하고, 그 안에 penguins.csv 파일을 저장합니다. CSV 파일은 임의의 내용을 사용하셔도 됩니다.
  1. 코드 실행
python your_script_name.py

8. 마무리

이번 강좌에서는 LangChain을 사용하여 텍스트를 임베딩하고, 이를 문서에 적용하는 방법에 대해 알아보았습니다. 임베딩된 벡터는 자연어 처리에서 매우 유용하게 사용되며, 검색, 분류, 추천 시스템 등 다양한 분야에서 활용됩니다.

다음 강좌에서는 생성된 임베딩 벡터를 벡터 스토어에 저장하고 활용하는 방법에 대해 알아보겠습니다.

profile
IT를 좋아합니다.

0개의 댓글