You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras预训练BERT MaskedLM预测结果不一致的原因排查

问题原因及解决方案

你的核心问题是只向模型传入了input_ids,没有提供掩码位置信息,导致BertMaskedLM无法定位需要预测的token位置,输出结果自然不符合预期。

修正后的代码

import keras
import keras_nlp
import tensorflow as tf

# 加载预处理器与预训练模型
preprocessor = keras_nlp.models.BertMaskedLMPreprocessor.from_preset("bert_base_en")
masked_lm = keras_nlp.models.BertMaskedLM.from_preset(
    "bert_base_en",
    load_weights=True,
    preprocessor=None,
)

# 处理输入,获取模型所需的完整输入数据(含input_ids、mask_positions等)
test_data = preprocessor(["The capital of France is Paris."])
# 传入完整输入数据,而非单独的input_ids
outputs = masked_lm(test_data)
# 对掩码位置的预测结果取argmax,得到token id
predicted_ids = tf.math.argmax(outputs, axis=-1)

# 解码预测的token
tokenizer = keras_nlp.models.BertTokenizer.from_preset("bert_base_en")
print(tokenizer.decode(predicted_ids[0]))  # 输出应为 "is Paris"

关键说明

  • BertMaskedLMPreprocessor处理文本后,返回的是包含input_ids、mask_positions、segment_ids等的结构化数据,这些都是模型预测必需的参数。
  • 原代码中test_sequence[0]仅提取了input_ids,模型无法识别哪些位置是被掩码的目标,因此输出错误结果。
  • 传入完整的预处理数据后,模型会自动针对mask_positions指定的位置生成预测,解码后即可得到预期的token。

内容的提问来源于stack exchange,提问作者user3085693

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:06