class: center, middle, light # Chatbots con python ### Mauricio Collazos .footnote[] --- class: center [https://github.com/contraslash/chatbots-intro](https://github.com/contraslash/chatbots-intro) ![Qr code](img/qr.png) --- # Disclaimers - Esta charla es una introducción - Hablo muy rápido - No me crean --- # Un poco de PLN El Procesamiento de lenguaje natural es un subcampo de la Inteligencia Artificial que estudia las interacciones entre una computadora y el lenguaje humano.
[1](https://es.wikipedia.org/wiki/Procesamiento_de_lenguajes_naturales)
Usualmente dividimos el PLN en dos grandes partes .left[ ### Sintaxis - Análisis morfológico - Análisis POS (Part of Speech) - Análisis Sintáctico ] .right[ ### Semántica - Reconocimiento de Entidades Nombradas (NER) - Desambiguación de Palabras - Entendimiento de Lenguaje ] .footnote[] --- class: center # De una manera mas clara El gato negro come salmón ahumado ![http://liceu.uab.cat/~joaquim/language_technology/NLP/PLN_analisis.html](http://liceu.uab.cat/~joaquim/language_technology/NLP/gato_Freeling.jpg) --- # Aplicaciones - Sistemas pregunta respuesta - Traducción automática - Análisis de sentimientos - Resumen automático - Análisis de discurso --- # Ahora si, Chatbots Un chatbot es un agente conversacional que interactua contigo por medio de un proveedor de chat. ### Proveedores - Facebook Messenger - Slack - Telegram - Mensajes de Texto --- # Trabajo de un agente conversacional - Extracción: La primera labor de un agente conversacional es extraer información útil - Clasificación: La segunda labor es entender la intención del texto - Producción: La tercera y última labor es producir una respuesta --- ![https://chatbotslife.com/ultimate-guide-to-leveraging-nlp-machine-learning-for-you-chatbot-531ff2dd870c](https://cdn-images-1.medium.com/max/800/1*r8rR34sfjX4zdM0tXOsvaQ.png) --- # Agentes basados en reglas ```pyhton def identify_intent(raw_text): if "listar" in raw_text: return "list" if "mostrar" in raw_text: return "show" if "crear" in raw_text: return "create" if "delete" in raw_text: return "delete" return "" ``` --- # Usando técnicas estándar de ML ``` train = pd.read_csv( os.path.join(os.path.dirname(__file__), 'data', 'labeledTrainData.tsv'), header=0,delimiter="\t",quoting=3 ) test = pd.read_csv( os.path.join(os.path.dirname(__file__), 'data', 'testData.tsv'), header=0,delimiter="\t",quoting=3 ) clean_train_reviews = [] for i in xrange( 0, len(train["review"])): clean_train_reviews.append(" ".join(KaggleWord2VecUtility.review_to_wordlist( train["review"][i], True)) ) vectorizer = CountVectorizer( analyzer = "word", tokenizer = None,preprocessor = None, stop_words = None, max_features = 5000 ) train_data_features = vectorizer.fit_transform(clean_train_reviews) np.asarray(train_data_features) forest = RandomForestClassifier(n_estimators = 100) forest = forest.fit( train_data_features, train["sentiment"] ) ``` Ejemplo tomado de [Kaggle](https://www.kaggle.com/c/word2vec-nlp-tutorial) --- # En el mercado .left[ - ![Wit.ai](http://static.adweek.com/adweek.com-prod/wp-content/uploads/sites/2/2015/01/WitaiLogo304.jpg) - ![Luis.ai](https://meya.ai/static/images/luis.png) ] .right[ - ![Dialogflow.com](https://blog.dialogflow.com/images/dialogflow-logo.png) - ![Lex](https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/01/eyecatch-lex.png) ] --- # Algunos enlaces útiles ### Diferencias entre tecnologías comerciales - [Understanding Differences between different ai platforms](https://www.linkedin.com/pulse/understanding-differences-between-different-ai-platforms-abraham-kang/) - [Comparison between Luis vs API vs WIT](https://stackoverflow.com/posts/39202305/revisions) ### Otras arquitecturas de chatbots - [Natural Language Pipeline for Chatbots](https://medium.com/@surmenok/natural-language-pipeline-for-chatbots-897bda41482) - [Chatbot Architecture](https://medium.com/@surmenok/chatbot-architecture-496f5bf820ed) --- class: center # rasa NLU ![rasa NLU](https://avatars0.githubusercontent.com/u/21214473) --- # Configuración de la data ```json { "rasa_nlu_data": { "common_examples": [ { "text": "muestrame la lista", "intent": "list", "entities": [] }, { "text": "borrar 1", "intent": "delete", "entities": [ { "start": 7, "end": 8, "value": "1", "entity": "task_id" } ] } { "text": "mostrar", "intent": "show", "entities": [] } ] } } ``` --- # Usando RASA Entrenar el modelo ```bash python -m rasa_nlu.train -c config.json ``` Usando el modelo ```python model_path = "models/default/model_20171006-164306" config_path = "config.json" interpreter = Interpreter.load( Metadata.load(model_path), RasaNLUConfig(config_path) ) interpreter.parse(u"hola mundo") ``` --- # Y en Markdown ![https://media.giphy.com/media/FBzqZGthkW6KQ/giphy.gif](https://media.giphy.com/media/FBzqZGthkW6KQ/giphy.gif) --- # Configuración en Markdown ```markdown ## intent:list - muestrame la lista - lista - todo ## intent:show - mostrar - tarea [1](task_id) - mostrar: [1](task_id),[2](task_id),[3](task_id) ## intent:create - crear: [saludar](task) - nueva tarea: [despedirme](task), [hacer mercado](task) ## intent:delete - eliminar [1](task_id) - borrar [1](task_id) ``` --- # Rasa como microservicios ```bash python -m rasa_nlu.server -c config.json ``` [Endpoints](https://rasahq.github.io/rasa_nlu/http.html#endpoints) - /parse - /train - /status - /config --- # Integrando con facebook ```python def send_response(sender_object, response): data = dict() data['recipient'] = sender_object data['message'] = { 'text': response } query_params = { 'access_token': conf.FB_TOKEN } response = requests.post( conf.FB_MESSENGER_URL, params=query_params, json=data ) ``` --- # Las cosas se pueden complicar ![https://media.giphy.com/media/UedEkAAyEhMLC/giphy.gif](https://media.giphy.com/media/UedEkAAyEhMLC/giphy.gif) --- # Enlaces Útiles - [Curso de Stanford con Deep Learning para NLP](http://cs224d.stanford.edu/) - [Video Curso de NLP con Deep Learning](https://www.youtube.com/watch?v=OQQ-W_63UgQ&list=PL3FW7Lu3i5Jsnh1rnUwq_TcylNr7EkRe6) - [Documentación de rasa NLU](https://rasahq.github.io/rasa_nlu/) - [ChatbotsLife](https://chatbotslife.com/) - [CharbotsMagazine](https://chatbotsmagazine.com/) --- # Grandes noticias - [Rasa Core es Open Source](https://medium.com/rasa-blog/a-new-approach-to-conversational-software-2e64a5d05f2a) - [Documentación de rara Core](https://core.rasa.ai/index.html) --- Dar las gracias y huir