HKU NLP

HKU NLP / instructor-base

효율성과 성능의 균형을 맞추도록 설계된 강사 모델 제품군 중 가장 작은 변형입니다.

강사 모델 제품군 소개 ## 강사 모델 제품군 소개

NKU NLP의 Instructor 모델은 지침에 따라 미세 조정된 텍스트 임베딩 모델입니다. 별도의 미세 조정이 필요 없이 작업 지침만 제공하면 다양한 도메인(과학 및 금융 등)에서 작업별 임베딩(분류, 검색, 클러스터링, 텍스트 평가 등)을 생성할 수 있습니다.

강사 모델 작동 방식 그림](https://assets.zilliz.com/Figure_How_the_Instructor_Model_works_2b174dc8aa.png)

그림: 강사 모델의 작동 방식(NKU NLP 이미지)

강사 모델은 세 가지 변형이 있습니다: [instructor-base](인스트럭터 베이스), instructor-xl, instructor-large 각 버전은 다양한 임베딩 요구에 맞게 서로 다른 수준의 성능과 확장성을 제공합니다.

인스트럭터 베이스 소개

인스트럭터-베이스는 효율성과 성능의 균형을 맞추도록 설계된 인스트럭터 모델 제품군 중 가장 작은 변형입니다. 낮은 계산 공간으로 고품질 텍스트 임베딩이 필요한 작업에 이상적입니다.

강사-베이스, 강사-XL 및 강사-Large** 비교하기

기능인스트럭터-베이스인스트럭터-라지인스트럭터-엑스엘
파라미터 크기8600만3억 3500만15억
임베딩 치수768768768768
Avg. MTEB 점수55.958.458.8**평균

인스트럭터-베이스로 임베딩을 만드는 방법

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

  • PyMilvus](https://github.com/milvus-io/pymilvus): 인스트럭터 베이스 모델을 원활하게 통합하는 Milvus 용 Python SDK.
  • 강사 라이브러리: Python 라이브러리 InstructorEmbedding.

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

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

파이밀버스를 통해 임베딩 생성하기

pymilvus.model.dense에서 InstructorEmbeddingFunction을 가져옵니다.
파이밀버스에서 밀버스 클라이언트 임포트

ef = 강사 임베딩 함수(
    "hkunlp/instructor-base",
    query_instruction="지원 문서 검색을 위한 위키백과 질문 표현:",
    doc_instruction="검색할 위키백과 문서를 나타냅니다:")

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

queries = ["인공 지능은 언제 설립되었나요",
          "앨런 튜링은 어디에서 태어났나요?"]

# 쿼리에 대한 임베딩 생성하기
쿼리_임베딩 = ef.encode_queries(쿼리)

client = 밀버스클라이언트(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    토큰=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"])

인스트럭터 임베딩 라이브러리를 통해 벡터 임베딩 생성하기

강사 임베딩에서 INSTRUCTOR를 가져옵니다.
pymilvus에서 MilvusClient를 가져옵니다.

model = INSTRUCTOR('hkunlp/instructor-base')

docs = [["검색할 위키백과 문서를 나타냅니다: ", "인공 지능은 1956년에 학문 분야로 설립되었습니다."]],
        ["검색할 위키백과 문서를 나타냅니다: ","앨런 튜링은 인공지능 분야에서 실질적인 연구를 수행한 최초의 인물입니다."],
        ["검색할 위키백과 문서를 나타냅니다: ","런던의 메이다 베일에서 태어난 튜링은 잉글랜드 남부에서 자랐습니다."]]]
# 문서에 대한 임베딩 생성
docs_embeddings = model.encode(docs, normalize_embeddings=True)


queries = [["지원 문서를 검색하기 위한 위키백과 질문을 나타냅니다: ", "인공 지능은 언제 설립되었나요"],
           ["지원 문서를 검색하기 위한 위키백과 질문을 나타냅니다: ","앨런 튜링은 어디에서 태어났나요?"]]]
# 쿼리에 대한 임베딩 생성하기
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"])