fastText comme bibliothèque pour un apprentissage efficace de la représentation des mots et de la caractérisation des phrases. Il est écrit en C++ et supporte le multitraitement lors de la préparation. FastText vous permet de préparer des représentations administrées et non administrées de mots et de phrases. Ces représentations (embeddings) peuvent être utilisées pour diverses applications allant de la pression d’information, comme des mises en évidence dans des modèles supplémentaires, pour la détermination des concurrents, ou comme initialisateurs pour l’apprentissage des mouvements.

Portrait

FastText peut accomplir une grande exécution pour la représentation des mots et le regroupement des phrases, uniquement en raison de mots peu communs en utilisant des données au niveau des caractères.

Chaque mot est parlé comme un sac de caractères n-grammes nonobstant le mot lui-même, donc par exemple, pour le mot matter, avec n = 3, les représentations fastText pour le caractère n-grammes sont <ma, tangle, att, tte, ter, er>. < et > sont ajoutés comme images limites pour reconnaître le ngramme d’un mot à partir d’un mot lui-même, donc par exemple, si le mot tangle est un morceau de jargon, il est parlé comme <mat>. Cela permet de sauvegarder la signification de mots plus courts qui peuvent apparaître comme des ngrammes de mots différents. Inaliénablement, cela vous permet également de saisir l’importance pour les post-fixes/préfixes.

La longueur des n-grammes que vous utilisez peut être limitée par les bannières – minn et – maxn pour le nombre le plus petit et le plus extrême de caractères à utiliser individuellement. Ces bannières contrôlent l’étendue des qualités pour lesquelles vous pouvez obtenir des n-grammes. Le modèle est considéré comme un modèle de paquet de mots car, à part la fenêtre coulissante de détermination des n-grammes, il n’y a pas de structure interne d’un mot qui est considéré pour la featurisation, c’est-à-dire que tant que les caractères tombent sous la fenêtre, la demande de n-grammes de caractères ne fait pas de différence. Vous pouvez également désactiver totalement les n-grammes en les mettant tous les deux à 0, ce qui peut être utile lorsque les “mots” de votre modèle ne sont pas des mots d’une langue spécifique et que les n-grammes de niveau de caractère ne seraient pas de bon augure. Le cas d’utilisation le plus connu est celui où vous placez des ids comme mots. Lors de la mise à jour du modèle, fastText apprend les charges pour chacun des n-grammes tout comme le mot entier à Comprendre l’information

Alors que la préparation de fastText est multi-cordes, la lecture des informations est faite par une seule corde. L’analyse syntaxique et la tokenisation sont effectuées lors de la lecture des informations. Nous devrions percevoir en détail comment cela se fait :

FastText prend une poignée d’enregistrement au moyen de – contention d’entrée pour les informations d’entrée. L’utilisation d’informations provenant de stdin n’est pas retenue. FastText instante quelques vecteurs pour surveiller les données d’information, à l’intérieur appelés word2int_ et words_. word2int_ est listé sur le hachage de la chaîne de mots, et stocke un fichier int consécutif dans le cluster words_ (std: : vecteur) selon sa valeur. Le cluster words_ est régulièrement entré dans la requête pour que les mots intéressants apparaissent lors de la lecture des informations, et stocke comme valeur la section struct qui caractérise toutes les données concernant le mot. passage contient les données d’accompagnement :

Il convient de noter deux choses ici : le mot est la représentation en chaîne du mot, le décompte est l’inclusion absolue du mot individuel dans la ligne d’information, entry_type est l’un des {mot, étiquette} avec une marque juste utilisée pour le cas administré. Tous les jetons d’information, en faisant peu attention à entry_type, sont rangés dans une référence de mot similaire, ce qui rend l’allongement le plus rapide pour contenir différents types de substances beaucoup plus simple (je parlerai de plus en plus de la manière de faire cela dans un dernier billet). Enfin, les sous-mots sont un vecteur de tous les n-grammes d’un mot spécifique. Ils sont également créés lorsque l’on consulte les informations, et passent à l’étape de la préparation.

Le vecteur word2int_ est de taille MAX_VOCAB_SIZE = 30000000 ; Ce nombre est codé en dur. Cette taille peut être restrictive lors de la préparation d’un énorme corpus, et peut être augmentée avec succès lors de la surveillance de l’exécution. La liste pour le cluster word2int_ est l’estimation d’une chaîne à int hash et est un nombre remarquable parmi 0 et MAX_VOCAB_SIZE. En cas de crash du hachage, et si un passage vient d’être ajouté au hachage, la valeur est augmentée jusqu’à ce que nous trouvions un identifiant unique à attribuer à un mot.

Dans cette optique, l’exécution peut s’exacerber considérablement une fois que la taille du jargon atteint MAX_VOCAB_SIZE. Pour éviter cela, FastText taille le jargon chaque fois que la taille du hachage dépasse 75% de la taille maximale. Pour ce faire, il faut d’abord augmenter la limite de base du décompte d’un mot pour qu’il soit considéré comme un morceau de jargon, et réduire le lexique pour tous les mots qui ont un décompte inférieur à cette limite. La vérification de la limite de 75% se fait à chaque fois qu’un nouveau mot est inclus, donc cet élagage programmé peut avoir lieu à n’importe quelle phase de la procédure de compréhension du document.

En plus de la taille programmée, la base signifie des mots qui sont un morceau du jargon est contraint en utilisant les bannières – minCount et – minCountLabel pour les mots et les marques (utilisé pour la préparation réglementée) individuellement. L’élagage dépendant de ces bannières a lieu après que l’ensemble du document de préparation ait été traité. Votre lexique peut être limité à un nombre minimum plus élevé que celui indiqué physiquement si le nombre de mots remarquables dans votre lexique déclenche la taille programmée déterminée auparavant. Le seuil du minCount prédéfini sera de toute façon toujours atteint, ce qui garantit que les mots dont le contrôle est inférieur ne constituent pas un aspect important de votre information.

Pour les malheurs d’inspection négatifs, une table de mots négatifs est alors construite de taille NEGATIVE_TABLE_SIZE = 10000000. Notez qu’il s’agit de ⅓ de la taille de la TAILLE_VOCABLE_MAX. La table est construite en tirant d’une circulation unigramme de la base carrée de la récurrence de chaque mot, c’est-à-dire .ken.

Cela garantit que les occasions où chaque mot apparaît dans le tableau des négatifs sont directement liées à la base carrée de sa récurrence. Ce tableau est ensuite réorganisé pour garantir la randomisation.

Ensuite, un tableau de test pour disposer des mots successifs comme tracé dans le segment 2.3 du premier papier d’expansion word2vec est développé. L’idée sous-jacente est que les mots qui sont beaucoup répétés donnent moins de données que les mots qui sont peu courants, et que leur représentation ne changera pas beaucoup après avoir observé précédemment de nombreuses fois un mot similaire.

Le papier retrace la technique d’accompagnement pour l’élimination : le mot de préparation est éliminé avec une probabilité de

Le bord par défaut peut être physiquement modifié au moyen du – t arg. L’estimation du bord, t n’a pas la même importance dans fastText que dans le premier document word2vec, et doit être adaptée à votre application.

Un mot est éliminé uniquement si, au cours de la phase de préparation, un prélèvement arbitraire sur un crédit uniforme se situant entre 0 et 1 est plus important que la probabilité d’élimination. Voici un graphique de la circulation pour des valeurs allant de 0 à 1 pour le bord par défaut. Comme l’indique le graphique, la probabilité d’un prélèvement est plus importante que celle d’un incrément P en tant qu’incrément de récurrence, et dans ce sens, il s’agit de la probabilité de se débarrasser des incréments comme le fait la récurrence. Cela s’applique uniquement aux modèles non assistés. Les mots ne sont pas éliminés pour un modèle géré.

Au cas où nous insisterions sur la préparation avec la bannière “Vecteurs préformés”, les qualités de l’enregistrement d’information sont utilisées pour introduire les vecteurs de la couche d’information. Dans ce cas, un treillis de mesure MxN où M = MAX_VOCAB_SIZE + bucket_size, N = diminutif est réalisé. bucket_size se compare à la taille absolue de la pièce à conviction allouée pour tous les jetons ngram. Il est défini via le drapeau -bucket et est fixé par défaut à 2000000. Les ngrams sont introduits au moyen d’un hachage numérique (la capacité de hachage équivalente) du contenu du ngram et en ajustant le modulo de ce nombre de hachage sur la grille instaurée à une position comparable à MAX_VOCAB_SIZE + hachage. Notez qu’il pourrait y avoir des crashs dans l’espace des ngrammes, alors que les impacts sont irréalistes pour les mots uniques. Cela pourrait également influencer l’exécution du modèle.

Diminish parle à l’élément de la couche cachée lors de la préparation, et de cette façon à l’élément des encastrements, et est fixé au moyen de la bannière – diminish. Il est bien entendu fixé à 100. Le réseau est mis en place avec une appropriation réelle uniforme quelque part entre 0 et 1/diminuer et est uniforme dans le carré 3D unitaire.