Interfaz node.js a la herramienta Google Word2Vec
Esta es una interfaz Node.js para la herramienta Word2Vec desarrollada en Google Research para "implementación eficiente de la bolsa continua de palabras y arquitecturas de gramo de omisión para calcular representaciones vectoriales de palabras", que se puede utilizar en una variedad de tareas de PNL. Para obtener más información sobre el proyecto Word2Vec , consulte https://code.google.com/p/word2vec/.
Actualmente, node-word2vec solo es compatible para sistemas operativos UNIX.
Instálelo a través de NPM:
npm install word2vecPara usarlo dentro de Node.js, requiera el módulo de la siguiente manera:
var w2v = require ( 'word2vec' ) ;Para las aplicaciones donde es importante que ciertos pares de palabras se traten como un solo término (por ejemplo, "Barack Obama" o "Nueva York" debe tratarse como una sola palabra), los corporios de texto utilizados para la capacitación deben procesarse previamente a través de la función Word2Phrases . Las palabras que ocurren frecuentemente una al lado de la otra se concatenarán a través de un bajo, por ejemplo, las palabras "nuevas" y "York" si seguidas entre sí podrían transformarse en una sola palabra "new_york".
Internamente, esta función llama a la aplicación de línea de comandos C del proyecto Google Word2Vec . Esto le permite hacer uso de múltiples subprocesos y conserva la eficiencia del código C original. Procesa los textos dados por el documento de texto input , escribiendo la salida a un archivo con el nombre dado por output .
El parámetro de params espera que un objeto JS contenga opcionalmente algunas de las siguientes claves y valores asociados. Si no se suministran, se utilizan los valores predeterminados.
| Llave | Descripción | Valor predeterminado |
|---|---|---|
| minazo | Descartar palabras que aparezcan menos que mincount tiempos | 5 |
| límite | determina el número de frases, el valor más alto significa menos frases | 100 |
| depurar | Establece el modo de depuración | 2 |
| silencioso | Establece si se debe imprimir alguna salida en la consola | FALSO |
Después de una ejecución exitosa, se invoca la función callback suministrada. Recibe el número del código de salida como su primer parámetro.
Esta función llama a la aplicación de línea de comandos Word2Vec de Google y encuentra representaciones vectoriales para las palabras en el corpus de entrenamiento input , escribiendo los resultados en el archivo output . La salida se puede cargar en el nodo a través de la función loadModel , que expone varios métodos para interactuar con las representaciones vectoriales aprendidas de las palabras.
El parámetro de params espera que un objeto JS contenga opcionalmente algunas de las siguientes claves y valores asociados. Para los que faltan, se utilizan los valores predeterminados:
| Llave | Descripción | Valor predeterminado |
|---|---|---|
| tamaño | Establece el tamaño de los vectores de palabras | 100 |
| ventana | Establece la longitud máxima de salto entre palabras | 5 |
| muestra | Establece el umbral para la ocurrencia de palabras. Aquellos que aparecen con mayor frecuencia en los datos de entrenamiento serán aleatorios de muestreo; El rango útil es (0, 1e-5) | 1e-3 |
| HS | 1 = usar Softmax jerárquico | 0 |
| negativo | número de ejemplos negativos; Los valores comunes son 3 - 10 (0 = no usados) | 5 |
| trapos | Número de hilos usados | 12 |
| iter | número de iteraciones de entrenamiento | 5 |
| minazo | Esto descartará las palabras que aparecen menos que los tiempos de Mincount | 5 |
| alfa | Establece la tasa de aprendizaje inicial | 0.025 para Skip-Gram y 0.05 para CBOW |
| clases | Clases de palabras de salida en lugar de vectores de palabras | 0 (los vectores están escritos) |
| depurar | Establece el modo de depuración | 2 |
| binario | Guardar los vectores resultantes en modo binario | 0 (apagado) |
| saveVocab | El vocabulario se guardará para saveVocab Value | |
| readVocab | El vocabulario se leerá a partir del valor ReadVocab , no se construye a partir de los datos de capacitación | |
| COBOW | Use el modelo de la bolsa continua de las palabras | 1 (use 0 para el modelo Skip-Gram) |
| silencioso | Establece si se debe imprimir alguna salida en la consola | FALSO |
Después de una ejecución exitosa, se invoca la función callback suministrada. Recibe el número del código de salida como su primer parámetro.
Esta es la función principal del paquete, que carga un archivo de modelo guardado que contiene representaciones vectoriales de palabras en la memoria. Tal archivo se puede crear utilizando la función Word2Vec . Después de que el archivo se carga correctamente, se dispara la función de devolución de llamada suministrada, que las siguientes convenciones tienen dos parámetros: err y model . Si todo se ejecuta sin problemas y no se produce ningún error, el primer argumento debe ser null . El parámetro model es un objeto modelo que contiene todos los datos y expone las propiedades y métodos explicados en la sección del objeto del modelo .
Ejemplo:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;Salida de muestra:
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} Número de palabras únicas en el corpus de entrenamiento.
Longitud de los vectores de palabras aprendidas.
Calcula la palabra similitud entre word1 y word2 .
Ejemplo:
model . similarity ( 'ham' , 'cheese' ) ;Salida de muestra:
0.4907762118841032 Calcula la distancia coseno entre la frase suministrada (una string que se convierte internamente en una matriz de palabras, que dan como resultado un vector de frase ) y los otros vectores de palabras del vocabulario. Se devuelven las palabras number con la mayor similitud con la frase suministrada. Si number no se suministra, de forma predeterminada se devuelven las 40 palabras de puntuación más alta. Si ninguna de las palabras en la frase aparece en el diccionario, la función devuelve null . En todos los demás casos, se eliminarán palabras desconocidas en el cálculo de la distancia del coseno.
Ejemplo:
model . mostSimilar ( 'switzerland' , 20 ) ;Salida de muestra:
[
{ word : 'chur' , dist : 0.6070252929307018 } ,
{ word : 'ticino' , dist : 0.6049085549621765 } ,
{ word : 'bern' , dist : 0.6001648890419077 } ,
{ word : 'cantons' , dist : 0.5822226582323267 } ,
{ word : 'z_rich' , dist : 0.5671853621346818 } ,
{ word : 'iceland_norway' , dist : 0.5651901750812693 } ,
{ word : 'aargau' , dist : 0.5590524831511438 } ,
{ word : 'aarau' , dist : 0.555220055372284 } ,
{ word : 'zurich' , dist : 0.5401119092258485 } ,
{ word : 'berne' , dist : 0.5391358099043649 } ,
{ word : 'zug' , dist : 0.5375590160292268 } ,
{ word : 'swiss_confederation' , dist : 0.5365824598661265 } ,
{ word : 'germany' , dist : 0.5337325187293028 } ,
{ word : 'italy' , dist : 0.5309218588704736 } ,
{ word : 'alsace_lorraine' , dist : 0.5270204106304165 } ,
{ word : 'belgium_denmark' , dist : 0.5247942780963807 } ,
{ word : 'sweden_finland' , dist : 0.5241634037188426 } ,
{ word : 'canton' , dist : 0.5212495170066538 } ,
{ word : 'anterselva' , dist : 0.5186651140386938 } ,
{ word : 'belgium' , dist : 0.5150383129735169 }
] Para un par de palabras en una relación como man y king , esta función trata de encontrar el término que se encuentra en una relación análoga con la word suministrada. Si number no se suministra, de forma predeterminada se devuelven los 40 resultados de puntuación más alta.
Ejemplo:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;Salida de muestra:
[
{ word : 'queen' , dist : 0.5607083309028658 } ,
{ word : 'queen_consort' , dist : 0.510974781496456 } ,
{ word : 'crowned_king' , dist : 0.5060923120115347 } ,
{ word : 'isabella' , dist : 0.49319425034513376 } ,
{ word : 'matilda' , dist : 0.4931204901924969 } ,
{ word : 'dagmar' , dist : 0.4910608716969606 } ,
{ word : 'sibylla' , dist : 0.4832698899279795 } ,
{ word : 'died_childless' , dist : 0.47957251302898396 } ,
{ word : 'charles_viii' , dist : 0.4775804990655765 } ,
{ word : 'melisende' , dist : 0.47663194967001704 }
] Devuelve las representaciones vectoriales aprendidas para la word de entrada. Si word no existe en el vocabulario, la función devuelve null .
Ejemplo:
model . getVector ( 'king' ) ;Salida de muestra:
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} Devuelve las representaciones vectoriales aprendidas para las palabras suministradas. Si las palabras están indefinidas, es decir, la función se evoca sin transmitirle ningún argumento, devuelve los vectores para todas las palabras aprendidas. El valor devuelto es una array de objetos que son instancias de la clase WordVec .
Ejemplo:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;Salida de muestra:
[
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ,
{
word : 'queen' ,
values : [
0.014399041122817985 ,
- 0.000026896638109750347 ,
0.20398248693190596 ,
...
- 0.05329081648586445 ,
- 0.012556868376422963
]
} ,
{
word : 'girl' ,
values : [
- 0.1247347144692245 ,
0.03834108759049417 ,
- 0.022911846734360187 ,
...
- 0.0798994867922872 ,
- 0.11387393949666696
]
} ,
{
word : 'boy' ,
values : [
- 0.05436531234037158 ,
0.008874993957578164 ,
- 0.06711992414442335 ,
...
0.05673998568026764 ,
- 0.04885347925837509
]
}
] Devuelve la palabra que tiene la representación vectorial más cercana al vec de entrada. La función espera un vector de palabras, ya sea una instancia de constructor WordVector o una matriz de valores de número de size de longitud. Devuelve la palabra en el vocabulario para el cual la distancia entre su vector y el vector de entrada suministrado es más baja.
Ejemplo:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;Salida de muestra:
{ word : 'empire' , dist : 1.0000000000000002 } Devuelve las palabras cuyas representaciones vectoriales están más cerca de la entrada vec . El primer parámetro de la función espera un vector de palabras, ya sea una instancia de constructor WordVector o una matriz de valores de número de size de longitud. El segundo parámetro, number , es opcional y especifica el número de palabras devueltas. Si no se suministra, se usa un valor predeterminado de 10 .
Ejemplo:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )Salida de muestra:
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] La palabra en el vocabulario.
La representación vectorial aprendida para la palabra, una matriz de size de longitud.
Agrega el vector del wordVector entrada de entrada al vector .values .
Resta el vector del vector de entrada wordVector entrada al vector .values .
Ejecutar pruebas a través de la npm test de comando
Clonar el repositorio de git con el comando
$ git clone https://github.com/Planeshifter/node-word2vec.gitCambiar en el directorio del proyecto y compilar los archivos de origen C a través de
$ cd node-word2vec
$ make --directory=srcApache V2.