ProbLog es un lenguaje de programación lógica probabilística que extiende Prolog con probabilidades. [ 1 ] [ 2 ] [ 3 ] Extiende Prolog mínimamente añadiendo la noción de un hecho probabilístico, que combina la idea de átomos lógicos y variables aleatorias . De forma similar a Prolog, ProbLog puede consultar un átomo . Mientras que Prolog devuelve el valor de verdad del átomo consultado , ProbLog devuelve la probabilidad de que sea verdadero.
Semántica
Un hecho probabilístico es un parconun átomo fundamental yla probabilidad desiendo cierto. Una regla se define mediante un átomo., llamado la cabeza, y un conjunto finito deliterales, llamado el cuerpo. Los programas ProbLog consisten en un conjunto de hechos probabilísticos.y un conjunto de reglasUtilizando la semántica de distribución, se define una distribución de probabilidad sobre los modelos bien fundamentados de dos valores de los átomos en el programa. La probabilidad de un modelo se define comodonde el producto recorre todos los literales del modelo.. Para un átomo de consultaLa semántica de distribución define una probabilidad para la consulta. en la que la suma se extiende sobre todos los modelos dondeEs cierto.
ProbLog admite múltiples tareas:
- Inferencia probabilística: calcular
- Explicación más probable: calcular la probabilidad del modelo más probable
- Muestreo: generar muestras de
- Aprender de las interpretaciones: aprender las probabilidades de los programas ProbLog a partir de los datos.
Ejemplo
ProbLog se puede utilizar, por ejemplo, para calcular la probabilidad de mojarse dadas las probabilidades de lluvia y las probabilidades de que alguien lleve un paraguas, de la siguiente manera:
0.4 :: lluvia ( día laborable ). 0.9 :: lluvia ( fin de semana ). 0.8 :: paraguas_si_llueve ( Día ). 0.2 :: paraguas_si_está_seco ( Día ).paraguas ( Día ) :- lluvia ( Día ), paraguas_si_llueve ( Día ). paraguas ( Día ) :- \+ lluvia ( Día ), paraguas_si_seco ( Día ). mojado ( Día ) :- lluvia ( Día ), \+ paraguas ( Día ).consulta ( \+ mojado ( fin de semana )).La última regla antes de la consulta establece que alguien se moja si llueve y no lleva paraguas. Cuando se le pide a ProbLog que resuelva la tarea de "inferencia probabilística", la consulta solicita la probabilidad de permanecer seco un día de fin de semana. Al resolver la tarea de "explicación más probable", ProbLog devolverá la razón más probable para permanecer seco, es decir, porque no llueve o porque la persona lleva paraguas.
Implementaciones
El lenguaje ProbLog se ha implementado como una biblioteca Prolog de YAP (ProbLog 1) [ 4 ] y como un marco de trabajo Python independiente (ProbLog 2) [ 5 ]. El código fuente de ProbLog 2 está bajo la licencia Apache License, versión 2.0 y está disponible en GitHub [ 6 ] . El lenguaje ProbLog también se ha implementado como parte del paquete de programación lógica probabilística cplint para SWI-Prolog, YAP y XSB [ 7 ] .
Variantes de ProbLog
ProbLog se ha ampliado o utilizado como inspiración para varias variantes diferentes, entre las que se incluyen:
- DeepProbLog extiende ProbLog al permitir que la probabilidad sea parametrizada por una red neuronal. [ 8 ]
- DTProblog extiende ProbLog con la teoría de la decisión . La utilidad de una estrategia se define como la recompensa esperada por su ejecución en presencia de efectos probabilísticos. [ 9 ]
- DC-ProbLog extiende ProbLog con hechos distribucionales, lo que significa que, en lugar de probabilidades, un átomo lógico tiene una distribución de probabilidad continua correspondiente.
- aProbLog generaliza ProbLog al permitir cualquier semianillo conmutativo en lugar de solo probabilidades. [ 10 ]
- ProbFOIL : dado un conjunto de hechos ProbLog como una base de datos relacional probabilística, ProbFOIL encuentra un conjunto de reglas probabilísticas para predecir los hechos de una relación basándose en todas las demás relaciones.
Idiomas relacionados
- PRISM: Programación en modelado estadístico [ 11 ]
- ICL: Lógica de elección independiente [ 12 ]
- CP-Logic: Lenguaje de eventos probabilísticos causales [ 13 ]
- LPAD: Programas lógicos con disyunciones anotadas [ 14 ]
- Cláusulas distributivas: Un lenguaje de lógica probabilística para dominios relacionales híbridos [ 15 ]
Lecturas adicionales
Referencias
- ↑ De Raedt, Luc; Kimmig, Angelika; Toivonen, Hannu (noviembre de 2007). ProbLog: Un Prolog probabilístico y su aplicación en el descubrimiento de enlaces . IJCAI. Vol. 7.
- ↑ Fierens, D; Van den Broeck, G.; Bruynooghe, M.; De Raedt, L. (2012). Restricciones para la programación lógica probabilística . Actas del Taller de Programación Probabilística de NIPS. págs. 1–4 .
- ↑ De Raedt, Luc; Kimmig, Angelika (2015). "Conceptos de programación probabilística (lógica)" . Machine Learning . 100 (1): 5– 47. doi : 10.1007/s10994-015-5494-z . S2CID 3166992 .
- ↑ «ProbLog1» . dtai.cs.kuleuven.be .
- 1 2 "ProbLog: Programación probabilística" . dtai.cs.kuleuven.be .
- ^ "Repositorio ProbLog GitHub " . github.com . 12 de octubre de 2022.
- ↑ "cplint – AI@UNIFE" . Consultado el 13 de noviembre de 2023 .
- ↑ Manhaeve, Robin; Dumancic, Sebastijan; Kimmig, Angelika; Demeester, Thomas; De Raedt, Luc (2018). DeepProbLog: Programación lógica probabilística neuronal . NeurIPS 2018, Trigésimo segunda conferencia sobre sistemas de procesamiento de información neuronal. págs. 3753–3760 .
- ↑ Van den Broeck, chico; Thon, Ingo; Van Otterlo, Martijn; De Raedt, Luc (2010). "DTProbLog: un prólogo probabilístico de teoría de decisiones". Actas de la Conferencia AAAI sobre Inteligencia Artificial . vol. 24.
- ↑ Kimmig, A.; Van den Broeck, G.; De Raedt, L. (2011). Un Prolog algebraico para razonar sobre mundos posibles . Actas de la Vigésimo Quinta Conferencia AAAI sobre Inteligencia Artificial. págs. 209–214 .
- ↑ "PRISM: Programación en modelado estadístico" . rjida.meijo-u.ac.jp .
- ↑ Poole, David (2008). «La lógica de elección independiente y más allá». En Luc Raedt; Paolo Frasconi; Kristian Kersting; Stephen Muggleton (eds.). Programación lógica inductiva probabilística . Lecture Notes in Computer Science. Vol. 4911. Springer. pp. 222–243 . doi : 10.1007/978-3-540-78652-8_8 . ISBN 978-3-540-78651-1.
- ↑ Vennekens, Joost; Denecker, Marc; Bruynooghe, Maurice (2009). CP-logic: Un lenguaje de eventos probabilísticos causales y su relación con la programación lógica . Teoría y práctica de la programación lógica. Vol. 9. pp. 245– 308. arXiv : 0904.1672 .
- ↑ "PITA: Inferencia probabilística con tabulación y subsunción de respuestas" . ml.unife.it .
- ↑ "Cláusulas distributivas" . dtai.cs.kuleuven.be .
- ↑ "ProbLog: Documentación de ProbLog 2.1" . problog.readthedocs.io .
- Software probabilístico
- paradigmas de programación
- Lenguajes de programación no deterministas
- estadística computacional
- Bibliotecas científicas de Python (lenguaje de programación)
- Lenguajes de programación lógica