SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Aprendizagem de máquina em busca
Adam Brandizzi, software engineer
Learning to Rank
LIFERAY
Aprendizagem de máquina em busca textual
Por que e como incorporamos machine
learning no Liferay Portal
Busca textual em um portal
3
Na Liferay, fornecemos uma plataforma de experiência digitais, baseada
em nosso portal open source. Usamos Elasticsearch para busca textual.
Busca Textual
Os desafios de escolher o melhor resultado
4
Elasticsearch é maravilhoso para buscar e ordenar conteúdos a partir de
buscas desestruturadas. As ferramentas de re-ranking e ordenamento são
especialmente boas. Mas há uma certa demanda que não pode ser
atendida pelas ferramentas básicas do Elasticsearch...
Priorização de Resultados
5
The A/B Test
Executives found that crisp, clear prose was
outperforming hyped-up buzzwords (like free
and exclusive) on certain parts of the
homepage. But in previous years, the opposite
had been true. Why? They talked and talked
about it, but no one could figure it out.
Wired (2012)
6
The A/B Test
Soon they realized that it simply didn't
matter. A/B would guide them at ground level,
so there was no need to worry about why
users behaved in one way or another.
Wired (2012)
Bons resultados não exigem justificativas
7
É possível criar queries poderosíssimas com Elasticsearch, mas nossos
clientes consistentemente querem aplicar inteligência artificial na busca.
Ao se utilizar aprendizagem de máquina, é possível treinar modelos para
dar a resposta que você quer, a partir dos dados que você tem, sem criar
algoritmos complexos.
Basicamente, queriam Learning to Rank.
Inteligência artificial
Nossa abordagem
8
Nós procuramos por ferramentas que já fizessem isso, e encontramos o
plugin Elasticsearch Learning to Rank. Como funciona?
Inteligência artificial
LIFERAY
Elasticsearch Learning to Rank
Como utilizar o plugin
Definimos uma lista de julgamentos
10
No Elasticsearch LTR, a abordagem é baseada em uma lista de
julgamentos. Para fazer uma dessas listas, fazemos uma busca e damos
uma prioridade maior aos resultados que mais nos interessam.
Note que é preciso dedicirmos que tipo de resultados nos interessa mais,
em uma amostragem.
Este é um trabalho para o analista de dados.
Elasticsearch Learning to Rank
Definindo as features do nosso modelo
12
Ao mesmo tempo, precisamos coletar as variáveis que servirão de entrada
aos nossos modelos. Isto é, precisamos definir as features do nosso
modelo. O plugin nos permite utilizar qualquer query como uma feature
do nosso modelo.
Este é outro trabalho para o analista de dados.
Elasticsearch Learning to Rank
Coletando dados
14
Depois disto, coletamos os dados do nosso índice no Elasticsearch. No
nosso plugin, isto resulta em outra lista de julgamentos, agora com
colunas a mais. Cada nova coluna é o score de uma das queries que
usamos como feature.
Elasticsearch Learning to Rank
Treinando modelos
16
Com nossa nova lista de julgamentos, podemos treinar modelos.
Elasticsearch Learning to Rank utiliza RankLib para isto, o que nos permite
adotar diversos algoritmos diferentes (random forests, AdaRank, regressão
linear…)
Elasticsearch Learning to Rank
Subindo os modelos ao Elasticsearch
17
Uma vez que tenhamos o modelo treinado, subimos ele ao Elasticsearch.
Agora podemos utilizar o modelo em uma query do tip SLTR.
Elasticsearch Learning to Rank
LIFERAY
Repriorizando com Learning to Rank
A query SLTR e como utilizá-la
A query SLTR
19
Um cluster Elasticsearch que tenha o plugin LTR instalado suporta um
novo tipo de query, a SLTR. Esta query recebe keywords o nome de um
modelo que tenha sido carregado no Elasticsearch.
Repriorizando com Learning to Rank
Utilizando a Rescore API
21
O problema é que uma query com Learning to Rank não é tão eficiente de
rodar. Ao invés de usá-la para encontrar resultados, podemos utilizá-la
para reordenar resultados.
Com a Rescore API podemos, por exemplo, buscar os mil melhores
resultados, e utilizar SLTR para mover os mais relevantes para o topo.
Repriorizando com Learning to Rank
LIFERAY
Hora da demonstração
Vamos rodar alguns scripts e ver no que dá
:)
LIFERAY
Componentes de software
liferay.com
elasticsearch-learning-to-rank.readthedocs.io
sourceforge.net/p/lemur/wiki/RankLib
LIFERAY
Obrigado!
adam.brandizzi@liferay.com
adam@brandizzi.com.br
linkedin.com/in/brandizzi
twitter.com/adambrandizzi

Mais conteúdo relacionado

Semelhante a Learning to Rank

Ebook melhores dicas de seo
Ebook melhores dicas de seoEbook melhores dicas de seo
Ebook melhores dicas de seoeltonvivotdias
 
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?Marlesson Santana
 
Machine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETMachine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETRenato Haddad
 
Tcc Parte 1 Desenvolvendo Plano De Trabalho
Tcc   Parte 1  Desenvolvendo Plano De TrabalhoTcc   Parte 1  Desenvolvendo Plano De Trabalho
Tcc Parte 1 Desenvolvendo Plano De TrabalhoJordan Oliveira
 
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdfDavidLarronda1
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Curso YaCy Mecanismo de Busca de Código Aberto
Curso YaCy Mecanismo de Busca de Código AbertoCurso YaCy Mecanismo de Busca de Código Aberto
Curso YaCy Mecanismo de Busca de Código AbertoJulio Della Flora
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
GraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoGraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoLeo Baiano
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine Learning
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine LearningAWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine Learning
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine LearningRayssa Küllian
 
Desvendando seus dados com Amazon Machine Learning
Desvendando seus dados com Amazon Machine LearningDesvendando seus dados com Amazon Machine Learning
Desvendando seus dados com Amazon Machine LearningAmazon Web Services LATAM
 
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidadeCarlos Augusto Oeiras
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebJoel Pinho Lucas
 

Semelhante a Learning to Rank (20)

Ebook melhores dicas de seo
Ebook melhores dicas de seoEbook melhores dicas de seo
Ebook melhores dicas de seo
 
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?
Sistemas de Recomendação - O que são? Como funcionam? Do que se alimentam?
 
Webmedia2007 V4
Webmedia2007 V4Webmedia2007 V4
Webmedia2007 V4
 
Machine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETMachine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NET
 
Tcc Parte 1 Desenvolvendo Plano De Trabalho
Tcc   Parte 1  Desenvolvendo Plano De TrabalhoTcc   Parte 1  Desenvolvendo Plano De Trabalho
Tcc Parte 1 Desenvolvendo Plano De Trabalho
 
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf
6.3 Clustering_338ca79f26242f5b9b48a218cfc35819.pdf
 
Seo Oficial
Seo OficialSeo Oficial
Seo Oficial
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Apresentação SEO
Apresentação SEOApresentação SEO
Apresentação SEO
 
Curso YaCy Mecanismo de Busca de Código Aberto
Curso YaCy Mecanismo de Busca de Código AbertoCurso YaCy Mecanismo de Busca de Código Aberto
Curso YaCy Mecanismo de Busca de Código Aberto
 
Curso de Pesquisa na Web
Curso de Pesquisa na WebCurso de Pesquisa na Web
Curso de Pesquisa na Web
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
GraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoGraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita união
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine Learning
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine LearningAWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine Learning
AWS Summit SP 2016: Desvendando Seu Dataset Com Amazon Machine Learning
 
Desvendando seus dados com Amazon Machine Learning
Desvendando seus dados com Amazon Machine LearningDesvendando seus dados com Amazon Machine Learning
Desvendando seus dados com Amazon Machine Learning
 
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade
"Desaprendizado de maquina" - Desmistificando machine learning na sua realidade
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
 
DataTechDay4 - Carlos Oeiras
DataTechDay4 - Carlos OeirasDataTechDay4 - Carlos Oeiras
DataTechDay4 - Carlos Oeiras
 
Pybr12 algpedia
Pybr12 algpediaPybr12 algpedia
Pybr12 algpedia
 

Mais de Adam Victor Brandizzi

Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
Centenas de Entidades, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Entidades, uma Única Pesquisa: Busca Textual com ElasticsearchCentenas de Entidades, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Entidades, uma Única Pesquisa: Busca Textual com ElasticsearchAdam Victor Brandizzi
 
Centenas de Bases, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Bases, uma Única Pesquisa: Busca Textual com ElasticsearchCentenas de Bases, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Bases, uma Única Pesquisa: Busca Textual com ElasticsearchAdam Victor Brandizzi
 

Mais de Adam Victor Brandizzi (8)

Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Busca Textual com Elasticsearch
Busca Textual com ElasticsearchBusca Textual com Elasticsearch
Busca Textual com Elasticsearch
 
Centenas de Entidades, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Entidades, uma Única Pesquisa: Busca Textual com ElasticsearchCentenas de Entidades, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Entidades, uma Única Pesquisa: Busca Textual com Elasticsearch
 
Centenas de Bases, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Bases, uma Única Pesquisa: Busca Textual com ElasticsearchCentenas de Bases, uma Única Pesquisa: Busca Textual com Elasticsearch
Centenas de Bases, uma Única Pesquisa: Busca Textual com Elasticsearch
 
Issue Trackers para Programadores
Issue Trackers para ProgramadoresIssue Trackers para Programadores
Issue Trackers para Programadores
 
Dates, Times and Time Zones
Dates, Times and Time ZonesDates, Times and Time Zones
Dates, Times and Time Zones
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Haskell
HaskellHaskell
Haskell
 

Learning to Rank

  • 1. Aprendizagem de máquina em busca Adam Brandizzi, software engineer Learning to Rank
  • 2. LIFERAY Aprendizagem de máquina em busca textual Por que e como incorporamos machine learning no Liferay Portal
  • 3. Busca textual em um portal 3 Na Liferay, fornecemos uma plataforma de experiência digitais, baseada em nosso portal open source. Usamos Elasticsearch para busca textual. Busca Textual
  • 4. Os desafios de escolher o melhor resultado 4 Elasticsearch é maravilhoso para buscar e ordenar conteúdos a partir de buscas desestruturadas. As ferramentas de re-ranking e ordenamento são especialmente boas. Mas há uma certa demanda que não pode ser atendida pelas ferramentas básicas do Elasticsearch... Priorização de Resultados
  • 5. 5 The A/B Test Executives found that crisp, clear prose was outperforming hyped-up buzzwords (like free and exclusive) on certain parts of the homepage. But in previous years, the opposite had been true. Why? They talked and talked about it, but no one could figure it out. Wired (2012)
  • 6. 6 The A/B Test Soon they realized that it simply didn't matter. A/B would guide them at ground level, so there was no need to worry about why users behaved in one way or another. Wired (2012)
  • 7. Bons resultados não exigem justificativas 7 É possível criar queries poderosíssimas com Elasticsearch, mas nossos clientes consistentemente querem aplicar inteligência artificial na busca. Ao se utilizar aprendizagem de máquina, é possível treinar modelos para dar a resposta que você quer, a partir dos dados que você tem, sem criar algoritmos complexos. Basicamente, queriam Learning to Rank. Inteligência artificial
  • 8. Nossa abordagem 8 Nós procuramos por ferramentas que já fizessem isso, e encontramos o plugin Elasticsearch Learning to Rank. Como funciona? Inteligência artificial
  • 9. LIFERAY Elasticsearch Learning to Rank Como utilizar o plugin
  • 10. Definimos uma lista de julgamentos 10 No Elasticsearch LTR, a abordagem é baseada em uma lista de julgamentos. Para fazer uma dessas listas, fazemos uma busca e damos uma prioridade maior aos resultados que mais nos interessam. Note que é preciso dedicirmos que tipo de resultados nos interessa mais, em uma amostragem. Este é um trabalho para o analista de dados. Elasticsearch Learning to Rank
  • 11.
  • 12. Definindo as features do nosso modelo 12 Ao mesmo tempo, precisamos coletar as variáveis que servirão de entrada aos nossos modelos. Isto é, precisamos definir as features do nosso modelo. O plugin nos permite utilizar qualquer query como uma feature do nosso modelo. Este é outro trabalho para o analista de dados. Elasticsearch Learning to Rank
  • 13.
  • 14. Coletando dados 14 Depois disto, coletamos os dados do nosso índice no Elasticsearch. No nosso plugin, isto resulta em outra lista de julgamentos, agora com colunas a mais. Cada nova coluna é o score de uma das queries que usamos como feature. Elasticsearch Learning to Rank
  • 15.
  • 16. Treinando modelos 16 Com nossa nova lista de julgamentos, podemos treinar modelos. Elasticsearch Learning to Rank utiliza RankLib para isto, o que nos permite adotar diversos algoritmos diferentes (random forests, AdaRank, regressão linear…) Elasticsearch Learning to Rank
  • 17. Subindo os modelos ao Elasticsearch 17 Uma vez que tenhamos o modelo treinado, subimos ele ao Elasticsearch. Agora podemos utilizar o modelo em uma query do tip SLTR. Elasticsearch Learning to Rank
  • 18. LIFERAY Repriorizando com Learning to Rank A query SLTR e como utilizá-la
  • 19. A query SLTR 19 Um cluster Elasticsearch que tenha o plugin LTR instalado suporta um novo tipo de query, a SLTR. Esta query recebe keywords o nome de um modelo que tenha sido carregado no Elasticsearch. Repriorizando com Learning to Rank
  • 20.
  • 21. Utilizando a Rescore API 21 O problema é que uma query com Learning to Rank não é tão eficiente de rodar. Ao invés de usá-la para encontrar resultados, podemos utilizá-la para reordenar resultados. Com a Rescore API podemos, por exemplo, buscar os mil melhores resultados, e utilizar SLTR para mover os mais relevantes para o topo. Repriorizando com Learning to Rank
  • 22.
  • 23. LIFERAY Hora da demonstração Vamos rodar alguns scripts e ver no que dá :)