IIC2613 / Syllabus

Repositorio oficial Inteligencia Artificial 2020-2
6 stars 1 forks source link

Tips TAREA 3 #81

Open Juan-AAS opened 3 years ago

Juan-AAS commented 3 years ago

Como hay problemas de memoria, La reducción de dimensionalidad es esencial:

Espero esto los pueda dejar más claritos :)

Este es más o menos el flujo que se debe seguir en la codificación.

JuaniAndres commented 3 years ago

Hola @JAAS1993 tienes algunos tips para BERT? Que no e podido cargar las features por que se genera un ValueError por las dimensiones.

furcelay commented 3 years ago

Hola @JAAS1993 tienes algunos tips para BERT? Que no e podido cargar las features por que se genera un ValueError por las dimensiones.

Como son archivos .npy de numpy basta usar np.load('archivo.npy') y obtienes un array.

jalliende commented 3 years ago

Y esa array la ocupamos directamente para realizar el SVM cierto?

mpbascunan commented 3 years ago

Como hay problemas de memoria, La reducción de dimensionalidad es esencial:

  • Para BOW:

    • La transformación haganla después de hacer la limpieza del dataset.
    • Como les quedará una matriz sparse deberán hacer una reducción de dimensionalidad. Como PCA no sirve para este tipo de matrices. Yo les recomiendo usar TruncatedSVD.

    from sklearn.decomposition import TruncatedSVD clf = TruncatedSVD(n_components=N) X = clf.fit_transform(bow) Aquí X será un array con la dimensión reducida de la matriz sparse bow

    • X es el que deben splitear para que hagan el proceso de validación probando con distintos kernels y distintos C (Si googlean hay un rango amplio de C entre 10^2 hasta 10^-5. Puede ser más amplio o más acotado, la idea es que vayan captando con cual puede que dé mejores resultados).
    • Tengan paciencia!! se demora alrededor de 12 a 13 minutos con 4 kernels y 3 valores distintos de C (les dejo este dato como referencia)
  • Para Word2Vec:

    • Primero se debe hacer la limpieza.
    • Inicializar el modelo w2v con el mismo dataset (o con una porción menor 80%), usar tamaños pqueños para optmizar el tiempo en la clasificación y entrenamiento de este modelo size = 100
    • Crear el vocabulario model.build_vocab([[new1],[new2],[new3],...]) Ojo que new1 tiene que estar 'tokenizado' (new1=[word1, word2, ....])
    • Entrenar: model.train([[new1],[new2],[new3],...], total_examples=model.corpus_count, epochs=50, report_delay=1)
    • codificar una noticia word2vec = [model.wv[word] for word in new1 if word in vocabulario] esto repetir para todas las noticias (Este proceso se va a demorar, así que paciencia también)
    • Hacer un sumpooling: word2vec_sumed = np.sum(word2vec,axis=0) (esto es según el ejemplo del enunciado)
    • Como ejercicio, deben darse cuenta sobre la matriz de como está la matriz de features de word2vec después de hacer el sumpooling. ¿Los vectores tienen componentes en un mismo orden de magnitud? si no es así ¿qué otra transformación deberían hacerle a esta matriz?
    • Una vez tengan resuelto este ejercicio. procedan a entrenar (de seguro mejorará el tiempo de ejecucion para clasificar)
    • Paciencia. con word2vec demorará más tiempo, como referencia se demora tipo 20 minutos con 4 kernels y 3 valores disitntos de C.

Espero esto los pueda dejar más claritos :)

Este es más o menos el flujo que se debe seguir en la codificación.

Para BoW y w2v estaba utilizando utilizando sólo las 100 palabras más frecuentes para que no se demorara demasiado y no hacer reducción de dimesionalidad, es muy poco? de igual forma no obtengo accuracy muy baja ni con svm ni random forest.