これは、Facebook の FastText ライブラリのクロスプラットフォーム .NET Standard ラッパーです。ラッパーには、Windows、Linux、MacO の 3 つのプラットフォームすべてに対応する、プリコンパイルされたネイティブ バイナリがバンドルされています。
プロジェクトに追加するだけで使用を開始できます。追加の設定は必要ありません。このライブラリは、ターゲット プラットフォームに応じて、適切なネイティブ バイナリを解凍して呼び出します。
もちろん違います!これで完了です :) fastText には大きな更新はなく、このリポジトリのほとんどのバグは修正されています。すべての機能が動作するはずですが、何か動作しない場合は、問題について私に連絡してください。折り返しご連絡させていただきます。
ライブラリ API は fastText コマンドライン インターフェイスに厳密に準拠しているため、すぐに使用できます。
最も単純な使用例は、デフォルトのパラメーターを使用して教師ありモデルをトレーニングすることです。 FastTextWrapper
を作成し、 Supervised()
を呼び出します。
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking");
引数に注意してください。
1 行に 1 つのラベル付きサンプルを含む入力ファイルを指定します。ここでは Facebook の Stack Overflow クッキング データセットを使用します: https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz。抽出されたファイルは、トレーニング セットと検証セットに分割されており、このリポジトリのUnitTests
ディレクトリにあります。
モデルはcooking.bin
に保存され、同じディレクトリにあれば、事前学習済みベクトルを含むcooking.vec
が配置されます。
ここでは、2 つの引数を持つSupervised()
オーバーロードを使用します。これは、トレーニングがデフォルトのパラメーターで実行されることを意味します。これは良い出発点であり、次のように fastText を呼び出すのと同じです。
./fasttext 監視あり -入力クッキング.train.txt -出力クッキング
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
に異なる値を指定することもできます。
var result = fastText.Test("cooking.valid.txt");
集約されたメトリクスまたはラベルごとのメトリクスを見つけることができるTestResult
のインスタンスを取得します。
Console.WriteLine($"Results:ntPrecision: {result.GlobalMetrics.GetPrecision()}" +$"ntRecall: {result.GlobalMetrics.GetRecall()}" +$"ntF1: {result.GlobalMetrics.GetF1()}" );
適合率と再現率の曲線 (集計またはラベルごと) を取得することもできます。以下は、クロスプラットフォームの OxyPlot ライブラリを使用して SVG プロットをエクスポートする例です。
var result = fastText.Test("cooking.valid.txt");var Curve = result.GetPrecisionRecallCurve();var series = new LineSeries {StrokeThickness = 1};series.Points.AddRange(curve.Select(x => new DataPoint(x.recall, x.precision)).OrderBy(x => xX));var LotModel = 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-呼び出し.svg"、FileMode.Create、 FileAccess.Write)){SvgExporter.Export(plotModel, ストリーム, 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 autotune を使用して、自動ハイパーパラメータ検索を実行できます。
パラメーターの完全なリファレンスについては、https://github.com/facebookresearch/fastText/blob/master/docs/autotune.md を参照してください。
AutotuneArgs
使用してチューニングを制御します。
var fastText = new FastTextWrapper();var autotuneArgs = new AutotuneArgs{Duration = 30, // 秒単位でMetric = "precisionAtRecall:30", // カスタム メトリクスをサポートPredictions = 2, // @k予測をサポートModelSize = "10M", //これを設定して量子化モデルをトレーニングし、 // 追加の量子化ハイパーパラメータ検索を実行します。 QuantizedSupervisedArgs.ValidationFile = "cooking.valid.txt" // 必須: 検証ファイルへのパス};fastText.Supervised("cooking.train.txt", "cooking", new QuantizedSupervisedArgs(), autotuneArgs);
ネイティブ ライブラリから進行状況コールバックを取得できます。これを行うには、単純なトレーニングの場合はハンドラーを(Un)SupervisedArgs.TrainProgressCallback
に追加するか、ハイパーパラメーター調整の場合はAutotuneArgs.AutotuneProgressCallback
に追加します。
ShellProgressBar
ライブラリでトレーニング コールバックを使用する例については、 ConsoleTest
プロジェクトを参照してください。
using (var pBar = new ProgressBar(100, "Training")){var ftArgs = new SupervisedArgs{// ... その他の argsverbose = 0,TrainProgressCallback = (progress, loss, wst, lr, eta) =>{pBar. Tick((int)Math.Ceiling(progress * 100), $"損失: {損失}、単語/スレッド/秒: {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 を使用します。
.NET Core DI を介して標準のIloggerFactory
注入することもできます。
// 次の 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++ バイナリを使用するため、Windows で実行する場合は Visual C++ ランタイム バージョン 140 がインストールされている必要があります。 MS ダウンロード ページ (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) にアクセスし、適切な再配布可能ファイルを選択します。
C スタイル API で FastText を使用することに興味がある場合は、公式ライブラリの私のフォーク、https://github.com/olegtarasov/fastText を参照してください。
1.3.1
Facebook リポジトリからの最新の改善により、fastText バイナリを更新しました。
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 では、ライブラリ API にいくつかの重大な変更が導入されています。移行する準備ができていない場合は、v. 1.1.2
使用してください。
重大な変更:非推奨のTrain()
メソッドを両方とも削除しました。
重大な変更:非推奨のSupervisedArgs
クラスを削除しました。
重大な変更: FastTextArgs.SupervisedDefaults()
を削除し、デフォルトのコンストラクターを備えた新しいSupervisedArgs
を採用しました。
重大な変更: FastTextArgs
クラスは直接構築できません。新しいSupervisedArgs
クラスとUnsupervisedArgs
クラスを使用してください。
Skipgram または Cbow モデルをトレーニングするためのUnsupervised()
メソッドを追加しました。
1.1.2
1.1.*
ブランチでのbool
マーシャリングに関する恐ろしいバグを修正しました。
1.1.0
1.1.1
API の合理化の一環として、新しいSupervised()
メソッドが追加されました。
教師ありモデルをテストするための新しいTest()
メソッドが追加されました。
両方のTrain()
メソッドが非推奨になりました。これらは v. 1.2.0
で削除される予定です。
1.0.38
1.0.*
ブランチでのbool
マーシャリングに関する恐ろしいバグを修正しました。
1.2.0
移行ガイド古いTrain()
メソッドの代わりに、 Supervised()
とUnsupervised()
メソッドを使用します。
FastTextArgs.SupervisedDefaults()
の代わりに、2 つの引数を指定したSupervisedArgs
またはSupervised()
オーバーロードを使用します。