Estoy tratando de incrustar aproximadamente 60 millones de frases en un espacio vectorial , luego calcular la similitud de coseno entre ellas. He estado usando sklearn's CountVectorizer
con una función de tokenizador personalizada que produce unigramas y bigrams. Resulta que para obtener representaciones significativas, tengo que permitir un gran número de columnas, lineales en el número de filas. Esto conduce a matrices increíblemente dispersas y está matando el rendimiento. No sería tan malo si hubiera solo alrededor de 10,000 columnas, lo que creo que es bastante razonable para la inserción de palabras.
Estoy pensando en tratar de usar Google word2vec
porque estoy bastante seguro de que produce incrustaciones mucho más bajas y más densas. Pero antes de eso, ¿hay otras incrustaciones que puedan justificar un vistazo al principio? El requisito clave sería poder escalar alrededor de 60 millones de frases (filas).
Soy bastante nuevo en el campo de las incrustaciones de palabras, por lo que cualquier consejo sería útil.
También debo agregar que ya estoy usando la descomposición de valores singulares para mejorar el rendimiento.
Respuestas:
Recientemente se ha trabajado en la asignación dinámica de la dimensión word2vec (omisión de gramo) utilizando máquinas Boltzmann. Mira este artículo:
"Incorporaciones de palabras de dimensiones infinitas" -Nalsnick, Ravi
La idea básica es dejar que su conjunto de entrenamiento dicte la dimensionalidad de su modelo word2vec, que se penaliza con un término de regularización relacionado con el tamaño de la dimensión.
El documento anterior hace esto para las palabras, y me gustaría ver qué tan bien funciona esto con las frases.
fuente