$30 off During Our Annual Pro Sale. View Details »

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.

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

    View Slide

  2. View Slide

  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.

    View Slide

  4. View Slide

  5. View Slide

  6. My areas of interest
    HCI Distributed
    systems
    IoT
    Recommendation Systems
    for IoT devices
    Distributed Computing
    Crowdsourcing

    View Slide

  7. Crowdsourcing
    La inteligencia colectiva cooperando
    con computadoras.

    View Slide

  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.

    View Slide

  9. View Slide

  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.

    View Slide

  11. ‍♀ +

    Human Computer
    Verificación
    Humana
    Digitalización
    de texto

    View Slide

  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

    View Slide

  13. Computación humana

    View Slide

  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

    View Slide

  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

    View Slide

  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.

    View Slide

  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

    View Slide

  18. Computación humana, crowdsourcing

    View Slide

  19. El origen

    View Slide

  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)

    View Slide

  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.

    View Slide

  22. Trigger: 3 tweets.

    View Slide

  23. La reacción de la gente

    View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. Motivación: 3 tweets

    View Slide

  28. Motivación: 3 tweets

    View Slide

  29. Motivación: 3 tweets

    View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. Algunos voluntarios

    View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. codersmexico.com

    View Slide

  39. Bot para #RevisaMiGrieta (by @poguez)

    View Slide

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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  49. Otras dependencias

    View Slide

  50. Issues hacia el beta

    View Slide

  51. Interés académico

    View Slide

  52. View Slide

  53. Interés
    académico

    View Slide

  54. View Slide

  55. View Slide

  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

    View Slide

  57. Trabajo Futuro
    ● Mejorar el bot para la coordinación de voluntarios y usuarios.
    ● Crear un Dataset de grietas para Machine Learning.
    Agenda

    View Slide

  58. noedominguez.com
    Twitter
    @noe_dgz
    Instagram y Github
    @poguez
    e-mail
    [email protected]

    View Slide