机器学习PAI我的TagFeature是这种形式:体育:0.3|娱乐:0.2|军事:0.5,然后我配了vocab_list: ["体育","娱乐","军事"],训练的时候报错:ValueError: Column dtype and SparseTensors dtype must be compatible. key: feature, column dtype: , tensor dtype: ,请问是什么原因呀?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,问题的核心在于TagFeature
的配置和数据格式不匹配,导致训练时出现ValueError: Column dtype and SparseTensors dtype must be compatible
错误。以下是详细分析和解决方案:
TagFeature
是一种多值特征,通常用于表示标签类数据。在您的场景中,TagFeature
的数据形式为体育:0.3|娱乐:0.2|军事:0.5
,其中每个标签(如“体育”)后面跟随一个权重值(如“0.3”)。这种形式与标准的TagFeature
配置存在以下潜在冲突:
vocab_list
的定义:您配置了vocab_list: ["体育","娱乐","军事"]
,这表明您希望模型将这些标签作为离散值处理。然而,您的数据中不仅包含标签名称,还附加了权重值(如“体育:0.3”),这与vocab_list
的预期格式不兼容。
数据类型不匹配:TagFeature
默认期望输入是纯标签(如“体育|娱乐|军事”),而您的数据中包含了额外的权重信息(如“体育:0.3”)。这种格式会导致模型在解析时无法正确映射到vocab_list
中的离散值,从而引发dtype
不兼容的错误。
为了解决上述问题,您可以根据实际需求选择以下两种方案之一:
如果您不需要使用标签的权重信息,可以对数据进行预处理,移除权重部分,仅保留标签名称。例如: - 原始数据:体育:0.3|娱乐:0.2|军事:0.5
- 预处理后:体育|娱乐|军事
具体操作步骤: 1. 使用字符串处理工具(如Python的split
和join
方法)对原始数据进行清洗。
data = "体育:0.3|娱乐:0.2|军事:0.5"
cleaned_data = "|".join([item.split(":")[0] for item in data.split("|")])
print(cleaned_data) # 输出:体育|娱乐|军事
确保vocab_list
与清洗后的标签完全一致:
vocab_list = ["体育", "娱乐", "军事"]
在feature_configs
中配置TagFeature
:
feature_configs {
input_names: "article_tag"
feature_type: TagFeature
embedding_dim: 16
hash_bucket_size: 1000
vocab_list: ["体育", "娱乐", "军事"]
}
优点:此方案简单直接,适用于不需要权重信息的场景。
如果您需要保留标签的权重信息(如“体育:0.3”),则需要对TagFeature
进行扩展或自定义处理。具体步骤如下:
修改数据格式:将标签和权重分离,分别存储为两个字段。例如:
体育|娱乐|军事
0.3|0.2|0.5
自定义特征处理逻辑:
TagFeature
的方式配置vocab_list
。RawFeature
)处理。配置feature_configs
:
feature_configs {
input_names: "article_tag"
feature_type: TagFeature
embedding_dim: 16
hash_bucket_size: 1000
vocab_list: ["体育", "娱乐", "军事"]
}
feature_configs {
input_names: "article_tag_weight"
feature_type: RawFeature
boundaries: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
embedding_dim: 8
}
优点:此方案能够充分利用标签的权重信息,适用于需要精细化建模的场景。
feature_configs
中的配置完全一致。如果数据中包含额外信息(如权重),必须通过预处理或自定义逻辑进行适配。vocab_list
的完整性:vocab_list
必须覆盖所有可能的标签值,否则会导致解析失败。根据您的描述,问题的根本原因是TagFeature
的数据格式与vocab_list
的定义不匹配。推荐您根据实际需求选择以下方案: - 如果不需要权重信息,建议移除权重并仅保留标签。 - 如果需要保留权重信息,建议将标签和权重分离,并分别配置为TagFeature
和RawFeature
。
希望以上解答能够帮助您解决问题!如有进一步疑问,请随时联系。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。