为何BigQuery ML的TRANSFORM子句不支持ML.NGRAM函数?
BigQuery ML TRANSFORM子句不支持ML.NGRAM的原因解析
在BigQuery中创建模型时,使用TRANSFORM子句调用ML.NGRAM函数会触发报错,提示该函数不被支持,但相同的函数(或ML.NGRAMS)在普通SELECT查询中可正常运行;同时bag_of_words、min_abs_scalar等转换函数却能在TRANSFORM子句中正常使用。以下是差异原因及相关说明:
报错的模型创建SQL
CREATE OR REPLACE MODEL `singular-hub-291814.movie_sentiment.mymodel3` TRANSFORM(ML.NGRAM(string_field_0,[1,2])OVER() as ngram ) OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, data_split_method='RANDOM', DATA_SPLIT_EVAL_FRACTION = .10, input_label_cols=['review'] ) AS SELECT string_field_0 , review from table;
可正常运行的SELECT查询SQL
SELECT ML.NGRAMS(words_array, [1,2]) as ngrams, review from table;
差异原因说明
- TRANSFORM子句的核心约束:BigQuery ML的TRANSFORM子句要求内部使用的转换函数必须是可序列化、能在训练和预测阶段复用的确定性转换。
ML.NGRAM属于文本特征生成类函数,它的计算依赖全量数据集的统计信息(如全局词频分布),无法在单条数据层面独立完成转换,不符合TRANSFORM对“逐行独立转换”的要求。而bag_of_words、min_abs_scalar这类函数,要么是基于单条数据的规则转换,要么是能在训练阶段拟合参数并固化到模型中,因此可以被TRANSFORM支持。 - 运行逻辑的本质区别:普通SELECT查询中的
ML.NGRAMS是在查询执行阶段一次性计算全量数据的n-gram特征,无需考虑后续预测阶段的复用;但TRANSFORM子句中的转换会被嵌入到模型的推理流程中,要求在预测新数据时能独立完成转换,ML.NGRAM无法满足这个复用性要求。 - 官方支持范围:BigQuery官方没有明确列出TRANSFORM子句的禁用转换器列表,但文档中明确说明,TRANSFORM仅支持BigQuery ML内置的可训练转换函数和部分确定性的标量/聚合转换函数。
ML.NGRAM不属于这个范畴,因此被限制使用。
内容的提问来源于stack exchange,提问作者Chhavi Bansal
相关产品推荐
相关产品推荐

