Cómo entrenar un modelo word2vec como GoogleNews-vectors-negative300.bin para francés

Las respuestas de Trideep y Sujit ya lo cubren, agregando algunos detalles.

El enlace de Trideep tiene vectores word2vec previamente entrenados. Uno de los archivos bin (CBOW) en su enlace tiene 3,625,364 millones de vectores únicos en el archivo bin.

Entonces, ¿tal vez estás buscando generar vectores para un corpus que tienes?

Si es así, aquí hay un enlace de github para las fuentes de word2vec ( el enlace original de Google está roto por alguna razón ). Github word2vec

Si desea generar frases, simplemente ejecute una frase word2 en corpus tantas veces como desee que sea la longitud de las frases, cada ejecución duplica la longitud máxima de la frase, el parámetro umbral controla el límite de generación de frases. Asegúrese de combinar la salida del corpus de cada ejecución para que se conserve la monotonicidad de los recuentos ( si no lo hacemos, suponiendo que “nuevo” siempre ocurra con “york” en el corpus, la generación de frases lo convertirá a “new_york” con 0 ocurrencias para las palabras ” nuevo “y” york “ )

Un ejemplo ejecutado para generar un archivo vectorial

word2vec -train -output w2v_vector.bin -cbow 0 -size 300 -window 5 -hs 0 -sample 1e-3 -threads 40 -iter 5 -min-count 5 -save-vocab vocab.txt -binary 1

Parámetros clave anteriores

  • cbow – 0 skipgram en lugar de una bolsa continua de palabras. Skipgram puede ser una mejor opción por las razones mencionadas en el documento
  • tamaño 300 – dimensiones que desee
  • tamaño de ventana – 5. Aumentar esto hará que el vecindario sea más semántico, pero el tiempo de capacitación necesariamente aumenta
  • hs – 0 Esto usará muestreo negativo (en lugar de jerárquico como pretendía en cuestión ).
  • la muestra – 1e-3 submuestreo de palabras frecuentes como “the” ( esencialmente omite al azar palabras de entrenamiento como “the” ) – reduce nuestro tiempo de entrenamiento. Pero tendrá un impacto significativo en la calidad del vector si se submuestrea mucho (por ejemplo, 1e-7 y menos). El papel cita el uso de 1e-5 para grandes corpus. He descubierto que 1e-5 funciona bastante bien y limita el tiempo de entrenamiento cuando el corpus está en miles de millones y el vocabulario excede los 50 millones (las frases pueden inflar el vocabulario a estos tamaños ).
  • subprocesos: el recuento de subprocesos se basa, por supuesto, en la cantidad de núcleos que tenemos en la máquina.
  • iter: aumente esto si el tamaño del cuerpo es pequeño. Típicamente, si encontramos vectores de vecindad, la distancia del coseno es menor que .8 / .9 incluso para palabras semánticamente cercanas, entonces significa que el entrenamiento fue insuficiente, solo aumente la iteración.
  • Recuento mínimo: podemos decidir cuál es el recuento mínimo de una palabra para calificar para la generación en función del tamaño del corpus. Por lo general, es mejor evitar las palabras de menos de 5, ya que casi no son arrastradas por otras palabras y los vecindarios, ya que estas palabras no son geniales de todos modos ( sin embargo, lo contrario no es cierto, una palabra muy común que tenga esto en el vecindario podría ser valiosa: aguja en el escenario de pajar ) . Pero el tiempo de entrenamiento aumentará significativamente si preservamos las palabras menos de 5 para una corpus grande (alcanzaríamos el límite superior de incluso ejecutar esto en una máquina con 256 GB ( manteniendo el espacio de intercambio bajo ), que es aproximadamente alrededor de 80 millones de vectores únicos )
  • Binario: genera un archivo vectorial en binario en lugar de texto ( preferiblemente para evitar la pérdida de conversión de coma flotante al leerlo de nuevo en la memoria )

Si el corpus que estamos generando vectores para nosotros es pequeño (<200K vocabulario), entonces vale la pena agregar wiki francés, por ejemplo, como un corpus adicional en el entrenamiento: la calidad del vector sería mejor.

Por último, una opción diferente a considerar especialmente si las palabras en francés tienen mucha estructura interna que word2vec no capturará, o su corpus tiene palabras raras (el entrenamiento de word2vec puede no tener suficiente contexto para generar buenos vectores, ya que Fastext genera palabras a partir de caracteres n gramos) es probable que las palabras raras obtengan mejores vectores de palabras) es usar Fasttext. Es muy similar en los parámetros de entrenamiento a word2vec ( de hecho, es exactamente word2vec en el caso límite de la elección de un hiperparámetro – min-count == Vocab ). La semana pasada ( 6 de marzo de 2017 ) se lanzó un archivo vectorial pre-entrenado con 1.152.449 palabras únicas. facebookresearch / fastText. Vale la pena considerarlo como una opción. Enriquecimiento de vectores de palabras con información de subpalabras

Gracias por el A2A. Suponiendo que tiene un corpus de texto en francés lo suficientemente grande, puede ejecutar el código existente para generar el modelo. Hay 3 de esos códigos que sé que están disponibles gratuitamente.

  • el word2vec original en C ++ aquí (almacenamiento a largo plazo para Google Code Project Hosting),
  • un contenedor Python de Gensim (gensim: modelado de temas para humanos),
  • uno basado en Java de DeepLearning4j (Neural Word Embeddings)

Si está interesado en construir el código usted mismo, aprendí sobre esto en el curso Udacity Tensorflow (Deep Learning | Udacity), puede ver los videos si se une al curso. También puede ver el ejemplo en el sitio web de Tensorflow (Representaciones vectoriales de palabras | TensorFlow).

Esencialmente, solo está resolviendo un problema de clasificación. Dado un texto como este, que está tokenizado como se muestra a continuación:

sentence: The cat sat on the mat.

tokenized: [“START”, “the”, “cat”, “sat”, “on”, “the”, “mat”, “.”]

puede entrenar a su clasificador para predecir la palabra media dados sus vecinos (uno o más en cada lado), es decir,

“START”, “cat” -> “the”,

“the”, “sat” -> “cat”,

o puede entrenarlo para predecir las palabras vecinas dadas la palabra del medio, es decir,

“the” -> “START”

“the” -> “cat”

“cat” -> “the”

“cat” -> “sat”,

etc.

Estos enfoques corresponden a los dos sabores de word2vec, el primero se llama CBOW y el segundo se llama skip-gram. Lo bueno de esto es que estás haciendo un aprendizaje supervisado, pero las etiquetas ya están disponibles como texto que los humanos ya han generado.

Sí tu puedes. Pero los vectores serían buenos solo si los datos son lo suficientemente buenos. Si tiene suficientes datos en francés, continúe y entrene sus vectores de palabras. Los vectores de noticias de Google están capacitados en mil millones de palabras de datos de noticias de Google. Si desea vectores de palabras preentrenados para francés, puede descargarlos de Jean-Philippe Fauconnier. Los resultados del vector se ven bastante bien.

Si todavía está buscando obtener incrustaciones de palabras en francés, Facebook acaba de lanzar sus propias incrustaciones de palabras en más de 300 idiomas. Se llama FastText, busque en google.

Sin embargo, la diferencia clave es que las incrustaciones de dos palabras son ligeramente diferentes. Uno está basado en la semántica, el otro es sintáctico. Entonces, espere resultados diferentes 🙂