Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Schakelen tussen services met behulp van de vervolgkeuzelijst Versie . Meer informatie over navigatie.
Van toepassing op: ✅ Microsoft Fabric ✅ Azure Data Explorer
De functie slm_embeddings_fl() is een UDF (door de gebruiker gedefinieerde functie) waarmee tekstinsluitingen worden gegenereerd met behulp van lokale SLM -modellen (Small Language Models). Deze functie converteert tekst naar numerieke vectorweergaven die kunnen worden gebruikt voor semantische zoekopdrachten, overeenkomstenanalyse en andere verwerkingstaken voor natuurlijke taal.
Momenteel ondersteunt de functie harrier-v1-270m, jina-v2-small en e5-small-v2-modellen .
Vereiste voorwaarden
- De Python-invoegtoepassing moet zijn ingeschakeld op het cluster. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
- De Python-invoegtoepassing moet zijn ingeschakeld voor de database. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
- Wijzig het bijschriftbeleid van het cluster om toegang tot de externe artefacten toe te staan (waarnaar wordt verwezen in de onderstaande KQL-code):
.alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.z22\\.web\\.core\\.windows\\.net/models/SLM/","CanCall": true } ]'
Houd er rekening mee dat voor deze wijziging AllDatabasesAdmin-machtigingen zijn vereist.
Syntaxis
T | invoke slm_embeddings_fl(
, text_colembeddings_col [,batch_size ] [,model_name ] [,voorvoegsel ])
Meer informatie over syntaxisconventies.
Parameterwaarden
| Naam | Typologie | Verplicht | Description |
|---|---|---|---|
| text_col | string |
✔️ | De naam van de kolom met de tekst die moet worden ingesloten. |
| embeddings_col | string |
✔️ | De naam van de kolom voor het opslaan van de uitvoer insluitingen. |
| batch_size | int |
Het aantal teksten dat in elke partij moet worden verwerkt. De standaardwaarde is 32. | |
| model_name | string |
De naam van het insluitmodel dat moet worden gebruikt. Ondersteunde waarden zijn harrier-v1-270m (standaard), jina-v2-smallen e5-small-v2. |
|
| voorvoegsel | string |
Het tekstvoorvoegsel dat moet worden toegevoegd vóór elke invoer. De standaardinstelling is query:. Voor de Harrier- en E5-modellen gebruikt query: u zoekquery's en passage: voor documenten die moeten worden doorzocht (voor het Harrier-model wordt passage: de lege taak toegewezen). Deze parameter wordt genegeerd voor het Jina-model. |
Functiedefinitie
- U kunt de functie definiëren door de code ervan in te sluiten als een door een query gedefinieerde functie of door deze te maken als een opgeslagen functie in uw database.
- Als u opslag en latentie wilt optimaliseren, kunt u externe artefacten verwijderen voor modellen die niet worden gebruikt.
Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.
Belangrijk
Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een expressie-instructie in tabelvorm. Zie slm_embeddings_fl() als u een werkend voorbeeld wilt uitvoeren.
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 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 only for E5
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs, external_artifacts = bag_pack(
'embedding_engine.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/embedding_engine.zip',
'tokenizers-0.22.1.whl', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/tokenizers-0.22.1-cp39-abi3-win_amd64.whl',
'harrier-v1-270m.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/harrier-v1-270m.zip',
'jina-v2-small.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/jina-v2-small.zip',
'e5-small-v2.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/e5-small-v2.zip'))
};
// Write your query to use the function here.
Example
In het volgende voorbeeld wordt de aanroepoperator gebruikt om de functie uit te voeren.
Insluitingen genereren en semantische zoekopdrachten uitvoeren
Als u een querygedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
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 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 only for E5
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs, external_artifacts = bag_pack(
'embedding_engine.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/embedding_engine.zip',
'tokenizers-0.22.1.whl', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/tokenizers-0.22.1-cp39-abi3-win_amd64.whl',
'harrier-v1-270m.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/harrier-v1-270m.zip',
'jina-v2-small.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/jina-v2-small.zip',
'e5-small-v2.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/e5-small-v2.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
Uitvoer
| query | Tekst | gelijkenis |
|---|---|---|
| Hoe werken insluitingen? | Met insluitingen worden tekst geconverteerd naar numerieke vectorweergaven. | 0.871 |
| Hoe werken insluitingen? | Neurale netwerken leren patronen van trainingsgegevens. | 0.812 |
| Hoe werken insluitingen? | Machine learning-modellen kunnen natuurlijke taal efficiënt verwerken. | 0.782 |
De functie slm_embeddings_fl() is een UDF (door de gebruiker gedefinieerde functie) waarmee tekstinsluitingen worden gegenereerd met behulp van lokale SLM -modellen (Small Language Models). Deze functie converteert tekst naar numerieke vectorweergaven die kunnen worden gebruikt voor semantische zoekopdrachten, overeenkomstenanalyse en andere verwerkingstaken voor natuurlijke taal.
Momenteel ondersteunt de functie harrier-v1-270m, jina-v2-small en e5-small-v2-modellen .
Vereiste voorwaarden
- De Python-invoegtoepassing moet zijn ingeschakeld op het cluster. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
- De Python-invoegtoepassing moet zijn ingeschakeld voor de database. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
- Maak een lakehouse om de externe artefacten te hosten (waarnaar wordt verwezen in de onderstaande KQL-code), bij voorkeur in dezelfde werkruimte als uw eventhouse.
Syntaxis
T | invoke slm_embeddings_fl(
, text_colembeddings_col [,batch_size ] [,model_name ] [,voorvoegsel ])
Meer informatie over syntaxisconventies.
Parameterwaarden
| Naam | Typologie | Verplicht | Description |
|---|---|---|---|
| text_col | string |
✔️ | De naam van de kolom met de tekst die moet worden ingesloten. |
| embeddings_col | string |
✔️ | De naam van de kolom voor het opslaan van de uitvoer insluitingen. |
| batch_size | int |
Het aantal teksten dat in elke partij moet worden verwerkt. De standaardwaarde is 32. | |
| model_name | string |
De naam van het insluitmodel dat moet worden gebruikt. Ondersteunde waarden zijn harrier-v1-270m (standaard), jina-v2-smallen e5-small-v2. |
|
| voorvoegsel | string |
Het tekstvoorvoegsel dat moet worden toegevoegd vóór elke invoer. De standaardinstelling is query:. Voor de Harrier- en E5-modellen gebruikt query: u zoekquery's en passage: voor documenten die moeten worden doorzocht (voor het Harrier-model wordt passage: de lege taak toegewezen). Deze parameter wordt genegeerd voor het Jina-model. |
Functiedefinitie
- Download de artefacten in de onderstaande KQL-code (zie aan het einde van het codeblok de external_artifacts parameter die verwijst naar artefacten, bijvoorbeeld https://artifactswestus.z22.web.core.windows.net/models/SLM/embedding_engine.zip) en upload deze naar uw lakehouse.
- Werk in de onderstaande KQL-code de artefactenpaden bij naar hun één lakepad (bijvoorbeeld https://msit-onelake.dfs.fabric.microsoft.com/MY_WORKSPACE/MY_LAKEHOUSE.Lakehouse/Files/models/SLM/embedding_engine.zip).
- U kunt de functie definiëren door de code ervan in te sluiten als een door een query gedefinieerde functie of door deze te maken als een opgeslagen functie in uw database.
- Als u de opslag en latentie wilt optimaliseren, kunt u externe artefacten verwijderen voor modellen die niet worden gebruikt.
Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.
Belangrijk
Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een expressie-instructie in tabelvorm. Zie slm_embeddings_fl() als u een werkend voorbeeld wilt uitvoeren.
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 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')
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 only for E5
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs, external_artifacts = bag_pack(
'embedding_engine.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/embedding_engine.zip;impersonate',
'tokenizers-0.22.1.whl', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/tokenizers-0.22.1-cp39-abi3-win_amd64.whl;impersonate',
'harrier-v1-270m.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/harrier-v1-270m.zip;impersonate',
'jina-v2-small.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/jina-v2-small.zip;impersonate',
'e5-small-v2.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/e5-small-v2.zip;impersonate'))
};
// Write your query to use the function here.
Example
In het volgende voorbeeld wordt de aanroepoperator gebruikt om de functie uit te voeren.
Insluitingen genereren en semantische zoekopdrachten uitvoeren
Als u een querygedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
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 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')
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 only for E5
result = df
result[embeddings_col] = list(embeddings)
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs, external_artifacts = bag_pack(
'embedding_engine.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/embedding_engine.zip;impersonate',
'tokenizers-0.22.1.whl', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/tokenizers-0.22.1-cp39-abi3-win_amd64.whl;impersonate',
'harrier-v1-270m.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/harrier-v1-270m.zip;impersonate',
'jina-v2-small.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/jina-v2-small.zip;impersonate',
'e5-small-v2.zip', 'https://artifactswestus.z22.web.core.windows.net/models/SLM/e5-small-v2.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
Uitvoer
| query | Tekst | gelijkenis |
|---|---|---|
| Hoe werken insluitingen? | Met insluitingen worden tekst geconverteerd naar numerieke vectorweergaven. | 0.871 |
| Hoe werken insluitingen? | Neurale netwerken leren patronen van trainingsgegevens. | 0.812 |
| Hoe werken insluitingen? | Machine learning-modellen kunnen natuurlijke taal efficiënt verwerken. | 0.782 |