2017年5月17日水曜日

FastText C# 公開

FastTextのC#版を作成しました・・・w

ダウンロード


あ、あと↓のもあると結構便利に使えるかと思います・・・w
使い方は、WordAnalogiesにFastTextを放り込むだけですw
C++は初心者なので、色々と間違いもあるかと思いますが、ご容赦ください。



using FastText;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WorldMapEditor
{
    public class DistanceWorld3
    {
        // Heapリストの操作確認:たぶん大丈夫

        public static Fasttext ToVectorFile(string source)
        {
            string trainfile = Path.Combine(Application.StartupPath, "trandata.txt");
            System.IO.StreamWriter sw = new System.IO.StreamWriter(trainfile,
                false,
                //System.Text.Encoding.Unicode);
                System.Text.Encoding.UTF8);
            sw.Write(source);
            sw.Close();

            var word2vec = Train(trainfile);

            WordAnalogies.Init(word2vec);

            return word2vec;
        }

        static Fasttext Train(string txtPath,bool isSkipgram = true ,string pretrainedVectors = "")
        {
            Fasttext fasttext = new Fasttext();

            Args arg = new Args();
            arg.input = txtPath;
            arg.outputName = "result";

            if(isSkipgram)
                arg.model = Args.model_name.sg;
            else
                arg.model = Args.model_name.cbow;

            arg.pretrainedVectors = pretrainedVectors;

            fasttext.train(arg);

            return fasttext;
        }

        // 事前に訓練された単語ベクトルの使用が必ずしもより良いパフォーマンスにつながるわけではありません。エポック数(-epoch)や学習率(-lr)を減らすことができます
        /// <summary>
        /// 学習モデルの保存
        /// </summary>
        /// <param name="trainTxtPath">Train.txtは、ラベルと一緒に行ごとにトレーニング文を含むテキストファイル</param>
        /// <param name="pretrainedVectors">事前に訓練された単語表現</param>
        static Fasttext Supervised_Train(string trainTxtPath,string pretrainedVectors = "")
        {
            Fasttext fasttext = new Fasttext();

            Args arg = new Args();
            arg.input = trainTxtPath;
            arg.outputName = "result";

            // supervised
            arg.model = Args.model_name.sup;
            arg.pretrainedVectors = pretrainedVectors;

            fasttext.train(arg);

            return fasttext;
        }
    }
}


参考ソース:Facebook FastText