Python - Algoritmo de recomendação

Olá!

Estou montando um algoritmo de recomendação para um ecommerce, utilizando a abordagem de filtragem baseada em conteúdo. Após pesquisas, cheguei a um algoritmo utilizando a lib scikit-learn com o TfidfVectorizer. Porém, como não sou muito familiarizado com a parte ML e tudo mais, gostaria da ajuda para revisar o algoritmo e fornecer algumas dicas de melhoria ou orientação sobre como posso otimizá-lo. Segue o código:

def calcular_similaridade(produtos):
    textos = [" ".join([produto.descricao, produto.tipo.nome]) for produto in produtos]

    tfidf_vectorizer = TfidfVectorizer()
    tfidf_matrix = tfidf_vectorizer.fit_transform(textos)
    similarity_matrix = cosine_similarity(tfidf_matrix)

    return similarity_matrix


def recomendacoes(db, products_viewed, produtos, user):
    produtos_visualizados = db.session.query(products_viewed)\
                                      .join(produtos)\
                                      .filter(
                                          produtos.active, products_viewed.usuario_id == user.id,
                                          products_viewed.tempo_visualizacao > 3000, products_viewed.active,
                                          produtos.id == products_viewed.produto_id
                                      ).all()
    if not produtos_visualizados:
        return "Nenhum produto visualizado pelo usuário."

    todos_produtos = db.session.query(produtos).filter_by(active=True).all()
    id_para_indice = {produto.id: id_produto for id_produto, produto in enumerate(todos_produtos)}
    similarity_matrix = calcular_similaridade(todos_produtos)
    produtos_recomendados = set()

    for produto_visualizado in produtos_visualizados:
        index_produto_visualizado = id_para_indice.get(produto_visualizado.produto_id)
        if index_produto_visualizado is not None:
            similaridades = similarity_matrix[index_produto_visualizado]
            indices_produtos_similares = similaridades.argsort()[-5:][::-1]

            for idx in indices_produtos_similares:
                produtos_recomendados.add(todos_produtos[idx])

    return [{'nome': produto.nome} for produto in produtos_recomendados]

Obrigado!

Seu algoritmo de recomendação utilizando a abordagem de filtragem baseada em conteúdo com o TfidfVectorizer parece bem estruturado. Para otimizá-lo, sugiro utilizar um TfidfVectorizer pré-treinado, experimentar diferentes algoritmos de similaridade, aprimorar a representação do texto e implementar caching para evitar recálculos desnecessários. Essas melhorias podem ajudar a melhorar o desempenho e a qualidade das recomendações.

1 curtida