说明文档
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 包含预置的数据库内置函数来进一步处理嵌入。探索以下示例:
- 使用 TD_KMeans 进行语义聚类: 语义聚类 Python Notebook
- 使用 TD_VectorDistance 计算语义距离: 语义相似度 Python Notebook
- 使用 TD_VectorDistance 构建 RAG 应用: RAG 和 Bedrock 查询 PDF Notebook
深入了解模型转换为 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
创建时间: 2025-02-12 16:30:08+00:00
更新时间: 2025-03-04 09:39:54+00:00
在 Hugging Face 上查看