[MUSIC] En este primer práctico lo que veremos es el concepto de vectorización. Que es el inicio de todo el proceso para poder llegar a trabajar con redes de aprendizaje profundo y otros. Bien, ¿qué es la vectorización? La vectorización es el proceso por el cual llevamos un texto no estructurado a un modelo que pueda ser representado y evaluado por un algoritmo de ciencia de datos. Esta es una herramienta que tiene incorporada la librería, la biblioteca SciKit-Learn. Y es muy utilizada y es el primer paso para arrancar todo el proceso de aprendizaje profundo. Bien, ¿cómo es la vectorización? En términos generales, cuando lo llevamos esto a NLP, lo que vamos a trabajar y lo que lo vamos a nombrar es como bolsa de palabras, bag of word. En ella, vamos a tener del conjunto de documentos que tengamos que tener, asumamos que son varias oraciones. Cada oración va a ser una fila que va a estar representada por n columnas. Cada columna es una palabra de una lista única de todo el documento. Y se va a poner en cada celda la cantidad de veces que aparece esa palabra en el documento. Para iniciar con esto, vamos a Instalar la librería pattern de esta forma, que se puede encontrar en la URL que se ve en la pantalla. Vamos a incluir la librería CountVectorizer de sklearn. Para más detalle podemos ver la URL que tenemos en la pantalla. Y luego, generamos todos los cuerpos y todos los include con los cuales tenemos que trabajar. Las stopwords, el word_tokenize, la lematización e incluir Pandas para poderlo ver de forma más entendible. Luego, ponemos el pprint para poder imprimir de forma más clara por la pantalla, y los warnings. Configuramos pprint para ver cómo vamos a imprimir en pantalla. Y después arrancamos you con el ejemplo que nos va a permitir generar nuestra bolsa de palabras. Bien, para esto tenemos tres oraciones en un array. Las cuales como cualquier documento, cada oración tiene distinta cantidad de palabras, y a su vez distintas palabras. Algunas se pueden repetir, otras no, que es lo habitual que pasa en un texto a evaluar. Luego, vamos a configurar el count_vectorizer, que va a ser lo que nos va permitir a nosotros trabajar con nuestra vectorización. Para esto, le vamos a pasar toda la configuración para que en una sola instancia podamos resolver todo. En primer lugar, vamos a analizar las palabras a nivel de palabra, el documento a nivel de palabras. Luego, en caso de que tengamos algún caracter, que es lo que vemos en el encoding de string. Que no sea reconocido, que no falle, sino que simplemente lo ignore. Y que todas las palabras que tengamos las pase a minúscula. Luego de eso, vamos a asignarle las stop words como español que maneje los acentos del español, que los reduzca. Y por último, lo que vamos a hacer es vamos a aplicar un método lambda. El cual a cada palabra lo que se va a hacer es text, que era donde teníamos todas las tres oraciones. Se le va a generar la tokenización a nivel de palabra. Cada una de estas palabras va a ser en un ciclo, por eso tenemos el for. Va a ser evaluada por este if, si la palabra no se encuentra en las StopWords. Si se encuentra, no se va a enviar, pero si no se encuentra, va a seguir el proceso, va a ir a la lematización. Se va a generar la lematización y eso va a ser el resultado que vamos a tener de toda este método lambda es lo que está realizando. O sea, tokeniza, evalúa con la set of words, lematiza y nos da el resultado de palabra a palabra de todo el texto que teníamos. Bien, esto solamente es la configuración. La ejecución se ve en la línea 8, donde le decimos fit y le pasamos el texto, pero you con el objeto count_vectorizar configurado. Y resultado lo obtenemos en data_vectorized. Bueno, en todo este proceso podemos hacer algunas cosas, solamente para verlo impreso de manera más agradable, estamos utilizando el pprint. Pero lo que hicimos es al count_vectorizer le estamos preguntando cuál es el vocabulario, cuáles son la features. Acá es donde tenemos lo que en ciencia de datos conocemos como feature. Acá lo estamos llamando como vocabulario, pero es exactamente lo mismo a fines del trabajo que hacemos en ciencia de datos. Acá lo que tenemos es nuestro conjunto de características, nuestro vocabulario el cual fue para todas las palabras de texts. O sea, para todas estas palabras, fueron unificadas, fueron llevadas a un modelo. Extraídas las StopWords, en la lematización, se hizo la lematización. Y el resultado es lo que estamos viendo en esta lista de diez palabras. Esta lista de diez palabras puedo ver cómo fue el resultado de lo que nos dio el entrenamiento. Bueno, eso lo que nos va a generar es este array. Fíjense donde tenemos tres elementos es nuestra matriz, ¿por qué? Porque fueron tres oraciones. Ahora, la única diferencia es que todas van a tener una misma longitud, ¿cuál es la longitud? La longitud máxima de features de vocabulario que tenía todo el conjunto de documentos que íbamos a trabajar. En este caso son diez acá y si contamos acá, también hay diez. Y el 0 o el 1 es, 0 ausencia de la palabra. O sea, en la primera oración. [MUSIC] La primer feature no estaba, la segunda no estaba, la tercera estaba, deportar que después de la lematización es deporte. Y sí, vemos que está en la segunda posición. Pero un punto que tenemos que tener en cuenta, acá lo tenemos en la tercer posición, ¿por qué? Porque queda ordenado alfabéticamente según lo que nos extrajo las características, nuestro vocabulario ordenado alfabéticamente. Así que, acá tenemos nuestro vector, nuestra bolsa de palabras el cual ahora tiene toda una misma dimensión. Y lo podemos ver fácilmente en la cuenta de cada una de las palabras que tenemos. De una manera más clara, lo podemos ver directamente dentro de Pandas, donde los nombres de las columnas hemos puesto las palabras. Y acá el 0, 1, 2 son cada una de las tres oraciones que teníamos y dónde se encuentra cada una de las palabras. En este caso, tenemos, en ningún lugar que se haya repetido. Pero si lo hubiésemos tenido en la primera oración dos veces la palabra deporte, en vez de un 1 aparecería un 2. Bien, acá tenemos la bolsa de palabras. Acá tenemos el primer paso elemental para hacer el preprocesamiento de datos para arrancar con los modelos de ciencia de datos más avanzados. Redes neuronales de aprendizaje profundo y redes neuronales tradicionales, transformers. Todo arranca con esto. Este es el primer preprocesamiento. Algunas de las cosas que tenemos que tener en consideración es que no respeta, como estamos viendo. El orden de las palabras que aparecen en las oraciones, sino que lo deja en forma alfabética. Con lo cual, acá estamos perdiendo el contexto. El ejemplo que vemos aca es que, por ejemplo, tenemos no, tengo dinero, va a ser igual para el que no tengo dinero. Porque como rompe el orden y saca ahí la coma van a ser dos oraciones que son exactamente lo contario, pero para el modelo va a ser lo mismo. Para evitar esto, en estos primeros casos, se puede generar nuevos tokens. Por ejemplo, no tengo dinero, se lo transforma en no tengo como un nuevo token para que sean dos oraciones distintas. Y otro problema que tenemos que no podemos observar acá, es la alta dimensionalidad. Si tuvieramos muchas palabras, tendríamos muchas columnas. Pero además, sería una matriz dispersa, ¿por qué? Porque muchos de los campos que vamos a tener de las columnas, van a tener valores en 0. Entonces, es una forma rápida y fácil de hacer un preprocesamiento. Para continuar trabajando con los modelos de ciencia de datos, pero es un modelo no eficiente. Es por eso que a continuación veremos en el próximo video el Term Frecuency- Inverse Document Frequency. Que es una mejora que se le aplica a la bolsa de palabras tradicional. Con esto, damos por finalizado el presente video. [MUSIC]