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)); }
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); }