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

2017年5月13日土曜日

次回!CppSharpがGUI版になって勝手に帰ってくる!

CppSharp2015GUIforWIndows

できました!あとはお好みで用途に合わせてソースコードを編集してください・・・w

あと使い方を詳しく書くと、
前の記事を参照してください・・・w とりあえあず、DLLのバージョンがVS2015の0.84で、ソースコードのバージョンがVisalStudio2015の0.84になりますw これでビルドできるはずですw バージョンが違うと動かないのでその辺はなんとかしてください・・・w

参考:CppSharpへのいざない - Qiita

2017年5月11日木曜日

真・CppSharp動かし隊(コーヒー淹れまっか?




とりあえず、最新版のCppSharpがとんでもないくせもので、一筋縄では動かない代物でした・・・w

まず、公式のソースコードがMacでないとLLVMはビルドできない・・・これは普通にあることですね・・・w なので、配布先にあるDLLを使用したらWindowsでも動くわけですよ!楽勝です!

それで、 ConsoleDriver.Run(new SampleLibrary); するわけです!

動きません!


なんで動かないんだ!ってことで夜中の1時30頃まで徹夜して5時間くらい悩みました・・・w

まず、
CppSharpBinaries-master
これをダウンロードしました。
それでいて、ダウンロードトップのCppSharpのソースコードを使ったら、ビルドが通りません!





それで、デバッグしたら、VisualStudioがいるよ~みたいな表示がでたので、なんでVisualStudo2017つかってるのにビルドできないんだって考えたけど、わからなかったので、古いファイルを探すことにしました。



ダウンロードページの一番下のNextボタンの次のページにありました。
それで、この一番上のDLLと最初にDLしたソースファイルでいけるだろうっと思ったら、動きませんでした・・・w そのときデバッグエラーにVisualStudio2017が必要とでました・・・w 
なので、ソースファイルとVsiualStudoのバージョンがいっちしてないと動かないということがわかりましたw


次に、DLLをVs2015の0.84にして、ソースコードを↑画像の一番下のにしてVisualStudo2015で動かしたら、MSVCToolchain.csがないとでましたw
なので、C:\projects\cppsharp\srcにsrcフォルダをコピーました(もしかしたら普通にC直下に置かなくても動くかもしれませんが、動かないときはお試しください)
CppSharp.CLI.exeの方でコピーが必要でした・・・w

今度は見事にCppSharpが動きました・・・w

あと、Qiitaのページだと赤丸が一番下のDLLにありましたw 以前までは最新のDLLで動かせたみたいですね・・・w 本当にCppSharpの仕様変更はよくわかりませんw もしかしたら、これから先まだまだCppSharpは仕様変更あるかもしれませんね・・・w

それから、プロジェクトで出力先にはCppSharp.Parser.dllと CppSharp.CppParser.dllはコピーして貼り付けてください。この二つのdllはC++で作られてるので、参照に追加できません・・・w Comならいけるんでしょうが、Com参照したことないのでよくわかりませんw


参考元:CppSharpへのいざない



(補足)DLL動かないときに試したんですが、CppSharpBinaries-masterのCppSharp.CLI.exeで動くかなって思ったんですけど、ソースコードみたら動かない感じですね・・・w


 本来コマンドラインのArg変数からパスとか取得するはずなんですけど、ソースコードみたら、ArgはL=とかのコマンドにしか対応してないです。


そして、messagesリストからパス追加する仕組みになってたんですけど、このmessagesリストに追加するものが見当たりませんでした・・・なのでCppSharp.CLI.exeが動くかどうかわかりません・・・もしかしたら動かしたら動くのかもしれません・・・w 詳しく動作確認する前に面倒だったのでDLLの方を動かせたので動くかはわからずじまいでしたw
よくみたら、Argからファイル追加する部分がありました・・・急いでたので見落としてましたw

あと、ConsoleDriver.Runしなくても、Generatorクラス使ったら、動かせるかなって思ったんですけど、なぜか抽象クラスになってて動かせませんでした・・・w

CppSharpの詳しいドキュメントが公式で公開されるのを祈るばかりです・・・w


とりあえず、CppSharpのGUI版作ろうかと思いますw オープンソースの予定ですw そんなに小難しいものでもないですが、あったらすごく便利なんですよねw 昔はCppSharpもGUI版をユーザーさんが公開してたような気がしてたんですけど、CppSharp使わないからほっといたら、いつのまにかなくなってました・・・w

あと最近はコーヒーは飲まないですね・・・w 安物のキャラメルコーヒーはなんか腕のとこにシミみたいな塊が残りましたし・・・w コールタールでしょうか?海外製だとよくわかりませんねw あとコーヒーをたまにしか飲まないと寝れないですねw ノンカフェインコーヒーが飲みたいですw

「次回!CppSharpがGUI版になって勝手に帰ってくる!」