/// <summary> /// Append adaptation mapping file. /// </summary> /// <param name="filePath">The given file name.</param> public void Append(string filePath) { Helper.ThrowIfFileNotExist(filePath); using (StreamReader sr = new StreamReader(filePath)) { string line = null; while ((line = sr.ReadLine()) != null) { AdaptationMapping oneMapping = new AdaptationMapping(); string[] items = line.Split(new char[] { '\t', ' ' }); AdaptationTransformType type = (AdaptationTransformType)Enum.Parse(typeof(AdaptationTransformType), items[0], true); int transformNum = int.Parse(items[1]); for (int i = 0; i < transformNum; ++i) { line = sr.ReadLine(); items = line.Split(new char[] { '\t', ' ' }); Collection<string> modelCollection = new Collection<string>(); int transformIndex = int.Parse(items[0]); int modelNum = int.Parse(items[1]); for (int j = 0; j < modelNum; ++j) { modelCollection.Add(items[j + 2]); } oneMapping.Transform2ModelMapping.Add(transformIndex, modelCollection); } _adaptationMappings.Add(type, oneMapping); } } }
/// <summary> /// Creates mapping relationship between transform matrix and shared streams. /// </summary> /// <param name="mmfFile">The HMM model file, including unseen model.</param> /// <param name="regressionBaseFile">The regression base class definition file.</param> /// <param name="xformFile">The transform matrix file.</param> /// <returns>The mapping relationship between transform matrix and shared streams.</returns> public static AdaptationMapping CreateXformStreamMapping(string mmfFile, string regressionBaseFile, string xformFile) { Dictionary<string, string[,]> hmmStateMapping = HmmReader.GetHmmAndStateMapping(mmfFile); HtsRegressionBaseFile baseClassFile = new HtsRegressionBaseFile(); baseClassFile.Load(regressionBaseFile); HtsTransformFile transformFile = new HtsTransformFile(); transformFile.Load(xformFile); AdaptationMapping adaptationMapping = new AdaptationMapping(); foreach (KeyValuePair<int, Collection<int>> pair in transformFile.MeanFormMapping) { int xFormIndex = pair.Key; Debug.Assert(!adaptationMapping.Transform2ModelMapping.ContainsKey(xFormIndex)); adaptationMapping.Transform2ModelMapping.Add(xFormIndex, new Collection<string>()); foreach (int baseClassIndex in pair.Value) { foreach (var baseItem in baseClassFile.ClassDef[baseClassIndex]) { string[,] streamList = hmmStateMapping[baseItem.Name]; string streamName = streamList[0, 0]; // for duration model if (baseItem.StreamIndex > 0) { streamName = streamList[baseItem.StateIndex - 2, baseItem.StreamIndex - 1]; } if (!adaptationMapping.Transform2ModelMapping[xFormIndex].Contains(streamName)) { adaptationMapping.Transform2ModelMapping[xFormIndex].Add(streamName); } } } } return adaptationMapping; }