Matching Module Novas Instâncias para a Infra-estrutura de Matchmaking
description
Transcript of Matching Module Novas Instâncias para a Infra-estrutura de Matchmaking
Matching Module
Novas Instâncias para a Infra-estrutura de Matchmaking
Agenda
Overview
Criando um Domain Knowledge
Usando o Matching Module
A Aplicação Cliente
Novas Instâncias
Documentos para Consulta
Overview
• Biblioteca + Framework em Java para realização de matching entre indivíduos
• Dados dois grupos de indivíduos
séries de soluções para o problema de matching proposto
score para cada solução apresentada
Overview
• Requisitos
Flexibilidade Extensibilidade Compatibilidade com padrões
RDF, RDFS, DAML+OIL, OWL Independência de domínio Simplicidade e Facilidade de Uso
Overview
• Requisitos
Configurabilidade
Que algoritmo de matching utilizar?
Que informação de domínio utilizar?
Que ontologia ou modelo semântico foi utilizado para descrever os recursos que serão processados?
Que recursos que estão sendo processados?
Que tipo de matching será aplicado (uma a um, um a múltiplos, múltiplos a um, múltiplos a múltiplos)?
Que operações deverão ser aplicadas aos resultados? (número máximo de resultados, filtragem acima ou abaixo de um fator de corte).
Criando um Domain Knowledge
• Como criar um novo domínio de conhecimento para o Matching Module?
Exemplo:
Competências de um Funcionário
Criando um Domain Knowledge
-name : string
Person -name : string-price : double
Course
-name : string
Competency
*
-develops
*
-preRequisite *
*
*
-requires
*
*
-hasCoursed
*
Criando um Domain Knowledge
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE rdf:RDF (View Source for full doctype...)><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.lac.inf.puc-rio.br/~ferrao/onts/aulanet.rdfs#"><rdfs:Class rdf:ID="Competency" /><rdf:Property rdf:ID="name">
<rdfs:domain rdf:resource="#Competency" /> <rdfs:range
rdf:resource="http://www.w3.org/2001/XMLSchema#string" /> </rdf:Property></rdf:RDF>
Ontologia para Competências
Criando um Domain Knowledge
Ontologia para Cursos
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE rdf:RDF (View Source for full doctype...)> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.lac.inf.puc-rio.br/~ferrao/onts/course.rdfs#"> <rdfs:Class rdf:ID="Course" /> <rdf:Property rdf:ID="name"> <rdfs:domain rdf:resource="#Course" />
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string" /> </rdf:Property> <rdf:Property rdf:ID="price"> <rdfs:domain rdf:resource="#Course" />
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string" /> </rdf:Property> <rdf:Property rdf:ID="develops"> <rdfs:domain rdf:resource="#Course" />
<rdfs:range rdf:resource="http://www.lac.inf.puc-rio.br/~ferrao/onts/aulanet.rdfs#Competency" /> </rdf:Property> <rdf:Property rdf:ID="preRequisite"> <rdfs:domain rdf:resource="#Course" />
<rdfs:range rdf:resource="#Course" /> </rdf:Property> </rdf:RDF>
Criando um Domain Knowledge
Ontologia para Pessoas
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE rdf:RDF (View Source for full doctype...)> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.lac.inf.puc-rio.br/~ferrao/onts/person.rdfs#"> <rdfs:Class rdf:ID="Person" /> <rdf:Property rdf:ID="name">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string" /> </rdf:Property> <rdf:Property rdf:ID="requires">
<rdfs:domain rdf:resource="#Person" /> <rdfs:range
rdf:resource="http://www.lac.inf.puc-rio.br/~ferrao/onts/aulanet.rdfs#Competency" /> </rdf:Property> <rdf:Property rdf:ID="hasCoursed">
<rdfs:domain rdf:resource="#Person" /> <rdfs:range
rdf:resource="http://www.lac.inf.puc-rio.br/~ferrao/onts/courses.rdfs#Course" /> </rdf:Property> </rdf:RDF>
Criando um Domain Knowledge
• Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um domain knowledge
Definindo um evaluator
Definindo um state changer
Criando um Domain Knowledge
•Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um domain knowledge
public class PersonCourseDomainKnowledge extends DomainKnowledge{
public PersonCourseDomainKnowledge(){
super( new PersonCourseEvaluator(), new PersonCourseStateChanger() );
}}
Criando um Domain Knowledge
• Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um evaluator
Matching é um problema sensível a contexto
Como saber se uma seqüência (OO, Java) é melhor que uma (OO, .Net) para o funcionário Daniel?
Criando um Domain Knowledge
• Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um evaluator
Um evaluator é responsável por calcular o score de uma solução particular para um matching em um dado domínio.
Isso é feito através da definição de funções genéricas que podem, em tempo de execução, calcular o score para instâncias de solução.
Os métodos eval do evaluator avaliam quão boa uma solução é para um problema
Criando um Domain Knowledge
• Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um evaluator
Novos evaluators devem ser criados através da herança de um dos tipos de evaluators existentes, com a implementação de novos comportamentos para os métodos:
public double[] eval1to1( Individual i1, Individual i2 ) public double[] eval1toN( Individual i, IndividualsCollection list ) public double[] evalNto1( IndividualsCollection list, Individual i ) public double[] evalNtoN( IndividualsCollection l1,
IndividualsCollection l2 )
(essas implementações são ou não necessárias de acordo com a natureza do problema)
Criando um Domain Knowledge
• Exemplo
Uma pessoa deve fazer um curso se este desenvolve alguma competência que aquela pessoa demanda.
Quanto maior o número de competências que o curso desenvolve, mais adequado ele é para aquela pessoa.
Nenhuma pessoa deve fazer o mesmo curso duas vezes.
Cursos podem ter pré-requisitos.
Criando um Domain Knowledge
public double[] eval1to1(Individual person, Individual course) {
float count = 0.0f;double price = 0.0;try{ price = course.getPropertyAsDouble( "price" );
if( hasCoursed( person, course ) ){
return new double[] {-100.0f, -price};}if( !checkForPreRequisites( person, course ) ){
return new double[] {-1.0f, -price};}
Iterator requires = person.getRelation("requires").iterator();while(requires.hasNext()){
Individual r = (Individual) requires.next(); Iterator develops = course.getRelation("develops").iterator();
while(develops.hasNext()){
Individual d = (Individual) develops.next();Comparator cmp = new StringComparator();if( cmp.compare( r.getId(), d.getId() ) == 0 ){
count++;}
}}
}catch( PropertyNotFoundException e ){
e.printStackTrace();}catch( NonRelationException e ){
e.printStackTrace();}catch( PropertyException e ){
e.printStackTrace();}return new double[] {(float)count, -price};
}
Eval 1 to 1
Criando um New Domain Knowledge
Eval 1 to N
public double[] eval1toN(Individual person, IndividualsCollection courses){
double result = 0.0f;double firstValue = -1.0f;boolean firstTime = true;double totalPrice = 0.0f;try{
Individual p = (Individual)person.getClone();Iterator iter = courses.iterator();while( iter.hasNext() ){
Individual currCourse = (Individual) iter.next();double[] currEval = eval1to1( p, currCourse );if( currEval[0] >= 0 ){
stateChanger.changeState( p, currCourse );}if( currEval[0] == 0 ){
currEval[0] = -0.1f;}result += currEval[0];totalPrice += currCourse.getPropertyAsDouble( "price" );if( firstTime ){
firstValue = currEval[0];firstTime = false;
}}return new double [] { result, -totalPrice, firstValue };
}catch( PropertyNotFoundException e ){
e.printStackTrace();}catch( PropertyException e ){
e.printStackTrace();}catch( StateChangeException e ){
e.printStackTrace();}return new double[] { result };
}
Criando um New Domain Knowledge
• Como ensinar ao MM como avaliar os possíveis conjuntos de resultados?
Definindo um state changer
Resultados são obtidos incrementalmente
A cada iteração, o estado do grupo de indivíduos muda, bem como as próximas melhores soluções
Um state changer é o mecanismo que muda o estado de um problema após cada solução
Criando um Domain Knowledge
public void changeState( Individual person, Individual course ) throws StateChangeException{
if( ( person == null ) || ( course == null ) ){
return;}try{
person.addRelationIndividual( "hasCoursed", course );IndividualsCollection develops = course.getRelation( "develops" ); if( develops != null ){
Iterator iter = develops.iterator();while( iter.hasNext() ){
Individual currComp = (Individual) iter.next();person.removeRelationIndividual( "requires", currComp );
}}
}catch( PropertyNotFoundException e ){
System.out.println( "Some of the changes made in class PersonCourseStateChanger were not made!" );System.out.println( "Some of the properties accessed do not exist!" );e.printStackTrace();throw new StateChangeException();
}catch( NonRelationException e ){
e.printStackTrace();throw new StateChangeException();
}catch( PropertyException e ){
e.printStackTrace();throw new StateChangeException( e );
}}
State Changer para o domínio de exemplo
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Definindo os parâmetros de matching
Especificando o problema
Especificando o espaço de soluções
Especificando uma estratégia
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Estrutura do XML<?xml version="1.0"?><Matchings> <!—Define the matching parameters by setting the appropriate Matchings attributes.--> <Matching> <Problem> <!—Problem definition --> </Problem> <SolutionSpace> <!—Solution Space definition --> </SolutionSpace> <Strategies> <!—Define the strategies used to solve the matching problem --> </Strategies> </Matching></Matchings>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Parâmetros de Matching
<Matchings> <Matching type="1toN" model="RDFS" name="Tereza"> <!—Problem definition to find the best course for Tereza --> </Matching> <Matching type="1toN" model="RDFS" name="Joao"> <!—Problem definition to find the best course for Joao --> </Matching> <Matching type="1toN" model="RDFS" name="Maria"> <!—Problem definition to find the best course for Maria --> </Matching></Matchings>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Parâmetros de Matching
Name Type (1to1, Nto1, 1toN, NtoN) Model MaxResultsSize Threshold
<Matching type="1toN" model="RDFS" name="Tereza" maxResultsSize=”10” threshold=”0.7”>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Problema
<Problem> <Elements> <Element id="http://www.lac.inf.puc-rio.br/~ferrao/inf/tereza.rdf" /> <Element id="http://www.lac.inf.puc-rio.br/~ferrao/inf/maria.rdf" /> <Element id="http://www.lac.inf.puc-rio.br/~ferrao/inf/joao.rdf" /> </Elements> </Problem>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Soluções
<SolutionSpace> <Elements> <ElementList address="http://www.lac.inf.puc-rio.br/~ferrao/inf/courses.rdf#courses_list" semantics="index" property="http://www.lac.inf.puc-rio.br/~ferrao/onts/link.rdfs#linksIndex" /> </Elements></SolutionSpace>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Estratégias
<Strategies> <TabuSearchStrategy name="Tabu" maximize="true"> <DomainKnowledge name="PersonCourseDomainKnowledge" /> </TabuSearchStrategy> <GreedyStrategy name="Greedy" maximize="true"> <DomainKnowledge name="PersonCourseDomainKnowledge" /> </GreedyStrategy></Strategies>
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Estratégias
Três estratégias já estão implementadas no MM:
Estratégia Força Bruta Estratégia Gulosa Estratégia Busca Tabu
Usando o Matching Module
Definindo o problema e o espaço de soluções para o matching
Especificação Completa
<?xml version="1.0"?><Matchings> <Matching type="1toN" model="RDFS" name="Tereza"> <Problem> <Elements> <Element id="http://www.lac.inf.puc-rio.br/~ferrao/inf/tereza.rdf" /> </Elements> </Problem> <SolutionSpace> <Elements> <ElementList address="http://www.lac.inf.puc-rio.br/~ferrao/inf/courses.rdf#courses_list" semantics="index" property="http://www.lac.inf.puc-rio.br/~ferrao/onts/link.rdfs#linksIndex" /> </Elements> </SolutionSpace> <Strategies> <TabuSearchStrategy name="Tabu" maximize="true" nIterations="100" tenure="5"> <DomainKnowledge name="PersonCourseDomainKnowledge" /> </TabuSearchStrategy> <GreedyStrategy name="Greedy" maximize="true"> <DomainKnowledge name="PersonCourseDomainKnowledge" /> </GreedyStrategy> </Strategies> </Matching></Matchings>
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
-name : string
Person -name : string-price : double
Course
-name : string
Competency
*
-develops
*
-preRequisite *
*
*
-requires
*
*
-hasCoursed
*
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Course1$100
Course10$300
Course9$300
Course8$300
Course7$400
Course6$200
Course5$250
Course4$300
Course3$150
Course2$150
- Comp9- Comp10- Comp13
- Comp8- Comp9- Comp11
- Comp9- Comp11
- Comp4- Comp5- Comp6
- Comp5- Comp6- Comp8- Comp12
- Comp5- Comp6- Comp7
- Comp2- Comp3
- Comp2- Comp4
- Comp1
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Person hasCoursed requires
Luis Course1 Comp2Comp5Comp9Comp11
Maria Course1 Comp2Comp5Comp8Comp9Comp11
Antonio Course1Course2Course3
Comp5Comp6Comp8Comp9
Tereza Course1Course2Course3
Comp5Comp6Comp8Comp9Comp13
João Course1Course2
Comp12
Ana Course1Course2Course3Course5
Comp12
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Resultados Esperados
Person Next Best Course Best Sequence of Courses (ordered) / Explanation
Luis Course3 Course3Course6Course9
This sequence is chosen since it develops all required competencies and has the lowest total price.
Maria Course3 Course3Course5Course8
This sequence is the only one which develops all required competencies.
Antonio Course5 Course5Course8
This sequence is the cheapest one (in particular it is cheaper than the one where course7 is taken).
Tereza Course5 Course5Course4Course7
This sequence is the only one which develops all required competencies.
João Course3 Course3Course6Course10
The path through Course10 is the one which develops all competencies with the lowest cost.
Ana Course4 Course4 The path through Course4 is the one which develops all competencies with the lowest cost.
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Configuração do servidor
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Configuração do servidor
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
A Aplicação Cliente
Exemplo: Domínio de Pessoas, Cursos e Competências
Novas Instâncias
• Problemas de Matching:
Dada uma vaga e as competências necessárias para preenchê-la, qual o melhor candidato? (Já desenvolvido)
Dado um conjunto de pessoas e seus interesses e um conjunto de mensagens publicitárias, quais são aquelas que terão o maior impacto?
Dado um projeto e suas necessidades e um conjunto de profissionais, suas competências e disponibilidades, quais são os profissionais mais indicados?
Dado um conjunto de cursos, as competências e um conjunto de profissionais, quais são os mais indicados para o treinamento?
Dada uma dissertação ou tese e seus temas, qual a composição mais indicada para uma banca?
Documentos de Referência
An Overview of the Matching Module Creating a New Domain Knowledge Using the Matching Module Configuring a Matching Server An Introduction to the Matching Module Client
Application Skills Management Case Study
JavaDocs, Diagramas e Classes
Obrigado!
Cristiano Rocha, Luiz Gustavo Ferrão, Francisco Ferreira, Daniel Orlean