ONNX 模型库
返回模型

说明文档

Teradata Vantage 兼容的嵌入模型

sentence-transformers/distiluse-base-multilingual-cased-v1

模型概述

一个将文本(句子/段落)映射为向量的嵌入模型。sentence-transformers/distiluse-base-multilingual-cased-v1 模型以其在捕获文本数据中语义含义方面的有效性而闻名。这是一个在海量语料库上训练的最先进模型,能够生成高质量的文本嵌入。

  • 134.73M 参数(ONNX 格式大小 - "fp32": 515.61MB, "int8": 129.29MB, "uint8": 129.29MB)
  • 512 最大输入标记数
  • 512 维输出向量
  • 许可证:apache-2.0。发布的模型可免费用于商业目的。
  • 原始模型参考:https://huggingface.co/sentence-transformers/distiluse-base-multilingual-cased-v1

快速入门:在 Teradata Vantage 中部署此模型

我们已将模型预转换为兼容 BYOM 6.0 的 ONNX 格式,无需手动转换。

注意: 确保您可以访问安装了 BYOM 6.0 的 Teradata 数据库。

首先,直接从 Teradata HuggingFace 仓库克隆预转换的模型。


import teradataml as tdml
import getpass
from huggingface_hub import hf_hub_download

model_name = "distiluse-base-multilingual-cased-v1"
number_dimensions_output = 512
model_file_name = "model.onnx"

# 步骤 1:从 Teradata HuggingFace 页面下载模型

hf_hub_download(repo_id=f"Teradata/{model_name}", filename=f"onnx/{model_file_name}", local_dir="./")
hf_hub_download(repo_id=f"Teradata/{model_name}", filename=f"tokenizer.json", local_dir="./")

# 步骤 2:创建到 Vantage 的连接

tdml.create_context(host = input('输入您的主机名'), 
                    username=input('输入您的用户名'), 
                    password = getpass.getpass("输入您的密码"))

# 步骤 3:将模型加载到 Vantage
# a) 嵌入模型
tdml.save_byom(model_id = model_name, # 在模型表中必须唯一
               model_file = f"onnx/{model_file_name}",
               table_name = 'embeddings_models' )
# b) 分词器
tdml.save_byom(model_id = model_name, # 在模型表中必须唯一
              model_file = 'tokenizer.json',
              table_name = 'embeddings_tokenizers') 

# 步骤 4:测试 ONNXEmbeddings 函数
# 注意 ONNXEmbeddings 期望 'payload' 列名为 'txt'。
# 如果列名不同,只需在子查询/CTE 中重命名即可。
input_table = "emails.emails"
embeddings_query = f"""
SELECT 
        *
from mldb.ONNXEmbeddings(
        on {input_table} as InputTable
        on (select * from embeddings_models where model_id = '{model_name}') as ModelTable DIMENSION
        on (select model as tokenizer from embeddings_tokenizers where model_id = '{model_name}') as TokenizerTable DIMENSION
        using
            Accumulate('id', 'txt') 
            ModelOutputTensor('sentence_embedding')
            EnableMemoryCheck('false')
            OutputFormat('FLOAT32({number_dimensions_output})')
            OverwriteCachedModel('true')
    ) a 
"""
DF_embeddings = tdml.DataFrame.from_query(embeddings_query)
DF_embeddings

我可以用嵌入做什么?

Teradata Vantage 包含预置的数据库内置函数来进一步处理嵌入。探索以下示例:

深入了解模型转换为 ONNX

以下步骤概述了我们如何将开源 Hugging Face 模型转换为兼容数据库内置 ONNXEmbeddings 函数的 ONNX 文件。

您无需执行这些步骤——它们仅用于文档说明和透明度。但是,如果您希望将另一个模型转换为所需格式,这些步骤可能会有所帮助。

第一部分:使用 optimum 导入和转换模型

我们首先从 Hugging Face 导入预训练的 sentence-transformers/distiluse-base-multilingual-cased-v1 模型。

为了提高性能并确保与各种执行环境的兼容性,我们将使用 Optimum 工具将模型转换为 ONNX(开放神经网络交换)格式。

转换为 ONNX 后,我们修复 ONNX 文件中的 opset 以确保与 Teradata Vantage 中使用的 ONNX 运行时兼容。

我们为多种不同精度生成 ONNX 文件:fp32、int8、uint8

您可以在文件 convert.py 中找到详细的转换步骤。

第二部分:使用 onnxruntime 在 Python 中运行模型并比较结果

应用修复后,我们通过使用原生 SentenceTransformers 和 ONNX 运行时计算两个文本之间的余弦相似度来测试 ONNX 模型的正确性,并比较结果。

如果结果相同,则确认 ONNX 模型与原生模型产生相同的结果,从而验证其正确性和在数据库中进一步使用的适用性。

import onnxruntime as rt

from sentence_transformers.util import cos_sim
from sentence_transformers import SentenceTransformer

import transformers


sentences_1 = 'How is the weather today?'
sentences_2 = 'What is the current weather like today?'

# 计算 ONNX 结果
tokenizer = transformers.AutoTokenizer.from_pretrained("sentence-transformers/distiluse-base-multilingual-cased-v1")
predef_sess = rt.InferenceSession("onnx/model.onnx")

enc1 = tokenizer(sentences_1)
embeddings_1_onnx = predef_sess.run(None,     {"input_ids": [enc1.input_ids], 
     "attention_mask": [enc1.attention_mask]})

enc2 = tokenizer(sentences_2)
embeddings_2_onnx = predef_sess.run(None,     {"input_ids": [enc2.input_ids], 
     "attention_mask": [enc2.attention_mask]})


# 使用 SentenceTransformer 计算嵌入
model = SentenceTransformer(model_id, trust_remote_code=True)
embeddings_1_sentence_transformer = model.encode(sentences_1, normalize_embeddings=True, trust_remote_code=True)
embeddings_2_sentence_transformer = model.encode(sentences_2, normalize_embeddings=True, trust_remote_code=True)

# 比较结果
print("使用 ONNX 计算的嵌入的余弦相似度:" + str(cos_sim(embeddings_1_onnx[1][0], embeddings_2_onnx[1][0])))
print("使用 SentenceTransformer 计算的嵌入的余弦相似度:" + str(cos_sim(embeddings_1_sentence_transformer, embeddings_2_sentence_transformer)))

您可以在文件 test_local.py 中找到详细的 ONNX 与 SentenceTransformer 结果比较步骤。


请参阅下方的免责声明


免责声明:此处提供的内容("内容")按"原样"提供,不在 Teradata Operations, Inc. 及其关联公司("Teradata")的任何协议范围内。此处列出的内容不构成 Teradata 的认证或认可。

如果任何内容包含或与任何人工智能("AI")或其他语言学习模型("模型")相关,且这些模型与 Teradata 的产品和服务互操作,则通过访问、引入、部署或使用此类模型,您确认并同意您完全有责任确保遵守所有适用于 AI 技术的使用、部署和分发的适用法律、法规和限制。这包括但不限于 AI 扩散规则、欧盟 AI 法案、AI 相关法律法规、隐私法、出口管制以及金融或特定行业的法规。

虽然 Teradata 可能会为与 Teradata 产品和/或服务互操作的模型的部署或实施提供支持、指导或协助,但您仍需完全负责确保您的模型、数据和应用程序符合所有相关的法律和监管义务。我们的协助不构成法律或监管批准,Teradata 对因不遵守适用法律而产生的任何责任予以免责。

您必须自行确定模型是否适合任何特定目的。鉴于机器学习和建模的概率性质,在某些情况下使用模型可能会导致不正确的输出,无法准确反映生成的操作。您应根据您的使用场景评估任何输出的准确性,包括通过人工审查输出结果。

Teradata/distiluse-base-multilingual-cased-v1

作者 Teradata

sentence-similarity
↓ 0 ♥ 0

创建时间: 2025-02-12 16:30:08+00:00

更新时间: 2025-03-04 09:39:54+00:00

在 Hugging Face 上查看

文件 (14)

.gitattributes
README.md
config.json
conversion_config.json
convert.py
onnx/model.onnx ONNX
onnx/model_int8.onnx ONNX
onnx/model_uint8.onnx ONNX
special_tokens_map.json
test_local.py
test_teradata.py
tokenizer.json
tokenizer_config.json
vocab.txt