Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Supercomputadoras para ayuda humanitaria: Pytho...

Supercomputadoras para ayuda humanitaria: Python y Crowdsourcing al rescate.

Presentada en PyCon Latam 2019.

En estos tiempos hemos descubierto que la Inteligencia Artificial y los algoritmos computacionales están limitados. Ellos no pueden resolver tareas complejas, ni tareas creativas. Aquí es donde se encuentra la cooperación de humanos y computadoras a través de algoritmos que trabajan a escala para resolver problemas complejos. ¿Has pensado alguna vez, por qué Uber, Lyft, AirBNB y otras empresas de economía colaborativa han logrado tener éxito? Es porque humanos y computadoras cooperan en un proceso estructurado para realizar tareas complejas. En esta plática analizaremos el fenómeno de #RevisaMiGrieta en Twitter durante la emergencia del terremoto del 19 de septiembre de 2017. Allí analizaremos cómo grupos de expertos en análisis estructural resolvieron la emergencia: evacuar a personas en situaciones de riesgo por daño estructural en su vivienda. Todo esto en menos de 24 horas. Una tarea imposible para nuestro Sistema de Protección Civil ¿Cómo se logró cumplir una tarea titánica para miles de personas en menos de un día? A través de redes sociales y un algoritmo de Crowdsourcing.

Noé Domínguez Porras

August 31, 2019
Tweet

More Decks by Noé Domínguez Porras

Other Decks in Programming

Transcript

  1. Supercomputadoras para ayuda humanitaria: Python y Crowdsourcing al rescate. Puerto

    Vallarta, México 31 de Agosto de 2019 Noé Domínguez-Porras
  2. M.Sc. Noé Domínguez Porras 1. He vivido en Asia 3

    años de 30. 2. Me gustan los perros y gatos. 3. Pero, me gusta más comer y cocinar. 4. En la industria desde 2011 en Startups.
  3. My areas of interest HCI Distributed systems IoT Recommendation Systems

    for IoT devices Distributed Computing Crowdsourcing
  4. Francis Galton adivinó el peso de una vaca con la

    observación de 800~ personas Average guess: 1,197lb Actual weight: 1,198lb Surowiecki, James. The wisdom of crowds. Anchor, 2005.
  5. reCAPTCHA: Human-Based Character Recognition via Web Security Measures. Luis von

    Ahn, Ben Maurer, Colin McMillen, David Abraham and Manuel Blum. Science, September 12, 2008.pp 1465-1468.
  6. mechanical turk A cross-section of the Turk from Racknitz, showing

    how he thought the operator sat inside as he played his opponent. CC Wikimedia. https://www.youtube.com/watch?v=hEPDa4POUAQ
  7. Crowd Tasks - Tareas - Transcripción de audio, estudios académicos,

    pruebas de usuario, reconocimiento de imágenes. An engraving of the Turk from Karl Gottlieb von Windisch's 1784 book Inanimate Reason. CC: Wikimedia
  8. AMP Crowd: django application - Web Service for sending tasks

    to human workers on crowd platforms. - Used by the SampleClean project for context-heavy data cleaning tasks. https://github.com/amplab/ampcrowd
  9. Computación humana - Algoritmos con cómputo humano - Iterar -

    Realizar tarea - Supervisarla - Resultado final reCAPTCHA: Human-Based Character Recognition via Web Security Measures. Luis von Ahn, Ben Maurer, Colin McMillen, David Abraham and Manuel Blum.Science, September 12, 2008.pp 1465-1468.
  10. Computación humana Workflow - Flujos de trabajo - Varias personas

    realizan la misma tarea. - Evalúan y aseguran Calidad - Fusión por etapas - Fusión final
  11. Pensamientos previos Pensamientos previos: • “La réplica acontecida un día

    después, la noche del 20 de septiembre de 1985, también tuvo gran repercusión para la capital al colapsar estructuras reblandecidas un día antes.” (Wikipedia: Terremoto_de_México_de_1985)
  12. El Problema Apoyar a Protección Civil de manera emergente en

    la evaluación y clasificación de casos urgentes en edificios que pudieran colapsar en las réplicas del sismo. Otras motivaciones • Dar tranquilidad a usuarios que no han sido atendidos por protección civil. • Filtrar la enorme cantidad de solicitudes e información.
  13. El bot para #RevisaMiGrieta https://github.com/codersmexico/revisa-mi-grieta-bot Proyecto para atender necesidades de

    evaluación en grietas después del SismoMX del 19 de Septiembre de 2017. Además ofrece un conjunto de preguntas con posibles respuestas para la información a los usuarios que busquen información relacionada a: - Albergues - Centros de Acopio - Donaciones Fortune en Español, Edición octubre 2017.
  14. El bot para #RevisaMiGrieta https://github.com/codersmexico/revisa-mi-grieta-bot 2 roles de usuario: -

    Voluntario - Afectado Premisa de los usuarios: - Todos deberían de actuar en buena voluntad. Fortune en Español, Edición octubre 2017.
  15. El bot para #RevisaMiGrieta https://github.com/codersmexico/revisa-mi-grieta-bot Features - Manejo de sesiones.

    - Asignación de apoyo. - Respuesta a preguntas conocidas. Fortune en Español, Edición octubre 2017.
  16. Bibliotecas utilizadas https://github.com/codersmexico/revisa-mi-grieta-bot Python - ChatterBot machine learning, conversational dialog

    engine for creating chat bots. http://chatterbot.readthedocs.io Fortune en Español, Edición octubre 2017.
  17. bot = ChatBot() bot = ChatBot( name = "Dora la

    coordinadora", storage_adapter='chatterbot.storage.SQLStorageAdapter', input_adapter="chatterbot.input.VariableInputTypeAdapter", output_adapter="chatterbot.output.OutputAdapter", output_format="text", # input_adapter="chatterbot.input.TerminalAdapter", # output_adapter="chatterbot.output.TerminalAdapter", logic_adapters=[ { "import_path": "chatterbot.logic.BestMatch", "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance", "response_selection_method": "chatterbot.response_selection.get_first_response" }, { 'import_path': 'chatterbot.logic.SpecificResponseAdapter', 'input_text': '@revisamigrieta test', 'output_text': 'Puedes revisar tu estructura en: http://bit.ly/RevisaMiGrieta' }, { 'import_path': 'chatterbot.logic.LowConfidenceAdapter', 'threshold': 0.65, 'default_response': 'Puedo ayudarte con información para inspeccionar en: http://bit.ly/RevisaMiGrieta, espera mientras alguien te ayuda' } ], trainer='chatterbot.trainers.ListTrainer' ) list_trainer.trainer(bot,corpora.dora()) Source: https://github.com/codersmexico/revisa-mi-grieta-bot/blob/master/main.py
  18. bot = ChatBot( name = "Dora la coordinadora", storage_adapter='chatterbot.storage.SQLStorageAdapter', input_adapter="chatterbot.input.VariableInputTypeAdapter",

    output_adapter="chatterbot.output.OutputAdapter", output_format="text", # input_adapter="chatterbot.input.TerminalAdapter", # output_adapter="chatterbot.output.TerminalAdapter", logic_adapters=[ { "import_path": "chatterbot.logic.BestMatch", "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance", "response_selection_method": "chatterbot.response_selection.get_first_response" }, { 'import_path': 'chatterbot.logic.SpecificResponseAdapter', 'input_text': '@revisamigrieta test', 'output_text': 'Puedes revisar tu estructura en: http://bit.ly/RevisaMiGrieta' }, { 'import_path': 'chatterbot.logic.LowConfidenceAdapter', 'threshold': 0.65, 'default_response': 'Puedo ayudarte con información para inspeccionar en: http://bit.ly/RevisaMiGrieta, espera mientras alguien te ayuda' } ], trainer='chatterbot.trainers.ListTrainer' ) list_trainer.trainer(bot,corpora.dora()) Source: https://github.com/codersmexico/revisa-mi-grieta-bot/blob/master/main.py BestMatch En nuestro corpora.py elige la respuesta más parecida. Para hacer la comparación de texto se usa levenshtein_distance y elige la primera que encuentre más parecida.
  19. bot = ChatBot( name = "Dora la coordinadora", storage_adapter='chatterbot.storage.SQLStorageAdapter', input_adapter="chatterbot.input.VariableInputTypeAdapter",

    output_adapter="chatterbot.output.OutputAdapter", output_format="text", # input_adapter="chatterbot.input.TerminalAdapter", # output_adapter="chatterbot.output.TerminalAdapter", logic_adapters=[ { "import_path": "chatterbot.logic.BestMatch", "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance", "response_selection_method": "chatterbot.response_selection.get_first_response" }, { 'import_path': 'chatterbot.logic.SpecificResponseAdapter', 'input_text': '@revisamigrieta test', 'output_text': 'Puedes revisar tu estructura en: http://bit.ly/RevisaMiGrieta' }, { 'import_path': 'chatterbot.logic.LowConfidenceAdapter', 'threshold': 0.65, 'default_response': 'Puedo ayudarte con información para inspeccionar en: http://bit.ly/RevisaMiGrieta, espera mientras alguien te ayuda' } ], trainer='chatterbot.trainers.ListTrainer' ) list_trainer.trainer(bot,corpora.dora()) Source: https://github.com/codersmexico/revisa-mi-grieta-bot/blob/master/main.py SpecificResponseAdapter Si hay un texto de específico, no comparar para buscar el BestMatch. Dar una respuesta específica.
  20. bot = ChatBot( name = "Dora la coordinadora", storage_adapter='chatterbot.storage.SQLStorageAdapter', input_adapter="chatterbot.input.VariableInputTypeAdapter",

    output_adapter="chatterbot.output.OutputAdapter", output_format="text", # input_adapter="chatterbot.input.TerminalAdapter", # output_adapter="chatterbot.output.TerminalAdapter", logic_adapters=[ { "import_path": "chatterbot.logic.BestMatch", "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance", "response_selection_method": "chatterbot.response_selection.get_first_response" }, { 'import_path': 'chatterbot.logic.SpecificResponseAdapter', 'input_text': '@revisamigrieta test', 'output_text': 'Puedes revisar tu estructura en: http://bit.ly/RevisaMiGrieta' }, { 'import_path': 'chatterbot.logic.LowConfidenceAdapter', 'threshold': 0.65, 'default_response': 'Puedo ayudarte con información para inspeccionar en: http://bit.ly/RevisaMiGrieta, espera mientras alguien te ayuda' } ], trainer='chatterbot.trainers.ListTrainer' ) list_trainer.trainer(bot,corpora.dora()) Source: https://github.com/codersmexico/revisa-mi-grieta-bot/blob/master/main.py LowConfidenceAdapter Si no hay una respuesta con un nivel de confianza x, responder con una respuesta por defecto.
  21. Resumen • La manera en que usamos Twitter en el

    #Sismo19S fue ejemplar. • En México también sabemos usar la tecnología de manera eficiente y creativa. • Un algoritmo puede ser también un proceso humano. • Se puede utilizar la tecnología para coordinar un problema de manera más eficiente. • Human Intelligence >> Weak AI • Humans + Machines = Superman Agenda
  22. Trabajo Futuro • Mejorar el bot para la coordinación de

    voluntarios y usuarios. • Crear un Dataset de grietas para Machine Learning. Agenda