Pro Yearly is on sale from $80 to $50! »

Supercomputadoras para ayuda humanitaria: Python y Crowdsourcing al rescate.

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.

Bd7f0e0118a2ea635b5a06d84cbab283?s=128

Noé Domínguez Porras

August 31, 2019
Tweet

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. None
  3. 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.
  4. None
  5. None
  6. My areas of interest HCI Distributed systems IoT Recommendation Systems

    for IoT devices Distributed Computing Crowdsourcing
  7. Crowdsourcing La inteligencia colectiva cooperando con computadoras.

  8. 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.
  9. None
  10. 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.
  11. ‍♀ + Human Computer Verificación Humana Digitalización de texto

  12. 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
  13. Computación humana

  14. 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
  15. 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
  16. 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.
  17. 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
  18. Computación humana, crowdsourcing

  19. El origen

  20. 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)
  21. 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.
  22. Trigger: 3 tweets.

  23. La reacción de la gente

  24. None
  25. None
  26. None
  27. Motivación: 3 tweets

  28. Motivación: 3 tweets

  29. Motivación: 3 tweets

  30. None
  31. None
  32. None
  33. Algunos voluntarios

  34. None
  35. None
  36. None
  37. None
  38. codersmexico.com

  39. Bot para #RevisaMiGrieta (by @poguez)

  40. El bot para #RevisaMiGrieta Fortune en Español, Edición octubre 2017.

  41. 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.
  42. 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.
  43. 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.
  44. 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.
  45. 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
  46. 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.
  47. 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.
  48. 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.
  49. Otras dependencias

  50. Issues hacia el beta

  51. Interés académico

  52. None
  53. Interés académico

  54. None
  55. None
  56. 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
  57. Trabajo Futuro • Mejorar el bot para la coordinación de

    voluntarios y usuarios. • Crear un Dataset de grietas para Machine Learning. Agenda
  58. noedominguez.com Twitter @noe_dgz Instagram y Github @poguez e-mail noe.dgzp@gmail.com