박주니 개발 정리

python faiss 벡터화 임배딩 만드는 방법 (faiss 및 embedding model 준비) 본문

AI

python faiss 벡터화 임배딩 만드는 방법 (faiss 및 embedding model 준비)

박주니 2024. 8. 26. 15:44
728x90
반응형

python에서 openai 및 faiss 환경을 설정하기 위해서는 먼저 가상환경부터 구축부터 진행을 해야합니다. 

 

1. miniconda에서 python 가상환경을 설정합니다. 

https://junhee6773.tistory.com/entry/miniconda-%EC%84%A4%EC%B9%98-%EB%B0%8F-vscode-%EC%97%B0%EA%B2%B0-%EB%B0%A9%EB%B2%95

 

miniconda 설치 및 vscode 연결 방법

1. https://docs.anaconda.com/free/miniconda/miniconda-install/ 에서 환경에 맞게 설치합니다. 저는 window환경이여서 windows graphical installer에서 설치했습니다.  Installing Miniconda — Anaconda documentationDownload the instal

junhee6773.tistory.com

2. 만드신 가상환경에서 faiss embedding 환경에 필요한 faiss-cpu, numpy, requests, python-dotenv, openai를 설치합니다. 

pip install faiss-cpu numpy requests python-dotenv
pip install openai==0.28

3. playground에서 원하시는 openai key를 생성합니다. 

추가 설명) 

이중에서 저는 text-embedding-3-large를 사용한 이유가 지금 search ai를 만들려고하는데 model 성능에 따라서 유사성 체크를 해서 값을 출력하는데 그 이하 모델을 이용하면 값이 제대로 안나오기 때문에 저는 text-embedding-3-large로 이용했습니다. 

 

먼저 시작하기 전에 python faiss를 벡터화 임베딩하는데 사용하게 된 이유는 인터넷을 치면 여러 이유가 있겠지만 가장 큰건 gpu를 지원하고 대규모 벡터 검색을 더욱 빠르게 수행해준다는 것이 가장 컸습니다. 

 

벡터db를 이용할려고 pinecone를 free로 사용해보았지만 결국에는 gpu에 문제가 있었고 확장할려면 결제를 해야했기때문입니다.

간단 설명) embedding model을 이용해서 data를 embedding하고 그것을 faiss로 벡터화해서 파일로 저장한다고 보시면 됩니다.

 

전체 코드 

 

4. 데이터를 가지고 올 수 있는 url 및 json을 준비하신다음 임베딩할 데이터를 준비합니다. 

url = "get data url"
response = requests.post(url)
response.encoding = 'utf-8'
data = response.json()
products = data

5. 검색 기반으로 하실 value 위주로 임배딩을 진행합니다. 

# 텍스트를 임베딩으로 변환
def get_embedding(text):
    response = openai.Embedding.create(
        model="text-embedding-3-large",
        input=text
    )
    embedding = response['data'][0]['embedding']
    return embedding

추가 설명) 예를 들어서 상품명을 위주로 찾을려고한다면 product["product_name"]으로 반복문을 돌려서 해당 text를 get_embedding에 넣어서 진행하시면 됩니다. 

6. 해당 임베딩한 것을 순차적으로 담고 faiss로 백터화를 진행합니다. 

dimension = 3072
index = faiss.IndexFlatIP(dimension)

if embeddings:
  index.add(np.array(embeddings))
  logger.info("FAISS 인덱스에 임베딩이 성공적으로 추가되었습니다.")

추가 설명) 

dimension은 embedding model에 따라 다르게 설정합니다. 

https://platform.openai.com/docs/models/whisper

 

7. 전체 데이터를 product_index.faiss 파일로 저장하고 검색 위주에 따라 np 설정했던 것은 products.npy로 저장을 진행합니다. 

    faiss.write_index(index, "product_index.faiss")
    np.save("products.npy", products)

추가 설명) 파일 이름은 대상에 맞게 변경하시면 됩니다. 

 

여기까지 진행하시고 실행을 시키면 faiss_index.faiss, products.npy 파일이 생성되고 그 파일을 이용해서 search ai를 개발하실 수 있습니다. 

728x90
반응형
Comments