Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ESCM2模型的IPW代码 #991

Open
zhjcp opened this issue Jun 3, 2024 · 0 comments
Open

ESCM2模型的IPW代码 #991

zhjcp opened this issue Jun 3, 2024 · 0 comments

Comments

@zhjcp
Copy link

zhjcp commented Jun 3, 2024

你好,我最近阅读了PaddlePaddle对ESCM2模型的代码实现,我对其中的 IPW 代码部分有点疑问:

    def counterfact_ipw(self, loss_cvr, ctr_num, O, ctr_out_one):
        PS = paddle.multiply(
            ctr_out_one, paddle.cast(
                ctr_num, dtype="float32"))
        min_v = paddle.full_like(PS, 0.000001)
        PS = paddle.maximum(PS, min_v)
        IPS = paddle.reciprocal(PS)
        batch_shape = paddle.full_like(O, 1)
        batch_size = paddle.sum(paddle.cast(
            batch_shape, dtype="float32"),
                                axis=0)
        #TODO this shoud be a hyparameter
        IPS = paddle.clip(IPS, min=-15, max=15)  #online trick 
        IPS = paddle.multiply(IPS, batch_size)
        IPS.stop_gradient = True
        loss_cvr = paddle.multiply(loss_cvr, IPS)
        loss_cvr = paddle.multiply(loss_cvr, O)
        return paddle.mean(loss_cvr)

请问为什么需要乘 "ctr_num" 和 "batch_size" 呢?这跟ESCM2论文中描述的 IPW 公式不太一样?通常来说IPW不就是直接除以 CTR 的概率吗 ?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant