Este es un contenedor .NET Standard multiplataforma para la biblioteca FastText de Facebook. El contenedor viene con binarios nativos precompilados para las tres plataformas: Windows, Linux y MacOs.
¡Simplemente agrégalo a tu proyecto y comienza a usarlo! No se requiere configuración adicional. Esta biblioteca descomprimirá y llamará al binario nativo apropiado según la plataforma de destino.
¡Por supuesto que no! Está simplemente completo :) No hay actualizaciones importantes para fastText y la mayoría de los errores en este repositorio están corregidos. Todas las funciones deberían funcionar y, si algo no funciona, envíame un mensaje con un problema e intentaré comunicarme contigo.
La API de la biblioteca sigue de cerca la interfaz de línea de comandos de fastText, por lo que puede acceder directamente.
El caso de uso más sencillo es entrenar un modelo supervisado con parámetros predeterminados. Creamos un FastTextWrapper
y llamamos Supervised()
.
var fastText = new FastTextWrapper();fastText.Supervised("cocina.train.txt", "cocina");
Tenga en cuenta los argumentos:
Especificamos un archivo de entrada con un ejemplo etiquetado por línea. Aquí utilizamos el conjunto de datos de cocina Stack Overflow de Facebook: https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz. Puede encontrar archivos extraídos divididos en conjuntos de capacitación y validación en el directorio UnitTests
de este repositorio.
Su modelo se guardará en cooking.bin
y cooking.vec
con vectores previamente entrenados se colocará en el mismo directorio.
Aquí usamos la sobrecarga Supervised()
con 2 argumentos. Esto significa que el entrenamiento se realizará con parámetros predeterminados. Es un buen punto de partida y es lo mismo que llamar a fastText de esta manera:
./fasttext supervisado -entrada cocinando.train.txt -salida cocinando
Llame LoadModel()
y especifique la ruta al archivo del modelo .bin
:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");
Para utilizar vectores previamente entrenados para su modelo supervisado, cree una instancia de SupervisedArgs
y personalícela:
Importante No dice esto en ninguna parte de la documentación original, pero debe utilizar vectores predeterminados en formato de texto (extensión de archivo .vec
) y no en formato binario. Si intenta utilizar vectores binarios, obtendrá un error acerca de que sus vectores tienen la dimensión 0.
var fastText = new FastTextWrapper();var args = new SupervisedArgs{PretrainedVectors = "cooking.unsup.300.vec",dim = 300};fastText.Supervised("cooking.train.txt", "cooking", args);
Aquí obtenemos argumentos de entrenamiento predeterminados, proporcionamos una ruta al archivo de vectores previamente entrenado y ajustamos la dimensión del vector en consecuencia.
Importante ¡Asegúrese de verificar siempre la dimensión de sus vectores previamente entrenados! Muchos vectores en Internet tienen una dimensión de 300
, pero la dimensión predeterminada para el entrenamiento de modelos supervisados por fastText es 100
.
Ahora puede probar fácilmente un modelo supervisado con un conjunto de validación. También puede especificar diferentes valores para k
y threshlod
.
resultado var = fastText.Test("cocina.valid.txt");
Obtendrá una instancia de TestResult
donde podrá encontrar métricas agregadas o por etiqueta:
Console.WriteLine($"Resultados:ntPrecision: {result.GlobalMetrics.GetPrecision()}" +$"ntRecall: {result.GlobalMetrics.GetRecall()}" +$"ntF1: {result.GlobalMetrics.GetF1()}" );
¡Incluso puede obtener una curva de recuperación de precisión (agregada o por etiqueta)! A continuación se muestra un ejemplo de exportación de un gráfico SVG con la biblioteca OxyPlot multiplataforma:
var resultado = fastText.Test("cooking.valid.txt");var curva = resultado.GetPrecisionRecallCurve();var serie = nueva LineSeries {StrokeThickness = 1};series.Points.AddRange(curve.Select(x => nueva 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"}}};using (var stream = new FileStream("precision- recordar.svg", FileMode.Create, FileAccess.Write)){SvgExporter.Export(plotModel, stream, 600, 600, false);}
Puedes entrenar un nuevo modelo supervisado y cuantizarlo inmediatamente reemplazando SupervisedArgs
con QuantizedSupervisedArgs
:
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs());
También puedes cargar un modelo existente y cuantizarlo:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");fastText.Quantize();
Utilice el método Unsupervised()
especificando el tipo de modelo: Skipgram o Cbow:
var fastText = new FastTextWrapper();fastText.Unsupervised(UnsupervisedModel.SkipGram, "cooking.train.nolabels.txt", "cooking");
Puede utilizar un argumento opcional UnsupervisedArgs
para personalizar el entrenamiento.
Puede utilizar el ajuste automático de fastText para realizar una búsqueda automática de hiperparámetros.
Consulte https://github.com/facebookresearch/fastText/blob/master/docs/autotune.md para obtener una referencia completa de los parámetros.
Utilice AutotuneArgs
para controlar el ajuste:
var fastText = new FastTextWrapper();var autotuneArgs = new AutotuneArgs{Duración = 30, // en segundosMetric = "precisionAtRecall:30", // admite métricas personalizadasPredicciones = 2, // Admite @k prediccionesModelSize = "10M", // Configure esto para entrenar un modelo cuantificado y realizar una // búsqueda adicional de hiperparámetros de cuantificación. Requiere QuantizedSupervisedArgs.ValidationFile = "cooking.valid.txt" // REQUERIDO: ruta a un archivo de validación};fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs(), autotuneArgs);
Puede obtener devoluciones de llamadas de progreso desde la biblioteca nativa. Para hacerlo, agregue un controlador a (Un)SupervisedArgs.TrainProgressCallback
para un entrenamiento simple o a AutotuneArgs.AutotuneProgressCallback
para un ajuste de hiperparámetros.
Consulte el proyecto ConsoleTest
para ver un ejemplo del uso de devoluciones de llamadas de entrenamiento con la biblioteca ShellProgressBar
:
usando (var pBar = new ProgressBar(100, "Training")){var ftArgs = new SupervisedArgs{// ... Otros argsverbose = 0,TrainProgressCallback = (progress, loss, wst, lr, eta) =>{pBar. Tick((int)Math.Ceiling(progreso * 100), $"Pérdida: {pérdida}, palabras/hilo/seg: {wst}, LR: {lr}, ETA: {eta}");}};fastText.Supervised("cooking.train.txt", outPath, ftArgs);}
stderr
La biblioteca nativa FastText informa el progreso del entrenamiento a stderr
de forma predeterminada. Puede desactivar esta salida configurando (Un)SupervisedArgs.verbose = 0
para un entrenamiento simple y AutotuneArgs.Verbose = 0
para un ajuste de hiperparámetros.
FastTextWrapper
puede producir una pequeña cantidad de registros, principalmente relacionados con la gestión de bibliotecas nativas. Puede activar el inicio de sesión proporcionando una instancia de Microsoft.Extensions.Logging.ILoggerFactory
. En este ejemplo utilizamos Serilog con receptor de consola.
También puede inyectar su IloggerFactory
estándar a través de .NET Core DI.
// Agregue los siguientes paquetes Nuget a su proyecto:// * Serilog.Sinks.Console// * Serilog.Extensions.LoggingLog.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(theme: ConsoleTheme.None ).CreateLogger();var fastText = new FastTextWrapper(loggerFactory: new SerilogLoggerFactory());
En la versión 1.1
agregué un manejo de errores nativo mucho mejor. Ahora, en el caso de la mayoría de los errores nativos, obtendrá una agradable NativeLibraryException
que puede inspeccionar para obtener una descripción detallada del error.
Dado que este contenedor utiliza binarios nativos de C++ internamente, necesitará tener instalado Visual C++ Runtime versión 140 cuando se ejecute en Windows. Visite la página de Descargas de MS (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) y seleccione el redistribuible apropiado.
Si está interesado en utilizar FastText con API estilo C, aquí está mi bifurcación de la biblioteca oficial: https://github.com/olegtarasov/fastText.
1.3.1
Binarios fastText actualizados con las últimas mejoras del repositorio de Facebook.
1.3.0
Las bibliotecas nativas ahora se incluyen explícitamente en el proyecto de destino y se copian en el directorio de salida. Con suerte, esto resuelve un par de problemas con el enfoque anterior de extraer dinámicamente bibliotecas de recursos.
1.2.5
Se corrigieron las devoluciones de llamada de progreso para el entrenamiento de modelos no supervisados.
1.2.4
Se agregaron devoluciones de llamada de progreso para el entrenamiento y el ajuste automático del modelo.
1.2.3
Se agregó la cuantificación del modelo supervisado con el método Quantize
.
¡Lanzada la versión estable!
1.2.2-preview
° 20 combinado con el nuevo método GetWordVector
.
1.2.1-preview
Se agregó autoajuste del modelo con soporte de cuantificación.
Se corrigió un error horrible con la clasificación bool
.
1.2.0-preview
La versión 1.2.0 introduce algunos cambios importantes en la API de la biblioteca. Si no está listo para migrar, use la versión 1.1.2
.
Cambio importante: se eliminaron ambos métodos Train()
obsoletos.
Cambio importante: se eliminó la clase SupervisedArgs
obsoleta.
Cambio importante: se eliminó FastTextArgs.SupervisedDefaults()
en favor de nuevos SupervisedArgs
con constructor predeterminado.
Cambio importante: la clase FastTextArgs
no se puede construir directamente; utilice las nuevas clases SupervisedArgs
y UnsupervisedArgs
.
Se agregó un método Unsupervised()
para entrenar modelos Skipgram o Cbow.
1.1.2
Se corrigió un error horrible con la clasificación bool
en una rama 1.1.*
.
1.1.0
, 1.1.1
Se agregó un nuevo método Supervised()
como parte de la optimización de la API.
Se agregó un nuevo método Test()
para probar el modelo supervisado.
Se desaprobaron ambos métodos Train()
. Se eliminarán en la versión 1.2.0
.
1.0.38
Se corrigió un error horrible con la clasificación bool
en una rama 1.0.*
.
1.2.0
En lugar de los antiguos métodos Train()
utilice los métodos Supervised()
y Unsupervised()
.
En lugar de FastTextArgs.SupervisedDefaults()
utilice la sobrecarga SupervisedArgs
o Supervised()
con 2 argumentos.