Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wechseln Von Diensten mithilfe der Dropdownliste "Version ". Weitere Informationen zur Navigation.
Gilt für: ✅ Microsoft Fabric ✅ Azure Data Explorer
Die Funktion slm_embeddings_fl() ist eine UDF (benutzerdefinierte Funktion), die Texteinbettungen mithilfe lokaler SLM-Modelle (Small Language Models) generiert. Diese Funktion konvertiert Text in numerische Vektordarstellungen, die für die semantische Suche, Ähnlichkeitsanalyse und andere Verarbeitungsaufgaben in natürlicher Sprache verwendet werden können.
Derzeit unterstützt die Funktion harrier-v1-270m, jina-v2-small, e5-small-v2 und SecBERT Modelle. SecBERT ist für Cybersicherheitstext konzipiert und generiert 768-dimensionale Einbettungen.
Voraussetzungen
- Das Plug-In
python()muss auf dem Cluster enabled auf dem Cluster sein entweder mit dem3.11.7oder3.11.7 DLPython Sandkastenimage. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird. Informationen zum Überprüfen des Paketinhalts für diese Bilder finden Sie unter Python Paketreferenz. - Ändern Sie die Popuprichtlinie des Clusters so, dass der Zugriff auf die externen Artefakte zulässt (auf die im folgenden KQL-Code verwiesen wird):
.alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.z22\\.web\\.core\\.windows\\.net/models/SLM/","CanCall": true } ]'
Beachten Sie, dass für diese Änderung "AllDatabasesAdmin "-Berechtigungen erforderlich sind.
Syntax
T | invoke slm_embeddings_fl(
, text_colembeddings_col [,batch_size ] [,model_name ] [,Präfix ])
Erfahren Sie mehr über Syntaxkonventionen.
Die Parameter
| Name | Typ | Erforderlich | Description |
|---|---|---|---|
| text_col | string |
✔️ | Der Name der Spalte, die den einzubettenden Text enthält. |
| embeddings_col | string |
✔️ | Der Name der Spalte zum Speichern der Ausgabeeinbettungen. |
| batch_size | int |
Die Anzahl der Zu verarbeitenden Texte in den einzelnen Stapeln. Der Standardwert ist 32. | |
| Model_name | string |
Der Name des zu verwendenden Einbettungsmodells. Unterstützte Werte sind harrier-v1-270m (Standard), jina-v2-small, , e5-small-v2und secbert. Der Wert muss mit dem ZIP-Dateinamen des Modellartefaktes ohne die .zip Erweiterung übereinstimmen. |
|
| Präfix | string |
Das Textpräfix, das vor jeder Eingabe hinzugefügt werden soll. Der Standardwert ist query:. Verwenden Sie query: für die Harrier- und E5-Modelle Suchabfragen und passage: für Dokumente, passage: die durchsucht werden sollen (für das Harrier-Modell ist dies der leeren Aufgabe zugeordnet). Dieser Parameter wird für die Jina- und SecBERT-Modelle ignoriert. |
Funktionsdefinition
- Definieren Sie die Funktion, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder als gespeicherte Funktion in Ihrer Datenbank erstellen.
- Jeder Aufruf lädt das Einbettungsmodul und nur das ausgewählte Modellartefakt. Um den Speicher zu optimieren, löschen Sie externe Artefakte für Modelle, die nicht verwendet werden.
- Wenn das Python Sandkastenimage das Paket nicht enthält
tokenizers, heben Sie die Kommentare intokenizers-0.22.1.whlder Funktionsdefinition auf.
Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.
Von Bedeutung
Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels slm_embeddings_fl()finden Sie unter Beispiel.
let slm_embeddings_fl = (tbl:(*), text_col:string, embeddings_col:string, batch_size:int=32, model_name:string='harrier-v1-270m', prefix:string='query:')
{
let artifact_root = 'https://artifactswestus.z22.web.core.windows.net/models/SLM/';
let engine_artifact = 'embedding_engine.zip';
let kwargs = bag_pack('text_col', text_col, 'embeddings_col', embeddings_col, 'batch_size', batch_size, 'model_name', model_name, 'prefix', prefix);
let code = ```if 1:
from sandbox_utils import Zipackage
Zipackage.install('embedding_engine.zip')
# Zipackage.install('tokenizers-0.22.1.whl') # redundant if tokenizers package is included in the Python image
from embedding_factory import create_embedding_engine
text_col = kargs["text_col"]
embeddings_col = kargs["embeddings_col"]
batch_size = kargs["batch_size"]
model_name = kargs["model_name"]
prefix = kargs["prefix"]
Zipackage.install(f'{model_name}.zip')
engine = create_embedding_engine(model_name, cache_dir="C:\\Temp")
embeddings = engine.encode(df[text_col].tolist(), batch_size=batch_size, prefix=prefix) # prefix is used by E5 and Harrier; Jina and SecBERT ignore it
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(
typeof(*), code, kwargs,
external_artifacts=bag_pack(
// 'tokenizers-0.22.1.whl', strcat(artifact_root, 'tokenizers-0.22.1-cp39-abi3-win_amd64.whl'),
'embedding_engine.zip', strcat(artifact_root, engine_artifact),
strcat(model_name, '.zip'), strcat(artifact_root, model_name, '.zip')))
};
// Write your query to use the function here.
Example
Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.
Generieren von Einbettungen und Ausführen der semantischen Suche
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
let slm_embeddings_fl=(tbl:(*), text_col:string, embeddings_col:string, batch_size:int=32, model_name:string='harrier-v1-270m', prefix:string='query:')
{
let artifact_root = 'https://artifactswestus.z22.web.core.windows.net/models/SLM/';
let engine_artifact = 'embedding_engine.zip';
let kwargs = bag_pack('text_col', text_col, 'embeddings_col', embeddings_col, 'batch_size', batch_size, 'model_name', model_name, 'prefix', prefix);
let code = ```if 1:
from sandbox_utils import Zipackage
Zipackage.install('embedding_engine.zip')
# Zipackage.install('tokenizers-0.22.1.whl') # redundant if tokenizers package is included in the Python image
from embedding_factory import create_embedding_engine
text_col = kargs["text_col"]
embeddings_col = kargs["embeddings_col"]
batch_size = kargs["batch_size"]
model_name = kargs["model_name"]
prefix = kargs["prefix"]
Zipackage.install(f'{model_name}.zip')
engine = create_embedding_engine(model_name, cache_dir="C:\\Temp")
embeddings = engine.encode(df[text_col].tolist(), batch_size=batch_size, prefix=prefix) # prefix is used by E5 and Harrier; Jina and SecBERT ignore it
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(
typeof(*), code, kwargs,
external_artifacts=bag_pack(
// 'tokenizers-0.22.1.whl', strcat(artifact_root, 'tokenizers-0.22.1-cp39-abi3-win_amd64.whl'),
'embedding_engine.zip', strcat(artifact_root, engine_artifact),
strcat(model_name, '.zip'), strcat(artifact_root, model_name, '.zip')))
};
//
// Create a sample dataset with text passages
let passages = datatable(text:string)
[
"Machine learning models can process natural language efficiently.",
"Python is a versatile programming language for data science.",
"Azure Data Explorer provides fast analytics on large datasets.",
"Embeddings convert text into numerical vector representations.",
"Neural networks learn patterns from training data."
];
// Generate embeddings for passages using 'passage:' prefix
let passage_embeddings =
passages
| extend text_embeddings=dynamic(null)
| invoke slm_embeddings_fl('text', 'text_embeddings', 32, 'e5-small-v2', 'passage:');
// Create a search query and find similar passages
let search_query = datatable(query:string)
[
"How do embeddings work?"
];
search_query
| extend query_embeddings=dynamic(null)
| invoke slm_embeddings_fl('query', 'query_embeddings', 32, 'e5-small-v2', 'query:')
| extend dummy=1
| join (passage_embeddings | extend dummy=1) on dummy
| project query, text, similarity=series_cosine_similarity(query_embeddings, text_embeddings, 1.0, 1.0)
| top 3 by similarity desc
Output
| Anfrage | Text | Ähnlichkeit |
|---|---|---|
| Wie funktionieren Einbettungen? | Einbettungen konvertieren Text in numerische Vektordarstellungen. | 0.871 |
| Wie funktionieren Einbettungen? | Neurale Netzwerke lernen Muster aus Schulungsdaten kennen. | 0.812 |
| Wie funktionieren Einbettungen? | Machine Learning-Modelle können natürliche Sprache effizient verarbeiten. | 0.782 |
Die Funktion slm_embeddings_fl() ist eine UDF (benutzerdefinierte Funktion), die Texteinbettungen mithilfe lokaler SLM-Modelle (Small Language Models) generiert. Diese Funktion konvertiert Text in numerische Vektordarstellungen, die für die semantische Suche, Ähnlichkeitsanalyse und andere Verarbeitungsaufgaben in natürlicher Sprache verwendet werden können.
Derzeit unterstützt die Funktion harrier-v1-270m, jina-v2-small, e5-small-v2 und SecBERT Modelle. SecBERT ist für Cybersicherheitstext konzipiert und generiert 768-dimensionale Einbettungen.
Voraussetzungen
- Das Plug-In
python()muss in der Datenbank enabled sein entweder mit dem3.11.7oder3.11.7 DLPython Sandkastenbild. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird. Informationen zum Überprüfen des Paketinhalts für diese Bilder finden Sie unter Python Paketreferenz. - Erstellen Sie ein Seehaus, um die externen Artefakte (auf die im folgenden KQL-Code verwiesen wird) zu hosten, vorzugsweise im gleichen Arbeitsbereich wie Ihr Eventhouse.
Syntax
T | invoke slm_embeddings_fl(
, text_colembeddings_col [,batch_size ] [,model_name ] [,Präfix ])
Erfahren Sie mehr über Syntaxkonventionen.
Die Parameter
| Name | Typ | Erforderlich | Description |
|---|---|---|---|
| text_col | string |
✔️ | Der Name der Spalte, die den einzubettenden Text enthält. |
| embeddings_col | string |
✔️ | Der Name der Spalte zum Speichern der Ausgabeeinbettungen. |
| batch_size | int |
Die Anzahl der Zu verarbeitenden Texte in den einzelnen Stapeln. Der Standardwert ist 32. | |
| Model_name | string |
Der Name des zu verwendenden Einbettungsmodells. Unterstützte Werte sind harrier-v1-270m (Standard), jina-v2-small, , e5-small-v2und secbert. Der Wert muss mit dem ZIP-Dateinamen des Modellartefaktes ohne die .zip Erweiterung übereinstimmen. |
|
| Präfix | string |
Das Textpräfix, das vor jeder Eingabe hinzugefügt werden soll. Der Standardwert ist query:. Verwenden Sie query: für die Harrier- und E5-Modelle Suchabfragen und passage: für Dokumente, passage: die durchsucht werden sollen (für das Harrier-Modell ist dies der leeren Aufgabe zugeordnet). Dieser Parameter wird für die Jina- und SecBERT-Modelle ignoriert. |
Funktionsdefinition
- Laden Sie die zip-Dateien herunter
embedding_engine.zip, die Sie verwenden möchten, und laden Sie sie in Ihr Seehaus hoch. - Aktualisieren Sie
artifact_rootim KQL-Code auf den OneLake-Ordner, der die Artefakte enthält, z. Bhttps://msit-onelake.dfs.fabric.microsoft.com/MY_WORKSPACE/MY_LAKEHOUSE.Lakehouse/Files/models/SLM/. . - Definieren Sie die Funktion, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder als gespeicherte Funktion in Ihrer Datenbank erstellen.
- Jeder Aufruf lädt das Einbettungsmodul und nur das ausgewählte Modellartefakt. Um den Speicher zu optimieren, löschen Sie externe Artefakte für Modelle, die nicht verwendet werden.
Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.
Von Bedeutung
Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels slm_embeddings_fl()finden Sie unter Beispiel.
let slm_embeddings_fl = (tbl:(*), text_col:string, embeddings_col:string, batch_size:int=32, model_name:string='harrier-v1-270m', prefix:string='query:')
{
let artifact_root = 'https://msit-onelake.dfs.fabric.microsoft.com/MY_WORKSPACE/MY_LAKEHOUSE.Lakehouse/Files/models/SLM/';
let engine_artifact = 'embedding_engine.zip';
let kwargs = bag_pack('text_col', text_col, 'embeddings_col', embeddings_col, 'batch_size', batch_size, 'model_name', model_name, 'prefix', prefix);
let code = ```if 1:
import os
from sandbox_utils import Zipackage
Zipackage.install('embedding_engine.zip')
from embedding_factory import create_embedding_engine
text_col = kargs["text_col"]
embeddings_col = kargs["embeddings_col"]
batch_size = kargs["batch_size"]
model_name = kargs["model_name"]
prefix = kargs["prefix"]
Zipackage.install(f'{model_name}.zip')
work_dir = os.environ.get("UPLOAD_PATH")
engine = create_embedding_engine(model_name, cache_dir=work_dir)
embeddings = engine.encode(df[text_col].tolist(), batch_size=batch_size, prefix=prefix) # prefix is used by E5 and Harrier; Jina and SecBERT ignore it
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(
typeof(*), code, kwargs,
external_artifacts=bag_pack(
'embedding_engine.zip', strcat(artifact_root, engine_artifact, ';impersonate'),
strcat(model_name, '.zip'), strcat(artifact_root, model_name, '.zip;impersonate')))
};
// Write your query to use the function here.
Example
Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.
Generieren von Einbettungen und Ausführen der semantischen Suche
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
let slm_embeddings_fl = (tbl:(*), text_col:string, embeddings_col:string, batch_size:int=32, model_name:string='harrier-v1-270m', prefix:string='query:')
{
let artifact_root = 'https://msit-onelake.dfs.fabric.microsoft.com/MY_WORKSPACE/MY_LAKEHOUSE.Lakehouse/Files/models/SLM/';
let engine_artifact = 'embedding_engine.zip';
let kwargs = bag_pack('text_col', text_col, 'embeddings_col', embeddings_col, 'batch_size', batch_size, 'model_name', model_name, 'prefix', prefix);
let code = ```if 1:
import os
from sandbox_utils import Zipackage
Zipackage.install('embedding_engine.zip')
from embedding_factory import create_embedding_engine
text_col = kargs["text_col"]
embeddings_col = kargs["embeddings_col"]
batch_size = kargs["batch_size"]
model_name = kargs["model_name"]
prefix = kargs["prefix"]
Zipackage.install(f'{model_name}.zip')
work_dir = os.environ.get("UPLOAD_PATH")
engine = create_embedding_engine(model_name, cache_dir=work_dir)
embeddings = engine.encode(df[text_col].tolist(), batch_size=batch_size, prefix=prefix) # prefix is used by E5 and Harrier; Jina and SecBERT ignore it
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(
typeof(*), code, kwargs,
external_artifacts=bag_pack(
'embedding_engine.zip', strcat(artifact_root, engine_artifact, ';impersonate'),
strcat(model_name, '.zip'), strcat(artifact_root, model_name, '.zip;impersonate')))
};
//
// Create a sample dataset with text passages
let passages = datatable(text:string)
[
"Machine learning models can process natural language efficiently.",
"Python is a versatile programming language for data science.",
"Azure Data Explorer provides fast analytics on large datasets.",
"Embeddings convert text into numerical vector representations.",
"Neural networks learn patterns from training data."
];
// Generate embeddings for passages using 'passage:' prefix
let passage_embeddings =
passages
| extend text_embeddings=dynamic(null)
| invoke slm_embeddings_fl('text', 'text_embeddings', 32, 'e5-small-v2', 'passage:');
// Create a search query and find similar passages
let search_query = datatable(query:string)
[
"How do embeddings work?"
];
search_query
| extend query_embeddings=dynamic(null)
| invoke slm_embeddings_fl('query', 'query_embeddings', 32, 'e5-small-v2', 'query:')
| extend dummy=1
| join (passage_embeddings | extend dummy=1) on dummy
| project query, text, similarity=series_cosine_similarity(query_embeddings, text_embeddings, 1.0, 1.0)
| top 3 by similarity desc
Output
| Anfrage | Text | Ähnlichkeit |
|---|---|---|
| Wie funktionieren Einbettungen? | Einbettungen konvertieren Text in numerische Vektordarstellungen. | 0.871 |
| Wie funktionieren Einbettungen? | Neurale Netzwerke lernen Muster aus Schulungsdaten kennen. | 0.812 |
| Wie funktionieren Einbettungen? | Machine Learning-Modelle können natürliche Sprache effizient verarbeiten. | 0.782 |