SAnker4swebz/mdbr-leaf-mt-bucket / evaluate_models.ipynb
SAnker4swebz's picture
download
raw
7.76 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"from typing import Dict, List\n",
"\n",
"IS_COLAB = True if \"GOOGLE_CLOUD_PROJECT\" in os.environ else False\n",
"if IS_COLAB:\n",
" # this needs to run before all other imports\n",
" os.environ[\"HF_HOME\"] = \"/content/cache/\" # to avoid running out of disk space\n",
"\n",
"import mteb\n",
"import numpy as np\n",
"import torch\n",
"from mteb.encoder_interface import PromptType\n",
"from sentence_transformers import SentenceTransformer"
]
},
{
"cell_type": "markdown",
"id": "5325acfb",
"metadata": {},
"source": [
"### Notebook Configuration"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f0189ff1e7814a5a",
"metadata": {},
"outputs": [],
"source": [
"MODELS = {\n",
" \"ir-prod\": {\n",
" \"name\": \"MongoDB/mdbr-leaf-ir\",\n",
" \"revision\": \"2e46f5aac796e621d51f678c306a66ede4712ecb\",\n",
" \"teacher\": \"Snowflake/snowflake-arctic-embed-m-v1.5\",\n",
" },\n",
" \"ir-paper\": {\n",
" \"name\": \"MongoDB/mdbr-leaf-ir\",\n",
" \"revision\": \"ea98995e96beac21b820aa8ad9afaa6fd29b243d\",\n",
" \"teacher\": \"Snowflake/snowflake-arctic-embed-m-v1.5\",\n",
" },\n",
" \"mt-prod\": {\n",
" \"name\": \"MongoDB/mdbr-leaf-mt\",\n",
" \"revision\": \"66c47ba6d753efc208d54412b5af6c744a39a4df\",\n",
" \"teacher\": \"mixedbread-ai/mxbai-embed-large-v1\",\n",
" },\n",
" \"mt-paper\": {\n",
" \"name\": \"MongoDB/mdbr-leaf-mt\",\n",
" \"revision\": \"c342f945a6855346bd5f48d5ee8b7e39120b0ce9\",\n",
" \"teacher\": \"mixedbread-ai/mxbai-embed-large-v1\",\n",
" },\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "371c6122efdf476a",
"metadata": {},
"source": [
"In the cell below:\n",
"* set the output folder and\n",
"* select one of the models defined above\n",
"* desired benchmark"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "58d52a330febb9ac",
"metadata": {},
"outputs": [],
"source": [
"# output_folder = f\"../../data/results/publish/\"\n",
"output_folder = f\"/content/data/results/publish/\"\n",
"\n",
"model_selection = MODELS[\"ir-prod\"]\n",
"benchmark_name = \"BEIR\"\n",
"\n",
"# model_selection = MODELS['mt-prod']\n",
"# benchmark_name = \"MTEB(eng, v2)\""
]
},
{
"cell_type": "markdown",
"id": "1b4367afc1278e",
"metadata": {},
"source": [
"### Run Evals"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c716c6344f9cd939",
"metadata": {},
"outputs": [],
"source": [
"benchmark = mteb.get_benchmark(benchmark_name)\n",
"evaluation = mteb.MTEB(tasks=benchmark)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d6f13945a94f7a85",
"metadata": {},
"outputs": [],
"source": [
"model = SentenceTransformer(model_selection[\"name\"], revision=model_selection[\"revision\"])\n",
"\n",
"# alternative:\n",
"# meta = mteb.get_model_meta(\n",
"# model_name=model_selection['name'],\n",
"# revision=model_selection['revision']\n",
"# )\n",
"# model = meta.load_model()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9bd44e88fc360663",
"metadata": {},
"outputs": [],
"source": [
"%%time\n",
"results = evaluation.run(\n",
" model=model,\n",
" verbosity=1,\n",
" output_folder=output_folder,\n",
" overwrite_results=True,\n",
")"
]
},
{
"cell_type": "markdown",
"id": "733e52ca41cf92a7",
"metadata": {},
"source": [
"Evaluate Quora"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "61aea9a04468202f",
"metadata": {},
"outputs": [],
"source": [
"if model_selection[\"name\"].endswith(\"ir\"):\n",
" # quora is closer to a sentence similarity task than a retrieval one, as queries aren't proper user queries\n",
" # we thus embed them without the typical query prompt\n",
" model.prompts = {}\n",
" tasks = mteb.get_tasks(\n",
" tasks=[\n",
" \"QuoraRetrieval\",\n",
" ]\n",
" )\n",
"\n",
" evaluation = mteb.MTEB(tasks=tasks)\n",
" results = evaluation.run(\n",
" model=model,\n",
" verbosity=1,\n",
" output_folder=output_folder,\n",
" overwrite_results=True,\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "6a6c164e",
"metadata": {},
"source": [
"### Asymmetric Mode\n",
"\n",
"Compute asymmetric mode scores: queries encoded by `leaf`, documents by the original teacher model."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "487ba349",
"metadata": {},
"outputs": [],
"source": [
"class AsymmetricModel:\n",
" def __init__(\n",
" self,\n",
" doc_model: SentenceTransformer,\n",
" query_model: SentenceTransformer,\n",
" ) -> None:\n",
" self.doc_model = doc_model\n",
" self.query_model = query_model\n",
"\n",
" def encode(self, sentences: List[str], **kwargs) -> np.ndarray | torch.Tensor:\n",
" if \"prompt_type\" not in kwargs:\n",
" kwargs[\"prompt_type\"] = None\n",
"\n",
" match kwargs[\"prompt_type\"]:\n",
" case PromptType.query:\n",
" out = self.query_model.encode(sentences, prompt_name=\"query\", **kwargs)\n",
"\n",
" case PromptType.document:\n",
" out = self.doc_model.encode(sentences, **kwargs)\n",
"\n",
" case None:\n",
" print(\"No prompt type: using query (leaf) model for encoding\")\n",
" out = self.query_model.encode(sentences, **kwargs)\n",
" case _:\n",
" raise ValueError(f\"Encoding unknown type: {kwargs['prompt_type']}\")\n",
"\n",
" if not isinstance(out, torch.Tensor):\n",
" out = torch.from_numpy(out)\n",
"\n",
" out = out.to(\"cpu\")\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4162af7f",
"metadata": {},
"outputs": [],
"source": [
"leaf = SentenceTransformer(model_selection[\"name\"], revision=model_selection[\"revision\"])\n",
"teacher = SentenceTransformer(model_selection[\"teacher\"])\n",
"\n",
"asymm_model = AsymmetricModel(\n",
" query_model=leaf,\n",
" doc_model=teacher,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "848d8a5f",
"metadata": {},
"outputs": [],
"source": [
"%%time\n",
"results = evaluation.run(\n",
" model=asymm_model,\n",
" verbosity=1,\n",
" output_folder=output_folder,\n",
" overwrite_results=True,\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

Xet Storage Details

Size:
7.76 kB
·
Xet hash:
c765100bf3102e1483e581b0f3a76fa099d782483042c83b6869e611c79a35a1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.