Para continuar tendo relevância em um segmento global e de ritmo acelerado, os profissionais técnicos precisam acompanhar as grandes tendências em TI e encontrar maneiras de incorporar as tendências importantes ao portfólio de tecnologia de suas empresas. Uma dessas tendências é o uso de mecanismos de recomendação a fim de conduzir os usuários para explorar outras ofertas de seu Web site ou negócio. Esses mecanismos fornecem recomendações aos usuários com base em vários padrões e são úteis em orientar os usuários a considerar as ofertas que, de outra forma, eles não conheceriam, com base em seus hábitos de uso específicos.
Alguns Web sites bem populares usam bastante os mecanismos de recomendação. Visitantes do Amazon ou do Netflix, por exemplo, normalmente veem recomendações personalizadas como “Se você gostou desse item, talvez também goste deste...” Esses sites usam recomendações para ajudar a conduzir os usuários (e a gerar receita) a outras coisas que eles oferecem de uma forma inteligente, significativa, personalizada especificamente para o usuário e de acordo com as preferências do usuário.
Mesmo se o seu negócio não oferecer livros ou filmes, pode haver muitas razões para implementar algo parecido. É possível recomendar produtos relacionados fornecidos por seu negócio, especialmente se você tiver um amplo portfólio de ofertas. É possível oferecer recomendações para conceitos mais abstratos, como páginas relevantes que você gostaria que o usuário visitasse, uma lista de serviços populares, oportunidades educacionais para inscrição, ofertas especiais ou o acesso a documentos de suporte técnico úteis.
Em vez de tentar adivinhar em que sua base ampla de usuários está interessada, a personalização por meio de recomendações permite identificar o que os usuários individuais gostam e não gostam de forma discreta e inteligente, e usar essas informações para personalizar a experiência de cada usuário. A tarefa de recomendar uma nova escolha com base no comportamento passado é bastante usada em muitos aplicativos e segmentos e, portanto, esse é o exemplo usaremos ao longo deste artigo.
Apache Mahout é um mecanismo de recomendação e código aberto que fornece uma boa aplicação desses conceitos e é pequeno, mas poderoso o suficiente para implementar em casos de negócio de pequeno e médio porte. Este artigo descreve como integrar o Apache Mahout V0.5 ao IBM WebSphere Application Server V8 usando o IBM Rational Application Developer for WebSphere Software V8.0.3. Ele começa com uma visão geral dos mecanismos de recomendação, descreve o Apache Mahout em alto nível, explica como é possível integrá-lo ao WebSphere Application Server e ao Rational Application Developer, e oferece algumas etapas adicionais para descobrir mais sobre essa tecnologia.
Visão geral de um mecanismo de recomendação
O principal objetivo de um mecanismo de recomendação é fazer inferências sobre dados existentes a fim de mostrar relacionamentos entre os objetos. Os objetos podem ser muitas coisas, incluindo usuários, itens, produtos e assim por diante. Os relacionamentos fornecem um nível de semelhança ou propriedade entre os objetos. Por exemplo, os relacionamentos podem representar avaliações de quanto um usuário gosta de um item (escalar) ou indicam se um usuário marcou uma página específica como favorito (binário).
Para fazer uma recomendação, os mecanismos de recomendação realizam diversas etapas para explorar os dados. Inicialmente, você começa com dados de entrada que representam os objetos e seus relacionamentos. Os dados de entrada são compostos por identificadores de objeto e os relacionamentos com outros objetos. A Figura 1 mostra isso em alto nível.
Figura 1. O panorama completo
Considere as avaliações que os usuários dão aos itens. Usando esses dados de entrada, um mecanismo de recomendação computa uma semelhança entre os objetos. A computação da semelhança entre os objetos pode consumir muito tempo dependendo do tamanho dos dados ou do algoritmo específico. Algoritmos distribuídos como o Apache Hadoop podem ser usados para paralelizar a computação de semelhanças. Há tipos diferentes de algoritmos para computar as semelhanças. Finalmente, usando as informações de semelhança, o mecanismo de recomendação pode fazer solicitações de recomendação com base nos parâmetros solicitados.
Talvez você acreditasse que os mecanismos de recomendação eram úteis, mas não tentou usá-los por pensar que fossem muito complicados. O domínio do mecanismo de recomendação é, na verdade, grande e pode ser bastante complexo. Felizmente, há ferramentas disponíveis que facilitam a exibição dos conceitos necessários dentro do tempo e espaço de um único artigo. Melhor ainda, depois de aprendidas, essas mesmas ferramentas podem ser usadas para aplicar a lição ao mundo real. Os designers do Apache Mahout fizeram da escalabilidade e disponibilidade uma parte central do projeto, de modo que você possa desenvolver sua solução à medida que suas necessidades aumentam.
Há algumas decisões importantes a serem tomadas quando você decide começar a personalizar seu aplicativo e deseja usar o mecanismo de recomendação:
- Qual algoritmo aplicar
A decisão mais importante a ser tomada é qual algoritmo aplicar em seus dados. A seleção do algoritmo depende do que você deseja identificar e qual tipo de relacionamento é especificado em seus dados. Algumas das abordagens comuns usadas para recomendações incluem:
- Filtragem colaborativa: essa abordagem depende da interação social entre os usuários. As recomendações têm base nas avaliações fornecidas por outros usuários.
- Cluster: com essa abordagem, o mecanismo de recomendação tenta desenvolver recomendações com base nas semelhanças entre os usuários ou o s próprios itens.
- Categorização: essa abordagem agrupa automaticamente os itens em categorias usando atributos comuns. Na categorização, o computador tenta classificar todos os itens.
Este artigo se concentrará na filtragem colaborativa para ajudá-lo a saber mais sobre os aspectos sociais de seus usuários; esse também será um bom ponto de partida para a adição de recomendações aos aplicativos da Web.
A filtragem colaborativa é uma técnica fácil e popular. É fácil porque seus clientes fazem o trabalho importante para você – eles conduzem os critérios do que você deseja destacar. A filtragem colaborativa analisa as avaliações de outros usuários ou itens para fazer as recomendações. Há duas abordagens na filtragem colaborativa: a principal diferença entre elas está na habilidade de escalamento de cada uma à medida que o número de usuários no sistema cresce:
- Recomendação com base no usuário
Esse tipo de recomendação constrói semelhanças entre os usuários analisando as semelhanças dos itens avaliados por cada usuário. Por exemplo, se os itens forem cursos, dois usuários poderão ser considerados bastante parecidos se ambos tiverem participado dos mesmos cursos. Na outra extremidade, a semelhança seria pequena se eles não tivessem feito cursos parecidos. Para fazer recomendações, os algoritmos dependem das avaliações que usuários semelhantes fazem desses cursos que não foram realizados pelo usuário. Essa recomendação é a mais básica; no entanto, sua principal limitação é que para gerar as semelhanças, ela precisa comparar cada usuário a todos os outros usuários. Isso é aceitável para um aplicativo com um número baixo de usuários, mas se o número de usuários aumentar, o tempo para realizar essa avaliação aumentará exponencialmente.
- Recomendação com base em item
A recomendação com base em item, por outro lado, começa com a análise dos itens associados ao usuário. Para cada item associado ao usuário, o algoritmo computa o nível de semelhança com outros itens na coleção a fim de desenvolver a lista de recomendações. Para determinar a probabilidade de o usuário gostar de um item recomendado, o algoritmo analisa as avaliações que o usuário fez do item e concede uma avaliação ponderada a cada item recomendado. O principal problema com a recomendação com base em item é que ele precisa desenvolver um índice de semelhanças para cada item disponível. No entanto, mudanças nos itens são menos frequentes do que mudanças em usuários e, portanto, é viável com esse tipo de recomendação pré-computar as semelhanças off-line e atualizá-las em períodos específicos.
- Como escalar o processo para seus usuários
O processo real de calcular a semelhança entre usuários e itens é uma operação intensa. Dependendo do tamanho de seu conjunto de dados, a operação pode demorar de alguns milissegundos a vários minutos. Ao trabalhar com aplicativos com base na Web, o tempo de resposta se torna um problema se os usuários precisarem aguardar por um período maior para receber uma recomendação.
Embora seja possível computar as semelhanças entre os usuários e os itens em tempo real, é necessário avaliar isso cuidadosamente ao trabalhar com conjuntos de dados maiores. Para as abordagens de recomendação com base em item e em usuário as melhores práticas recomendam executar esses cálculos off-line se os conjuntos de dados forem maiores (por exemplo, mais de 1 milhão de classificações). O uso dos cálculos off-line se torna factível nos casos em que novos itens são adicionados com pouca frequência ou os usuários classificam os itens ocasionalmente, pois as similaridades precisam ser calculadas apenas quando um novo item é adicionado ou uma nova classificação é aplicada a um item. Nesse tipo de cenário, o mecanismo de recomendação pode trabalhar usando as similaridades que devem ser consequentemente consistentes.
Uma abordagem para pré-calcular as similaridades off-line é alavancar os recursos de cálculo distribuídos de produtos como o Apache Hadoop, uma implementação de software livre da técnica do MapReduce. Essa é a razão pela qual frequentemente você ouvirá sobre esses sistemas mencionados juntamente com mecanismos de recomendação. Caso esteja tentando realizar a recomendação com base em um array de dados vasto e disperso, será necessário reduzir os dados e esses sistemas permitirão que a operação seja feita.
Felizmente, o Apache Mahout fornece tarefas que podem ser enviadas para o Apache Hadoop para ajudá-lo a calcular suas similaridades. Uma vez que esse cálculo estiver completo, é possível carregar os resultados na fonte de dados desejada para que seu aplicativo da Web possa usá-lo.
- Onde armazenar seus dados
Por fim, é necessário determinar onde armazenar seus dados. Esses dados podem conter dados de entrada não processados ou dados com similaridades já calculadas por um processo off-line, como o Apache Hadoop. Caso a origem de seus dados seja um vasto archive de dados não processados, pode ser necessário explorá-lo para obter algo para alimentar o mecanismo de recomendações. É possível armazenar seus conjuntos de dados em um sistema de arquivos ou em uma origem de dados distribuída. No caso em que seus conjuntos de dados são pequenos, é possível fazer com que seus programas leiam os dados a partir do sistema de arquivos e armazená-los na memória de trabalho. Porém, se os conjuntos de dados são grandes, pode-se desejar considerar o uso de um sistema de gerenciamento de banco de dados, como o IBM DB2®, Apache Derby, etc. Caso selecione uma origem de dados distribuída, você desejará garantir que as configurações de otimização de consulta adequadas (como índices) estejam configuradas corretamente.
Mas não precisa ser tão complicado. Para manter tudo simples, assuma que seu conjunto de dados é suficientemente pequeno para caber em um banco de dados pequeno, como o Apache Derby, o ™sistema de gerenciamento de banco de dados de software livre baseado em Java enviado com o WebSphere Application Server V8. O importante é que ao prosseguir em sua abordagem, será necessário determinar, com base em seis dados específicos, se será necessário usar um sistema de arquivos distribuído ou um sistema de gerenciamento de banco de dados relacional tradicional.
Conforme descrito no artigo do developerWorks Apresentando Apache Mahout, o objetivo do projeto Apache Mahout é criar bibliotecas de aprendizado de máquina escaláveis. O Apache Mahout é implementado sobre o Apache Hadoop, não está restrito a sistemas de arquivo distribuídos.
Isso nos traz ao foco desse artigo, a saber, os algoritmos de aprendizado de máquina fornecidos pelo Apache Mahout para processar seus dados em uma recomendação. Para os propósitos desse artigo, iremos nos focar na tarefa de aprendizado de máquina para filtragem com base no usuário que o Apache Mahout implementa atualmente. São usadas referências sociais nesse exemplo pelo fato de haver muitas maneiras de obter esses dados e eles serem simples de efetuar o log em um banco de dados.
Assuma que deseja criar um aplicativo da Web que permita aos usuários obter as recomendações de itens com base nas classificações fornecidas por outros usuários. O conjunto de dados disponível contém classificações sobre os itens feitas pelos usuários.Para simplificar, os dados de amostra incluídos nesse artigo são genéricos, já que trabalharemos apenas com os identificadores dos usuários e dos itens. Em um aplicativo real, você desejará substituir o identificador exclusivo de um item recomendado por seu nome de exibição antes de apresentá-lo ao usuário.
Figura 2. Topologia de amostra
Então, conforme mostrado na Figura 2, os usuários podem solicitar um servlet no aplicativo. O aplicativo fará uma chamada para que o mecanismo de recomendação sugira um conjunto de recomendações para o usuário. O mecanismo de recomendação irá recuperar os dados de uma origem de dados e irá calcular as similaridades em tempo real.
Configurar o ambiente de desenvolvimento
Para executar as etapas descritas nesse artigo, será necessário configurar seu ambiente de desenvolvimento conforme descrito aqui:
- Faça o download do Apache Mahout
- Visite o Web site do Apache Mahout e faça o download da versão mais recente do Apache Mahout. No momento da criação desse texto, a versão mais recente era a 0.5 (mahout-distribution-0.5.zip).
- Extraia o conteúdo do archive em um local conhecido. Esses arquivos de conteúdo serão mencionados posteriormente.
- Crie o projeto do aplicativo Java EE
- Inicie o Rational Application Developer para WebSphere Software V8.0.3.
- Alterne para a perspectiva do Java EE.
- Selecione File > New > Enterprise Application Project.
- Para o Nome do Projeto, insira
RecommenderApp. - Certifique-se de que o tempo de execução de destino esteja definido como WebSphere Application Server v8.0 e clique em Next.
- No próximo painel, clique em New module... e, a partir do pop-up, selecione Web module only e configure seu nome
RecommenderWeb. - Clique em OK e, então, em Finish.
- Crie e preencha um banco de dados com dados de amostra
O Apache Derby é um banco de dados baseado em Java que usa um armazenamento de arquivos para armazenamento. O Apache Derby é usado nesse exemplo pois está incluído com o Rational Application Developer.
- Selecione Window > Show View > Data Source Explorer.
- Clique com o botão direito do mouse em Database Connections e selecione New ...
- Para o driver JDBC, selecione Derby 10.5 – Embedded JDBC Driver Default.
- Uma vez que o Derby armazena os bancos de dados no sistema de arquivos, será necessário especificar onde ele residirá. Para o local do banco de dados, insira o caminho e o nome a ser usado para o banco de dados. Para esse exemplo,
PREFERENCESserá usado como nome do banco de dados. - Deixe os campos de nome de usuário e senha em branco e clique em Finish.
Em seguida, será definido o modelo de dados usando um script (Listagem 1). Primeiro, o script cria um esquema chamado PREFERENCES e uma tabela chamada taste_preferences. Essa tabela retém todas as classificações feitas pelos usuários sobre cada item. Ela contém quatro colunas: user_id, item_id, preferences e timestamp. Cada tupla na tabela representa que o usuário user_id classificou o item item_id e forneceu uma classificação de preferência.
Listagem 1. Esquema da origem de dadosCREATE SCHEMA PREFERENCES; CREATE TABLE PREFERENCES.taste_preferences ( user_id BIGINT NOT NULL, item_id BIGINT NOT NULL, preference FLOAT NOT NULL, "timestamp" BIGINT, PRIMARY KEY (user_id, item_id) );
Em virtude do grande número de acessos ao banco de dados necessários, também é muito importante definir dois índices para acelerar o tempo de procura (Listagem 2).
Listagem 2. Tabela de índices SQLCREATE INDEX PREFERENCES.user_id_idx ON PREFERENCES.taste_preferences ( user_id ); CREATE INDEX PREFERENCES.item_id_idx ON PREFERENCES.taste_preferences ( item_id );
Em seguida, crie o modelo de dados:
- Faça o download do createtable.sql (incluído neste artigo) e salve-o no projeto RecommenderWeb.
- A partir da perspectiva do Java EE, clique com o botão direito do mouse em RecommenderWeb e selecione Refresh. O script createtable.sql deve ser exibido agora.
- Clique com o botão direito do mouse no script createtable.sql e selecione Execute SQL Files.
- Verifique se o tipo de servidor está configurado como Derby _10.x e o perfil de conexão e os nomes dos bancos de dados estão corretos e clique em OK.
- É possível verificar se o script foi concluído com sucesso ao revisar a visualização do SQL Results (Figura 3).
Figura 3. Visualização do SQL Results após a criação da tabela
Agora que sua tabela foi criada, é possível carregá-la com alguns dados:
- Faça o download do arquivo u.data (incluído neste artigo) . Essa é uma lista separada por vírgulas com aproximadamente 10 mil classificações de usuário do conjunto de dados MovieLens. Da mesma maneira que foi feito com o script SQL, salve esse arquivo no projeto RecommderWeb.
- A partir da perspectiva do Java EE, clique com o botão direito do mouse em RecommenderWeb e selecione Refresh. O arquivo u.data deve ser exibido.
- A partir da visualização Data Source Explorer, expanda Database Connections > PREFERENCES > PREFERENCES > Schemas > PREFERENCES > Tables.
- Clique com o botão direito do mouse na tabela TASTE_PREFERENCES e selecione Load...
- Para o Input File, clique em Browse e navegue até RecommenderWeb e selecione u.data e em OK.
- Para o Column delimiter, selecione Tab. Assegure que a opção Replace existing data está marcada e clique em Finish.
- O processo de carregamento deve ser iniciado. Pode levar até 60 segundos para que todo o conjunto de dados seja carregado. É possível cerificar a conclusão bem sucedida do carregamento a partir da visualização do SQL Results (Figura 4).
Figura 4. Visualização do SQL Results após os dados serem carregados no banco de dados
- É possível verificar os dados carregados ao clicar com o botão direito do mouse na tabela TASTE_PREFERENCES e selecionar Data > Sample Contents.
- Desconecte do banco de dados ao selecionar a visualização Data Source Explorer e expandir Database Connections.
- Clique com o botão direito do mouse em PREFERENCES e selecione Disconnect.
Agora, a criação de seu armazenamento de dados e de seus dados de amostra está concluída.
- Configure as bibliotecas do Apache Mahout
Para desenvolver o código do recomendador, é necessário importar as bibliotecas do Apache Mahout requeridas em seu aplicativo corporativo. (Caso vá compartilhar as bibliotecas do Apache Mahout com diversos projetos corporativos em seu ambiente, o método recomendado seria configurar uma biblioteca compartilhada.)
- Expanda EAR Projects, clique com o botão direito do mouse em RecommenderAppe selecione Import > Import ...
- Selecione General > File System e clique em Next.
- No diretório From, navegue até o local em que os arquivos do Apache Mahout foram extraídos e clique em OK.
- Selecione os arquivos listados na tabela abaixo na caixa de diálogo de importação:
Nome da biblioteca Local mahout-core-0.5.jar mahout-distribution-0.5/ mahout-core-0.5-job.jar mahout-distribution-0.5/ slf4j-jcl-1.6.0.jar mahout-distribution-0.5/lib
- Clique em Finish.
- Agora adicione essas referências ao aplicativo da Web para que seja possível definir o caminho da classe para compilação. Clique com o botão direito do mouse no projeto RecommenderWeb e selecione Properties.
- Selecione Java Build Path e clique em Add JARs ...
- Na caixa de diálogo pop-up, expanda RecommenderApp, selecione
mahout-core-0.5.jar e mahout-core-0.5-job.jar
e clique em OK (Figura 5).
Figura 5. Editor do Java Build Path para o projeto RecommenderWeb
- No projeto RecommenderWeb, expanda WebContent > META-INF e clique duas vezes em MANIFEST.MF.
- em Dependencies > Jar or Module coloque um visto próximo a todas as três bibliotecas
(Figura 6).
Figura 6. Editor do Dependencies para o projeto RecommenderWeb
- Salve e feche o editor.
Nesse ponto, a configuração do ambiente de desenvolvimento foi concluída e você está pronto para começar a escrever o código do recomendador.
Criando o mecanismo de recomendação
Em seguida, será criado o servlet que manipulará o código do mecanismo de recomendação do Apache Mahout.
- Crie uma classe de servlet
Comece criando uma classe de servlet que representará seu aplicativo da Web.
- Clique com o botão direito do mouse no projeto RecommenderWeb e selecione New > Servlet.
- Para o Java Package, insira
com.ibm.sample.recommender. - Para o Class Name, insira
TestServlet.
Figura 7. Create Servlet – Especifique o painel de destino do arquivo de classe
- Clique em Next.
- No próximo painel, aceite os padrões e clique em Next.
- No próximo painel, desmarque doPost e clique em Finish
(Figura 8).
Figura 8. Create Servlet – Especifique os stubs de método para gerar no painel
Após a conclusão dessa etapa, você terá uma classe servlet vazia em que será possível adicionar seu código para o mecanismo de recomendação.
- Importe o código de origem
O código de origem de amostra para a classe de servlet está incluído neste artigo, contido no arquivo snippet1.txt. Faça o download desse arquivo e use-o para substituir os conteúdos do arquivo de origem TestServlet.java.
Esse é um bom momento para revisar as partes importantes do código para ajudá-lo a entender o que está sendo feito.
- Crie o modelo de dados
Anteriormente, o banco de dados foi criado e o conjunto de dados foi carregado. Nessa etapa, será definido um objeto de modelo de dados que fornece acesso a esse conjunto de dados ao usar as chamadas JDBC. O Apache Mahout fornece classes de implementação do JDBC para origens de dados MySQL PostgreSQL apenas. Caso deseje usar uma origem de dados diferente, há três opções:
- Usar a classe GenericJDBCDataModel e fornecer todas as consultas SQA necessárias no método construtor.
- Estender o AbstractJDBCDataModel para adicionar uma implementação para sua origem de dados.
- Testar uma das implementações existentes para verificar a compatibilidade.
Para o caso do Derby, a implementação do PostgreSQL é compatível, então ela é usada aqui (Listagem 3). Entretanto, para uma implementação mais robusta, pode-se desejar optar pela segunda opção de estender a implementação do AbstractJDBCDataModel.
Listagem 3. Definição do modelo de dadosprivate @Resource (name="jdbc/taste") DataSource tasteDS; dataModel = new PostgreSQLJDBCDataModel(tasteDS, "PREFERENCES.TASTE_PREFERENCES", "USER_ID", "ITEM_ID", "PREFERENCE", "TIMESTAMP");
A classe de interface org.apache.mahout.cf.taste.model.DataModel representa o modelo de dados que é acessado pelas classes de Similaridade e Recomendador. Há diferentes implementações para essa interface (File, JDBC, etc.) Para gerenciar os dados usados após seu aplicativo ser inicializado, é possível usar os métodos mostrados na tabela abaixo.
Nome do método Descrição FastIDSet
getItemIDsFromUser(long userID)Retorna os IDs de todos os itens por quais que o usuário expressa preferência Float getPreferenceValue(long userID, long itemID)valor preferencial do usuário determinado para o item determinado ou nulo caso nenhum existir. int getNumUsers()Número total de usuários conhecidos pelo modelo. void setPreference(long userID, long itemID, float value)Define uma preferência específica (classificação positiva do item) para um usuário. void removePreference(long userID, long itemID)Remove uma preferência específica para um usuário.
- Gere a similaridade de usuário
Uma vez que tiver definido o modelo de dados, a próxima etapa necessária é calcular a similaridade dos dados. O Apache Mahout fornece vários algoritmos para calcular a similaridade entre os usuários. Eles incluem: City Block Similarity, Euclidean Distance Similarity, LogLikelihood Similarity, Pearson Correlation Similarity, SpearmanCorrelationSimilarity, TanimotoCoefficientSimilarity, UncenteredCosineSimilarity e outros. (Consulte a documentação do javadoc inclusa na distribuição do Mahout para obter mais informações sobre esses algoritmos.)
A extensão do processo para calcular a similaridade entre os usuários aumenta conforme o número de itens e classificações aumenta. Por essa razão, os cálculos de similaridade off-line para grandes conjuntos de dados devem ser feitos off-line. Por exemplo, criando tarefas para o Apache Mahout. Os resultados de similaridade dessas tarefas off-line podem, então, serem incluídos no modelo de dados.
O exemplo usado nesse artigo usa o algoritmo PearsonCorrelationSimilarity, que executa os cálculos em tempo real, eliminando a necessidade de executar cálculos off-line.
Então, vamos executar o cálculo de similaridade para seu modelo de dados:
UserSimilarity similarity = new
PearsonCorrelationSimilarity(dataModel);A variável de similaridade agora contém as informações de similaridade para todos os usuários disponíveis no modelo de dados.
- Defina o ambiente do usuário
O algoritmo de recomendação baseado no usuário usa um ambiente para especificar quais usuários devem ser considerados semelhantes ao usuário específico. Esse exemplo usa a implementação NearestNUserNeighborhood, que permite especificar um limite para quantos usuários devem ser incluídos em um ambiente. Nesse exemplo, a associação no ambiente consiste em cinco usuários mais semelhantes, assim, o ambiente é definido da seguinte forma:
UserNeighborhood neighborhood = new NearestNUserNeighborhood(5, similarity, dataModel);Os membros em um ambiente são considerados muito semelhantes ao usuário. Então, conforme a associação aumenta, o número de itens recomendados também aumenta, uma vez que mais membros recomendaram mais itens.
- Faça as recomendações
Agora que a similaridade entre os usuários foi calculada e o ambiente de um usuário foi especificado, é possível continuar e fazer recomendações de usuário. O Apache Mahout fornece a interface Recommender para acessar as recomendações por usuários:
Recommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, similarity);Com o recomendador definido, é possível fazer recomendações ao chamar o método recommend(long, int) e passar o ID do usuário e o número máximo de itens recomendados que deseja receber. A partir daqui, usa-se um agente iterativo para processar cada recomendação.
A Listagem 4 mostra como extrair as recomendações para um usuário.
Listagem 4. Iterando através das recomendaçõesjava.util.List<RecommendedItem> list = recommender.recommend(USER_ID, 10); Iterator<RecommendedItem>iter = list.iterator(); while ( iter.hasNext()) { RecommendedItem item = iter.next(); out.println("<tr><td>" + item.getItemID() + "</td><td>" + item.getValue() + "</td></tr>"); }
Então, em suma, a recomendação baseada no usuário primeiro calculou a similaridade entre os usuários do conjunto de dados e, então, usou um item do ambiente para especificar quais usuários devem ser considerados similares ao usuário atual. Com essas informações, o algoritmo do recomendador é capaz de fazer recomendações com base em que itens usuários similares classificaram e usa essa informação para estimar o quanto o usuário atual pode gostar desses itens.
- Teste o mecanismo em um aplicativo da Web
Antes de testar o aplicativo no WebSphere Application Server V8, é necessário configurar a origem de dados no servidor e definir a referência JNDI para a origem de dados para que o servlet possa acessá-la.
Para configurar a origem de dados:
- Na visualização Servers, clique com o botão direito do mouse em WebSphere Application Server at localhost e selecione Start.
- Assim que o servidor tiver iniciado, clique com o botão direito do mouse no servidor e selecione Administration > Run Administrative Console.
- Se a autenticação estiver ativada, insira seu userID e senha quando o console abrir. Clique em Login.
- Expanda Resources > JDBC > JDBC Providers.
- Para scope, selecione o escopo Server .
- Clique em New ...
- Insira os valores como mostrado na figura 9.
Figura 9. Painel New JDBC provider
- Clique em Next.
- Verifique a configuração e clique em Finish.
- De volta à lista JDBC Providers, clique em Derby JDBC Provider.
- Em Additional Properties clique em Data sources.
- Clique em New ...
- Para o JNDI name, insira
jdbc/taste(Figura 10).
Figura 10. Painel de definição do Data Source JDNI name
- Clique em Next.
- Para Database name, insira o local do caminho do arquivo para a origem de dados Derby criado para carregar o modelo de dados. Desmarque Use this data source in contained managed persistence (CMP) (Figura 11).
Figura 11. Painel de especificação de Database name
- Clique em Next.
- Para a Etapa 3, deixe a configuração de segurança em branco e clique em Next.
- Para a Etapa 4, verifique as configurações definidas e clique em Finish.
- Salve a configuração clicando em Salve.
Essas são todas as alterações que precisam ser feitas no WebSphere Application Server V8. As informações sobre ligação da origem de dados já estão definidas no código do servlet usando as anotações do Servlet 2.5 (consulte snippet1.txt), então não é necessário configurá-las no descritor de implementação do módulo da Web. A última etapa é instalar o aplicativo no servidor:
- A partir da visualização Servers, clique com o botão direito do mouse no servidor de teste WebSphere Application Server V8 e selecione Add or Remove ...
- Selecione RecommenderApp e clique em Add.
- Clique em Finish.
É isso. O aplicativo agora está instalado e finalmente pronto para testar.
Para testar o aplicativo:
- Inicie o servidor de teste WebSphere Application Server V8 a partir da visualização Servers, caso ele ainda não tenha sido iniciado.
- Expanda Dynamic Web Projects >
RecommenderWeb > RecommenderWeb > Servlets (Figura 12).
Figura 12. Visualização do Dynamic Web Projects
- Clique com o botão direito do mouse em TestServlet e selecione Run As > Run on Server.
- Selecione WebSphere Application Server V8 at localhost e clique em Finish.
- O navegador interno não deve ser ativado e os resultados da recomendação podem ser exibidos (Figura 13).
Figura 13. Resultados da recomendação
- Crie o modelo de dados
Como é possível observar a partir do exemplo, o usuário do qual deseja recuperar as recomendações é o usuário 400. Esse Usuário já classificou 22 itens. Com base no modelo de dados e no algoritmo de recomendação, o Apache Mahout pôde recomendar um conjunto de itens juntamente com uma classificação prevista que esse usuário pode ter atribuído a eles.
Agora que você sabe algo sobre mecanismos de recomendação, e o que vem depois?
Em primeiro lugar, é possível começar a ver o valor extra fornecido pelos produtos que já incluem um mecanismo de recomendação. Por exemplo, o IBM WebSphere Portal e o IBM WebSphere Commerce Suite incluem um mecanismo de recomendação como parte de suas ofertas básicas. Através de produtos de software como esses, a IBM refinou e melhorou o suporte nessas áreas enquanto gerenciava interesses sobre a privacidade on-line, desempenho e integração. (Mantenha esses recursos integrados desses produtos em mente caso tenha que ponderar qualquer decisão de "desenvolver ou comprar".)
Esse artigo não trata de um possível grande fluxo, ou seja, o processamento de grandes volumes de dados usando tarefas de redução com mapa. Esse tópico não foi tratado aqui, mas foi pela IBM. As iniciativas Big Data da IBM podem ajudar a gerenciar grandes quantidades de dados necessários para alguns aplicativos específicos. Como mencionado anteriormente, a solução de exemplo apresentada aqui não escalará após um determinado ponto devido aos limites de recursos do grande aumento do número de usuários. Os problemas de grandes processamentos estão se tornando mais comuns e não precisam parar seu progresso. Usando as iniciativas Big Data, não há razão para ser impedido por nenhuma escala de processamento.
Não é necessário possuir um grande datacenter para usar o Apache Mahout. Claro, com a computação em nuvem, o datacenter não é necessário para nenhuma solução. A computação em nuvem não está diretamente relacionada ao espaço do mecanismo de recomendação, mas vale mencionar que as iniciativas em nuvem da IBM podem fornecer a capacidade para experimentar alguns desses pontos de maneiras que, de outras formas, não seriam práticas.
É possível ver que os mecanismos de recomendação podem adicionar uma poderosa nova dimensão aos aplicativos da Web ao conduzir os usuários a outros produtos ou ofertas da Web, com base em suas características ou comportamentos específicos. Esse artigo forneceu uma breve apresentação das técnicas usadas pelos mecanismos de recomendação e o que pode precisar ser feito para que eles sejam mais escaláveis. Vimos também o quanto o Apache Mahout alavanca essas técnicas e ajuda a integrá-las nos aplicativos da Web. Ao integrar esses conceitos no IBM WebSphere Application Server, aprendemos como estender seus aplicativos da Web e adicionar a personalização efetiva a eles.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| Code sample | 1109_recsample.zip | 9.4 MB | HTTP |
Informações sobre métodos de download
Aprender
- Programming Collective
Intelligence, Toby Segaran, O'Reilly Media, Inc., 2007.
- What is Apache
Mahout?
- Introducing Apache Mahout
-
Apache Hadoop
-
What is big
data?
- IBM Portal LikeMinds Recommendations
-
IBM
WebSphere Portal 6.1.5
Information Center
-
Computação em nuvem da IBM
-
“New York Times” Quietly Rolls Out Recommendations Service
-
WebSphere no IBM developerWorks
Obter produtos e tecnologias

Emilio Zegarra é engenheiro de software senior na organização IBM Software Services for WebSphere sediada em Pittsburgh, PA. Suas áreas de interesse incluem design de interface de usuário, sistemas distribuídos e colaborativos e desenvolvimento orientado ao objeto. É possível entrar em contato com Emilio em ezegarra@us.ibm.com.
