/// <summary> /// This function returns a schema for sequence predictor's output. Its output column is always called <see cref="MetadataUtils.Const.ScoreValueKind.PredictedLabel"/>. /// </summary> /// <param name="scoreType">Score column's type produced by sequence predictor.</param> /// <param name="scoreColumnKindValue">A metadata value of score column. It's the value associated with key /// <see cref="MetadataUtils.Kinds.ScoreColumnKind"/>.</param> /// <param name="keyNames">Sequence predictor usually generates integer outputs. This field tells the tags of all possible output values. /// For example, output integer 0 cound be mapped to "Sell" and 0 to "Buy" when predicting stock trend.</param> /// <returns><see cref="DataViewSchema"/> of sequence predictor's output.</returns> public static DataViewSchema CreateSequencePredictionSchema(DataViewType scoreType, string scoreColumnKindValue, VBuffer <ReadOnlyMemory <char> > keyNames = default) { Contracts.CheckValue(scoreType, nameof(scoreType)); Contracts.CheckValue(scoreColumnKindValue, nameof(scoreColumnKindValue)); var metadataBuilder = new DataViewSchema.Metadata.Builder(); // Add metadata columns including their getters. We starts with key names of predicted keys if they exist. if (keyNames.Length > 0) { metadataBuilder.AddKeyValues(keyNames.Length, TextDataViewType.Instance, (ref VBuffer <ReadOnlyMemory <char> > value) => value = keyNames); } metadataBuilder.Add(MetadataUtils.Kinds.ScoreColumnKind, TextDataViewType.Instance, (ref ReadOnlyMemory <char> value) => value = scoreColumnKindValue.AsMemory()); metadataBuilder.Add(MetadataUtils.Kinds.ScoreValueKind, TextDataViewType.Instance, (ref ReadOnlyMemory <char> value) => value = MetadataUtils.Const.ScoreValueKind.PredictedLabel.AsMemory()); // Build a schema consisting of a single column. var schemaBuilder = new DataViewSchema.Builder(); schemaBuilder.AddColumn(MetadataUtils.Const.ScoreValueKind.PredictedLabel, scoreType, metadataBuilder.ToMetadata()); return(schemaBuilder.ToSchema()); }
public DataView(IHostEnvironment env, ArrayDataViewBuilder builder, int rowCount) { Contracts.AssertValue(env, "env"); _host = env.Register("ArrayDataView"); _host.AssertValue(builder); _host.Assert(rowCount >= 0); _host.Assert(builder._names.Count == builder._columns.Count); _columns = builder._columns.ToArray(); var schemaBuilder = new DataViewSchema.Builder(); for (int i = 0; i < _columns.Length; i++) { var meta = new DataViewSchema.Metadata.Builder(); if (builder._getSlotNames.TryGetValue(builder._names[i], out var slotNamesGetter)) { meta.AddSlotNames(_columns[i].Type.GetVectorSize(), slotNamesGetter); } if (builder._getKeyValues.TryGetValue(builder._names[i], out var keyValueGetter)) { meta.AddKeyValues(_columns[i].Type.GetKeyCountAsInt32(_host), TextDataViewType.Instance, keyValueGetter); } schemaBuilder.AddColumn(builder._names[i], _columns[i].Type, meta.ToMetadata()); } _schema = schemaBuilder.ToSchema(); _rowCount = rowCount; }
private void AddMetadata(int iinfo, DataViewSchema.Metadata.Builder builder) { builder.Add(InputSchema[_parent.ColumnPairs[iinfo].inputColumnName].Metadata, name => name == MetadataUtils.Kinds.SlotNames); ValueGetter <VBuffer <ReadOnlyMemory <char> > > getter = (ref VBuffer <ReadOnlyMemory <char> > dst) => { GetKeyValues(iinfo, ref dst); }; builder.AddKeyValues(CharsCount, TextDataViewType.Instance, getter); }