Interface node.js avec l'outil Google Word2Vec
Il s'agit d'une interface Node.js à l'outil Word2Vec développé à Google Research pour "une implémentation efficace du sac de mots continu et des architectures de saut-gramme pour calculer les représentations vectorielles des mots", qui peuvent être utilisées dans une variété de tâches PNL. Pour plus d'informations sur le projet Word2Vec , consultez https://code.google.com/p/word2vec/.
Actuellement, node-word2vec n'est pris en charge que pour les systèmes d'exploitation UNIX.
Installez-le via NPM:
npm install word2vecPour l'utiliser à l'intérieur de Node.js, nécessitez le module comme suit:
var w2v = require ( 'word2vec' ) ;Pour les applications où il est important que certaines paires de mots soient traitées comme un seul terme (par exemple, "Barack Obama" ou "New York" doit être traité comme un seul mot), les corpus de texte utilisés pour la formation doivent être prétraités via la fonction Word2phrases . Les mots qui se produisent fréquemment les uns à côté des autres seront concaténés via un soulignement, par exemple les mots "nouveaux" et "York" si les uns à côté des autres peuvent être transformés en un seul mot "new_york".
En interne, cette fonction appelle l'application de ligne de commande C du projet Google Word2Vec . Cela lui permet d'utiliser le multi-threading et préserve l'efficacité du code C d'origine. Il traite les textes donnés par le document de texte input , en écrivant la sortie dans un fichier avec le nom donné par output .
Le paramètre params s'attend à un objet JS contenant éventuellement certaines des clés suivantes et des valeurs associées. S'ils ne sont pas fournis, les valeurs par défaut sont utilisées.
| Clé | Description | Valeur par défaut |
|---|---|---|
| mincount | Jeter les mots apparaissant moins de MinCount Times | 5 |
| seuil | détermine le nombre de phrases, une valeur plus élevée signifie moins de phrases | 100 |
| déboguer | Définit le mode de débogage | 2 |
| silencieux | Définit si une sortie doit être imprimée dans la console | FAUX |
Après une exécution réussie, la fonction callback fournie est invoquée. Il reçoit le nombre du code de sortie comme premier paramètre.
Cette fonction appelle l'application de ligne de commande Word2Vec de Google et trouve des représentations vectorielles pour les mots du corpus d'entraînement input , en écrivant les résultats dans le fichier output . La sortie peut ensuite être chargée dans le nœud via la fonction loadModel , qui expose plusieurs méthodes pour interagir avec les représentations vectorielles apprises des mots.
Le paramètre params s'attend à un objet JS contenant éventuellement certaines des clés suivantes et des valeurs associées. Pour ceux qui manquent, les valeurs par défaut sont utilisées:
| Clé | Description | Valeur par défaut |
|---|---|---|
| taille | Définit la taille des vecteurs de mots | 100 |
| fenêtre | Définit la longueur de sauts maximale entre les mots | 5 |
| échantillon | Définit le seuil pour la présence de mots. Ceux qui apparaissent avec une fréquence plus élevée dans les données de formation seront échantillonnés au hasard; La plage utile est (0, 1E-5) | 1E-3 |
| HS | 1 = Utiliser SoftMax hiérarchique | 0 |
| négatif | nombre d'exemples négatifs; Les valeurs communes sont 3 à 10 (0 = non utilisées) | 5 |
| threads | Nombre de fils d'occasion | 12 |
| iter | nombre d'itérations de formation | 5 |
| mincount | Cela éliminera les mots qui apparaissent moins de MinCount Times | 5 |
| alpha | Définit le taux d'apprentissage de départ | 0,025 pour skip-gram et 0,05 pour CBOW |
| classes | des classes de mots de sortie plutôt que des vecteurs de mots | 0 (les vecteurs sont écrits) |
| déboguer | Définit le mode de débogage | 2 |
| binaire | Enregistrer les vecteurs résultants en mode binaire | 0 (off) |
| sauvegarder | Le vocabulaire sera enregistré pour enregistrer la valeur | |
| readvocab | Le vocabulaire sera lu à partir de la valeur de ReadVocab , non construit à partir des données de formation | |
| cbow | Utilisez le sac de mots continu | 1 (Utilisez 0 pour le modèle de saut-gramme) |
| silencieux | Définit si une sortie doit être imprimée dans la console | FAUX |
Après une exécution réussie, la fonction callback fournie est invoquée. Il reçoit le nombre du code de sortie comme premier paramètre.
Il s'agit de la fonction principale du package, qui charge un fichier de modèle enregistré contenant des représentations vectorielles des mots dans la mémoire. Un tel fichier peut être créé en utilisant la fonction Word2Vec . Une fois le fichier chargé avec succès, la fonction de rappel fournie est tirée, ce qui suit les conventions a deux paramètres: err et model . Si tout se déroule en douceur et qu'aucune erreur ne s'est produite, le premier argument doit être null . Le paramètre model est un objet modèle tenant toutes les données et exposant les propriétés et les méthodes expliquées dans la section d'objet modèle .
Exemple:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;Exemple de sortie:
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} Nombre de mots uniques dans le corpus de formation.
Longueur des vecteurs de mots savants.
Calcule le mot similitude entre word1 et word2 .
Exemple:
model . similarity ( 'ham' , 'cheese' ) ;Exemple de sortie:
0.4907762118841032 Calcule la distance en cosinus entre la phrase fournie (une string qui est convertie en interne en un tableau de mots, qui se traduit par un vecteur de phrase ) et les autres vecteurs de mot du vocabulaire. Les number sont retournés avec la plus haute similitude avec la phrase fournie. Si number n'est pas fourni, par défaut, les 40 mots de notation les plus élevés sont retournés. Si aucun des mots de la phrase n'apparaît dans le dictionnaire, la fonction renvoie null . Dans tous les autres cas, des mots inconnus seront abandonnés dans le calcul de la distance du cosinus.
Exemple:
model . mostSimilar ( 'switzerland' , 20 ) ;Exemple de sortie:
[
{ 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 }
] Pour une paire de mots dans une relation comme man et king , cette fonction essaie de trouver le terme qui se situe dans une relation analogue avec le word fourni. Si number n'est pas fourni, par défaut, les 40 résultats les plus élevés sont renvoyés.
Exemple:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;Exemple de sortie:
[
{ 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 }
] Renvoie les représentations vectorielles apprises pour le word d'entrée. Si word n'existe pas dans le vocabulaire, la fonction renvoie null .
Exemple:
model . getVector ( 'king' ) ;Exemple de sortie:
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} Renvoie les représentations vectorielles apprises pour les mots fournis. Si les mots ne sont pas définis, c'est-à-dire que la fonction est évoquée sans le faire passer d'arguments, il renvoie les vecteurs pour tous les mots appris. La valeur renvoyée est un array d'objets qui sont des instances de la classe WordVec .
Exemple:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;Exemple de sortie:
[
{
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
]
}
] Renvoie le mot qui a la représentation vectorielle la plus proche de l'entrée vec . La fonction attend un vecteur de mot, soit une instance de WordVector de constructeur, soit un tableau de valeurs de nombre de size longueur. Il renvoie le mot dans le vocabulaire pour lequel la distance entre son vecteur et le vecteur d'entrée fourni est le plus bas.
Exemple:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;Exemple de sortie:
{ word : 'empire' , dist : 1.0000000000000002 } Renvoie les mots dont les représentations vectorielles sont les plus proches de l'entrée vec . Le premier paramètre de la fonction s'attend à un vecteur de mot, soit une instance de constructeur WordVector ou un tableau de valeurs de nombre de size longueur. Le deuxième paramètre, number , est facultatif et spécifie le nombre de mots renvoyés. S'il n'est pas fourni, une valeur par défaut de 10 est utilisée.
Exemple:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )Exemple de sortie:
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] Le mot dans le vocabulaire.
La représentation vectorielle apprise pour le mot, un tableau de size de longueur.
Ajoute le vecteur du wordVector d'entrée aux .values .
Soustrait le vecteur du wordVector d'entrée au vecteur .values .
Exécutez des tests via le npm test de commande
Cloner le référentiel git avec la commande
$ git clone https://github.com/Planeshifter/node-word2vec.gitSe transformer dans le répertoire de projet et compiler les fichiers source C via
$ cd node-word2vec
$ make --directory=srcApache v2.