هذا عبارة عن برنامج تضمين قياسي .NET مشترك بين الأنظمة الأساسية لمكتبة FastText الخاصة بفيسبوك. يأتي المجمع مزودًا بثنائيات أصلية مجمعة مسبقًا لجميع الأنظمة الأساسية الثلاثة: Windows وLinux وMacOs.
فقط أضفه إلى مشروعك وابدأ في استخدامه! لا يلزم إعداد إضافي. ستقوم هذه المكتبة بفك ضغط واستدعاء الملف الثنائي الأصلي المناسب اعتمادًا على النظام الأساسي المستهدف.
بالطبع لا! لقد اكتمل للتو :) لا توجد تحديثات رئيسية لـ fastText، وتم إصلاح معظم الأخطاء في هذا المستودع. من المفترض أن تعمل جميع الميزات، وإذا لم يعمل شيء ما، فما عليك سوى إرسال رسالة إليّ بمشكلة وسأحاول الرد عليك.
تتبع Library API واجهة سطر أوامر fastText بشكل وثيق، حتى تتمكن من الدخول مباشرة.
إن أبسط حالة استخدام هي تدريب نموذج خاضع للإشراف باستخدام المعلمات الافتراضية. نقوم بإنشاء FastTextWrapper
ونستدعي Supervised()
.
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking");
لاحظ الحجج:
نحدد ملف إدخال بمثال واحد مسمى في كل سطر. نستخدم هنا مجموعة بيانات الطبخ Stack Overflow من Facebook: https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz. يمكنك العثور على الملفات المستخرجة مقسمة إلى مجموعات تدريب وتحقق من الصحة في دليل UnitTests
في هذا المستودع.
سيتم حفظ النموذج الخاص بك في cooking.bin
وسيتم وضع cooking.vec
مع المتجهات المدربة مسبقًا في نفس الدليل.
نستخدم هنا التحميل الزائد Supervised()
مع وسيطتين. وهذا يعني أن التدريب سيتم باستخدام المعلمات الافتراضية. إنها نقطة بداية جيدة وتشبه استدعاء fastText بهذه الطريقة:
./fasttext خاضعة للإشراف -input Cooking.train.txt -output Cooking
قم باستدعاء LoadModel()
وحدد المسار إلى ملف نموذج .bin
:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");
لاستخدام المتجهات المدربة مسبقًا لنموذجك الخاضع للإشراف، قم بإنشاء مثيل SupervisedArgs
وتخصيصه:
هام: لا يتم ذكر ذلك في أي مكان في الوثائق الأصلية، ولكن يجب عليك استخدام المتجهات المعدة مسبقًا بتنسيق نصي (امتداد ملف .vec
)، وليس بتنسيق ثنائي. إذا حاولت استخدام المتجهات الثنائية، فسوف تحصل على خطأ بشأن أن المتجهات ذات البعد 0.
var fastText = new FastTextWrapper();var args = new SupervisedArgs{PretrainedVectors = "cooking.unsup.300.vec",dim = 300};fastText.Supervised("cooking.train.txt", "cooking", args);
هنا نحصل على وسيطات التدريب الافتراضية، ونوفر مسارًا لملف المتجهات المُدربة مسبقًا ونضبط أبعاد المتجه وفقًا لذلك.
هام تأكد دائمًا من التحقق من أبعاد المتجهات المدربة مسبقًا! تحتوي العديد من المتجهات الموجودة على الإنترنت على بُعد 300
، لكن البعد الافتراضي للتدريب على نموذج fastText الخاضع للإشراف هو 100
.
يمكنك الآن بسهولة اختبار نموذج خاضع للإشراف مقابل مجموعة التحقق من الصحة. يمكنك تحديد قيم مختلفة لـ k
و threshlod
أيضًا.
نتيجة فار = fastText.Test("cooking.valid.txt");
سوف تحصل على مثيل TestResult
حيث يمكنك العثور على مقاييس مجمعة أو لكل تصنيف:
Console.WriteLine($"Results:ntPrecision: {result.GlobalMetrics.GetPrecision()}" +$"ntRecall: {result.GlobalMetrics.GetRecall()}" +$"ntF1: {result.GlobalMetrics.GetF1()}" );
يمكنك أيضًا الحصول على منحنى الاسترجاع الدقيق (مجمع أو لكل ملصق)! فيما يلي مثال على تصدير مخطط SVG باستخدام مكتبة OxyPlot عبر الأنظمة الأساسية:
نتيجة var = fastText.Test("cooking.valid.txt");منحنى var = نتيجة.GetPrecisionRecallCurve();سلسلة var = new LineSeries {StrokeThickness = 1};series.Points.AddRange(curve.Select(x => new DataPoint(x.recall, x.precision)).OrderBy(x => xX));varplotModel = new PlotModel{Series = { series}، المحاور = {محور خطي جديد {الموضع = AxisPosition.Bottom، العنوان = "استدعاء"}، محور خطي جديد {الموضع = AxisPosition.Left، العنوان = "الدقة"}}}؛ باستخدام (varstream = FileStream الجديد ("precision-recall.svg"، FileMode.Create، FileAccess.Write)){SvgExporter.Export(plotModel,stream, 600, 600, false);}
يمكنك تدريب نموذج جديد خاضع للإشراف وتحديد حجمه فورًا عن طريق استبدال SupervisedArgs
بـ QuantizedSupervisedArgs
:
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs());
يمكنك أيضًا تحميل نموذج موجود وقياسه:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");fastText.Quantize();
استخدم طريقة Unsupervised()
لتحديد نوع النموذج: Skipgram أو Cbow:
var fastText = new FastTextWrapper();fastText.Unsupervised(UnsupervisedModel.SkipGram, "cooking.train.nolabels.txt", "cooking");
يمكنك استخدام وسيطة UnsupervisedArgs
اختيارية لتخصيص التدريب.
يمكنك استخدام الضبط التلقائي fastText لإجراء بحث تلقائي عن المعلمات الفائقة.
ارجع إلى https://github.com/facebookresearch/fastText/blob/master/docs/autotune.md للحصول على مرجع المعلمة الكامل.
استخدم AutotuneArgs
للتحكم في الضبط:
var fastText = new FastTextWrapper();var autotuneArgs = new AutotuneArgs{Duration = 30, // بالثوانيMetric = "precisionAtRecall:30"، // يدعم المقاييس المخصصة = 2، // يدعم تنبؤات @kModelSize = "10M"، // اضبط هذا لتدريب نموذج كمي وإجراء // بحث إضافي عن المعلمات الفائقة للتكميم. يتطلب QuantizedSupervisedArgs.ValidationFile = "cooking.valid.txt" // مطلوب: المسار إلى ملف التحقق من الصحة};fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs(), autotuneArgs);
يمكنك الحصول على عمليات الاسترجاعات الخاصة بالتقدم من المكتبة الأصلية. للقيام بذلك، قم بإضافة معالج إلى (Un)SupervisedArgs.TrainProgressCallback
للتدريب البسيط، أو إلى AutotuneArgs.AutotuneProgressCallback
لضبط المعلمة الفائقة.
راجع مشروع ConsoleTest
للحصول على مثال لاستخدام عمليات الاسترجاعات التدريبية مع مكتبة ShellProgressBar
:
باستخدام (var pBar = new ProgressBar(100, "Training")){var ftArgs = new SupervisedArgs{// ... Other argsverbose = 0,TrainProgressCallback = (progress, Loss, wst, lr, eta) =>{pBar. ضع علامة ((int)Math.Ceiling(progress * 100)، $"الخسارة: {loss}، الكلمات/الخيط/الثانية: {wst}, LR: {lr}, ETA: {eta}");}};fastText.Supervised("cooking.train.txt", outPath, ftArgs);}
stderr
تُبلغ مكتبة FastText الأصلية عن تقدم التدريب على stderr
افتراضيًا. يمكنك إيقاف تشغيل هذا الإخراج عن طريق تعيين (Un)SupervisedArgs.verbose = 0
للتدريب البسيط و AutotuneArgs.Verbose = 0
لضبط المعلمة الفائقة.
يمكن FastTextWrapper
إنتاج كمية صغيرة من السجلات تتعلق في الغالب بإدارة المكتبة الأصلية. يمكنك تشغيل تسجيل الدخول عن طريق توفير مثيل لـ Microsoft.Extensions.Logging.ILoggerFactory
. في هذا المثال نستخدم Serilog مع حوض وحدة التحكم.
يمكنك أيضًا إدخال IloggerFactory
القياسي الخاص بك من خلال .NET Core DI.
// أضف حزم Nuget التالية إلى مشروعك::// * Serilog.Sinks.Console// * Serilog.Extensions.LoggingLog.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(theme: ConsoleTheme.None .CreateLogger();var fastText = new FastTextWrapper(loggerFactory: new SerilogLoggerFactory());
في الإصدار 1.1
أضفت معالجة أفضل للأخطاء الأصلية. الآن، في حالة حدوث معظم الأخطاء الأصلية، سوف تحصل على NativeLibraryException
الذي يمكنك فحصه للحصول على وصف تفصيلي للخطأ.
نظرًا لأن هذا المجمع يستخدم ثنائيات C++ الأصلية ضمن الغطاء، فستحتاج إلى تثبيت Visual C++ Runtime الإصدار 140 عند التشغيل تحت نظام Windows. تفضل بزيارة صفحة تنزيلات MS (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) وحدد الملف المناسب القابل لإعادة التوزيع.
إذا كنت مهتمًا باستخدام FastText مع C-style API، فإليك فرع المكتبة الرسمية الخاص بي: https://github.com/olegtarasov/fastText.
1.3.1
تحديث ثنائيات fastText مع أحدث التحسينات من Facebook repo.
1.3.0
يتم الآن تضمين المكتبات الأصلية بشكل صريح في المشروع المستهدف ونسخها إلى دليل الإخراج. نأمل أن يحل هذا بعض المشكلات في النهج السابق المتمثل في استخراج المكتبات ديناميكيًا من الموارد.
1.2.5
تم إصلاح عمليات الاسترجاعات المتعلقة بالتقدم للتدريب على النماذج غير الخاضعة للرقابة.
1.2.4
تمت إضافة عمليات رد الاتصال الخاصة بالتقدم للتدريب النموذجي والضبط التلقائي.
1.2.3
تمت إضافة تكميم النموذج الخاضع للإشراف باستخدام طريقة Quantize
.
تم إصدار نسخة مستقرة!
1.2.2-preview
تم دمج رقم 20 مع طريقة GetWordVector
الجديدة.
1.2.1-preview
تمت إضافة الضبط التلقائي للنموذج مع دعم التكميم.
تم إصلاح الخلل الفظيع في تنظيم bool
.
1.2.0-preview
يقدم الإصدار 1.2.0 بعض التغييرات العاجلة في واجهة برمجة تطبيقات المكتبة. إذا لم تكن مستعدًا للترحيل، فاستخدم الإصدار 1.1.2
.
التغيير العاجل: تمت إزالة طريقتي Train()
المهملتين.
تغيير جذري: تمت إزالة فئة SupervisedArgs
المهملة.
التغيير العاجل: تمت إزالة FastTextArgs.SupervisedDefaults()
لصالح SupervisedArgs
الجديدة ذات المُنشئ الافتراضي.
تغيير جذري: لا يمكن إنشاء فئة FastTextArgs
مباشرة، استخدم فئتي SupervisedArgs
و UnsupervisedArgs
الجديدة.
تمت إضافة طريقة Unsupervised()
لتدريب نماذج Skipgram أو Cbow.
1.1.2
تم إصلاح الخلل الفظيع في تنظيم bool
على فرع 1.1.*
.
1.1.0
، 1.1.1
تمت إضافة طريقة Supervised()
جديدة كجزء من تبسيط واجهة برمجة التطبيقات.
تمت إضافة طريقة Test()
جديدة لاختبار النموذج الخاضع للإشراف.
تم إهمال كلتا الطريقتين Train()
. ستتم إزالتها في الإصدار 1.2.0
.
1.0.38
تم إصلاح الخلل الفظيع في تنظيم bool
على فرع 1.0.*
.
1.2.0
بدلاً من أساليب Train()
القديمة، استخدم أساليب Supervised()
و Unsupervised()
.
بدلاً من FastTextArgs.SupervisedDefaults()
استخدم SupervisedArgs
أو Supervised()
التحميل الزائد مع وسيطتين.