specify task_type for embeddings in Vertex AI

170 views Asked by At

Has someone tried the last update of GCP TextEmbeddingInput that allows to specify the task_type of your application? Theoretically it should allows you to use different fine tuned models to generate embeddings but I cannot see any difference between embeddings generated for different task_type.

from vertexai.language_models import TextEmbeddingModel
from vertexai.language_models import TextEmbeddingInput

def text_embedding():
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko-multilingual@001")
    embeddings = model.get_embeddings(["La vita è un viaggio, ma non è solo un percorso da seguire. È un'esperienza che ci forma e ci cambia. È un'opportunità per imparare e crescere, per affrontare le sfide e superare gli ostacoli. È un'occasione per conoscere noi stessi e gli altri, per creare legami e costruire relazioni."])
    return embeddings

def text_embedding2():
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko-multilingual@001")
    text = TextEmbeddingInput(text="La vita è un viaggio, ma non è solo un percorso da seguire. È un'esperienza che ci forma e ci cambia. È un'opportunità per imparare e crescere, per affrontare le sfide e superare gli ostacoli. È un'occasione per conoscere noi stessi e gli altri, per creare legami e costruire relazioni.", task_type='CLUSTERING')
    embeddings = model.get_embeddings([text])
    return embeddings

text_embedding2()[0].values == text_embedding()[0].values
1

There are 1 answers

0
DarioB On

I am not sure I agree, I have modified slightly your code and I get different results for the embeddings:

def text_embedding(text: str, task_type: str):
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko-multilingual@001")
    text_input = TextEmbeddingInput(text=text, task_type=task_type)
    embeddings = model.get_embeddings([text_input])
    return embeddings

input_text = "Metti qui qualunque testo vuoi."
different_count = 0
same_count = 0
for a, b in zip(text_embedding(input_text, 'SEMANTIC_SIMILARITY')[0].values, text_embedding(input_text, 'CLUSTERING')[0].values):
    if a != b:
        different_count += 1
    else:
        same_count += 1

print("Different: {} Same: {}".format(different_count, same_count))