Nuevos proyectos y Python Toolbox 1

Hace ya unas semanas que no escribo nada y no me gusta. Este blog me permite poner en orden mis ideas y nuevos conocimientos y, la verdad, creo que me resultaba super útil, así que voy a intentar volver a escribir con regularidad. La razón por la que he dejado de escribir estas últimas semanas ha sido que en el trabajo me han asignado un nuevo proyecto y estaba a tope.

Nuevo proyecto: creación de datasets

En este nuevo proyecto que me han asignado estoy creando automáticamente datasets para lueg entrenar un sistema de extracción de intenciones. El objetivo es saber qué está pidiendo el usuario. En concreto, me centro en intenciones en el dominio de soporte informático (IT). Por ejemplo: ¿Quiere que le cambien el portátil? ¿No puede conectarse a internet? ¿Tiene un problema con su teclado?

Pero, antes de entrenar, lo que estamos haciendo es crear un dataset de posibles preguntas que puede hacer el usuario para pedir/preguntar todas esas cosas. Para crearlo estoy usando Chatito, una herramienta de código abierto, que genera conjuntos de datos (datasets) que luego podremos usar para entrenar el sistema.

El input de Chatito son nuestros posibles patrones, es decir, las posibles frases que el usuario puede usar para plantear esos problemas/peticiones al servicio técnico. El output son una serie de documentos JSON que pueden estar en formato RASA NLU, Flair, LUIS o snips NLU. En nuestro caso, vamos a trabajar con RASA NLU, así que cacharrear con este framework está ya entre mis deberes.

Python toolbox 1

Aparte del proyecto que comento, hoy continúo mi proceso de aprendizaje con DataCamp, con el curso de Python toolbox 1. Mi objetivo es completar los 4 cursos de Python que eran requisito del curso Natural Language Processing Fundamentals with Python, también de esta misma plataforma.

Este curso está compuesto de 3 módulos. El primero está dedicado a escribir tus propias funciones. Como antes, en algunos de los módulos de los cursos anteriores, ya sé cómo se hace, pero siempre aprendo algo nuevo y más dirigido a la ciencia de datos, no en general como en otros cursos que hice en el pasado.

Qué he aprendido hoy
  • Definir una función propia con un parámetro y devolver (return) un valor (vídeo 1)
def square(value) # function header with a parameter "value". Signature of the function
    new_value = value ** 2    
    return(new_value)

valor = square(4)  ## así llamamos a la función, usando un argumento concreto, en este caso 4.
print(valor)
  • Definir una función propia con más de un parámetro (vídeo 2)
def square(value1, value2)
    new_value = value1 ** value2
    return(new_value)

valor = square(4, 2)
print(valor)
  • Primeras nociones de tuplas: Son similares a las listas ya que pueden contener distintos valores, pero son inmutables, es decir, una vez creadas no podremos cambiar sus valores. Las tuplas se construyen con los paréntesis. (Recuerdo: los diccionarios los creábamos con {} y las listas con [] )
numeros_pares = (2, 4, 6) ## creamos una tupla

a, b, c = numeros_pares ## empaquetamos cada elemento en una variable

numeros_pares[1]  ## accede al segundo elemento de la tupla
print(numeros_pares) ## los imprimirá todos en pantalla

Y, hasta aquí llegamos por hoy (50% del primer módulo hecho), que tengo que volver al proyecto!

Día 3: Regular Expressions & Word Tokenization

Hoy me he inscrito en Data Camp. He visto que hay algunos cursos específicos de Python con NLP. Justo lo que necesito ahora mismo. La suscripción a los cursos es de unos 33$ al mes, así que me parece razonable también.

He empezado el curso «Natural Language Processing Fundamentals with Python«. Estoy con el módulo 1, que es gratuito: Regular expressions & word tokenization. Algunas de estas cosas ya las sé, pero me ha obligado a crearme un Jupyter Notebook nuevo y empezar a trastear. Ya vale de lecturas y podcasts!

¿Qué he aprendido hoy?

REGEX con Python (siempre había trabajado con Regex en Perl)

  • El módulo de Python para expresiones regulares es «re»: import re
  • re.split: nos permite usar la expresión en REGEX como separador. Lo más común es usar el espacio como separador. Por tanto,
    • re.split(‘\s+’, ‘Split on spaces.’) => [‘Split’, ‘on’, ‘spaces.’]
  • re.findall(regex, string) => encuentra todos los casos de esa regex en el texto o string dada.
  • re.search(): el patrón que busquemos puede estar en cualquier parte del string/documento.
  • re.match(): el patrón que busquemos tiene que estar al principio del string.
    • if you need to match at the beginning of the string, or to match the entire string use match. It is faster. Otherwise use search.

TOKENIZATION con Python

  • Un módulo que podemos usar para tokenizar es NLTK.
  • Simplemente lo importamos en Python (import nltk) y dentro de él, usaremos el tokenizador: from nltk import word_tokenize
  • Lo usaremos así: word_tokenize(«Hi there!»)
  • Otros módulos de NLTK que podemos usar para tokenizar el texto:
    • sent_tokenize: separa todo el texto en frases.
    • regexp_tokenize: separa un texto o un string en base a una Regex que le indiquemos.
    • TweetTokenizer: especial para tokenizar tweets (hashtags, menciones, etc.)

Otras notas:

  • Buscar el tutorial de cómo crear un chatbot usando RASA NLU: te dice paso a paso cómo crear y entrenar tu chatbot usando Spacy así que me parece muy interesante para hacerlo como ejercicio.