基于WALS方法的张量流2.0矩阵分解

2024-05-16 04:46:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用WALS方法来执行矩阵分解。最初在tensorflow 1.13中,我可以使用

from tensorflow.contrib.factorization.python.ops import factorization_ops 

documentation中所述

Wals模型可以从factorization_ops调用,方法是使用

^{pr2}$

在TensorFlow2.0中使用相同的命令会出现以下错误

ModuleNotFoundError:没有名为'张量流贡献因子分解

经过issue之后,在TensorFlow2.0+中似乎没有办法使用WALSModel。在

在tensorflow版本更新中也提到了heretf.contrib公司已经被弃用,并且功能已经被迁移到核心的TensorFlow API中,或者迁移到一个生态系统项目中,比如TensorFlow/addons或TensorFlow/io,或者被完全删除。在

如何在TensorFlow2.0中使用WALS模型(目前我在windows机器上使用2.0.0-rc0)?WALSModel被删除了还是我漏掉了一些信息?在


Tags: 方法from模型importtensorflowdocumentation矩阵contrib
3条回答

我相信在tf2.0中不支持WALS…官方推荐模型是Neural Collaborative Filter (NCF)

我希望这有帮助。在

我已经将WALS的Tensorflow实现与其他实现在计算资源和精确度方面进行了比较(https://github.com/gtsoukas/cfzoo)。比较表明隐式Python包(https://github.com/benfred/implicit)是一个很好的替代品,可以提供更好的性能。在

我也有同样的问题,但不幸的是,我没有时间自己写一个库。我正在考虑几种可能的选择:

  1. 坚持使用TF1.X,直到有人创建了一个库

  2. 切换到使用lightfm继续使用WALS

  3. 切换到神经协作过滤使用嵌入层与keras和一个点积层。请参阅本文https://arxiv.org/abs/1708.05031,以及以下代码实现:

from tensorflow.keras.layers import Input, Embedding, Flatten, Dot, Dense
from tensorflow.keras.models import Model
#import tensorflow.distribute

def get_compiled_model(n_users, n_items, embedding_dims=20):
    # Product embedding
    prod_input = Input(shape=[1], name="Item-Input")
    prod_embedding = Embedding(n_items+1, embedding_dims, name="Item-Embedding")(prod_input)
    prod_vec = Flatten(name="Flatten-Product")(prod_embedding)

    # User embedding
    user_input = Input(shape=[1], name="User-Input")
    user_embedding = Embedding(n_users+1, embedding_dims, name="User-Embedding")(user_input)
    user_vec = Flatten(name="Flatten-Users")(user_embedding)

    # The output is the dot product of the two, i.e. a one-hot vector
    dot_product = Dot(name="Dot-Product", axes=1)([prod_vec, user_vec])

    # compile - uncomment these two lines to make training distributed
    # dist_strat = distribute.Strategy()
    # with dist_strat.scope():
    model = Model(inputs = [user_input, prod_input], outputs = dot_product)
    model.compile(
        optimizer='adam',
        loss='mean_squared_error'
    )
    return model


相关问题 更多 >