Ini adalah pembungkus Standar .NET lintas platform untuk perpustakaan FastText Facebook. Pembungkusnya dilengkapi dengan paket binari asli yang telah dikompilasi sebelumnya untuk ketiga platform: Windows, Linux, dan MacOs.
Cukup tambahkan ke proyek Anda dan mulai gunakan! Tidak diperlukan pengaturan tambahan. Pustaka ini akan membongkar dan memanggil biner asli yang sesuai bergantung pada platform target.
Tentu saja tidak! Selesai saja :) Tidak ada pembaruan besar untuk fastText, dan sebagian besar bug di repositori ini telah diperbaiki. Semua fitur seharusnya berfungsi dan jika ada yang tidak berfungsi — cukup hubungi saya jika ada masalah dan saya akan mencoba menghubungi Anda kembali.
Library API mengikuti antarmuka baris perintah fastText, sehingga Anda dapat langsung menggunakannya.
Kasus penggunaan paling sederhana adalah melatih model yang diawasi dengan parameter default. Kami membuat FastTextWrapper
dan memanggil Supervised()
.
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "memasak");
Perhatikan argumennya:
Kami menentukan file input dengan satu contoh berlabel per baris. Di sini kami menggunakan dataset memasak Stack Overflow dari Facebook: https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz. Anda dapat menemukan file yang diekstraksi dibagi menjadi set pelatihan dan validasi di direktori UnitTests
di repositori ini.
Model Anda akan disimpan ke cooking.bin
dan cooking.vec
dengan vektor yang telah dilatih sebelumnya akan ditempatkan di direktori yang sama.
Di sini kita menggunakan Supervised()
kelebihan dengan 2 argumen. Artinya pelatihan akan dilakukan dengan parameter default. Ini adalah titik awal yang baik dan sama dengan memanggil fastText dengan cara ini:
./fasttext diawasi -input memasak.train.txt -output memasak
Panggil LoadModel()
dan tentukan jalur ke file model .bin
:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");
Untuk menggunakan vektor yang telah dilatih sebelumnya untuk model yang diawasi, buat instance SupervisedArgs
dan sesuaikan:
Penting Tidak disebutkan hal ini di mana pun dalam dokumentasi asli, tetapi Anda harus menggunakan vektor yang sudah disiapkan sebelumnya dalam format teks (ekstensi file .vec
), dan bukan dalam format biner. Jika Anda mencoba menggunakan vektor biner, Anda akan mendapatkan kesalahan tentang vektor Anda yang berdimensi 0.
var fastText = new FastTextWrapper();var args = new SupervisedArgs{PretrainedVectors = "cooking.unsup.300.vec",dim = 300};fastText.Supervised("cooking.train.txt", "cooking", args);
Di sini kita mendapatkan argumen pelatihan default, menyediakan jalur ke file vektor yang telah dilatih sebelumnya dan menyesuaikan dimensi vektor.
Penting Pastikan untuk selalu memeriksa dimensi vektor terlatih Anda! Banyak vektor di internet memiliki dimensi 300
, tetapi dimensi default untuk pelatihan model yang diawasi fastText adalah 100
.
Sekarang Anda dapat dengan mudah menguji model yang diawasi terhadap set validasi. Anda juga dapat menentukan nilai yang berbeda untuk k
dan threshlod
.
var hasil = fastText.Test("memasak.valid.txt");
Anda akan mendapatkan contoh TestResult
tempat Anda dapat menemukan metrik gabungan atau per label:
Console.WriteLine($"Hasil:ntPrecision: {result.GlobalMetrics.GetPrecision()}" +$"ntRecall: {result.GlobalMetrics.GetRecall()}" +$"ntF1: {result.GlobalMetrics.GetF1()}" );
Anda bahkan bisa mendapatkan kurva perolehan presisi (agregat atau per label)! Berikut ini contoh mengekspor plot SVG dengan pustaka OxyPlot lintas platform:
var hasil = fastText.Test("cooking.valid.txt");var curve = hasil.GetPrecisionRecallCurve();var series = new LineSeries {StrokeThickness = 1};series.Points.AddRange(curve.Select(x => baru 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- recall.svg", FileMode.Buat, FileAccess.Write)){SvgExporter.Export(plotModel, stream, 600, 600, false);}
Anda dapat melatih model baru yang diawasi dan segera mengukurnya dengan mengganti SupervisedArgs
dengan QuantizedSupervisedArgs
:
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs());
Anda juga dapat memuat model yang sudah ada dan mengkuantisasinya:
var fastText = new FastTextWrapper();fastText.LoadModel("model.bin");fastText.Quantize();
Gunakan metode Unsupervised()
yang menentukan tipe model: Skipgram atau Cbow:
var fastText = new FastTextWrapper();fastText.Unsupervised(UnsupervisedModel.SkipGram, "cooking.train.nolabels.txt", "cooking");
Anda dapat menggunakan argumen opsional UnsupervisedArgs
untuk menyesuaikan pelatihan.
Anda dapat menggunakan fastText autotune untuk melakukan pencarian hyperparameter otomatis.
Lihat https://github.com/facebookresearch/fastText/blob/master/docs/autotune.md untuk referensi parameter lengkap.
Gunakan AutotuneArgs
untuk mengontrol penyetelan:
var fastText = new FastTextWrapper();var autotuneArgs = new AutotuneArgs{Duration = 30, // dalam detikMetric = "precisionAtRecall:30", // mendukung metrik khususPredictions = 2, // Mendukung @k prediksiModelSize = "10M", // Setel ini untuk melatih model terkuantisasi dan melakukan // pencarian hyperparameter kuantisasi tambahan. Memerlukan QuantizedSupervisedArgs.ValidationFile = "cooking.valid.txt" // DIPERLUKAN: jalur ke file validasi};fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs(), autotuneArgs);
Anda bisa mendapatkan panggilan balik kemajuan dari perpustakaan asli. Untuk melakukannya, tambahkan pengendali ke (Un)SupervisedArgs.TrainProgressCallback
untuk pelatihan sederhana, atau ke AutotuneArgs.AutotuneProgressCallback
untuk penyetelan hyperparameter.
Lihat proyek ConsoleTest
untuk contoh penggunaan callback pelatihan dengan pustaka ShellProgressBar
:
menggunakan (var pBar = new ProgressBar(100, "Training")){var ftArgs = new SupervisedArgs{// ... Other argsverbose = 0,TrainProgressCallback = (kemajuan, kerugian, wst, lr, eta) =>{pBar. Centang((int)Math.Ceiling(kemajuan * 100), $"Kerugian: {kerugian}, kata/utas/detik: {wst}, LR: {lr}, ETA: {eta}");}};fastText.Supervised("cooking.train.txt", outPath, ftArgs);}
stderr
Pustaka FastText asli melaporkan kemajuan pelatihan ke stderr
secara default. Anda dapat mematikan keluaran ini dengan menyetel (Un)SupervisedArgs.verbose = 0
untuk pelatihan sederhana dan AutotuneArgs.Verbose = 0
untuk penyetelan hyperparameter.
FastTextWrapper
dapat menghasilkan sejumlah kecil log yang sebagian besar berkaitan dengan pengelolaan perpustakaan asli. Anda dapat mengaktifkan proses masuk dengan memberikan contoh Microsoft.Extensions.Logging.ILoggerFactory
. Dalam contoh ini kami menggunakan Serilog dengan konsol sink.
Anda juga dapat menyuntikkan IloggerFactory
standar Anda melalui .NET Core DI.
// Tambahkan paket Nuget berikut ke proyek Anda:// * Serilog.Sinks.Console// * Serilog.Extensions.LoggingLog.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(theme: ConsoleTheme.None ).CreateLogger();var fastText = new FastTextWrapper(loggerFactory: new SerilogLoggerFactory());
Di versi 1.1
saya telah menambahkan penanganan kesalahan asli yang jauh lebih baik. Sekarang dalam kasus sebagian besar kesalahan asli Anda akan mendapatkan NativeLibraryException
yang bagus yang dapat Anda periksa untuk deskripsi kesalahan terperinci.
Karena pembungkus ini menggunakan biner C++ asli, Anda harus menginstal Visual C++ Runtime Versi 140 saat dijalankan di Windows. Kunjungi halaman Unduhan MS (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) dan pilih yang dapat didistribusikan ulang yang sesuai.
Jika Anda tertarik menggunakan FastText dengan API gaya C, berikut adalah cabang perpustakaan resmi saya: https://github.com/olegtarasov/fastText.
1.3.1
Biner fastText yang diperbarui dengan peningkatan terbaru dari repo Facebook.
1.3.0
Perpustakaan asli sekarang secara eksplisit disertakan dalam proyek target dan disalin ke direktori keluaran. Mudah-mudahan, ini memecahkan beberapa masalah dengan pendekatan sebelumnya yaitu mengekstraksi perpustakaan secara dinamis dari sumber daya.
1.2.5
Memperbaiki callback kemajuan untuk pelatihan model tanpa pengawasan.
1.2.4
Menambahkan callback kemajuan untuk pelatihan model dan penyetelan otomatis.
1.2.3
Menambahkan kuantisasi model terawasi dengan metode Quantize
.
Versi stabil dirilis!
1.2.2-preview
Digabungkan #20 dengan metode GetWordVector
baru.
1.2.1-preview
Menambahkan penyetelan otomatis model dengan dukungan kuantisasi.
Memperbaiki bug yang mengerikan dengan bool
marshalling.
1.2.0-preview
Versi 1.2.0 memperkenalkan beberapa perubahan yang dapat mengganggu pada API perpustakaan. Jika Anda belum siap untuk bermigrasi, gunakan v. 1.1.2
.
Perubahan besar: Menghapus kedua metode Train()
yang tidak digunakan lagi.
Perubahan besar: Menghapus kelas SupervisedArgs
yang tidak digunakan lagi.
Perubahan besar: FastTextArgs.SupervisedDefaults()
dihapus dan digantikan dengan SupervisedArgs
baru dengan konstruktor default.
Perubahan besar: Kelas FastTextArgs
tidak dapat dibuat secara langsung, gunakan kelas SupervisedArgs
dan UnsupervisedArgs
baru.
Menambahkan metode Unsupervised()
untuk melatih model Skipgram atau Cbow.
1.1.2
Memperbaiki bug mengerikan dengan bool
marshalling di cabang 1.1.*
.
1.1.0
, 1.1.1
Menambahkan metode Supervised()
baru sebagai bagian dari penyederhanaan API.
Menambahkan metode Test()
baru untuk menguji model yang diawasi.
Kedua metode Train()
tidak digunakan lagi. Mereka akan dihapus di v. 1.2.0
.
1.0.38
Memperbaiki bug mengerikan dengan bool
marshalling di cabang 1.0.*
.
1.2.0
Daripada menggunakan metode Train()
yang lama, gunakan metode Supervised()
dan Unsupervised()
.
Daripada FastTextArgs.SupervisedDefaults()
gunakan SupervisedArgs
atau Supervised()
kelebihan dengan 2 argumen.