Temos uma nova versão, Recomendadores 1.2.0!
Tantas mudanças desde nosso último lançamento. Temos testes completos em Python 3.8 a 3.11 (cerca de 1.800 testes), desempenho atualizado em muitos algoritmos, notebooks revisados e muitas outras melhorias.
O objetivo dos recomendadores é auxiliar pesquisadores, desenvolvedores e entusiastas na prototipagem, experimentação e produção de uma variedade de sistemas de recomendação clássicos e de última geração.
Recomendadores é um projeto da Linux Foundation of AI and Data.
Este repositório contém exemplos e práticas recomendadas para a construção de sistemas de recomendação, fornecidos como notebooks Jupyter. Os exemplos detalham nossos aprendizados em cinco tarefas principais:
Vários utilitários são fornecidos em recomendadores para suportar tarefas comuns, como carregar conjuntos de dados no formato esperado por diferentes algoritmos, avaliar resultados de modelos e dividir dados de treinamento/teste. Implementações de vários algoritmos de última geração estão incluídas para auto-estudo e personalização em seus próprios aplicativos. Consulte a documentação dos recomendadores.
Para uma visão geral mais detalhada do repositório, consulte os documentos na página wiki.
Para alguns dos cenários práticos onde os sistemas de recomendação foram aplicados, consulte cenários.
Recomendamos conda para gerenciamento de ambiente e VS Code para desenvolvimento. Para instalar o pacote de recomendações e executar um notebook de exemplo no Linux/WSL:
# 1. Install gcc if it is not installed already. On Ubuntu, this could done by using the command
# sudo apt install gcc
# 2. Create and activate a new conda environment
conda create -n < environment_name > python=3.9
conda activate < environment_name >
# 3. Install the core recommenders package. It can run all the CPU notebooks.
pip install recommenders
# 4. create a Jupyter kernel
python -m ipykernel install --user --name < environment_name > --display-name < kernel_name >
# 5. Clone this repo within VSCode or using command line:
git clone https://github.com/recommenders-team/recommenders.git
# 6. Within VSCode:
# a. Open a notebook, e.g., examples/00_quick_start/sar_movielens.ipynb;
# b. Select Jupyter kernel <kernel_name>;
# c. Run the notebook.
Para obter mais informações sobre configuração em outras plataformas (por exemplo, Windows e macOS) e configurações diferentes (por exemplo, GPU, Spark e recursos experimentais), consulte o Guia de configuração.
Além do pacote básico, vários extras também são fornecidos, incluindo:
[gpu]
: Necessário para executar modelos de GPU.[spark]
: Necessário para executar modelos Spark.[dev]
: Necessário para o desenvolvimento do repositório.[all]
: [gpu]
| [spark]
| [dev]
[experimental]
: Modelos que não foram exaustivamente testados e/ou podem exigir etapas adicionais na instalação. A tabela abaixo lista os algoritmos de recomendação atualmente disponíveis no repositório. Os notebooks estão vinculados na coluna Exemplo como Início rápido, apresentando um exemplo fácil de executar do algoritmo, ou como Mergulho profundo, explicando em detalhes a matemática e a implementação do algoritmo.
Algoritmo | Tipo | Descrição | Exemplo |
---|---|---|---|
Mínimos Quadrados Alternados (ALS) | Filtragem Colaborativa | Algoritmo de fatoração de matriz para feedback explícito ou implícito em grandes conjuntos de dados, otimizado para escalabilidade e capacidade de computação distribuída. Funciona no ambiente PySpark. | Início rápido/aprofundamento |
Decomposição atenta de valores singulares assíncronos (A2SVD) * | Filtragem Colaborativa | Algoritmo baseado em sequencial que visa capturar as preferências do usuário de longo e curto prazo usando mecanismo de atenção. Funciona no ambiente CPU/GPU. | Início rápido |
Classificação personalizada Cornac/Bayesiana (BPR) | Filtragem Colaborativa | Algoritmo de fatoração de matriz para prever a classificação de itens com feedback implícito. Funciona no ambiente de CPU. | Mergulho profundo |
Cornac/Autoencoder Variacional Bilateral (BiVAE) | Filtragem Colaborativa | Modelo generativo para dados diádicos (por exemplo, interações usuário-item). Funciona no ambiente CPU/GPU. | Mergulho profundo |
Recomendação de incorporação de sequência convolucional (Caser) | Filtragem Colaborativa | Algoritmo baseado em convoluções que visa capturar tanto as preferências gerais do usuário quanto os padrões sequenciais. Funciona no ambiente CPU/GPU. | Início rápido |
Rede de conhecimento profundo (DKN) * | Filtragem Baseada em Conteúdo | Algoritmo de aprendizado profundo que incorpora um gráfico de conhecimento e incorporações de artigos para fornecer notícias ou recomendações de artigos. Funciona no ambiente CPU/GPU. | Início rápido/aprofundamento |
Máquina de fatoração extrema profunda (xDeepFM) * | Filtragem Colaborativa | Algoritmo baseado em aprendizagem profunda para feedback implícito e explícito com recursos de usuário/item. Funciona no ambiente CPU/GPU. | Início rápido |
FastAI incorporando polarização de ponto (FAST) | Filtragem Colaborativa | Algoritmo de uso geral com incorporações e preconceitos para usuários e itens. Funciona no ambiente CPU/GPU. | Início rápido |
LightFM/máquina de fatoração | Filtragem Colaborativa | Algoritmo da máquina de fatoração para feedbacks implícitos e explícitos. Funciona no ambiente de CPU. | Início rápido |
Árvore LightGBM/Gradient Boosting * | Filtragem Baseada em Conteúdo | Algoritmo Gradient Boosting Tree para treinamento rápido e baixo uso de memória em problemas baseados em conteúdo. Funciona em ambientes CPU/GPU/PySpark. | Início rápido na CPU/aprofundamento no PySpark |
LightGCN | Filtragem Colaborativa | Algoritmo de aprendizado profundo que simplifica o design do GCN para prever feedback implícito. Funciona no ambiente CPU/GPU. | Mergulho profundo |
GeoIMC * | Filtragem Colaborativa | Algoritmo de preenchimento de matriz que leva em consideração recursos do usuário e do item usando otimização de gradiente conjugado Riemanniano e segue uma abordagem geométrica. Funciona no ambiente de CPU. | Início rápido |
GRU | Filtragem Colaborativa | Algoritmo baseado em sequência que visa capturar as preferências do usuário de longo e curto prazo usando redes neurais recorrentes. Funciona no ambiente CPU/GPU. | Início rápido |
VAE multinomial | Filtragem Colaborativa | Modelo generativo para prever interações usuário/item. Funciona no ambiente CPU/GPU. | Mergulho profundo |
Recomendação Neural com Representações de Usuários de Longo e Curto Prazo (LSTUR) * | Filtragem Baseada em Conteúdo | Algoritmo de recomendação neural para recomendar artigos de notícias com modelagem de interesse do usuário de longo e curto prazo. Funciona no ambiente CPU/GPU. | Início rápido |
Recomendação Neural com Aprendizagem Multivisualização Atenta (NAML) * | Filtragem Baseada em Conteúdo | Algoritmo de recomendação neural para recomendar artigos de notícias com aprendizado atento de múltiplas visualizações. Funciona no ambiente CPU/GPU. | Início rápido |
Filtragem Colaborativa Neural (NCF) | Filtragem Colaborativa | Algoritmo de aprendizado profundo com desempenho aprimorado para feedback implícito de usuário/item. Funciona no ambiente CPU/GPU. | Início rápido/aprofundamento |
Recomendação Neural com Atenção Personalizada (NPA) * | Filtragem Baseada em Conteúdo | Algoritmo de recomendação neural para recomendação de artigos de notícias com rede de atenção personalizada. Funciona no ambiente CPU/GPU. | Início rápido |
Recomendação Neural com Autoatenção Multi-Cabeçais (NRMS) * | Filtragem Baseada em Conteúdo | Algoritmo de recomendação neural para recomendar artigos de notícias com autoatenção multifacetada. Funciona no ambiente CPU/GPU. | Início rápido |
Recomendação do próximo item (NextItNet) | Filtragem Colaborativa | Algoritmo baseado em convoluções dilatadas e rede residual que visa capturar padrões sequenciais. Ele considera as interações e recursos do usuário/item. Funciona no ambiente CPU/GPU. | Início rápido |
Máquinas Boltzmann restritas (RBM) | Filtragem Colaborativa | Algoritmo baseado em rede neural para aprender a distribuição de probabilidade subjacente para feedback explícito ou implícito do usuário/item. Funciona no ambiente CPU/GPU. | Início rápido/aprofundamento |
Conclusão da matriz Riemanniana de classificação baixa (RLRMC) * | Filtragem Colaborativa | Algoritmo de fatoração de matrizes usando otimização de gradientes conjugados Riemannianos com pequeno consumo de memória para prever interações usuário/item. Funciona no ambiente da CPU. | Início rápido |
Algoritmo Simples para Recomendação (SAR) * | Filtragem Colaborativa | Algoritmo baseado em similaridade para feedback implícito de usuário/item. Funciona no ambiente de CPU. | Início rápido/aprofundamento |
Recomendação sequencial autoatentiva (SASRec) | Filtragem Colaborativa | Algoritmo baseado em transformador para recomendação sequencial. Funciona no ambiente CPU/GPU. | Início rápido |
Recomendador Integrado de Preferência de Curto e Longo Prazo (SLi-Rec) * | Filtragem Colaborativa | Algoritmo baseado em sequencial que visa capturar as preferências do usuário de longo e curto prazo usando mecanismo de atenção, um controlador sensível ao tempo e um controlador sensível ao conteúdo. Funciona no ambiente CPU/GPU. | Início rápido |
Modelagem sequencial de usuários com reconhecimento de múltiplos interesses (SUM) * | Filtragem Colaborativa | Um modelo de usuário sequencial baseado em rede com memória aprimorada que visa capturar os múltiplos interesses dos usuários. Funciona no ambiente CPU/GPU. | Início rápido |
Recomendação sequencial via transformador personalizado (SSEPT) | Filtragem Colaborativa | Algoritmo baseado em transformador para recomendação sequencial com incorporação de usuário. Funciona no ambiente CPU/GPU. | Início rápido |
VAE padrão | Filtragem Colaborativa | Modelo generativo para prever interações usuário/item. Funciona no ambiente CPU/GPU. | Mergulho profundo |
Decomposição de valor surpresa/singular (SVD) | Filtragem Colaborativa | Algoritmo de fatoração de matriz para prever feedback de classificação explícito em pequenos conjuntos de dados. Funciona no ambiente CPU/GPU. | Mergulho profundo |
Frequência do Prazo - Frequência Inversa do Documento (TF-IDF) | Filtragem Baseada em Conteúdo | Algoritmo simples baseado em similaridade para recomendações baseadas em conteúdo com conjuntos de dados de texto. Funciona no ambiente de CPU. | Início rápido |
Wabbit Vogal (VW) * | Filtragem Baseada em Conteúdo | Algoritmos de aprendizado on-line rápidos, ótimos para cenários onde os recursos/contexto do usuário estão em constante mudança. Ele usa a CPU para aprendizado online. | Mergulho profundo |
Amplo e Profundo | Filtragem Colaborativa | Algoritmo de aprendizado profundo que pode memorizar interações de recursos e generalizar recursos do usuário. Funciona no ambiente CPU/GPU. | Início rápido |
Máquina xLearn/Fatorização (FM) e FM com reconhecimento de campo (FFM) | Filtragem Colaborativa | Algoritmo rápido e com uso eficiente de memória para prever rótulos com recursos de usuário/item. Funciona no ambiente CPU/GPU. | Mergulho profundo |
NOTA : * indica algoritmos inventados/contribuídos pela Microsoft.
Algoritmos e utilitários independentes ou em incubação são candidatos à pasta contrib. Isso abrigará contribuições que podem não caber facilmente no repositório principal ou que precisam de tempo para refatorar ou amadurecer o código e adicionar os testes necessários.
Algoritmo | Tipo | Descrição | Exemplo |
---|---|---|---|
SARplus * | Filtragem Colaborativa | Implementação otimizada de SAR para Spark | Início rápido |
Fornecemos um caderno de benchmark para ilustrar como diferentes algoritmos podem ser avaliados e comparados. Neste notebook, o conjunto de dados MovieLens é dividido em conjuntos de treinamento/teste em uma proporção de 75/25 usando uma divisão estratificada. Um modelo de recomendação é treinado usando cada um dos algoritmos de filtragem colaborativa abaixo. Utilizamos valores de parâmetros empíricos relatados na literatura aqui. Para métricas de classificação, usamos k=10
(10 itens mais recomendados). Executamos a comparação em um DSVM Azure NC6s_v2 padrão (6 vCPUs, 112 GB de memória e 1 GPU P100). Spark ALS é executado em modo autônomo local. Nesta tabela mostramos os resultados no Movielens 100k, executando os algoritmos para 15 épocas.
Algo | MAPA | nDCG@k | Precisão@k | Lembre-se@k | REQM | MAE | R2 | Variância explicada |
---|---|---|---|---|---|---|---|---|
ELA | 0,004732 | 0,044239 | 0,048462 | 0,017796 | 0,965038 | 0,753001 | 0,255647 | 0,251648 |
BiVAE | 0,146126 | 0,475077 | 0,411771 | 0,219145 | N / D | N / D | N / D | N / D |
RPB | 0,132478 | 0,441997 | 0,388229 | 0,212522 | N / D | N / D | N / D | N / D |
FastAI | 0,025503 | 0,147866 | 0,130329 | 0,053824 | 0,943084 | 0,744337 | 0,285308 | 0,287671 |
LightGCN | 0,088526 | 0,419846 | 0,379626 | 0,144336 | N / D | N / D | N / D | N / D |
NCF | 0,107720 | 0,396118 | 0,347296 | 0,180775 | N / D | N / D | N / D | N / D |
RAE | 0,110591 | 0,382461 | 0,330753 | 0,176385 | 1.253805 | 1.048484 | -0,569363 | 0,030474 |
SVD | 0,012873 | 0,095930 | 0,091198 | 0,032783 | 0,938681 | 0,742690 | 0,291967 | 0,291971 |
Este projeto aceita contribuições e sugestões. Antes de contribuir, consulte nossas diretrizes de contribuição.
Este projeto adere a este Código de Conduta para promover uma comunidade acolhedora e inspiradora para todos.
Esses testes são compilações noturnas, que calculam os testes assíncronos. main
é nosso ramo principal e staging
é nosso ramo de desenvolvimento. Usamos pytest para testar utilitários python em recomendadores e o executor de notebook Recommenders para os notebooks.
Para obter mais informações sobre os pipelines de teste, consulte a documentação de teste.
Os testes noturnos de build são executados diariamente no AzureML.
Tipo de construção | Filial | Status | Filial | Status | |
---|---|---|---|---|---|
CPU Linux | principal | encenação | |||
GPU Linux | principal | encenação | |||
Linux Faísca | principal | encenação |