Il s'agit d'un wrapper multiplateforme .NET Standard pour la bibliothèque FastText de Facebook. Le wrapper est livré avec des binaires natifs précompilés pour les trois plates-formes : Windows, Linux et MacOs.
Ajoutez-le simplement à votre projet et commencez à l'utiliser ! Aucune configuration supplémentaire requise. Cette bibliothèque décompressera et appellera le binaire natif approprié en fonction de la plate-forme cible.
Bien sûr que non! C'est juste terminé :) Il n'y a pas de mises à jour majeures pour fastText et la plupart des bugs de ce référentiel sont corrigés. Toutes les fonctionnalités devraient fonctionner et si quelque chose ne fonctionne pas, envoyez-moi simplement un problème et j'essaierai de vous répondre.
L'API de la bibliothèque suit de près l'interface de ligne de commande fastText, vous pouvez donc y accéder directement.
Le cas d'utilisation le plus simple consiste à entraîner un modèle supervisé avec des paramètres par défaut. Nous créons un FastTextWrapper
et appelons Supervised()
.
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking");
Notez les arguments :
Nous spécifions un fichier d'entrée avec un exemple étiqueté par ligne. Ici, nous utilisons l'ensemble de données de cuisson Stack Overflow de Facebook : https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz. Vous pouvez trouver les fichiers extraits divisés en ensembles de formation et de validation dans le répertoire UnitTests
de ce référentiel.
Votre modèle sera enregistré dans cooking.bin
et cooking.vec
avec des vecteurs pré-entraînés seront placés si le même répertoire.
Ici, nous utilisons la surcharge Supervised()
avec 2 arguments. Cela signifie que la formation sera effectuée avec les paramètres par défaut. C'est un bon point de départ et revient à appeler fastText de cette façon :
./fasttext supervisé -input cooking.train.txt -output cooking
Appelez LoadModel()
et spécifiez le chemin d'accès au fichier modèle .bin
:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");
Pour utiliser des vecteurs pré-entraînés pour votre modèle supervisé, créez une instance de SupervisedArgs
et personnalisez-la :
Important Cela ne dit cela nulle part dans la documentation d'origine, mais vous devez utiliser des vecteurs pré-entraînés au format texte (extension de fichier .vec
) et non au format binaire. Si vous essayez d'utiliser des vecteurs binaires, vous obtiendrez une erreur indiquant que vos vecteurs ont la dimension 0.
var fastText = new FastTextWrapper();var args = new SupervisedArgs{PretrainedVectors = "cooking.unsup.300.vec",dim = 300};fastText.Supervised("cooking.train.txt", "cooking", args);
Ici, nous obtenons les arguments de formation par défaut, fournissons un chemin vers le fichier vectoriel pré-entraîné et ajustons la dimension du vecteur en conséquence.
Important Assurez-vous de toujours vérifier la dimension de vos vecteurs pré-entraînés ! De nombreux vecteurs sur Internet ont la dimension 300
, mais la dimension par défaut pour la formation de modèles supervisés fastText est 100
.
Vous pouvez désormais facilement tester un modèle supervisé par rapport à un ensemble de validation. Vous pouvez également spécifier différentes valeurs pour k
et threshlod
.
var résultat = fastText.Test("cooking.valid.txt");
Vous obtiendrez une instance de TestResult
où vous pourrez trouver des métriques agrégées ou par étiquette :
Console.WriteLine($"Results:ntPrecision : {result.GlobalMetrics.GetPrecision()}" +$"ntRecall : {result.GlobalMetrics.GetRecall()}" +$"ntF1 : {result.GlobalMetrics.GetF1()}" );
Vous pouvez même obtenir une courbe de rappel de précision (agrégée ou par étiquette) ! Voici un exemple d'exportation d'un tracé SVG avec la bibliothèque multiplateforme OxyPlot :
var result = fastText.Test("cooking.valid.txt");var courbe = result.GetPrecisionRecallCurve();var series = new LineSeries {StrokeThickness = 1};series.Points.AddRange(curve.Select(x => new DataPoint(x.recall, x.precision)).OrderBy(x => xX));var plotModel = new PlotModel{Series = { series },Axes ={new LinearAxis {Position = AxisPosition.Bottom, Title = "Recall"},new LinearAxis {Position = AxisPosition.Left, Title = "Precision"}}};en utilisant (var stream = new FileStream("precision- rappel.svg", FileMode.Create, FileAccess.Write)){SvgExporter.Export(plotModel, stream, 600, 600, faux);}
Vous pouvez entraîner un nouveau modèle supervisé et le quantifier immédiatement en remplaçant SupervisedArgs
par QuantizedSupervisedArgs
:
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs());
Vous pouvez également charger un modèle existant et le quantifier :
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");fastText.Quantize();
Utilisez la méthode Unsupervised()
en spécifiant le type de modèle : Skipgram ou Cbow :
var fastText = new FastTextWrapper();fastText.Unsupervised(UnsupervisedModel.SkipGram, "cooking.train.nolabels.txt", "cooking");
Vous pouvez utiliser un argument UnsupervisedArgs
facultatif pour personnaliser la formation.
Vous pouvez utiliser le réglage automatique fastText pour effectuer une recherche automatique d'hyperparamètres.
Reportez-vous à https://github.com/facebookresearch/fastText/blob/master/docs/autotune.md pour une référence complète des paramètres.
Utilisez AutotuneArgs
pour contrôler le réglage :
var fastText = new FastTextWrapper();var autotuneArgs = new AutotuneArgs{Duration = 30, // en secondesMetric = "precisionAtRecall:30", // prend en charge les métriques personnaliséesPredictions = 2, // prend en charge les prédictions @kModelSize = "10M", // Définissez ceci pour entraîner un modèle quantifié et effectuer une // recherche d'hyperparamètres de quantification supplémentaire. Nécessite QuantizedSupervisedArgs.ValidationFile = "cooking.valid.txt" // OBLIGATOIRE : chemin d'accès à un fichier de validation};fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs(), autotuneArgs);
Vous pouvez obtenir des rappels de progression à partir de la bibliothèque native. Pour ce faire, ajoutez un gestionnaire à (Un)SupervisedArgs.TrainProgressCallback
pour une formation simple, ou à AutotuneArgs.AutotuneProgressCallback
pour le réglage des hyperparamètres.
Voir le projet ConsoleTest
pour un exemple d'utilisation des rappels de formation avec la bibliothèque ShellProgressBar
:
using (var pBar = new ProgressBar(100, "Training")){var ftArgs = new SupervisedArgs{// ... Autres argsverbose = 0,TrainProgressCallback = (progress, loss, wst, lr, eta) =>{pBar. Tick((int)Math.Ceiling(progress * 100), $"Perte : {perte}, mots/thread/sec : {wst}, LR : {lr}, ETA : {eta}");}};fastText.Supervised("cooking.train.txt", outPath, ftArgs);}
stderr
La bibliothèque native FastText rapporte par défaut la progression de la formation à stderr
. Vous pouvez désactiver cette sortie en définissant (Un)SupervisedArgs.verbose = 0
pour un entraînement simple et AutotuneArgs.Verbose = 0
pour le réglage des hyperparamètres.
FastTextWrapper
peut produire une petite quantité de logs concernant principalement la gestion des bibliothèques natives. Vous pouvez activer la connexion en fournissant une instance de Microsoft.Extensions.Logging.ILoggerFactory
. Dans cet exemple, nous utilisons Serilog avec un récepteur de console.
Vous pouvez également injecter votre IloggerFactory
standard via .NET Core DI.
// Ajoutez les packages Nuget suivants à votre projet:// * Serilog.Sinks.Console// * Serilog.Extensions.LoggingLog.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(theme: ConsoleTheme.None ).CreateLogger();var fastText = new FastTextWrapper(loggerFactory: new SerilogLoggerFactory());
Dans la version 1.1
j'ai ajouté une bien meilleure gestion native des erreurs. Désormais, dans le cas de la plupart des erreurs natives, vous obtiendrez une belle NativeLibraryException
que vous pourrez inspecter pour une description détaillée de l'erreur.
Étant donné que ce wrapper utilise des binaires C++ natifs sous le capot, vous devrez installer Visual C++ Runtime version 140 lors de l’exécution sous Windows. Visitez la page Téléchargements MS (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) et sélectionnez le redistribuable approprié.
Si vous souhaitez utiliser FastText avec l'API de style C, voici mon fork de la bibliothèque officielle : https://github.com/olegtarasov/fastText.
1.3.1
Binaires fastText mis à jour avec les dernières améliorations du dépôt Facebook.
1.3.0
Les bibliothèques natives sont désormais explicitement incluses dans le projet cible et copiées dans le répertoire de sortie. Espérons que cela résout quelques problèmes liés à l’approche précédente consistant à extraire dynamiquement des bibliothèques à partir de ressources.
1.2.5
Correction des rappels de progression pour la formation de modèles non supervisée.
1.2.4
Ajout de rappels de progression pour la formation du modèle et le réglage automatique.
1.2.3
Ajout de la quantification de modèle supervisée avec la méthode Quantize
.
Version stable publiée !
1.2.2-preview
Fusionné #20 avec la nouvelle méthode GetWordVector
.
1.2.1-preview
Ajout du réglage automatique du modèle avec prise en charge de la quantification.
Correction d'un horrible bug avec le regroupement bool
.
1.2.0-preview
La version 1.2.0 introduit quelques modifications importantes dans l'API de la bibliothèque. Si vous n'êtes pas prêt à migrer, utilisez la version 1.1.2
.
Changement radical : suppression des deux méthodes Train()
obsolètes.
Changement radical : suppression de la classe obsolète SupervisedArgs
.
Changement radical : suppression de FastTextArgs.SupervisedDefaults()
au profit du nouveau SupervisedArgs
avec constructeur par défaut.
Changement radical : la classe FastTextArgs
ne peut pas être construite directement, utilisez les nouvelles classes SupervisedArgs
et UnsupervisedArgs
.
Ajout d'une méthode Unsupervised()
pour entraîner les modèles Skipgram ou Cbow.
1.1.2
Correction d'un horrible bug avec le regroupement bool
sur une branche 1.1.*
.
1.1.0
, 1.1.1
Ajout d'une nouvelle méthode Supervised()
dans le cadre de la rationalisation de l'API.
Ajout d'une nouvelle méthode Test()
pour tester le modèle supervisé.
Les deux méthodes Train()
sont obsolètes. Ils seront supprimés dans la v. 1.2.0
.
1.0.38
Correction d'un horrible bug avec le regroupement bool
sur une branche 1.0.*
.
1.2.0
Au lieu des anciennes méthodes Train()
utilisez les méthodes Supervised()
et Unsupervised()
.
Au lieu de FastTextArgs.SupervisedDefaults()
utilisez une surcharge SupervisedArgs
ou Supervised()
avec 2 arguments.