예제 #1
0
        public static MathLib CreateMathLib(MathLibType type)
        {
            IMathLib mathLibImpl;

            switch (type)
            {
            case MathLibType.Recursive:
                mathLibImpl = new MathLibRecursive();
                break;

            case MathLibType.ListFunction:
                mathLibImpl = new MathLibListFunction();
                break;

            default:
                throw new ArgumentException($"The type {type} is not supported.");
            }

            return(new MathLib(mathLibImpl));
        }
예제 #2
0
        public static void LoadArgs(string conf_filename)
        {
            FileStream   mstream = new FileStream(conf_filename, FileMode.Open, FileAccess.Read);
            StreamReader mreader = new StreamReader(mstream);

            while (!mreader.EndOfStream)
            {
                string[] cmds = mreader.ReadLine().Split('\t');
                if (cmds.Length < 2)
                {
                    continue;
                }
                if (cmds[0].Equals("CORPUS"))
                {
                    CORPUS = cmds[1];
                }
                if (cmds[0].Equals("EMB_FILE"))
                {
                    EMB_FILE = cmds[1];
                }
                if (cmds[0].Equals("FEA_LIST"))
                {
                    string   feaList = cmds[1];
                    string[] feas    = feaList.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    if (feas.Contains("l3g"))
                    {
                        featureList.l3g = true;
                    }
                    if (feas.Contains("root"))
                    {
                        featureList.root = true;
                    }
                    if (feas.Contains("infl"))
                    {
                        featureList.infl = true;
                    }
                }
                //if (cmds[0].Equals("FEAFILE"))
                //{
                //    FEAFILE = cmds[1];
                //}

                if (cmds[0].Equals("LINEAR_MAPPING"))
                {
                    Linear_Mapping = int.Parse(cmds[1].Trim().ToUpper());
                }

                if (cmds[0].Equals("reserved_settings"))
                {
                    reserved_settings = cmds[1];
                }
                if (cmds[0].Equals("CUBLAS"))
                {
                    if (int.Parse(cmds[1]) == 1)
                    {
                        CuBlasEnable = true;
                    }
                    else
                    {
                        CuBlasEnable = false;
                    }
                }

                if (cmds[0].Equals("NTRIAL"))
                {
                    NTRIAL = int.Parse(cmds[1]);
                }
                if (cmds[0].Equals("BATCHSIZE"))
                {
                    BATCH_SIZE = int.Parse(cmds[1]);
                }
                if (cmds[0].Equals("PARM_GAMMA"))
                {
                    PARM_GAMMA = float.Parse(cmds[1]);
                }
                if (cmds[0].Equals("MAX_ITER"))
                {
                    MAX_ITER = int.Parse(cmds[1]);
                }
                if (cmds[0].Equals("SHALLOW_SOURCE"))
                {
                    SHALLOW_SOURCE = cmds[1];
                    IS_SHALLOW     = true;
                }
                if (cmds[0].Equals("SHALLOW_TARGET"))
                {
                    SHALLOW_TARGET = cmds[1];
                    IS_SHALLOW     = true;
                }
                if (cmds[0].Equals("DEVICE"))
                {
                    device = int.Parse(cmds[1]);
                    Cudalib.CudaSetDevice(device);
                }

                if (cmds[0].Equals("LFILE"))
                {
                    LFILE = cmds[1];
                }
                if (cmds[0].Equals("LEARNINGRATE"))
                {
                    LearningParameters.lr_begin      = float.Parse(cmds[1]);
                    LearningParameters.lr_mid        = float.Parse(cmds[1]);
                    LearningParameters.lr_latter     = float.Parse(cmds[1]);
                    LearningParameters.learning_rate = float.Parse(cmds[1]);
                }
                if (cmds[0].Equals("SEEDMODEL1"))
                {
                    SEEDMODEL1 = cmds[1];
                    ISSEED     = true;
                    //NOTrain = true;
                }
                if (cmds[0].Equals("SEEDMODEL2"))
                {
                    SEEDMODEL2 = cmds[1];
                    ISSEED     = true;
                    //NOTrain = true;
                }
                if (cmds[0].Equals("SEEDMODEL3"))
                {
                    SEEDMODEL3 = cmds[1];
                    ISSEED     = true;
                }
                if (cmds[0].Equals("SEEDMODEL4"))
                {
                    SEEDMODEL4 = cmds[1];
                    ISSEED     = true;
                }
                if (cmds[0].Equals("SOURCE_LAYER_DIM"))
                {
                    string[] items = cmds[1].Split(',');
                    SOURCE_LAYER_DIM = new int[items.Length];
                    int i = 0;
                    foreach (string s in items)
                    {
                        SOURCE_LAYER_DIM[i] = int.Parse(s);
                        i++;
                    }
                }

                if (cmds[0].Equals("TARGET_LAYER_DIM"))
                {
                    string[] items = cmds[1].Split(',');
                    TARGET_LAYER_DIM = new int[items.Length];
                    int i = 0;
                    foreach (string s in items)
                    {
                        TARGET_LAYER_DIM[i] = int.Parse(s);
                        i++;
                    }
                }
                if (cmds[0].Equals("VALIDATEQFILE"))
                {
                    VALIDATE_QFILE = cmds[1];
                }
                if (cmds[0].Equals("VALIDATEDFILE"))
                {
                    VALIDATE_DFILE = cmds[1];
                }
                if (cmds[0].Equals("VALIDATEPAIR"))
                {
                    VALIDATE_QDPAIR = cmds[1];
                }
                if (cmds[0].Equals("VALIDATEPROCESS"))
                {
                    VALIDATE_PROCESS = cmds[1];
                    ISVALIDATE       = true;
                }
                if (cmds[0].Equals("VALIDATE_MODEL_ONLY"))
                {
                    if (int.Parse(cmds[1]) == 1)
                    {
                        VALIDATE_MODEL_ONLY = true;
                    }
                    else
                    {
                        VALIDATE_MODEL_ONLY = false;
                    }
                }
                if (cmds[0].Equals("EVULATIONEXE"))
                {
                    EVULATION_EXE = cmds[1];
                }
                if (cmds[0].Equals("LOAD_MODEL_OLD_FORMAT"))
                {
                    if (!bool.TryParse(cmds[1], out LoadModelOldFormat))
                    {
                        LoadModelOldFormat = cmds[1].Trim().Equals("1");
                    }
                }
                if (cmds[0].Equals("LOAD_INPUT_BACKWARD_COMPATIBLE_MODE"))
                {
                    if (cmds[1].Equals("BOW", StringComparison.OrdinalIgnoreCase))
                    {
                        LoadInputBackwardCompatibleMode = "BOW";
                        FeatureValueAsInt = true;
                    }
                    else if (cmds[1].Equals("SEQ", StringComparison.OrdinalIgnoreCase))
                    {
                        LoadInputBackwardCompatibleMode = "SEQ";
                        FeatureValueAsInt = true;
                    }
                }
                if (cmds[0].Equals("FEATURE_VALUE_AS_INT"))
                {
                    if (!bool.TryParse(cmds[1], out FeatureValueAsInt))
                    {
                        FeatureValueAsInt = cmds[1].Trim().Equals("1");
                    }
                }
                if (cmds[0].Equals("MATH_LIB"))
                {
                    if (cmds[1].Trim().ToUpper() == "CPU")
                    {
                        MATH_LIB = MathLibType.cpu;
                    }
                    else
                    {
                        MATH_LIB = MathLibType.gpu;
                    }
                }
                if (cmds[0].Equals("CPU_MATH_LIB_THREAD_NUM"))
                {
                    ParameterSetting.BasicMathLibThreadNum = int.Parse(cmds[1]);
                    if (ParameterSetting.BasicMathLibThreadNum < 1)
                    {
                        throw new Exception("Error! CPU_MATH_LIB_THREAD_NUM should be >= 1");
                    }
                }
                if (cmds[0].Equals("RANDOM_SEED"))
                {
                    RANDOM_SEED = int.Parse(cmds[1]);
                    if (RANDOM_SEED >= 0)
                    {
                        PSEUDO_RANDOM = true;
                    }
                    else
                    {
                        PSEUDO_RANDOM = false;
                    }
                }
            }
            if (PSEUDO_RANDOM)
            {
                Random = new Random(RANDOM_SEED);
            }
            else
            {
                Random = new Random();
            }
            mreader.Close();
            mstream.Close();

            InflModel.wordListPath   = DIC;
            InflModel.infl2oriPath   = FEAFILE + "infl2ori.txt";
            InflModel.oriListpath    = FEAFILE + "oriList.txt";
            RootModel.rootListpath   = FEAFILE + "rootList.txt";
            RootModel.word2rootsPath = FEAFILE + "word2roots.txt";

            Console.WriteLine(CORPUS);
        }