开发者社区 > 大数据与机器学习 > 人工智能平台PAI > 正文

抛一个机器学习PAI问题:假设每条训练样本有数量不等的一些兴趣tags,是我miss了哪一个地方吗?

抛一个机器学习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模型是怎么处理的呢?

展开
收起
cuicuicuic 2023-12-05 21:40:53 35 0
2 条回答
写回答
取消 提交回答
  • 可以设置combiner ,此回答整理自钉群“【EasyRec】推荐算法交流群”

    2023-12-06 14:06:55
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在PAI中,TagFeature的处理方式是在DSSM模型中进行平均池化(mean pooling)或最大池化(max pooling)。具体来说,对于每个样本的多个标签特征,我们可以通过以下步骤进行处理:

    1. 将每个标签特征转换为embedding向量。
    2. 对每个样本的所有标签特征的embedding向量进行平均池化或最大池化。
    3. 将池化后的向量作为输入传递给DSSM模型。

    在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模型。

    2023-12-06 13:40:53
    赞同 展开评论 打赏

相关产品

  • 人工智能平台 PAI
  • 热门讨论

    热门文章

    相关电子书

    更多
    大规模机器学习在蚂蚁+阿里的应用 立即下载
    基于Spark的面向十亿级别特征的 大规模机器学习 立即下载
    基于Spark的大规模机器学习在微博的应用 立即下载