抛一个机器学习PAI问题:
假设每条训练样本有数量不等的一些兴趣tags,例如A样本有"电影 | 电视剧",B样本有"书籍 | 电视剧 | 汽车 | 新闻"。easyrec提供了TagFeature来parse这样的输入特征,但是parse后A样本有2个tag embedding向量,B样本有4个tag embedding向量,理想情况下应该有个mean或者max的pooling来合一,但是我读了读tag feature预处理的源码
(https://github.com/alibaba/EasyRec/blob/1fb889d756a90212a7c0333470428ba3ad95ce95/easy_rec/python/input/input.py#L414)
,以及看一下模型的计算图,似乎并没有找到类似的操作的地方。是我miss了哪一个地方吗?请教一下TagFeature进了DSSM模型是怎么处理的呢?
在PAI中,TagFeature的处理方式是在DSSM模型中进行平均池化(mean pooling)或最大池化(max pooling)。具体来说,对于每个样本的多个标签特征,我们可以通过以下步骤进行处理:
在EasyRec的源代码中,TagFeature的处理过程如下:
class TagFeature(FeatureBase):
def __init__(self, field_name, field_type, feature_size):
super(TagFeature, self).__init__(field_name, field_type, feature_size)
self.feature_size = feature_size
def transform(self, data):
# 将标签特征转换为embedding向量
tag_embs = [self._get_tag_emb(tag) for tag in data]
# 对每个样本的所有标签特征的embedding向量进行平均池化或最大池化
pooled_embs = np.mean(tag_embs, axis=0) if self.pooling == 'mean' else np.max(tag_embs, axis=0)
return pooled_embs
在这个例子中,TagFeature
类首先将每个标签特征转换为embedding向量,然后根据指定的池化方法(self.pooling
)对所有的embedding向量进行平均池化或最大池化。最后,将池化后的向量作为输入传递给DSSM模型。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。