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.