46.6kデモを予約するログイン無料で始める
香港大学NLP

香港大学NLP / instructor-base

インストラクター・モデル・ファミリーの最小バリエーションで、効率とパフォーマンスのバランスを考慮して設計されている。

インストラクター・モデル・ファミリーの紹介

NKU NLPのInstructorモデルは、指示によって微調整されたテキスト埋め込みモデルです。タスクの指示を与えるだけで、様々なドメイン(科学や金融など)のタスクに特化した埋め込み(分類、検索、クラスタリング、テキスト評価など)を作成します。

図 インストラクターモデルの仕組み](https://assets.zilliz.com/Figure_How_the_Instructor_Model_works_2b174dc8aa.png)

図:インストラクター・モデルの仕組み(画像:NKU NLP)

インストラクターモデルには3つのバリエーションがあります:インストラクター・ベース](instructor-base)、 インストラクター-xl、 インストラクター-ラージです。 それぞれのバージョンは、様々なエンベッディングのニーズに合わせて、異なるレベルのパフォーマンスとスケーラビリティを提供します。

インストラクターベース入門

instructor-baseはInstructorモデルファミリーの最小のバリエーションで、効率と性能のバランスをとるように設計されています。少ない計算量で高品質のテキスト埋め込みを必要とするタスクに最適です。

instructor-base、instructor-xl、instructor-large**を比較します。

特徴**instructor-baseinstructor-largeinstructor-xl

| 埋め込み寸法 | 768 | 768 | 768 | 平均MTEBスコア|55.9|58.4|58.8

インストラクターベース**での埋め込み作成方法

ベクトル埋め込みを生成するには、主に2つの方法があります:

  • PyMilvus](https://github.com/milvus-io/pymilvus): Milvus 用の Python SDK で、 instructor-base モデルをシームレスに統合しています。
  • インストラクタライブラリ: Pythonライブラリ InstructorEmbedding.

ベクトル埋め込みが作成されると、Zilliz Cloud (Milvusによって提供される完全に管理されたベクトルデータベースサービス)に保存され、意味的類似性検索に使用することができる。ここでは4つの重要なステップを紹介する:

  • Zilliz Cloudアカウントに無料でサインアップ](https://cloud.zilliz.com/signup)。
  • サーバーレスクラスターをセットアップ](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster)し、パブリックエンドポイントとAPIキーを取得する。
  • ベクトルコレクションを作成し、ベクトル埋め込みを挿入する。
  • 保存された埋め込みに対してセマンティック検索を実行する。

PyMilvus経由で埋め込みを作成する。

from pymilvus.model.dense import InstructorEmbeddingFunction
from pymilvus import MilvusClient

ef = InstructorEmbeddingFunction(
    "hkunlp/instructor-base"、
    query_instruction="ウィキペディアの質問を表現してください、
    doc_instruction="検索用のウィキペディア文書を表す:")

docs = [
   "人工知能は1956年に学問分野として設立された"、
   "アラン・チューリングはAIの実質的な研究を行った最初の人物である"、
   「チューリングはロンドンのマイダベールで生まれ、イングランド南部で育った。
]
# ドキュメントの埋め込みを生成する
docs_embeddings = ef.encode_documents(docs)

queries = ["人工知能はいつ創設されたか"、
          「アラン・チューリングはどこで生まれましたか?]

# クエリの埋め込みを生成
query_embeddings = ef.encode_queries(queries)

client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT、
    token=ZILLIZ_API_KEY)
    
COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    コレクション名=COLLECTION、
    dimension=ef.dim、
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})

results = client.search(
    collection_name=COLLECTION、
    data=query_embeddings、
    consistency_level="Strong"、
    output_fields=["text"])

InstructorEmbedding ライブラリを使ってベクトル埋め込みを生成する。

from InstructorEmbedding import INSTRUCTOR
from pymilvus import MilvusClient

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

docs = [["検索のためにウィキペディアの文書を表す:", "人工知能は1956年に学問分野として設立されました。"]、
        [ウィキペディアの文書を検索用に表現する:", "アラン・チューリングはAIの実質的な研究を行った最初の人物である"]]、
        [ウィキペディアの文書を検索する:", "チューリングはロンドンのマイダベールで生まれ、イングランド南部で育った。"]]。
# ドキュメントの埋め込みを生成する
docs_embeddings = model.encode(docs, normalize_embeddings=True)


queries = [["ウィキペディアの質問を表現する:", "人工知能が創設されたのはいつか"]、
           ["ウィキペディアの質問を表現する:", "アラン・チューリングはどこで生まれたか?"]].
# クエリの埋め込みを生成する
query_embeddings = model.encode(queries, normalize_embeddings=True)

# Public EndpointとAPI Keyを使ってZilliz Cloudに接続する。
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT、
    token=ZILLIZ_API_KEY)

COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    collection_name=COLLECTION、
    dimension=768、
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
results = client.search(
    collection_name=COLLECTION、
    data=query_embeddings、
    consistency_level="Strong"、
    output_fields=["text"])