如何在BigQuery ML中使用已导入的ONNX模型?如何确定输入格式?
确定ONNX模型正确输入格式及解决报错方案
一、明确模型的输入格式
sentence-transformers/all-MiniLM-L6-v2的ONNX模型输入,完全对应原HuggingFace模型Tokenizer的输出结构:
- 必须传入三个字段:
input_ids(整数数组)、attention_mask(整数数组)、token_type_ids(整数数组,单句场景下全为0) - 每个字段都是二维数组结构(对应模型的[batch_size, sequence_length]输入形状,单样本时外层嵌套一层数组)
可以本地用简单代码验证输入结构:
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") # 输出会展示每个输入字段的具体值和形状 print(tokenizer("hello world", return_tensors="np"))
示例输出会类似:
{'input_ids': array([[101, 7592, 2088, 102]]), 'attention_mask': array([[1, 1, 1, 1]]), 'token_type_ids': array([[0, 0, 0, 0]])}
二、修正BigQuery查询的错误
你的查询存在3个关键问题,直接导致了报错:
- 模型名称不匹配:创建的模型是
ml.make_embeddings,但查询中误用了ml.all_minilm_l6_v2 - 输入格式错误:
input_ids/attention_mask/token_type_ids不能是单个整数,必须是符合长度要求的数组 - 冗余输入字段:
sentences不是模型的输入字段,模型只接受Tokenizer处理后的三个核心字段
修正后的查询示例:
SELECT * FROM ML.PREDICT(MODEL ml.make_embeddings, ( SELECT [101, 7592, 2088, 102] AS input_ids, [1, 1, 1, 1] AS attention_mask, [0, 0, 0, 0] AS token_type_ids ))
三、批量处理文本的优化方案
如果要直接传入原始文本而非手动编写token ID,可以在BigQuery中创建JavaScript UDF,实现Tokenizer的文本转token逻辑,将文本自动转换为模型所需的三个输入数组后再调用模型预测。
你遇到的"内部错误"本质是输入格式与模型要求不匹配导致的,修正输入结构后即可解决问题。
内容的提问来源于stack exchange,提问作者stkvtflw
相关产品推荐
相关产品推荐

