Un vector por tu palabra
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Part Number | 115 | |
Number of Parts | 169 | |
Author | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/21178 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
00:00
WordBinary fileWave packetData modelVector spaceKernel (computing)Computer fileView (database)Gamma functionAlgorithmNumberAddress spaceMachine learningGenderFormal languageProcess (computing)Spring (hydrology)Reduction of orderSanitary sewerCompilation albumLibrary (computing)SoftwareInternet forumComputer programmingTexture mappingWitt algebraTwitterAuthorizationoutputToken ringCountingUniform resource locatorFlagExecution unitInversion (music)Observational studyNormal (geometry)FingerprintFunction (mathematics)Natural numberConvex hullMultiplication signNatural languageComputer scienceTwitterFrequencyOrder (biology)WordMetropolitan area networkStreaming mediaIntrusion detection systemCubeCodeSoftware testingGene clusterRight angleLibrary (computing)NumberProcess (computing)Uniform resource locatorJust-in-Time-CompilerVector spaceMachine learningGenderInheritance (object-oriented programming)Binary codeToken ringIntegrated development environmentSlide ruleMobile appLink (knot theory)Computer fileInternetworkingTouch typingGraph (mathematics)AlgorithmSoftware repositoryKey (cryptography)Programmer (hardware)Flow separationMereologyStudent's t-testCountingComputer virusReduction of orderPersonal digital assistantDiagramWhiteboardDistribution (mathematics)HyperplanePresentation of a groupSet (mathematics)Group actionComputer animation
07:42
Computer fileKernel (computing)Dimensional analysisArmMechatronicsSinguläres IntegralWordView (database)Optical disc driveRepresentation (politics)Read-only memoryAlgorithmNegative numberData modelMenu (computing)DiagramDean numberVector spaceInterior (topology)Physical systemModal logicSampling (music)InformationSystem programmingSource codeTelnetProcess (computing)Moment of inertiaComputer wormEmailContinuous functionMathematical optimizationSmoothingComa BerenicesReading (process)Axonometric projectionNoiseHierarchyNatural languageSoftware testingWordSet (mathematics)Artificial neural networkPhysical systemContext awarenessSoftwareScripting languageoutputWater vaporProgrammer (hardware)Einbettung <Mathematik>Wave packetPosition operatorEndliche ModelltheorieWindowAnalytic continuationDistribution (mathematics)TwitterNoise (electronics)Negative numberVector spaceSampling (statistics)Moving averageLengthProcess (computing)MathematicianComputer-assisted translationAlgorithmSimilarity (geometry)Representation (politics)Multiplication signMedical imagingMathematicsSpacetimeLibrary (computing)Functional (mathematics)Computer animation
15:23
Data miningVector spaceAlgorithmUnsupervised learningSpacetimeLinear mapModal logicMatrizenzerlegungContext awarenessLocal ringAxonometric projectionEinbettung <Mathematik>Data dictionaryNumberNP-hardNewton's law of universal gravitationComa BerenicesComputer wormPlot (narrative)View (database)Computer fileSparse matrixMathematicsProxy serverExecution unitToken ringAsynchronous Transfer ModeoutputData modelThread (computing)CodeWordCartesian coordinate systemStapeldateiFamilySet (mathematics)Representation (politics)Linear regressionNatural languageEndliche ModelltheorieSimilarity (geometry)NumberRight angleToken ringTwitterPoint (geometry)Semiconductor memoryEqualiser (mathematics)DivisorSoftware testingVector spaceWordSoftware bugMatrix (mathematics)Digital photographyGoodness of fitNetwork topologyMathematicsDifferent (Kate Ryan album)InformationDimensional analysisComputer programmingHyperplaneData dictionaryRandomizationGraph (mathematics)Sampling (statistics)Reduction of order1 (number)Context awarenessBitVirtual machineParallel portVideo gameProcess (computing)Wave packetRevision controlComputer animation
23:05
MechatronicsWindowGreatest elementMotion blurAreaView (database)Computer fileHand fanLaptopKernel (computing)Interior (topology)AnalogyReading (process)MaizeAxonometric projectionNoiseConvolutionBeta functionLie groupMultiplication signFunctional (mathematics)1 (number)AverageConnected spaceMathematicsAlgorithmWordVideo gameVector spaceNumberProgrammer (hardware)Library (computing)TwitterSampling (statistics)Set (mathematics)Position operatorLine (geometry)InformationRepresentation (politics)ResultantPhysical systemBitImplementationComputer architectureSimilarity (geometry)Parameter (computer programming)Flow separationFilter <Stochastik>Context awarenessPoint (geometry)Graphics tabletLevel (video gaming)Metropolitan area networkDifferent (Kate Ryan album)Medical imagingoutputChainLogarithmFormal grammarTheoryComputer animation
30:46
CodeKernel (computing)Computer fileView (database)MaizeReading (process)Axonometric projectionNoiseFormal languageComputer animation
31:14
WordError messagePhysical systemData conversionParallel portGroup actionBridging (networking)CASE <Informatik>TwitterTranslation (relic)Set (mathematics)Binary codeOpen sourceKonturfindungExtension (kinesiology)Medical imagingEndliche ModelltheorieImplementationMaschinelle ÜbersetzungLinearizationBitFormal language
Transcript: Spanish(auto-generated)
00:02
Muy bien, continuemos con el segundo tema de este bloque. Recibamos ahora a Maite Jiménez con su ponencia que recibe el nombre de Un Vector por su palabra. Hola. Bienvenida. Pues primero que nada, presentarme. Yo soy Maite Jiménez, me podréis encontrar en todas estas redes sociales.
00:21
Soy estudiante de doctorado de la Universitat Politécnica de València y formo parte de la Asociación de Paisa en España. Ahí tenéis un link para saber qué hacemos, para haceros socios. Pero como estamos aquí, podéis venir a Yamila, a Juanlu o a mí a preguntarnos, buscarnos por Twitter. Pero si sois muy tímidos, porque yo soy muy tímida aunque no lo parezca,
00:40
podéis clicar ahí y luego preguntarnos por Twitter y esas cosas. ¿Dónde están las slides? Las slides están en ese repo. Y esto viene a coalición de mi charla. En mi charla os voy a contar que la ciencia está rota. Intentaré no decir estas cosas. La ciencia está rota porque si los informáticos fuéramos científicos y modeláramos la física,
01:04
el péndulo no rozaría ligeramente a Neil deGray de Tyson. Le haría otra cosa. Entonces, yo vengo a contaros por qué la ciencia está rota. Y lo voy a hacer de una manera científica, porque los científicos probamos las cosas de manera científica. Entonces, vamos a describir un problema, vamos a evaluar un entorno de trabajo
01:23
y vamos a probar que realmente las cosas no funcionan. Vale. Pues supongo que si habéis visto alguna charla de Machine Learning, habéis visto este súper diagrama de Scikit-learn. Scikit-learn es una librería de Aprendizaje Automático que tiene algoritmos de clasificación, de regresión, de reducción de la dimensionalidad y de clustering.
01:43
Genial. ¿Qué comen todos estos algoritmos? Números. ¿Y qué queremos hacer los científicos que trabajamos con el proceso dentro del lenguaje natural? Leer palabras. No entra, no entra. Lo siento. Así que, lo siento mucho, pero el lenguaje natural no está pensado para el Aprendizaje Automático.
02:04
Pero no os preocupéis. Seguro que todos habéis oído. A ver, una prueba rápida. ¿Quién ha oído hablar de Word2vec, TensorFlow, Ricehands? Vale, Word2vec está roto. Y os lo voy a probar aquí de manera empírica. Para no contaros esto de la representación de texto de manera...
02:21
Me mojo mucho porque aquí no os veo. Para no contaros esto de manera así en el aire os voy a hablar del problema de la clasificación binaria de género. El primer full disclaimer. La ciencia está rota y la clasificación binaria de género más. No existen dos cubos en los que puedas poner a las personas.
02:41
Y antes tendría que contarnos qué es este problema. Nosotros cojamos un stream de texto de una persona y decimos OK, pues por tu estilo de escritura, por tu vocabulario, creo que eres hombre o creo que eres mujer. De manera totalmente automática. Esto va muy bien para marketing, para psicología, etcétera, etcétera. Y esto es el artículo esominal. El de Schrodinger y Pennebacher.
03:00
Pennebacher es el famoso del grupo. Y tenemos esta distribución de palabras. Aquí no veis el caption de la tabla. Esta es la distribución de palabras. Y el estándar error por género. Entonces resulta que las mujeres no googleamos, no vivimos en India y no programamos. Y los hombres no tienen madres, no lloran y sobre todo no se asustan.
03:23
Es algo como curioso. Entonces este problema está roto porque en realidad no están haciendo clasificación por género. En realidad lo que están haciendo es clasificación por tópico, que es algo muy fácil de hacer. Es decir, vale, estas palabras aparecen en este conjunto de datos y estas no. Hiper plano separador. Fin de la historia.
03:42
Pues no. Entonces como a mí este corpus no me gusta nada y tengo revisores que me dicen que no, es el mejor. Cogemos nuestros propios datos. Twitter tiene una... Python tiene una librería para recoger directamente por Twitter. Yo os he dejado este fichero preparado, más o menos, para que pongáis vuestra apk y vuestro token.
04:03
Cuidado con los JIT. Luego buscas Internet y los JIT están llenos de claves preparadas de gente. Cuidado, que os he hecho Twitter con razón. A mí me ha hecho varias veces, pero quiero decir, tenía motivos. Vale, entonces, ¿cómo íbamos a arreglar lo de la clasificación de género?
04:22
Pues vamos a coger a estos diez hombres, estas diez mujeres, estos diez programas, estas diez seis programas, que todos son de la comunidad de Python y que deberíais seguirlos a todos del tirón ahora mismo porque mola mucho y vamos a recoger sus cien últimos tweets. Vale, una de las cosas que es un auténtico rollo,
04:43
pero que tenemos que hacer, es limpiar los datos. Lo que hacemos son... Las expresiones regulares, aquí a casco porro, para cambiar los nombres de usuarios. No os interesa... Es importante anonizar los conjuntos de datos. Cambiamos las urls porque no tienen información relevante.
05:00
Y esto que nos gusta tanto escribir en Twitter, estas repeticiones las reducimos a las dos últimas letras. Y ya está, genial. Lo tenemos listo. Cogemos Pandas, que es una librería muy chula, y lo metemos en un CSV. Bueno, aquí tenéis Pandas.
05:22
Una cosa que tenéis que hacer cuando queréis que un experimento sea replicable, porque todos queremos que nuestros experimentos sean muy replicables, es compartir los datos. Leeros el acuerdo de Twitter, pero así, en resumidas cuentas, te permite compartir los IDs de un conjunto de datos, pero no el dataset completo.
05:40
Entonces, devuelves todos los tuits y dejas el código Python, si quieres, para que los puedan descargar de manera automática. ¡Celebramos! Antes de ponernos a hacer nada en serio, vamos a estudiar nuestros datos. Entonces, otra librería muy chula, la tenemos en LTK.
06:01
Vale. Aunque las stop words, cada vez que diga una palabra rara, luego me lo podéis preguntar. Las stop words son palabras vacías de significado, es decir, pronombres, adverbios. Todas esas palabras no importan realmente en lo que estás diciendo, sino que son palabras funcionales, ayudan a organizar el lenguaje, el discurso en realidad.
06:21
Entonces, para ver el vocabulario, las eliminamos. Todos los números distintos los cambiamos a números, y generamos nuestro vocabulario con counter. Una estructura de datos muy mola, una de collections, que nos devuelve la clave de la palabra y el número de veces que aparece. Tenemos una frecuencia por vocabulario. Entonces, vale.
06:41
Sacamos nuestros brotwits y nuestros assistwits y vemos que en este caso las cosas han cambiado completamente. Ya no tenemos palabras distintas entre los programmers y las sysgrammers, porque, obviamente, el tópico es el mismo. Entonces, aparece Python, aparece PyCon, aparece echarlas. Lo que esperamos cuando realmente el problema
07:01
es lo que tiene que ser. Ahora estamos realmente intentando clasificar entre hombres y mujeres en un problema duro, de verdad. El estilo cuenta, la forma en la que tengamos cuenta. Entonces, vamos a aplatarlo, porque los humanos somos muy malos con los números.
07:21
estas son las las 50 las 50 palabras más comunas por programmers y sysgrammers. Y veis que todos están más o menos igual. Lo que yo me di cuenta en este gráfico es que la frecuencia es ligeramente superior en los programmers que en las sysgrammers. Vale.
07:41
Igual ahí tenemos una pista. Entonces, vamos a ver la longitud de los twits, de los programmers y de las sysgrammers. Pues, en general, vemos que esto es una gausiana que tiene el piquito en la media. Vemos que los programmers se estiran un poquito más hacia el final y apuran un poquito y las sysgrammers la distribución es más o menos uniforme.
08:02
Es más una gausiana típica. Lo cual nos indica que igual por ahí tenemos una pista. Igual los programmers hablan más largo y las sysgrammers son más cortitos. Y voy a coger agua antes de morir.
08:20
¿Qué cosas tenemos que hacer? Bueno, dame un segundo antes de morir. Hay una cosa sacrosanta en el data science. Separa los datos en dos. Un conjunto de entrenamiento en el cual evaluas los imperparámetros, montas
08:41
una arquitectura de redes normales, haces lo que quieras con ese conjunto de datos y luego un conjunto de test. Ese conjunto de test no se toca. Caca. No. Nada. No se evalúa, no se prueba. No sé nada. Cuando tengas el sistema perfectamente entrenado coges el test y lo evaluas. Así sabes si en el mundo salvaje tu sistema es
09:00
bueno o no lo es. Esta es la forma más sencilla. Si teniendo los poquitos datos que tenemos igual sería mejor hacer un cross validation pero se va fuera del ámbito de esta charla. Y ahora vamos a embeber nuestros datos en los sistemas de aprendizaje automático. Imaginemos que tenemos
09:22
estas tres frases. I love Python, I love NLP, by ladies are cool. Tenemos que bloquear el área de I love Python, NLP, by ladies are cool. Siete palabras. Genial. Nos montamos un vector de tamaño 7 y ponemos un 1 cada vez que la palabra aparezca. Genial, ¿no? Entonces, ¿cuál es el problema?
09:42
Hay varios problemas. Las palabras movistas. En el test hemos dicho que no se tocaba, que no se veía nunca. Entonces, puede ser que hayan palabras que no hayamos visto y no tendrán representación en el vector. Eso es muy malo. Luego, otra cosa es que la one hot representation
10:02
no tiene en cuenta la similitud de la palabra. Por ejemplo, hotel y motel tendrían estas representaciones que si haces la unión de los dos vectores la similitud es 0. Mal, porque palabras como hotel y motel deberían aparecer en contextos similares. Por lo tanto, tenemos un problema.
10:21
Sí, Angry Cat tiene razón. Vago Fortuna también. Y luego tenemos la maldición de la dimensionalidad. Me gusta mucho esto porque es como una maldición que nos han echado los matemáticos a los informáticos y que tenemos que vivir con ellas. Bueno, pues la maldición de la dimensionalidad nos dice que si estamos en un espacio
10:42
unidimensional necesitamos ver unas poquitas muestras para verlo. Cuando nos vamos al bidimensional ya vemos que no era tan fácil como estábamos preyendo. Necesitamos muchas más muestras para ser capaces de diferenciar entre una y otra posición. Y cuando nos vamos a tridimensional necesitaremos
11:01
muchísimas más muestras. Tenemos mil tuits. No estamos mostrando todas. Entonces, es muy importante conocer estas cosas porque luego cuando entrenemos un sistema y conozcamos el sistema sabremos dónde está fallando. Vale. Pero Scikit Learn tiene implementado
11:21
un con vectorizer. Entonces simplemente le decimos Vale, Scikit Learn, molas un montón. Genérame este supervector con palabras, engramas. Engramas es cuántas palabras quiero. Si voy de una a una iré de palabra a palabra. Pero podríamos ir de una a tres y tendríamos una ventana deslizante sobre las palabras que fuera de tres en tres
11:42
y fuera corriendo. Y generamos nuestro vector de entrenamiento y nuestro vector de tres. Vemos que es un vector de 4.060 posiciones con un conjunto de datos extremadamente pequeño. ¿Y qué es un bug of words? Es esto.
12:01
Había un juego muy chulo en Jpot que es Spot the One. Si encontráis el uno habéis visto unos, ¿no? Pues hay pocos. Entonces, esta es la maldición de la dimensionalidad. Necesitamos tweets para recorrer todas esas
12:21
que llenen todas esos posiciones del vector y que sean lineamente seraparables. O sea, un desastre. Y aquí viene nuestro colega Mikolov a salvarnos la vida. Bueno, primero, para mí es muy importante reconocer los científicos que nos están haciendo avanzar. Y Mikolov es un gran tipo. Pero la idea está de los
12:40
Warden Beddings y el Ward2Beck. No es nueva. De hecho, Joe Hafferth tiene un artículo en el 57 que dice conocerás una palabra por la compañía que mantiene. Entonces, ¿qué intentaban hacer? Esto es una historia más vieja que el procesamiento del lenguaje natural. Calculas la probabilidad de una palabra en función de las palabras que tienen al lado.
13:00
Y se ha hecho de mítiples maneras. Con modelos de Markov, con redes normales, con muchas cosas. Vale. Ward2Beck. Primero, necesitamos hablar. Un momento. Esto es una intervención. Ward2Beck no es un algoritmo. Es un conjunto de algoritmos. Cuando hablas de Ward2Beck, normalmente estás hablando de un modelo de scriptogramas entrenándose con ruido negativo.
13:23
¿Qué más? No es el sagrado real y, de hecho, lo voy a demostrar de aquí de manera empírica porque va a fallar. Y es muy importante. Yo sé que la librería está ahí, que la podemos gastar, que es muy chula. Pero es muy importante saber lo que estamos haciendo. Este es un artículo de Mikolov que da origen al Ward2Beck.
13:40
Bueno, es el de Ward2Beck. Y a partir de eso hay bastantes más. Es muy importante que, aunque os leáis la documentación, también leáis las matemáticas que hay detrás y las intentemos comprender entre todos. Porque si no, pasarán cosas que no queremos que pasen. Vale. Ward2Beck. Hemos dicho que son dos modelos. El Continuous Bug of Words y el SkipGround Model.
14:02
Son uno para arriba y uno para abajo. Me voy a poner la imagen porque es más fácil que os lo enseñe así. Vale. El Continuous Bug of Words. Esto es la entrada a la render oral. Este es el Buffers porque va hacia arriba. Pero luego el SkipGround se va hacia abajo. Esta es la entrada a la render oral. Ahí hay una higher layer
14:22
que puede ser un montón de cosas. Vamos a imaginar que es una render oral con un autoencoder normal y corriente. Y lo que hace es prohibir la probabilidad de que le aparezca la palabra mat cuando tenemos de entrada theCatSitsOnD. Entonces, hace eso muchas veces. Vale. Ok. Lo tengo. La probabilidad de que aparezca la palabra mat
14:41
es 0, 0, 6 en este contexto. Vale. Y el SkipGround hace lo contrario. Calcula la probabilidad de la palabra mat. No. La probabilidad del contexto theCatSitsOn teniendo como entrada mat. Os he perdido mucho. Y se entrena de dos maneras. Mediante un hierarchical softmax
15:01
que arriba le colocas una función softmax que lo que hace es normalizar pone una especie de gausiana y normaliza las probabilidades de manera jerárquica. Tiene una rola de definición. Pero el que se gasta es el negative sampling. Vale. TheCatSitOn de mat es una muestra positiva. Y theCatSitOn de yuju es una muestra negativa. Esa frase no tiene que estar en el vocabulario.
15:21
Y a partir de ahí ajusta las probabilidades de las palabras. Vale. Y esto es Word2vec. Pero no es todo. La buena gente de Stanford Penitent Software y Manning. Manning tiene un libro de procesamiento de lenguaje natural que os recomiendo encarecidamente porque es muy muy bueno.
15:42
He encontrado la ciencia detrás de esto. Porque lo malo del artículo de Word2vec es que hay mucha magia negra. A los ingenieros no nos debería gustar nada la magia negra. Deberíamos querer romperlo y saber lo que hay dentro. Vale. Entonces lo que hacen Word2vec es sacar un poquito más de la ciencia
16:01
y lo que hacen es una global matrix o sea, lo que hacen Word2vec lo que tenía era una cuenta y una factorización de matrices. Dice la gente de Stanford. Que la factorización de matrices la sabemos hacer muy bien. Y tenemos ciencia muy buena para eso. Y luego además teníamos un modelo que era el LDA que también era muy bueno. Pues vamos a combinarlo con un modelo
16:22
LocLinear que intenta pesar las dos cosas. La probabilidad del contexto y la probabilidad de la frase entera. Porque el contexto es una cosa muy pequeñita. Pensaba que si no, no podríamos tener todo el vocabulario en memoria. Sería una locura. Y entonces aquí tenemos esta super... Ay, no cabe entera. Qué pena.
16:42
Bueno, la cuestión es que si proyectamos las representaciones vectoriales de dos palabras, vemos que hay una relación entre ellas. Por ejemplo, aquí Sister and Brother tiene el mismo movimiento vectorial que New Union guys. Y más o menos palabras con contextos similares. Sister, nice and aunt son palabras de familia.
17:01
Acaba en un espacio vectorial parecido. Vale. Esto es mucho mejor que el workforce donde las palabras no tenían ningún sentido entre sí. La representación de las palabras. Y esto es lo incluido porque a mí me hace mucha gracia. Es que la primera versión del artículo de Globe tenía... La matemática era espectacular, pero luego
17:21
la evaluaron muy mal. O sea, la experimentación que hicieron no era exactamente la mejor. Entonces, es un documento en Word donde un científico pregunta, el soccer contesta, y así un poquito de drama que alegra mucho la vida. Vale. Entonces, vamos a... Globe nos da palabras preentrenadas.
17:42
Entonces, ellos han cogido stream de Twitter, así, a lo loco. Y han entrenado un modelo de palabras. Lo bueno de todos estos modelos, tanto de Word2b como de Globe, es que son unsupervised. Es decir, no necesitan que oye una persona diciendo, esa palabra es esto, esta palabra va metiendo y
18:01
si las palabras aparecen juntas, entonces dicen que tiene una probabilidad similar. Entonces, cargamos nuestro diccionario, que es un diccionario de palabra a valor, para competir en igualdad, lo hacemos con las de 100, y tenemos 25, 100, 50 y 200. Pero bueno, en la web lo podéis ver.
18:22
Y ahora vamos a hacer lo que hemos hecho antes. Vamos a conseguir y a plotear las palabras más frecuentes. Ese gráfico que habéis visto antes es un TSM que hace una reducción de la dimensionalidad. Y se inicializa con PCA, más o menos, para que pensáis, es parecido a PCA, muy muy similar. Lo que hace es, tengo 100 dimensiones y lo aplasto contra dos.
18:41
Obviamente se pierde mucha información en el camino, pero nos permite a los humanos, que no podemos ver más allá de dos dimensiones, percosas. Bueno, tres o seis, si me apuras. Vale, y tenemos esta representación. Aquí ya vemos que, bueno, lo que intuíamos antes, el vocabulario de los programas y las esgramas está pegadito.
19:01
No hay diferencia. Vale. Y aquí vemos que Python, GPUs, tengo ejemplos que molan. Foto París, están juntos, supongo que se hacen muchas fotos en París. Amazing, fantastic, ok, eso tiene sentido. Wonderful, son palabras de positivas, agendivos, genial.
19:21
Tiene sentido que estén juntas. Vale. ¿Qué problema tenemos con estos vectores preentranados? Que tenemos muchas palabras que no se han visto. Si en el stream de datos de Twitter no estaba, pues no se ven. Entonces claro, pues Shoker mola mucho, pero no ha cogido a gente de la comunidad Python porque no está
19:42
PyConf, Toolkit, Hyperparameter, Hyperparameter debería estar, bueno. Sí, vaya, SciKiller, Scikit no está. Pues es bastante normal que si coges un stream común hayan palabras que no se hayan visto. Vale. Pues vamos a generar también nuestra propia representación. Ya tenemos
20:01
el conjunto de datos representado con el bound of words y vamos a representarla también con GloVe. Entonces los tokens son porque Number está entrenado en GloVe, pero el número 23 no. Así que queremos que nos dé una representación vectorial.
20:20
Vale. Un full disclaimer. Otro. Si veis una lista es un error. Debería ser un umpaya ray. Vale, ya está. Vale. Pero Maite, me has dicho que podíamos representar nuestros propios datos. Vale. Vamos a usar Word2B. Word2B que está implementado está implementado en C. Ahora está
20:42
importado a TensorFlow que se ha hecho pensor a partir de 2012. Pero una cosa tenemos que hablar. Si queremos utilizar TensorFlow vamos a tener que volver a reservar memoria. Es un precio a pagar. Es un precio totalmente justo. Pero bueno. Para hacer juegos está implementada en la librería Jensin y de hecho
21:01
prácticamente toda la ciencia lo está utilizando. Entonces le decimos vale. Entráname con el train porque hemos dicho que el test no se ve pero nada. Entráname con cuatro hilos porque mi pobre Mac no tiene más. De tamaño 100 porque vamos a comparar en igualdad de condiciones GloVe que teníamos un vector de 100 con 100. Y además queremos que no me quites ninguna
21:21
palabra porque por ejemplo si una palabra aparece muchas veces podemos intentar suavizar su probabilidad o podemos intentar eliminarla. Como este conjunto de datos es muy pequeño vamos a intentar evitar eso. Aún así el vocabulario que tenemos es de 4193 palabras y de dimensionalidad 100. Y sí, es un payarraí.
21:42
Vale. Y vamos a ver el TSN de Wurtubeck. ¿No os da la impresión de que esto va un poco raro? Toda la probabilidad se ha ido a un bloque y además no tiene ningún sentido prácticamente. Numbers, science con today, better con
22:02
astil. Pero me has dicho que Wurtubeck molaba. Ya, pero yo se he dicho que os iba a demostrar que no. Wurtubeck en cambio tiene una cosa muy chula que es que te puedes decir qué palabras son las más similares a otra. Como tenemos Python entrenado lo que hace es buscar los vecinos más cercanos en el espacio vectorial y nos devuelve la similitud con esta palabra.
22:21
Y vemos que las palabras más cercanas son de, a, tu, son stop words. No deberían de estar ahí. En cambio están. Porque ahora se os voy a explicar por qué. En cualquier caso, vamos a ponerlos a trabajar. Representamos otra vez el Wurtubeck en nuestro train, nuestro test con Wurtubeck
22:42
y los ponemos a competir. Como no me quería meter en explicar los algoritmos de aprendizaje automático, simplemente deciros que voy a utilizar una máquina de soporte vectorial que lo que hace es si tenemos un plano, busca un hiper plano separado. Tenemos las muestras representadas, y busca un hiper plano separado.
23:01
Es el más justo porque, por ejemplo, random trees da un poco más igual a la representación. Este es totalmente dependiente de la representación. Lo cual también es importante que sepamos que está haciendo el algoritmo para alimentarlo con las cosas que sean correctas. Y vemos que el número que tiene que interesar
23:20
es el F1 score, que es como una relación de compromiso entre los two positive y los false. Con los que aciertas, contra los que no deberías haber acertado. Y ahí tenemos una beta que ajustar, pero bueno. Y vemos que Wurtubeck
23:41
y backwards va igual de mal. Y eso es un warning que en teoría está solucionado y no se hay que leer, pero no. Y es que cuando no acierta ni uno, pues te dice, igual la métrica no está bien definida. No, no está bien definida. Es que el algoritmo no ha dado ni una. Vale. Y como de nuevo los humanos los vemos mucho mejor las cosas
24:00
con gráficas, vale, la línea gris de puntos es lanzar una moneda al aire y decir, es hombre o es mujer. Ok. Y las líneas que van por debajo es hacer lo peor que eso. El algoritmo ideal iría por la esquina derecha o superior. Haría una curva por encima. Entonces vemos que Wurtubeck
24:20
no funciona. Que va igual de mal, además, que el Bauford que es una implementación súper rápida, súper eficiente, porque no hace absolutamente nada. Y que el preentrenado de Globe está funcionando bastante mejor. Y entonces, ok, la ciencia está rota. No, vamos a hablar de dos cosas.
24:42
Yo os he dicho que Skipgramas era bueno si teníamos un conjunto de datos grande, pero aquí no tenemos un conjunto de datos grande. Por lo tanto, estamos bastante fastidados. También os he dicho que el Wurtubeck había que entrenarlo, no tenemos datos suficientes. En cambio, Globe viene
25:01
preentrenado con datos de Twitter, con lo cual la similitud es bastante similar entre unos y otro vocabulario. Y luego, ¿qué más? Vale, que conozcas vuestros algoritmos. Ay, ostras, me he dejado como una trozo entero. Vale, vaya a recapitular. Lo que hacíamos para representar una
25:21
palabra, un tweet, era tengo la representación de un vector de cien de esta palabra. Un vector de cien de la siguiente, tal, tal, tal, tal. Vale, imaginaos si un tweet tiene cinco palabras y otro tiene diez. Pues acabaríamos con un vector de quinientos y con un vector de mil. Pero los algoritmos comen números y de input siempre, siempre,
25:41
siempre fija. Entonces, ¿qué hacemos? Pues lo que está haciendo la ciencia ahora mismo, que es un desastre, es sacar la media. La media de un vector. Me igual la vida. Aunque eso, ese vector lo que tenía era la probabilidad de aparición de una palabra en función de su contexto. Cuando haces la media, estás rompiendo absolutamente toda la ciencia que hay detrás. Entonces,
26:01
no hagáis eso, por favor. Cuando revisáis el código, miradlo y luego leed artículos y veréis que la gente lo hace. Pero no se debe hacer. Entonces, ¿qué estamos haciendo nosotros? Nosotros estamos haciendo una convolucional. Lo que hacemos es generar una... Cada palabra tiene su vector y generamos una especie de imagen.
26:20
Si al fondo nos queda una tweet de diez palabras, pues rellenamos hasta diez. Un tweet de cinco palabras rellenamos hasta cinco y abajo ponemos un padding de cero. Se lo damos a una convolucional que aprende los filtros que debes poner ahí y eso sale y ya puedes entrenar lo que quieras. Arriba lo que se está poniendo normalmente es una softmax que
26:42
suaviza la probabilidad. Vale, y he ido super deprisa porque ya está. Vale, la conclusión que quiero que os quedéis con esta charla. Las luverias son maravillosas. Están muy bien. Pero... Stay hungry, pero no estéis tontos. Leed los algoritmos,
27:01
aprended las matemáticas, no digáis ok, una relu, me da igual. No, no es lo mismo. La implicación que tiene, la función logarítmica que pones en medio implica mucho cómo salen los resultados. Por eso esta ciencia no es que esté rota, es que yo os he engañado.
27:20
Porque Word2vec va muy bien si lo entrenas con los datos apropiados. Y muchísimas gracias, no me preguntáis lo que creáis y nos vemos en la PyCon de Almería. Ok, ahí está. Perdón, he ido muy deprisa.
27:41
Gracias Maite por toda esta valiosa y práctica información que nos has traído hoy. ¿Preguntas por aquí? Tenemos unos cinco minutos para dar preguntas. Vale, esto era mucha matemática para mí. Pero he entendido, el problema con el conjunto de datos es que es Twitter, ¿verdad? Que es muy cortito.
28:02
A ver, cuando tengas más datos sacas más contexto y eso es genial. Pero hoy en día lo que quieres es gestionar Twitters. Entonces no es un problema de aquí yo he cogido 100 tweets por persona entonces son 1000 tweets por programmer y 1000 tweets por cisgrammer. Lo que debería haber hecho es coger
28:21
100 millones o 100 mil millones y lo que se hace ahora mismo es tener un algoritmo entrenado con un conjunto de datos salvaje. No es por el tamaño, sino por el número de datos que metes a la cadena. Y luego además hay una cosa que se llama Active Learning, es que muy bien, yo tengo este algoritmo entrenado. Pues cada vez que llega una muestra nueva tu ajustas un poco
28:41
los parámetros. Llega esta muestra y es de un programmer, pero es que resulta que todas las características que le he metido a nuestro sistema de aprendizaje automático son distintas. Vale, pues aprieto un poquito porque hay unos superparámetros. Espera, te voy a enseñar. Esto que ha pasado así como superrápido.
29:02
Esto que... Además esto es de la librería de TensorFlow. Esta mentira, ahí hay un montón de conexiones y en medio, lo que hay en medio son funciones no lineales. Entonces todas las conexiones que haces puedes soltarlas o apretarlas un poco más o decir ese es el problema.
29:21
Vale, entonces capturando la suficiente cantidad de tweets, arrojándolo al problema, podrías... Podríamos. Funcionaría. En los próximos 15 años podríamos. Ah, por un problema computacional. Por un problema computacional y por un problema de que la matemática no está totalmente resuelta.
29:41
hace falta, por ejemplo, se llama deep learning porque esto es mentira también si quieres ser deep. Aunque Word2vec se le asume que es deep y Word2vec solo tiene una capa. Entonces una capa en ningún momento de la vida es deep. Pero lo que hace en un momento de deep learning es poner n capas. Entonces se supone de cada capa
30:01
coge algo de información distinta. Es como un nivel de información un poco más elevada. La comparación neurológica a mí no me gusta mucho pero ayuda mucho. Nosotros tenemos un montón de neuronas y cada neurona es bastante tonta. Solo que las conexiones apila información y sube hasta arriba y se crean los conceptos. Pero
30:21
no es exactamente igual porque no tenemos funciones no lineales en el cerebro, tenemos otra cosa. Pero más o menos eso es eso. Tenemos que descubrir eso y tener varios problemas de cocina. ¿Qué arquitectura mola? ¿Cuál no? Pues sí, se podrá hacer. Estamos en ello.
30:42
Gracias Maite por tu respuesta. Tenemos dos preguntas más por allí y terminamos. Voy primero. Todo es en inglés pero cuando utilizas el lenguaje español el corpus que sueles utilizar o
31:01
qué es lo que recomiendas? A ver, si vas a entrenar un word2veg te da igual el corpus en el idioma del corpus porque lo vas a entrenar tú. Eso sí prepara un corpus grande, grande, muy grande. El problema de todos estos recursos es que están
31:21
fundamentalmente en inglés. Entonces nosotros en el laboratorio hemos hecho algún puente que es convertir un corpus en castellano al inglés con traducción automática. Es como un paso previo. Tienes un sistema de traducción paralela entrenado para inglés, situado para español
31:41
inglés. Y una vez tienes el inglés ya puedes utilizar todos los recursos que hay disponibles en inglés. Si entrenas tus propios datos no hay ningún problema. Aunque es que este puente es casi necesario cuando estás hablando de otros. Un problema que tengo habitual, cuando escaneas documentos o bien documentos
32:01
que tienes que escanear, a veces hay errores y tienes que pasarlo por un corrector. OCR? O estamos hablando de correctores OCR? El OCR a veces son un poco malos, la verdad. Utilizas profesionales, utilizas el que hay open source. Entonces a partir de ahí
32:20
un corrector que pueda por similitud... Lo que te preguntaba es ¿es corrector de binarización de la imagen a una imagen binaria? O si es un corrector... Primero se pasa por un OCR y luego un corrector. Vale, estamos hablando de semántica, ya estamos en texto. Vale. Entonces
32:41
al final es preparar los datos para luego pasar con lo que recomiendas ahí un poco. Pues yo es que trabajo en texto. Ya te viene el texto totalmente corregido y tal. En mi grupo de investigación siempre hay gente que trabaja en detección de líneas y en corrector, pero no es mi caso. A mí ya me llega
33:02
siempre texto. No hay conversión de texto manuscrito a texto escrito. Entonces no te puedo responder a esa pregunta. Lo siento. Has dado antes la solución al Word2vec. Le critican un poco porque no trabaja en español,
33:20
pero dices que no hay problema entonces. A ver, Word2vec está... Es que lo tienes que entrenar tú. Es un modelo que tú le pasas las palabras y tú lo entrenas. Entonces Word2vec, Globe sí que está solo preentranado para Wikipedia en inglés, para Twitter en inglés y para clausarse en inglés.
33:42
Pero Word2vec, no, Word2vec lo entrenas tú. Y es mucho mejor utilizar la implementación que tiene TensorFlow que esta que tiene algún Twitch. Tenemos un minuto aquí para la última. Yo iba a preguntar lo mismo que él, pero ya que has comentado lo del tema de la traducción,
34:01
¿hasta qué punto no puedes perder información o convertir información errónea? Claro. ¿Y cómo hacéis esa traducción? ¿Con qué herramienta? Se utiliza Moses, que es una herramienta open source de traducción paralela. Yo esa parte no la hago,
34:20
pero sí que he trabajado una vez con ella. Está preentranado normalmente con Europar, que es corpus paralelo en inglés y en castellano. Preentrenas un conjunto de palabras paralelas y traduces. Y es verdad que cuantas más cosas pongas en pipeline, más errores y más...
34:41
El error se propaga por toda la tubería. Entonces, si tienes errores en la traducción, se entrenan más los sistemas y se entrenan más los sistemas. Luego, por ejemplo, si quieres hacer un problema de clasificación de sentimientos y yo he traducido una palabra por otra que no era, pues vamos a tener un problema. Sobre todo porque palabras en inglés no significan exactamente lo mismo
35:02
como en castellano. Entonces, hay problemas. Stensorflow te lo soluciona. Word2vec te lo soluciona. Porque tú estás entrenando exactamente para tu corpus, pero tienes otros problemas. ¿Sería mucho mejor entrenar con Word2vec o...? Vale. ¿O utilizar datos preentrenados?
35:22
Si los hay para tu idioma. Claro. Si quieres trabajar en castellano... Vale. Gracias. Perfecto. Muchas gracias de nuevo, Maite, por las respuestas y complementar el tema. Gracias. Ok. Les pedimos que nos acompañen. En dos minutos lo haremos...