이는 Facebook의 FastText 라이브러리용 크로스 플랫폼 .NET Standard 래퍼입니다. 래퍼에는 Windows, Linux 및 MacO의 세 가지 플랫폼 모두에 대해 사전 컴파일된 기본 바이너리가 번들로 제공됩니다.
프로젝트에 추가하고 사용을 시작하세요! 추가 설정이 필요하지 않습니다. 이 라이브러리는 대상 플랫폼에 따라 적절한 네이티브 바이너리의 압축을 풀고 호출합니다.
물론 그렇지 않습니다! 그냥 완료되었습니다 :) fastText에 대한 주요 업데이트는 없으며 이 저장소의 대부분의 버그가 수정되었습니다. 모든 기능은 작동해야 하며, 작동하지 않는 경우에는 문제를 알려주시면 다시 연락드리겠습니다.
라이브러리 API는 fastText 명령줄 인터페이스를 밀접하게 따르므로 바로 시작할 수 있습니다.
가장 간단한 사용 사례는 기본 매개변수를 사용하여 지도 모델을 훈련하는 것입니다. FastTextWrapper
를 만들고 Supervised()
호출합니다.
var fastText = new FastTextWrapper();fastText.Supervised("cooking.train.txt", "cooking");
인수에 유의하십시오.
한 줄에 하나의 레이블이 지정된 예제가 있는 입력 파일을 지정합니다. 여기서는 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($"결과: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));varplotModel = new PlotModel{Series = { series },Axes ={new LinearAxis {Position = AxisPosition.Bottom, Title = "Recall"},new LinearAxis {Position = AxisPosition.Left, Title = "정밀도"}}};using (var stream = new FileStream("precision-recall.svg) ", FileMode.Create, FileAccess.Write)){SvgExporter.Export(plotModel, 스트림, 600, 600, 거짓);}
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", // 사용자 지정metricsPredictions = 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{// ... Other 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
클래스가 제거되었습니다.
주요 변경 사항: 기본 생성자를 사용하는 새로운 SupervisedArgs
위해 FastTextArgs.SupervisedDefaults()
제거했습니다.
주요 변경 사항: 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()
오버로드를 사용하세요.