Apresentação Giancarlo na PUC-Rio
https://www.youtube.com/watch?v=UehUTBN2Nyo
KG foram criados em Twente em 1982.
Eu comento com quatro observaƧƵes, que acho que nĆ£o sĆ£o nada controversas. A primeira Ć© a seguinte: todo sistema de software representa uma porção da realidade e embute uma determinada teoria sobre o mundo. Todo sistema de software Ć© inevitĆ”vel. Qualquer estrutura de informação faz isso. Qualquer coisa que nĆ£o tenha só semĆ¢ntica formal — semĆ¢ntica formal Ć© um jogo, nĆ©, que vai mapear um pedaƧo de matemĆ”tica para outro pedaƧo de matemĆ”tica — precisa fazer um compromisso ontológico. Eu estou usando "semĆ¢ntica" aqui no sentido que todo mundo fora da computação e da lógica usa, de mapeamento de uma conceituação compartilhada. Qualquer coisa que tenha isso Ć© chamada tradicionalmente de real world semantics (semĆ¢ntica do mundo real).
Por exemplo, se vocĆŖ pega um mapa de metrĆ“ de AmsterdĆ£, para essa coisa fazer sentido, o significado por trĆ”s dela tem uma determinada ontologia — um conjunto, uma teoria sobre uma visĆ£o de mundo na qual existem coisas chamadas linhas, compostas de estaƧƵes ordenadas de uma determinada forma, interagindo com outras linhas, com propriedades como direção, e assim por diante. Essa visĆ£o de mundo faz a coisa fazer sentido e adquirir significado.
O mais mundano dos bancos de dados tambĆ©m faz um compromisso ontológico. Por exemplo, esse banco de dados sobre transplantes acredita na existĆŖncia de coisas como pessoas — algumas vivas, outras mortas — que seguem algumas regras, como "toda pessoa tem que estar viva ou morta", e pessoas que faleceram nĆ£o voltam Ć vida. Existem coisas como transplantes, que sĆ£o entidades, e para elas existirem, outras coisas precisam existir, como pelo menos um cirurgiĆ£o, um doador e um receptor. Essas entidades tĆŖm uma teoria sobre o mundo e o banco de dados acredita na existĆŖncia delas, com suas propriedades, suas relaƧƵes, seguindo determinadas regras.
Eu gosto de uma frase do Donald Knuth que diz que "programar é a atividade de dizer a um outro ser humano o que você quer que o computador faça, não é falar para o computador o que você quer que ele faça". Ou seja, de outra forma, se você estiver escrevendo código em Python e tiver variÔveis do tipo cliente, fornecedor, ordem de pedido, valor, você estÔ fazendo um compromisso ontológico sobre a existência dessas coisas e suas relações. Essa ideia é bem importante na computação.
Por exemplo, nesse artigo de 1967, um cara chamado George Millie — criador de uma coisa chamada Milly Automata — ele foi tambĆ©m orientador de doutorado de Peter Chen, o criador das entidades de relacionamento. Nesse artigo, Millie fala meio que reclamando que as pessoas estavam muito focadas na manipulação de dados e nos aspectos formais das coisas. Ele disse: "Problema ótimo, isso tudo Ć© interessante, mas o problema primordial Ć© entender a relação entre os sĆmbolos e o mundo real". Ele dizia que "dados sĆ£o fragmentos de uma teoria do mundo" e que o processamento de dados, se usarmos o vocabulĆ”rio da Ć©poca, tem a ver com a manipulação dessas estruturas e dessas teorias sobre o mundo. E isso Ć© uma questĆ£o ontológica.
Essa foi a primeira menção de ontologia em computação, em 1967. Alguns até dizem que a primeira menção teria sido no artigo do P. Ha, uma década depois, mas o primeiro artigo realmente sobre ontologia na computação foi o de Millie. Ele ainda cita um filósofo chamado Quine, para quem a definição de ontologia é exatamente isso: o conjunto das coisas com as quais você precisa se comprometer para que uma determinada descrição faça sentido e seja verdadeira.
A primeira noção de ontologia que estamos falando aqui Ć© isso: ontologia (com "o" minĆŗsculo) Ć© uma teoria sobre o tipo de entidades e relaƧƵes que uma determinada descrição pressupƵe existir. E, como estou dizendo, isso Ć© absolutamente inevitĆ”vel. Qualquer coisa que nĆ£o seja apenas um pedaƧo de matemĆ”tica se compromete com isso. Todo mundo que jĆ” programou, ou criou um banco de dados, jĆ” fez ontologia — frequentemente sem ter as tĆ©cnicas e ferramentas para fazer isso de forma adequada.
Mas isso é absolutamente inevitÔvel. Talvez essa seja a primeira "mensagem" da conversa: a alternativa à ontologia não é a "não-ontologia", é a "mÔ ontologia". Você vai fazer isso de qualquer jeito, se programar em Python ou misturar todas essas regras em um código, vai acabar fazendo uma mÔ ontologia.
A segunda observação Ć© a seguinte: claramente nĆ£o temos mais, nos sistemas de informação, aquele tipo de desenvolvimento chamado greenfield development, que Ć© criar sistemas do zero, sistemas que vĆ£o permanecer desconectados de outros sistemas. Todo o desenvolvimento de software moderno Ć© feito de forma coletiva e distribuĆda, criando coisas a partir da integração de sistemas jĆ” existentes ou criando coisas que vĆ£o se integrar a outros sistemas no futuro. Por exemplo, se olharmos para isso sob a perspectiva de Big Data, hĆ” esse modelo de quatro V's: volume, velocidade, variedade e veracidade. O problema nĆ£o estĆ” em volume e velocidade — sabemos como lidar com isso. O problema estĆ” nos outros dois: particularmente na variedade — variedade nĆ£o só sintĆ”tica, mas tambĆ©m semĆ¢ntica. A maior parte do esforƧo Ć© dedicada a lidar com isso. Por quĆŖ? Porque todos os problemas interessantes que queremos responder em ciĆŖncia, governo e organizaƧƵes só podem ser respondidos conectando sistemas de informação que foram criados por pessoas em pontos diferentes do espaƧo e do tempo.
Por exemplo, se vocĆŖ quiser saber todas as empresas que tĆŖm contrato com um órgĆ£o governamental e que doaram dinheiro para campanhas polĆticas de um candidato que pode tomar decisƵes sobre esse contrato, isso Ć© uma pergunta relevante, nĆ©? A questĆ£o Ć©: vocĆŖ precisa integrar vĆ”rias informaƧƵes de diferentes sistemas para responder isso. E o problema nĆ£o Ć© tĆ£o simples quanto parece. VocĆŖ vai ter que integrar cinco, seis sistemas diferentes e entender como esses sistemas se conectam. Isso Ć© um problema de interoperabilidade.
<aqui>
O problema de interoperabilidade é, em qualquer Ôrea, como relacionar as ontologias desses sistemas. Não estou falando de ontologia como um artefato, mas sim como uma visão de mundo, o que estÔ embutido em cada um desses sistemas. Interoperabilidade semântica, no final das contas, é entender a relação entre essas diferentes visões de mundo.
Por exemplo, é fÔcil definir "pessoa" de um lado e "pessoa" do outro, mas qual é a relação entre essas coisas? Ou se tenho um "transplante" de um lado e um "transplante" do outro, qual é a relação? Para entender essas relações entre sistemas, precisamos entender as relações entre os referentes desses sistemas no mundo real. A relação pode ser uma de identidade, mas como saber se é de identidade? E o que significa isso?
Identidade Ć© uma relação de equivalĆŖncia — reflexiva, simĆ©trica, transitiva. AlĆ©m disso, obedece ao que Ć© chamado de "lei de Leibniz": duas coisas sĆ£o iguais se tĆŖm as mesmas propriedades em todos os mundos possĆveis. Isso Ć© uma relação muito forte. Imagina que vocĆŖ diga que "essa pessoa Ć© a mesma pessoa" e essa relação se propaga por toda a cadeia. EntĆ£o, ter certeza de que Ć© uma relação de identidade Ć© muito difĆcil.
E se nĆ£o for uma relação de identidade, quais sĆ£o as outras opƧƵes? Talvez uma relação de "parte de", ou de dependĆŖncia. E quais sĆ£o os tipos de dependĆŖncia? Por exemplo, a minha dor de cabeƧa depende de mim: ela só existe se eu existir. Mas hĆ” outros tipos de dependĆŖncia, como quando digo que para ser estudante, vocĆŖ tem que estudar em uma instituição de ensino. Essa Ć© uma dependĆŖncia existencial. Mas quando digo que, para eu existir, meus pais precisam ter existido antes de mim, Ć© uma dependĆŖncia genĆ©rica — meus pais nĆ£o precisam existir ao mesmo tempo que eu.
EntĆ£o, o que precisamos fazer? Precisamos descobrir trĆŖs coisas: primeiro, descobrir as ontologias embutidas nesses sistemas; segundo, revelĆ”-las, expor que ontologias sĆ£o essas; e terceiro, entender qual Ć© a relação entre os elementos dessas diversas ontologias. Para isso, precisamos de uma caixa de ferramentas conceituais. Eu jĆ” falei de algumas delas: entender o que Ć© "parte de", dependĆŖncia, que tipo de estruturas taxonĆ“micas ou relaƧƵes taxonĆ“micas eu posso estabelecer entre as coisas, e assim por diante. Ontologia com "O" maiĆŗsculo Ć© exatamente isso: Ć© uma Ć”rea cujo objetivo Ć© a produção dessas caixas de ferramentas conceituais, independentes de domĆnio, mas que podem ser usadas para fazer as trĆŖs coisas que mencionei, nos mais diversos domĆnios.
Em computação, frequentemente, quando as pessoas falam de ontologia, estĆ£o falando de um artefato. Eu usei a palavra "ontologia" de duas maneiras diferentes: uma visĆ£o de mundo, um conjunto de entidades, propriedades e relaƧƵes — uma teoria sobre o mundo ou sobre uma porção do mundo que estou pressupondo. E, por outro lado, um conjunto de tĆ©cnicas para encontrar, produzir ou descobrir essas coisas por trĆ”s das minhas descriƧƵes ou dados.
Um terceiro uso da palavra Ć© como uma representação dessa teoria — ou seja, o artefato em si.
Em domĆnios crĆticos, a gente precisa que essas representaƧƵes — ou seja, um tipo de modelo conceitual, em teoria um modelo conceitual de referĆŖncia — sirvam como contratos de significado. NĆ£o sĆ£o apenas entidades para estruturar dados; sĆ£o um contrato dizendo ao mundo qual Ć© a sua visĆ£o sobre aquela Ć”rea. EntĆ£o, se houver um modelo sobre casamentos, ao ler esse modelo, eu preciso entender exatamente qual Ć© a visĆ£o dele sobre casamento: aceita casamento entre pessoas do mesmo sexo? Apenas de sexos diferentes? Pode-se casar com pessoas jĆ” falecidas? Pode-se casar com vĆ”rias pessoas ao mesmo tempo? Em qualquer combinação de sexo, vivas ou mortas? Todas essas sĆ£o possibilidades.
Se seus modelos forem muito frouxos e não tiverem as restrições adequadas, o contrato estÔ permitindo mais do que você gostaria. Isso se conecta fortemente à diferença entre problemas de verificação e validação.
Verificação é quando checamos se o modelo é consistente, ou seja, sem erros. Uma teoria lógica seria mostrar que ela é consistente.
Validação, por outro lado, é se esse modelo representa a visão de mundo que deveria representar. São questões bem diferentes.
Podemos entender validação da seguinte forma: se eu tenho um determinado modelo e um conjunto de interpretaƧƵes possĆveis daquele modelo, mas tambĆ©m um conjunto de interpretaƧƵes desejadas para ele. Se meu modelo for muito frouxo, por exemplo, falando do modelo de casamento, tiver algo como "pessoa casada com zero ou mais", isso cria a ilusĆ£o de que ele Ć© interessante porque Ć© flexĆvel, mas, na verdade, nĆ£o Ć© isso que vocĆŖ quer.
Se esse modelo for visto como um tipo de contrato — o Ćŗnico modo pelo qual ele pode realmente dar suporte Ć s tarefas de interoperabilidade — ele estĆ” dizendo que sua visĆ£o de casamento Ć© a mais liberal possĆvel, ou seja, que se pode casar com vĆ”rias pessoas ao mesmo tempo, pessoas mortas ou ainda vivas.
Por outro lado, eu poderia ter um modelo excessivamente restritivo, onde, por exemplo, só se permite casar com pessoas de sexos diferentes. Isso excluiria como interpretaƧƵes vĆ”lidas algo que vocĆŖ desejaria. O problema de criar esse modelo Ć© encontrar o conjunto de restriƧƵes que tornem essas duas coisas iguais: as interpretaƧƵes possĆveis e as interpretaƧƵes desejadas.
Isso Ć© particularmente importante por causa do problema de interoperabilidade. Se os meus modelos, e consequentemente os sistemas baseados nesses modelos, forem muito frouxos, posso ter uma interseção entre as interpretaƧƵes possĆveis, mas nĆ£o entre as interpretaƧƵes desejadas. Isso Ć© o que chamamos de "acordo falso", ou seja, quando achamos que estamos falando a mesma coisa, mas nĆ£o estamos. O problema nĆ£o Ć© se discordamos sobre o que Ć© casamento, mas se acreditamos que concordamos, quando, na verdade, nĆ£o estamos falando a mesma coisa.
Por fim, exatamente nesses domĆnios crĆticos, onde os problemas de interoperabilidade tĆŖm um custo muito alto — pense na Ć”rea da saĆŗde, seguranƧa, inclusive seguranƧa nacional, ou na Ć”rea financeira ou espacial — essas tĆ©cnicas que estamos discutindo estĆ£o sendo adotadas fortemente. Isso ocorre porque essas Ć”reas precisam integrar muitos dados e precisam dessas garantias. Esses modelos sĆ£o importantes porque, em domĆnios complexos, a escala e a complexidade aumentam. Um amigo meu chama isso de "ridiculousgram" — o modelo real. E como sabemos se esse modelo representa nossa visĆ£o de mundo?
Isso nos leva ao problema da validação. Como posso saber se o modelo realmente diz o que eu quero que ele diga se nĆ£o consigo nem navegar pela complexidade dele? Uma das coisas que temos investigado por muito tempo Ć© como usar a caixa de ferramentas conceituais — ou ontologia com "O" maiĆŗsculo — para apoiar a construção de modelos de domĆnio confiĆ”veis.
Esses modelos de domĆnio devem ser confiĆ”veis, e, consequentemente, os softwares baseados neles tambĆ©m devem ser confiĆ”veis. Para que um modelo seja confiĆ”vel, ele precisa preservar algumas propriedades: precisa ser consistente, logicamente minimamente e ontologicamente, resiliente a mudanƧas (de modo que as mudanƧas nĆ£o se propaguem de forma incontrolada), preciso, explicĆ”vel, transparente semanticamente e cognitivamente tratĆ”vel, reutilizĆ”vel entre vĆ”rias aplicaƧƵes, interoperĆ”vel e passĆvel de evolução.
<aqui>
Essas propriedades sĆ£o essenciais quando criamos modelos para ecossistemas organizacionais complexos. Em sistemas mais simples ou em softwares stand-alone, em domĆnios pequenos e estĆ”veis, essas questƵes nĆ£o sĆ£o tĆ£o urgentes. No entanto, para domĆnios complexos, como os que discutimos, a criação de modelos com essas caracterĆsticas Ć© um desafio.
O que temos feito para criar essas linguagens e elementos? Criamos teorias. Ou seja, representamos artefatos que representam as diversas ferramentas daquela caixa de ferramentas conceitual. Um conjunto de microteorias para realizar tarefas como: entender domĆnios, fazer esclarecimento conceitual, ancoramento semĆ¢ntico de conceitos, integrar coisas, achar relaƧƵes entre conceitos, etc.
Essas microteorias falam sobre tipos, estruturas taxonĆ“micas, tipos de ordem superior, teoria de relaƧƵes, teoria de dependĆŖncias, teoria de processos e eventos, papĆ©is, situaƧƵes, causalidade, entre outros. Um conjunto de teorias lógicas integradas que, eventualmente, formam o que Ć© chamado de ontologia de fundamentação (em particular, a "Unified Foundational Ontology" — UFO), que estĆ” avanƧando para se tornar um padrĆ£o ISO.
A partir dessas teorias, conseguimos criar um conjunto de ferramentas de engenharia que, inclusive, escondem algumas das complexidades dessas teorias. Essas ferramentas sĆ£o centradas em uma linguagem de modelagem chamada OntoUML, sobre a qual falarei em breve. Ela me permite criar modelos com essas caracterĆsticas desejadas.
Temos também metodologias, ferramentas computacionais, catÔlogos de padrões e antipadrões, geradores de código, simuladores para validação (como simulação visual e gestão da complexidade), ferramentas para aprendizado de axiomas, autorreparo dos modelos, enriquecimento automÔtico, e muito mais.
Essas ferramentas e a linguagem associada tĆŖm uma relação Ćntima com a ontologia, jĆ” que as primitivas de modelagem e seus construtos refletem as distinƧƵes ontológicas propostas por essa ontologia. Ou seja, a linguagem tem construƧƵes que correspondem Ć s diferentes relaƧƵes e tipos de entidades do domĆnio.
Então, se eu tenho um conjunto de relações, todo o resto da linguagem vai refletir, na sua sintaxe, esses diferentes tipos de relações. A linguagem tem, na sua gramÔtica, um conjunto de restrições sintÔticas que refletem a axiomatização dessa ontologia. A ideia é que você fique restrito a criar modelos dentro dessa linguagem, que façam sentido e respeitem a estrutura dessa ontologia.
Isso acontece com qualquer linguagem que não seja ontologicamente neutra. Mas, se você pegar uma linguagem mais ontologicamente neutra, como uma lógica de primeira ordem, ou uma linguagem mais simples, como essa, o grau de liberdade é muito grande, porque o sistema é muito simples, do ponto de vista ontológico. Você pode fazer qualquer coisa, desde que respeite as regras sintÔticas mais bÔsicas.
Quando vocĆŖ tem uma ontologia mais rica, com uma caixa de ferramentas mais sofisticada, essas microteorias restringem como os construtos da linguagem podem ser usados, e eles só podem ser usados de maneira muito especĆfica. Ou seja, a linguagem vira uma coisa restrita. Se vocĆŖ tem conceitos bem definidos, com relaƧƵes fortes entre eles, vocĆŖ vai ter que representar essas coisas de forma especĆfica. E vocĆŖ passa a modelar instanciando essas estruturas. Isso leva Ć criação de clusters de conceitos e padrƵes de design. A linguagem, entĆ£o, vira uma linguagem de padrƵes. As primitivas da linguagem nĆ£o sĆ£o mais coisas de baixa granularidade, como classes, relaƧƵes e atributos, mas sĆ£o design patterns (padrƵes de design). A gente vai ver isso mais adiante.
Por exemplo, uma extensĆ£o da UML. Mas, ao invĆ©s de ter só a noção geral de classe, vocĆŖ vai ter distinƧƵes mais precisas entre tipos de classe. EntĆ£o, vocĆŖ tem o que chamamos de kind, que sĆ£o os tipos que definem o que as coisas realmente sĆ£o no domĆnio – ou seja, o que elas sĆ£o essencialmente. Eles classificam as instĆ¢ncias em todas as situaƧƵes possĆveis. As instĆ¢ncias nĆ£o podem ser de outro tipo que nĆ£o seja aquele tipo essencial (tipo estĆ”tico). Nesse exemplo, temos quatro kinds: pessoa, coração, cĆ©rebro e organização.
Por exemplo, todos nós somos do tipo pessoa. Eu sou essencialmente uma pessoa, mas posso ser contingentemente saudĆ”vel ou doente. Posso deixar de ser saudĆ”vel e virar uma pessoa doente, por exemplo. Esses tipos sĆ£o dinĆ¢micos, mas o critĆ©rio de classificação dinĆ¢mica Ć© algo intrĆnseco a mim. EntĆ£o, a minha condição de ser saudĆ”vel ou doente Ć© uma fase da minha identidade, mas eu sou sempre essencialmente uma pessoa.
Esses tipos dinĆ¢micos podem ser chamados de papĆ©is. Por exemplo, ser paciente Ć© um papel que uma pessoa desempenha em uma relação especĆfica com uma instituição de saĆŗde. Para ser paciente, vocĆŖ tem que estar sendo tratado por algum provedor de saĆŗde. JĆ” os mixins sĆ£o tipos que podem ser instanciados por coisas de vĆ”rios kinds. Por exemplo, um healthcare provider pode ser tanto uma pessoa quanto uma organização. Um mixim atravessa vĆ”rios kinds, podendo ser dinĆ¢mico ou estĆ”tico.
Se a gente olhar isso do ponto de vista geométrico, o universo das instâncias pode ser visto como uma tecelagem de kinds, ou seja, o universo é todo particionado de forma exaustiva entre esses kinds. E tudo que pertence a um kind não pode ser de outro kind. Esses mixins são como sombras que se movem dentro do espaço de um kind, cruzando a fronteira de vÔrios kinds. Eles podem ser dinâmicos, relacionais e classificar ou desclassificar coisas.
Esses mixins nĆ£o sĆ£o restritos apenas ao tempo, eles podem tambĆ©m representar mundos possĆveis e situaƧƵes especĆficas, nĆ£o necessariamente temporais. EntĆ£o, um healthcare provider Ć© uma estrutura desse tipo que pode ser instanciada por coisas de tipos diferentes, como uma pessoa ou uma organização.
Poderia o contexto determinar o papel para um kind?
<aqui>
Agora, temos também aspectos, que são objetos existencialmente dependentes de outras entidades. Isso não tem a ver com o que se chama de aspect-oriented programming (programação orientada a aspectos). Um aspecto é basicamente uma propriedade reificada, ou seja, um objeto que só existe se outra entidade existir. Por exemplo, a minha dor de cabeça só existe se eu existir. Ou a minha habilidade de falar inglês só existe se eu existir. Mas esses aspectos têm um comportamento dinâmico, ou seja, podem mudar ao longo do tempo. A dor de cabeça pode se intensificar, e a habilidade de falar inglês pode melhorar ou piorar com o tempo.
Esses aspectos podem ser dependentes de uma única entidade, ou de vÔrias. Eles conectam coisas. Por exemplo, um contrato de emprego é um objeto que conecta um empregado e uma empresa. Esses objetos têm propriedades essenciais e acidentais. Um sintoma é um tipo de aspecto, por exemplo. Ele pode ser leve ou severo, e essas são fases do sintoma.
JÔ o tratamento pode ser especializado em subtipos dinâmicos, como ativo ou suspenso. O tratamento pode também desempenhar papéis. Por exemplo, ser um tratamento assegurado é um papel desempenhado pelo tratamento, dependendo de um seguro de saúde.
<aqui>
Esses conceitos ajudam a modelar o mundo de forma mais precisa, e ao fazer isso, a gente deixa explĆcita a nossa visĆ£o de mundo. E, portanto, conseguimos identificar que nem todas as pessoas veem o mesmo domĆnio da mesma maneira. Se olhĆ”ssemos isso do ponto de vista lógico, seriam predicados unĆ”rios. Mesmo intuitivamente, a gente sabe que a relação entre tipos e instĆ¢ncias nĆ£o Ć© a mesma.
Por exemplo, Mick Jagger: ele é necessariamente uma pessoa, mas contingentemente um cantor, economista, ou cidadão britânico. Esses são papéis, porque são dinâmicos e relacionais. JÔ ser uma pessoa viva ou adulta são fases, que são dinâmicas, mas não relacionais. E coisas como "item de herança cultural" ou "item assegurado" são mixins, porque cruzam diferentes tipos.
Essas distinƧƵes – se algo Ć© estĆ”tico ou nĆ£o, se agrupa coisas do mesmo tipo essencial ou nĆ£o – sĆ£o fundamentais para entender como representar as coisas de forma precisa. E a partir dessas distinƧƵes, a gente sabe exatamente qual construto usar para representar cada entidade no nosso modelo. Por exemplo, "estudante" Ć© um papel, porque depende de estar ligado a uma instituição de ensino. NĆ£o Ć© uma especialização estĆ”tica, mas sim relacional.
E, claro, existem regras ontológicas que se tornam regras gramaticais. Por exemplo, você não pode criar um papel sem definir o tipo que instancia aquele papel. Não pode ter um papel sem uma relação definida, como "estar matriculado em uma instituição de ensino", porque essa relação faz parte da definição do que é ser estudante.
Essas regras podem ser verificadas automaticamente em ferramentas de modelagem. Se você quebrar alguma dessas regras, o modelo não compila, ou seja, ele não é vÔlido. Então, se você tentar especializar um kind incorretamente, ou violar a definição de um papel, o modelo vai apontar esse erro.
Né, mas tem uma maneira mais interessante de pensar sobre isso. Ao invés de pensar que tem vÔrias coisas que você não pode fazer, a gente deveria pensar que tem poucas coisas que a gente pode fazer com esse papel. Essas regras aqui restringem tanto o uso desse construto que a única maneira que esse construto pode aparecer no modelo é se ele eventualmente especializar um único kind.
Se ele for definido numa relação, no escopo de uma relação tal que o que Ć© chamado de association, no oposto daquele construto, tem uma cardinalidade mĆnima de pelo menos um. Ou seja, que define essa condição de relação. E aĆ, esse construto se manifesta como um tipo de padrĆ£o.
Deixa eu dar um foco nisso daqui: na importância de representar essa entidade aqui explicitamente. Que que ele tÔ fazendo aqui? Qual a relação com essa relação?
Se a gente usa uma notação tradicional onde as relaƧƵes sĆ£o representadas simplesmente como um conjunto de duplas — nesse caso, de pares ordenados — que que acontece? Essas cardinalidades sĆ£o necessariamente ambĆguas. EntĆ£o, esse modelo tĆ” dizendo o quĆŖ? Olha, um paciente Ć© tratado por um ou mais hospitais, vamos dizer assim, para simplificar, e um hospital trata um ou mais pacientes.
A pergunta é: essas cardinalidades querem dizer o quê? Posso dar para vocês oito maneiras diferentes de interpretar essas cardinalidades. Por exemplo, o que que faz com que essa relação aqui seja verdadeira?
Lembra a condição relacional para alguém ser um paciente: é participar de um tratamento envolvendo uma unidade médica aqui, né, no hospital. Mas agora, dado um tratamento, eu posso ter:
- Um paciente, uma unidade mƩdica, e ambos podem participar de vƔrios tratamentos;
- VƔrios pacientes, uma unidade mƩdica, e todos podem participar de vƔrios tratamentos;
- Ou vƔrios tratamentos, vƔrias unidades mƩdicas, todos participando de vƔrios tratamentos.
Um paciente, vÔrias unidades médicas... Isso tem a ver com a semântica do que é essa relação.
Uma conceituação na qual se vocĆŖ tem vĆ”rias unidades te tratando no hospital, todos esses sĆ£o tratamentos diferentes, Ć© muito diferente da semĆ¢ntica na qual todo mundo pode participar do mesmo tratamento. Se eu represento explicitamente essa entidade que faz com que essa relação seja verdadeira — o tratamento, aquele relator — eu elimino essa ambiguidade.
Esse modelo tÔ me dizendo: olha, tratamentos aqui envolvem um único paciente e uma unidade médica, mas eles podem participar de vÔrios tratamentos.
Essas cardinalidades aqui, como vou mostrar para vocĆŖs — vou trocar aquelas de cima — e aquelas vĆ£o permanecer as mesmas, demonstrando que elas colapsam vĆ”rias interpretaƧƵes diferentes.
Olha, nessa outra interpretação — essa Ć© que a gente tinha — nessa outra, agora eu troquei. Esse Ć© o mundo meio esquisito no qual um tratamento pode envolver vĆ”rios pacientes e vĆ”rias unidades mĆ©dicas, mas o paciente só pode participar de um tratamento, e a unidade mĆ©dica só pode atender a um tratamento. Vou trocar de novo aqui: posso ter vĆ”rios. Todo mundo pode participar de vĆ”rios. Essas cardinalidades permanecem as mesmas. Ou seja, elas sĆ£o incapazes de diferenciar todos esses casos. Essa relação aqui Ć© uma relação que chama derivação. Ela conecta as instĆ¢ncias de tratamento com esses pares ordenados. NĆ£o Ć© relação association class do UML, para quem jĆ” viu.
Essa cardinalidade aqui é derivada dessas duas, né? Automaticamente, porque se um tratamento só pode conectar um paciente e uma unidade médica, eu só posso ter um par ordenado aqui derivado de um tratamento. Mas essa daqui não. Essa tÔ te dizendo outra coisa: tÔ te dizendo quantas vezes você pode ser tratado pelo mesmo hospital, quantos tratamentos podem existir entre a mesma pessoa e o mesmo hospital.
Um tipo de pack-semantics per relation. Se isso daqui fosse n, aà isso aqui seria um para n também. Eu poderia derivar vÔrios pares ordenados da mesma relação entre tratamento, paciente e hospital.
Se eu tivesse só isso, não tem como saber. João hospital 1, João hospital 2, João TR... Não sei se, por exemplo, o tratamento conecta João com hospital 1 e 2, e tem um outro tratamento aqui que conecta João com hospital 3. Não tem como saber. Isso aqui não te dÔ informação suficiente para você reconstruir o que tÔ acontecendo por trÔs.
Isso também é um padrão da linguagem. Toda vez que eu tenho uma relação desse tipo, eu sou obrigado a representar explicitamente essas relações, esse relator e essas relações de dependência existencial com as suas cardinalidades.
Como eu tava dizendo, a linguagem é uma linguagem de padrões. E aà eu posso construir um editor que leva isso em consideração. Aqui, por exemplo, olha: pessoa é um kind, pessoa falecida é uma fase. E aà a linguagem sabe: se é uma fase, tem que ter pelo menos uma outra fase. Você sempre pode sair da fase, mas você não pode sair do kind. Você tem que se mover para outra fase do mesmo kind.
Aqui organização é um kind. Organização ativa é uma fase, mesma história, mesmo padrão: sempre pode deixar essa fase, não pode deixar esse kind. Você vai se mover para outra fase do mesmo kind. E organização extinta.
Um padrão um pouco mais interessante: eu quero modelar um mixin, aqueles role mixin. E aà eu vou dizer: "cliente pessoal é um papel desempenhado por pessoas vivas; clientes corporativos é um papel desempenhado por organizações ativas". O role mixin, nesse caso, é cliente. O relator, contexto relacional, é um contrato de serviço. E o papel complementar é o papel de fornecedor desempenhado por pessoas ativas. Eu instancio isso, basicamente preenchendo esses três formulÔrios, ou seja, distanciando esses três padrões. Esse é um modelo pequeno, mas não é um modelo trivial; a maioria das pessoas erraria esse modelo. Essa relação aqui é uma relação que as pessoas acham muito complicada. As pessoas fazem isso: cliente pode ser pessoa ou organização. Usam pessoa ou organização, como se fosse um kind, isso é um kind, isso é um papel. Isso gera uma contradição lógica, é um anti padrão muito comum.
Esses modelos crescem muito e alguns desses modelos vão ter milhares de classes. E a questão é: como é que a gente pode fazer gestão de complexidade desses modelos? Que tipo de ferramenta a gente pode oferecer para modularização, para abstração, para extrair viewpoints diferentes do modelo? Pensa como seria fazer isso com uma linguagem neutra, tipo UML, o ER, ou OWL, ou qualquer coisa desse tipo. Dever de casa é assim: eu te dou um modelo com 5000 classes, você escreve um algoritmo que gera um resumo com 20 classes, mas que realmente captura a essência do que aquele modelo é. Imagina como seria fazer isso numa linguagem tipo UML. Você não tem informação nenhuma porque todas as classes e relações são iguais. Então as pessoas tentam coisas completamente malucas, tipo PageRank: "deixa eu ver a classe que chega mais relações nela". Mas é uma maneira muito pouco sofisticada.
Aqui você tem muito mais informação porque tem mais semântica sobre o que essas classes querem dizer. E aà a gente tem vÔrios algoritmos sobre isso. Um, tem muito simples, mas é extremamente eficiente: é o seguinte, você separa as entidades e os contextos por relator.
O que Ć© contexto aqui?
Pensar, por exemplo, meu caso: eu tenho vÔrias facetas da minha vida. Eu sou professor na Holanda. Eu sou professor na Suécia. Eu sou cidadão brasileiro, mas também sou cidadão italiano. E eu pertenço ao clube. Todas essas coisas são facetas diferentes, e tudo que estÔ relacionado às relações que tenho dentro da Universidade de Twente são completamente disjuntas das relações que tenho na Universidade de Estocolmo. Sim, as relações de orientação, alocação de custo, tudo isso é independente, são clusters independentes. Mas ali eu tenho uma cadeia de dependência.
Então essa intuição, o que esse algoritmo faz? Ele pega, para cada um desses relatores, ele vai navegar, verificar quais são os papéis desempenhados nesse contexto. E ele vai navegando até atribuir identidade para todos aqueles papéis, até chegar nesses kinds.
Faz isso para o employment, para o car ownership. Esse Ć© um pouco mais interessante. Esse daqui, o que ele faz? Se ele achar um mixin daquele, ele nĆ£o vai conseguir achar identidade para cima, entĆ£o vai ter que descer para o nĆvel dos portais e ir navegando atĆ© achar esses kinds. E aĆ automaticamente ele gera esses clusters. Gera o Car Rental, o employment, o car ownership, e o marriage. Ć um algoritmo extremamente eficiente do ponto de vista computacional e que nĆ£o precisa de nenhuma intervenção humana. A gente fez experimentos que mostram que as pessoas preferiam essa modularização do que outros algoritmos alternativos de otimização.
A mesma coisa para o algoritmo de abstração. Agora, aqui, o algoritmo
faz o seguinte: ele abstrai para os kinds. Ele pega todas as
informaƧƵes e fala: "deixa eu ver o que as coisas sĆ£o essencialmente nesse domĆnio." E ele vai abstraindo tudo atĆ© chegar nesse nĆvel de kind. EntĆ£o um modelo desse tipo vira uma coisa desse tipo.
Agora, deixa eu falar um pouco sobre reusabilidade em implementaƧƵes diferentes.
Essa visĆ£o que estou defendendo aqui separa o problema de modelagem conceitual do problema de design e de implementação. Quando vocĆŖ estĆ” fazendo modelagem conceitual e criando esses contratos de significado, o que vocĆŖ quer garantir? Que aquilo represente de maneira fidedigna a porção do mundo que vocĆŖ deseja representar e que essa representação seja eficiente para um ser humano fazer coisas como comunicar, compreender o domĆnio, resolver problemas, negociar significado, entre outras.
Uma vez que você tem essa representação, pode considerar requisitos não funcionais, de design e de implementação, gerando implementações diferentes para aquele modelo. Por exemplo, a partir desse modelo OntoUML, geramos vÔrias implementações, incluindo bancos relacionais de forma automÔtica.
Temos uma estratégia que utiliza o algoritmo de abstração mencionado anteriormente. Um problema frequente é o mapeamento objeto-relacional, onde surgem dúvidas: você gera uma tabela para cada classe? Para a hierarquia inteira? Ou uma tabela para um caminho entre a classe raiz e a classe folha?
Com o algoritmo de abstração, conseguimos fazer um "one table per kind". Isso traz benefĆcios tanto do ponto de vista computacional quanto cognitivo. Fizemos experimentos com usuĆ”rios que nĆ£o conheciam ontologias, e eles preferiram essa abordagem. AlĆ©m disso, geramos transformaƧƵes para outras linguagens, como uma utilizada no contexto de web semĆ¢ntica, permitindo raciocĆnio automatizado.
<aqui>
No entanto, hÔ desafios com linguagens menos expressivas, onde as coisas não podem mudar de classe, como o caso de um estudante que deixa de ser estudante. Desenvolvemos estratégias para lidar com essa limitação e mapear essas mudanças no tempo.
Mapeamos padrões de transformação que permitem gerar especificações automaticamente. Isso elimina a necessidade de lidar diretamente com a complexidade de certas linguagens ou lógicas, tornando o processo mais eficiente. Além disso, conseguimos expor a ontologia embutida em uma visão de mundo ou sistema, representando explicitamente os conceitos e evitando falsos acordos, como os exemplos que dei sobre "pessoa" e "transplante".
Por exemplo, conceitos aparentemente iguais em dois modelos podem ser diferentes. Um "transplante" pode ser um relator que conecta cirurgião, doador e receptor, enquanto outro pode representar uma licença para realizar um tipo de transplante. Essa diferenciação é crucial para evitar ambiguidades em sistemas interoperÔveis.
<aqui>
A semĆ¢ntica das relaƧƵes tambĆ©m pode variar muito. Modelos que aparentam ser iguais em termos de classes e cardinalidades podem, na verdade, representar conceitos distintos. Por isso, usamos restriƧƵes adicionais no modelo para garantir que as interpretaƧƵes possĆveis correspondam Ć s desejadas.
Por fim, enfrentamos o problema de validação. Isso vai alĆ©m da verificação de consistĆŖncia; envolve garantir que o modelo reflita corretamente as intenƧƵes do modelador. Para isso, usamos tĆ©cnicas de simulação visual, confrontando o modelador com instĆ¢ncias possĆveis geradas pelo modelo. Assim, ele pode identificar e corrigir interpretaƧƵes indesejadas.
Essa abordagem nos permitiu criar um repositório com mais de 200 modelos, utilizado para pesquisa orientada a dados. Identificamos anti-padrões frequentes, como relacionalidades que conectam papéis especializados no mesmo centro sem impedir ambiguidades. Por exemplo, modelos que permitem que uma mesma pessoa seja doador, receptor e cirurgião no mesmo transplante.
Desenvolvemos ferramentas para detectar esses anti-padrões e propor correções automÔticas. Também criamos um catÔlogo desses anti-padrões, ajudando modeladores a evitÔ-los. Essas ferramentas são especialmente úteis em modelos grandes e complexos, com milhares de classes e relações.
Com isso, avanƧamos na direção de modelos mais robustos, compreensĆveis e interoperĆ”veis, capazes de representar domĆnios complexos sem ambiguidades.
Nessa Ć”rea, uma das coisas que a gente vem fazendo Ć© detectar certas estruturas que, quando presentes nos modelos, causam essa dissociação entre os modelos possĆveis e os modelos desejados. Ou seja, estruturas que ativam o nosso viĆ©s cognitivo. Muitas vezes, a gente nĆ£o percebe algo que Ć© tĆ£o óbvio. Por exemplo, se vocĆŖ tem isso, inclusive, Ć© um anti-padrĆ£o. Se vocĆŖ tem um relator desse tipo, um contexto relacional conectando papĆ©is que especializam o mesmo kind, Ć© claro que pode ser a mesma instĆ¢ncia preenchendo todos os papĆ©is. Mas, na verdade, hĆ” vĆ”rios outros modelos indesejados. Um em que estou doando o coração para o SĆ©rgio e realizando o transplante, ou outro em que estou doando o coração para mim mesmo e o SĆ©rgio estĆ” realizando o transplante. Tudo isso Ć© instĆ¢ncia possĆvel desse modelo, e a gente nĆ£o percebe. Esse Ć© um anti-padrĆ£o.
Simulamos esses modelos por um bom tempo e detectamos essas estruturas. Uma vez detectadas, vocĆŖ pode embutir isso na ferramenta. Ela passa a identificar e avisar: "Se vocĆŖ tiver isso aqui, estarĆ” aceitando essas interpretaƧƵes possĆveis. Qual delas vocĆŖ quer excluir?" AĆ vocĆŖ responde, e ela inclui exceƧƵes para eliminar aquilo. Por exemplo, vocĆŖ quer que os trĆŖs sejam disjuntos no escopo do transplante? Ou que dois sejam disjuntos? Quais dois? Ou vocĆŖ quer que sejam disjuntos de maneira geral? Isso te dĆ” essas possibilidades. Implementamos ferramentas de detecção de anti-padrƵes e propostas de retificação dos modelos.
Criamos um catÔlogo desses anti-padrões, muitos dos quais as pessoas não percebem. Por exemplo, se eu tiver dois tipos, uma relação entre esses dois tipos, outros dois tipos especializando os dois primeiros, e uma relação entre esses dois, frequentemente existe uma restrição entre essas duas relações que as pessoas não percebem que gostariam de colocar.
Na ontologia de ECG, no modelo de ECG, o coração Ć© composto de ventrĆculos. Para o coração desempenhar o papel de bomba sanguĆnea, o ventrĆculo tem que desempenhar um papel de bomba sanguĆnea. Quando simulamos esse modelo, observamos algo interessante: meu coração Ć© composto de um ventrĆculo, o coração da Fernanda Ć© composto de um ventrĆculo, mas quando meu coração bombeia sangue, ele faz isso com o ventrĆculo dela. Isso Ć© uma instĆ¢ncia possĆvel daquele modelo, que ninguĆ©m percebe. Estamos falando de um modelo com quatro classes e duas relaƧƵes; imagine 5.000 ou 15.000.
Pegamos um repositório e comeƧamos a fazer estatĆsticas sobre a presenƧa desses anti-padrƵes. Por exemplo, aquele padrĆ£o do coração aparecia em metade dos modelos. Num conjunto de 817, isolamos aleatoriamente 50 modelos e encontramos 817 instĆ¢ncias desse padrĆ£o. Um outro anti-padrĆ£o, chamado "Association Cycle", apareceu em 92% dos modelos, porque Ć© um problema sĆ©rio. Esses ciclos sĆ£o perigosos, e frequentemente esquecemos de restriƧƵes ligadas a eles. Em 50 modelos, esse ciclo apareceu 1.800 vezes. JĆ” o do transplante apareceu em 25% dos modelos.
O que fizemos, então? Pegamos um dos modelos mais robustos, com cerca de 5.000 classes, produzido por uma organização profissional, uma agência governamental, com um grupo de 12 pessoas trabalhando durante dois anos. Oferecemos a ferramenta a eles para detectar se aquilo era erro. Em 88% dos casos, os anti-padrões eram erros, e conseguimos corrigi-los automaticamente em 97% dos casos. O anti-padrão do transplante era erro em 56% dos casos, e corrigimos automaticamente 77% deles. JÔ o "Association Cycle" era erro em 70% dos casos, e corrigimos 71% automaticamente. Cada anti-padrão que é um erro representa uma falha no contrato do modelo.
Essa situação Ć© tĆ£o presente que, se vocĆŖ nĆ£o validar o modelo, ele estarĆ” errado. Afirmo com convicção: qualquer modelo nĆ£o trivial que for validado terĆ” pelo menos alguns anti-padrƵes. Por exemplo, este aqui permite uma interpretação indesejada, mas possĆvel: o mesmo indivĆduo pode ser o "Health Care Provider" e o paciente ao mesmo tempo. DifĆcil perceber isso mesmo num modelo pequeno. Quando simulamos, isso aparece: nesse tratamento, o "Provider" e o paciente sĆ£o a mesma pessoa.
Para resolver, utilizamos a linguagem Alloy, que transforma especificações lógicas em problemas de "Constraint Satisfaction" e gera modelos visuais. Criamos uma semântica modal para visualização, permitindo ao usuÔrio ver os modelos lógicos de maneira interativa. Por exemplo, ele pode definir quais instâncias deseja incluir ou excluir. Isso facilita a validação do modelo.
Focamos tambĆ©m em padrƵes ligados Ć modelagem multinĆvel. Por exemplo, "pessoas" tĆŖm instĆ¢ncias como "adulto", que Ć© um subtipo de pessoa, e assim por diante. Esse tipo de modelagem gera muitos anti-padrƵes. Detectamos e corrigimos esses problemas em grandes repositórios, como o Wikidata, onde erros desse tipo apareciam em 85% das modelagens.
Por fim, desenvolvemos abordagens simbólicas e subsimbólicas para ajudar na evolução de modelos legados, incluindo técnicas de "stereotype prediction" e algoritmos interativos para corrigir modelos de maneira eficiente. Nosso objetivo é construir sistemas confiÔveis, com modelos resilientes, explicÔveis e interoperÔveis. Isso requer ferramentas que amplifiquem a inteligência do usuÔrio, combinando aprendizado de mÔquina e técnicas dedutivas para facilitar a tarefa de modelagem.
AĆ resolvemos fazer outra coisa. Pensamos: “Vamos tentar checar antipadrƵes e estruturas muito grandes.” E decidimos focar no Wikidata. Em particular, querĆamos verificar padrƵes ligados Ć quele conceito de tipos com coexistĆŖncia, chamados de modelagem multinĆvel. Por exemplo, temos Pessoa. Uma instĆ¢ncia de Adulto Ć© um subtipo de Pessoa. Todo Adulto Ć© uma instĆ¢ncia de Pessoa e um indivĆduo. Adulto tambĆ©m Ć© uma instĆ¢ncia de uma classe de segunda ordem chamada Persona Phase, que representa fases etĆ”rias. Assim, John Ć© uma instĆ¢ncia de Adulto, e Adulto Ć© uma instĆ¢ncia desse conceito. HĆ” vĆ”rios antipadrƵes associados a essa modelagem multinĆvel.
Um exemplo ocorre no Wikidata, onde hĆ” vĆ”rias relaƧƵes de especialização. O problema Ć© que o Wikidata Ć© construĆdo coletivamente, e alguns termos sĆ£o polissĆŖmicos, o que leva pessoas a tratĆ”-los como instĆ¢ncias ou classes, sem checagem. Por exemplo, antes de corrigirem, havia profissƵes como Criador, Cientista e Cientista da Computação. Mas, ao mesmo tempo, Cientista era tratado como instĆ¢ncia de profissĆ£o, o que levava Ć conclusĆ£o errada de que Tim Berners-Lee Ć© uma profissĆ£o.
Esse antipadrĆ£o era tĆ£o comum que, ao analisarmos o Wikidata, identificamos que havia 3.371 classes em taxonomias. No entanto, 17.819 classes cruzavam nĆveis taxonĆ“micos, e em 85% dos casos os modelos estavam errados. Mas Ć© possĆvel detectar e corrigir automaticamente.
Por fim, falando sobre a evolução de modelos, imagine que estamos usando o sistema para gerar simulaƧƵes de instĆ¢ncias possĆveis. O usuĆ”rio valida essas instĆ¢ncias, dizendo o que quer e o que nĆ£o quer. Por exemplo, “Quero casamento com vĆ”rias pessoas, mas nĆ£o com ninguĆ©m morto.” Ou “VocĆŖ pode doar para outra pessoa e realizar um transplante, mas nĆ£o para si mesmo.” Nesse processo, o usuĆ”rio anota o que deseja ou rejeita, criando uma base de exemplos e contraexemplos.
Juntando essa base com a teoria original, podemos aprender as restriƧƵes que devem ser incluĆdas no modelo. Isso excluiria os contraexemplos e validaria os exemplos. Por exemplo, se um modelo diz que uma pessoa pode estar viva e morta ao mesmo tempo, podemos usar as validaƧƵes para restringir esse comportamento e gerar um modelo mais robusto.
Essa abordagem é necessÔria porque os antipadrões derivam de nossas falhas cognitivas, enquanto os padrões vêm da teoria. Existem poucas formas de fazer as coisas corretamente, mas infinitas maneiras de cometer erros. Portanto, ao reunir essas validações da comunidade, podemos usar técnicas de aprendizado para identificar e corrigir antipadrões.
Agora, sobre um problema atual: o legado de modelos criados de forma diversa. HĆ” milhƵes de modelos construĆdos sem padronização. Nossa ideia Ć© ajudar a transpor esses modelos para uma linguagem mais formal e ancorĆ”-los em ontologias. Recentemente, testamos duas abordagens. Na subsimbólica, usamos redes convolucionais e modelos de linguagem para prever estereótipos e classificar conceitos em ontologias. Na abordagem simbólica, aproveitamos a gramĆ”tica restrita da linguagem. Por exemplo, se sabemos que algo Ć© um Papel, jĆ” restringimos as opƧƵes para elementos relacionados.
Descobrimos que, ao marcar apenas 10% das classes de um modelo como conhecidas (seed), conseguimos inferir o restante de maneira eficiente. Esse processo interativo é mais eficaz e demonstra o valor de métodos simbólicos. Agora, exploramos como combinar essa abordagem com técnicas de aprendizado, como adversarial learning, para melhorar ainda mais as validações iniciais.
A mensagem principal Ć© que sistemas confiĆ”veis dependem de modelos confiĆ”veis. Esses modelos devem ser resilientes, explicĆ”veis, interoperĆ”veis, reutilizĆ”veis e evolutivos. Construir tais modelos exige linguagens precisas com semĆ¢ntica consistente e tĆ©cnicas especĆficas, como model finding, verificação tĆ©cnica, detecção de padrƵes e antipadrƵes, e aprendizado de mĆ”quina. Tudo isso para apoiar os usuĆ”rios na difĆcil tarefa de criar modelos confiĆ”veis.
Todo sistema utiliza um modelo, mais ou menos explĆcito. Esses modelos confiĆ”veis precisam ser confiĆ”veis (reliable), resilientes (resilient), explicĆ”veis (explainable), interoperĆ”veis (interoperable), reutilizĆ”veis (reusable), e evolutivos (evolvable). Para construir modelos com essas propriedades, sĆ£o necessĆ”rias tĆ©cnicas muito especĆficas. Isso representa um verdadeiro projeto de humildade, um reconhecimento da nossa incapacidade de lidar com a complexidade inerente a essas tarefas.
Precisamos de linguagens que sejam realmente precisas, com uma semântica consistente e um tipo de semântica ontológica sólida. Além disso, precisamos de um programa de amplificação da inteligência (Intelligence Amplification - IA), em vez de inteligência artificial (Artificial Intelligence - AI).
Nesse esforƧo, temos experimentado de tudo: tĆ©cnicas de model finding, verificação formal, detecção e mineração de repositórios para identificar padrƵes e antipadrƵes. Utilizamos tudo que estĆ” ao nosso alcance, incluindo machine learning, abordagens indutivas, dedutivas, e mĆ©todos hĆbridos. AtĆ© mesmo o aprendizado por meio de programas Ć© um tipo de machine learning. A ideia Ć© combinar todas essas ferramentas para ajudar os usuĆ”rios a enfrentar a difĆcil tarefa de construir modelos com essas propriedades.
ComentƔrios
Postar um comentƔrio
Sinta-se a vontade para comentar. CrĆticas construtivas sĆ£o sempre bem vindas.