OpenAI

OpenAI / clip-vit-base-patch32

이미지 인코딩에는 ViT-B/32 트랜스포머 아키텍처를, 텍스트 인코딩에는 마스크드 셀프 어텐션 트랜스포머를 사용하는 CLIP 멀티모달 모델 변형입니다.

clip-vit-base-patch32 소개

OpenAI에서 개발한 CLIP 모델은 컴퓨터 비전 작업의 견고성을 이해하고 사전 훈련 없이 새로운 이미지 분류 작업에 일반화할 수 있는 모델의 능력을 테스트하는 것을 목표로 합니다. 'clip-vit-base-patch32' 변형은 이미지 인코딩을 위해 ViT-B/32 트랜스포머 아키텍처를 활용하고 텍스트 인코딩을 위해 마스크드 셀프 어텐션 트랜스포머를 사용합니다. 이 인코더는 대비 손실을 통해 (이미지, 텍스트) 쌍의 유사성을 최대화하도록 훈련함으로써 모델은 이미지를 해당 텍스트 설명과 연관시키는 방법을 학습합니다.

clip-vit-base-patch32로 멀티모달 임베딩을 만드는 방법

벡터 임베딩을 생성하는 방법에는 크게 두 가지가 있습니다:

  1. 질리즈 클라우드 파이프라인: 질리즈 클라우드(관리형 밀버스)에 내장된 기능으로, clip-vit-base-patch32 모델을 완벽하게 통합합니다. 텍스트 또는 이미지 벡터 임베딩을 간편하게 생성하고 검색할 수 있는 즉시 사용 가능한 솔루션을 제공합니다.
  2. 센텐스 트랜스포머: '센텐스_트랜스포머'를 위한 파이썬 라이브러리.

벡터 임베딩이 생성되면, 질리즈 클라우드(밀버스에서 제공하는 완전 관리형 벡터 데이터베이스 서비스)에 저장하여 의미적 유사도 검색에 사용할 수 있습니다. 다음은 네 가지 주요 단계입니다:

  1. 질리즈 클라우드 계정을 무료로 가입합니다.
  2. 서버리스 클러스터 설정](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster) 및 퍼블릭 엔드포인트 및 API 키를 발급받습니다.
  3. 벡터 컬렉션을 생성하고 벡터 임베딩을 삽입합니다.
  4. 저장된 임베딩에 대해 시맨틱 검색을 실행합니다.

질리즈 클라우드 파이프라인을 통해 벡터 임베딩을 생성하고 유사도 검색을 수행합니다.

단계별 지침은 다음 리소스를 참조하세요.

  • 질리즈 클라우드 파이프라인 문서](https://docs.zilliz.com/docs/building-a-rag-app-with-pipelines)
  • 질리즈 클라우드 파이프라인 데모 영상](https://zilliz.com/zilliz-cloud-pipelines)

센텐스 트랜스포머를 통해 벡터 임베딩을 생성하고 질리즈 클라우드에 삽입하여 유사도 검색하기

PIL에서 이미지 가져오기
에서 문장_변환기에서 문장_변환기 가져 오기
pymilvus에서 밀버스 클라이언트 가져오기
요청 가져오기

#CLIP 모델 로드
model = SentenceTransformer('clip-ViT-B-32')

# 이미지 임베딩 생성
image_urls = [
    "https://raw.githubusercontent.com/milvus-io/milvus-docs/v2.4.x/assets/milvus_logo.png",
]
images = [image_urls의 url에 대해 이미지.열기(requests.get(url, stream=True).raw)]
image_embedings = model.encode(images)

# 텍스트 임베딩 생성
queries = ["파란색 로고"]
query_embedings = model.encode(queries)

# 퍼블릭 엔드포인트와 API 키로 질리즈 클라우드에 연결하기
client = 밀버스클라이언트(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)

컬렉션 = "문서"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    collection_name=COLLECTION,
    dimension=512,
    auto_id=True)

image_url의 경우 zip(image_urls, image_embeddings)에 임베딩합니다:
    client.insert(COLLECTION, {"url": image_url, "vector": embedding})
    
results = client.search(
    collection_name=COLLECTION,
    data = 쿼리_임베딩,
    일관성_레벨="강함",
    output_fields=["text"])

자세한 내용은 허깅페이스의 모델 페이지를 참조하세요.