Jina AI

Jina AI / jina-embeddings-v2-base-code

영어와 30개의 인기 프로그래밍 언어를 이해하는 다국어 임베딩 모델로, 시퀀스당 최대 8192개의 토큰을 처리할 수 있습니다.

Jina 임베딩 v2 모델 소개

Jina 임베딩 v2 모델은 최대 입력 크기가 8,192토큰으로 확장된 긴 문서를 처리하도록 설계되었습니다. 2024년 10월 현재, Jina AI 임베딩 V2에는 다음과 같은 변형이 있으며, 각 변형은 서로 다른 임베딩 요구 사항을 충족합니다.

jina-embeddings-v2-base-code란?

'jina-embeddings-v2-base-code'는 영어와 30개의 인기 프로그래밍 언어를 이해하는 다국어 임베딩 모델로, 최대 8192 토큰 길이의 시퀀스를 지원합니다. 이 모델은 BERT 기반 아키텍처, 특히 더 긴 시퀀스를 관리하기 위한 대칭형 양방향 변형 ALiBi를 포함하는 JinaBERT를 활용합니다. 처음에는 GitHub의 코드 데이터셋으로 사전 학습된 이 모델은 다양한 도메인의 1억 5천만 개가 넘는 코딩 질문-답변 쌍과 문서 문자열 소스 코드 쌍으로 구성된 Jina AI의 방대한 컬렉션을 통해 더욱 향상되었습니다.

'jina-embeddings-v2-base-code'를 다른 Jina 임베딩 모델과 비교.

모델파라미터 크기임베딩 치수텍스트
jina-embeddings-v3570M유연한 임베딩 크기(기본값: 1024)다국어 텍스트 임베딩, 총 94개 언어 지원
jina-embeddings-v2-small-en33M512영어 단일 언어 임베딩
jina-embeddings-v2-base-en137M768영어 단일 언어 임베딩
jina-embeddings-v2-base-zh161M768중국어-영어 이중 언어 임베딩
jina-embeddings-v2-base-de161M768독일어-영어 이중 언어 임베딩
jina-embeddings-v2-base-code161M768영어 및 프로그래밍 언어

jina-embeddings-v2-base-code를 사용하여 임베딩을 만드는 방법

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

  1. PyMilvus: jina-embeddings-v2-base-code 모델을 원활하게 통합하는 Milvus용 Python SDK.
  2. 센텐스 트랜스포머 라이브러리: 파이썬 라이브러리 '센텐스 트랜스포머'.

벡터 임베딩이 생성되면, 질리즈 클라우드(Milvus에서 제공하는 완전 관리형 벡터 데이터베이스)와 같은 벡터 데이터베이스에 저장하여 의미 유사도 검색에 사용할 수 있습니다.

다음은 네 가지 주요 단계입니다:

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

파이밀버스를 통해 임베딩을 생성하고 질리즈 클라우드에 삽입하여 시맨틱 검색하기

pymilvus.model.dense에서 SentenceTransformerEmbeddingFunction을 가져옵니다.
pymilvus에서 MilvusClient를 가져옵니다.

ef = SentenceTransformerEmbeddingFunction("jinaai/jina-embeddings-v2-base-code", trust_remote_code=True)

docs = [
   "인공 지능은 1956년에 학문 분야로 설립되었습니다.",
   "앨런 튜링은 AI 분야에서 실질적인 연구를 수행한 최초의 인물입니다.",
   "런던의 메이다 베일에서 태어난 튜링은 영국 남부에서 자랐습니다.", "튜링은 인공지능을 연구한 최초의 사람입니다.".
]
# 문서에 대한 임베딩 생성
docs_embedings = ef(docs)

queries = ["인공 지능은 언제 설립되었나요",
          "앨런 튜링은 어디에서 태어났나요?"]]
# 쿼리에 대한 임베딩 생성하기
쿼리_임베딩 = ef(쿼리)

# 퍼블릭 엔드포인트와 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=ef.dim,
    auto_id=True)

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

자세한 내용은 파이밀버스 임베딩 모델 문서(자세한 내용은 파이밀버스 임베딩 모델 문서(https://milvus.io/docs/embeddings.md))를 참조하세요.

센텐스 트랜스포머 라이브러리를 통해 임베딩을 생성하고 질리즈 클라우드에 삽입하여 시맨틱 검색을 합니다.

sentence_transformers에서 SentenceTransformer를 가져옵니다.
pymilvus에서 밀버스 클라이언트 가져오기

model = SentenceTransformer("jinaai/jina-embeddings-v2-base-code", trust_remote_code=True)

docs = [
   "인공 지능은 1956년에 학문 분야로 설립되었습니다.",
   "앨런 튜링은 AI 분야에서 실질적인 연구를 수행한 최초의 인물입니다.",
   "런던의 메이다 베일에서 태어난 튜링은 영국 남부에서 자랐습니다.", "튜링은 인공지능을 연구한 최초의 사람입니다.".
]
# 문서에 대한 임베딩 생성
docs_embeddings = model.encode(docs, normalize_embeddings=True)

queries = ["query: 인공 지능은 언제 설립되었나요?"
           "query: 앨런 튜링은 언제 태어났나요?" ]
# 쿼리에 대한 임베딩 생성하기
query_embeddings = model.encode(queries, normalize_embeddings=True)

# 퍼블릭 엔드포인트와 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=768,
    auto_id=True)

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