基于SKU名称的分类模型选型:BigQuery ML与Colab适配咨询
基于SKU名称自动识别分类的解决方案(适配BigQuery ML/Google Colab)
一、BigQuery ML 方案(优先推荐)
BQML的分类模型完全适配你的场景,尤其适合处理带文本特征(SKU名称)的多分类问题(Category+Sub-Category),具体落地步骤如下:
1. 数据预处理
- 将已标注的60% SKU数据与未标注的40%数据整合到同一张BigQuery表,核心字段需包含
sku_name、category、sub_category(未标注项留空) - 对
sku_name做文本清洗:去除特殊符号、统一大小写、拆分复合词,用BQ内置函数实现:SELECT REGEXP_REPLACE(LOWER(sku_name), r'[^a-zA-Z0-9\s]', '') AS cleaned_sku_name, category, sub_category FROM `your-project.your-dataset.sku_table`
2. 训练分类模型
针对Category和Sub-Category分别训练模型(更易调优),BQML支持直接对文本特征建模:
- 训练Category分类模型:
CREATE OR REPLACE MODEL `your-project.your-dataset.sku_category_model` OPTIONS( MODEL_TYPE='BOOSTED_TREE_CLASSIFIER', INPUT_LABEL_COLS=['category'], TEXT_FEATURE_COLUMNS=['cleaned_sku_name'], MAX_ITERATIONS=100 ) AS SELECT cleaned_sku_name, category FROM `your-project.your-dataset.cleaned_sku_table` WHERE category IS NOT NULL - 训练Sub-Category分类模型:
注:类别数量较少时,也可改用CREATE OR REPLACE MODEL `your-project.your-dataset.sku_subcategory_model` OPTIONS( MODEL_TYPE='BOOSTED_TREE_CLASSIFIER', INPUT_LABEL_COLS=['sub_category'], TEXT_FEATURE_COLUMNS=['cleaned_sku_name'], MAX_ITERATIONS=100 ) AS SELECT cleaned_sku_name, sub_category FROM `your-project.your-dataset.cleaned_sku_table` WHERE sub_category IS NOT NULLLOGISTIC_REG模型,训练速度更快。
3. 批量预测与补全
对未标注SKU和每日新增SKU执行预测,同时输出置信度方便人工校验:
SELECT original_sku_name, predicted_category, category_confidence, predicted_sub_category, sub_category_confidence FROM ( SELECT sku_name AS original_sku_name, predicted_category, (SELECT MAX(prob) FROM UNNEST(predicted_category_probs)) AS category_confidence FROM ML.PREDICT(MODEL `your-project.your-dataset.sku_category_model`, (SELECT sku_name, REGEXP_REPLACE(LOWER(sku_name), r'[^a-zA-Z0-9\s]', '') AS cleaned_sku_name FROM `your-project.your-dataset.sku_table` WHERE category IS NULL)) ) AS cat_pred JOIN ( SELECT sku_name AS original_sku_name, predicted_sub_category, (SELECT MAX(prob) FROM UNNEST(predicted_sub_category_probs)) AS sub_category_confidence FROM ML.PREDICT(MODEL `your-project.your-dataset.sku_subcategory_model`, (SELECT sku_name, REGEXP_REPLACE(LOWER(sku_name), r'[^a-zA-Z0-9\s]', '') AS cleaned_sku_name FROM `your-project.your-dataset.sku_table` WHERE sub_category IS NULL)) ) AS sub_cat_pred ON cat_pred.original_sku_name = sub_cat_pred.original_sku_name
二、Google Colab 方案(灵活度更高)
如果需要更精准的文本模型(比如预训练语言模型),可在Colab结合TensorFlow/PyTorch实现:
1. 数据准备
- 通过
google-cloud-bigquery库从BQ导出已标注数据,或直接上传本地CSV文件 - 对SKU名称做预处理:分词、去除停用词、用BERT Tokenizer转成模型输入格式
2. 微调预训练模型
用BERT模型微调实现多输出分类,代码示例(TensorFlow):
import tensorflow as tf from transformers import BertTokenizer, TFBertModel # 加载预训练BERT组件 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') bert_backbone = TFBertModel.from_pretrained('bert-base-uncased') # 构建多输出分类模型 input_ids = tf.keras.layers.Input(shape=(None,), dtype=tf.int32) attention_mask = tf.keras.layers.Input(shape=(None,), dtype=tf.int32) bert_output = bert_backbone(input_ids, attention_mask=attention_mask)[1] # 分类输出层 category_output = tf.keras.layers.Dense(num_categories, activation='softmax', name='category')(bert_output) sub_category_output = tf.keras.layers.Dense(num_sub_categories, activation='softmax', name='sub_category')(bert_output) model = tf.keras.Model(inputs=[input_ids, attention_mask], outputs=[category_output, sub_category_output]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_dataset, epochs=3, validation_data=val_dataset)
3. 日常预测部署
- 训练完成后将模型保存至Google Cloud Storage
- 每日新增SKU时,在Colab或Cloud Functions中加载模型,执行批量预测
三、其他可选方案
- Google Cloud AutoML Natural Language:无需编写代码,上传已标注数据即可自动训练最优模型,适合非技术人员快速落地
- 开源基线方案:用Scikit-learn的
TfidfVectorizer结合MultinomialNB实现轻量文本分类,快速验证效果
内容的提问来源于stack exchange,提问作者dogolearnpython
相关产品推荐
相关产品推荐

