如何为简单分类创建新的 AutoML 数据集 (C#)

How to create new AutoML DataSet for simple classification (C#)

作为 ML 自动化过程的一部分,我想动态创建新的 AutoML 模型。我正在使用 C#(.net 框架)和 Google.Cloud.AutoML.V1

尝试 运行 CreateDataSet 代码后:

var autoMlClient = AutoMlClient.Create();
var parent = LocationName.FromProjectLocation(_projectId, _locationId);

var dataset = new Google.Cloud.AutoML.V1.Dataset();
dataset.DisplayName = "NewDataSet";    
var response = autoMlClient.CreateDataset(parent, dataset);

我收到以下错误:

Field: dataset.dataset_metadata; Message: Required field not set

按照这个user manual我应该设置Dataset Metadata Type,但是列表只包含特定类型的分类(Translation/ImageClassifications等),我找不到简单的分类类型. 如何使用 API 创建简单的分类数据集?在 AutoML UI 中只需单击一个简单的按钮 ("NEW DATASET") - 并且必须仅提供名称和区域 - 没有分类类型。

我也试过设置:

dataset.TextClassificationDatasetMetadata = 
     new TextClassificationDatasetMetadata() { ClassificationType = ClassificationType.Multiclass };

但是我无法导入数据(从输入的CSV文件中得到了太多无效输入的错误)​​,我想这与输入格式不适合文本分类的原因有关。

更新

我刚刚注意到 Nuget 使用 AutoML v1 but v1 beta 确实包含 TablesDatasetMetadata 用于正常分类的数据集元数据类型。我无语了

我今天在使用NodeJS客户端创建数据集时也遇到了这种情况。由于 Google AutoML table 服务处于测试版,您需要使用测试版的 AutoML 客户端。在 Google cloud documentation 中,他们使用了测试客户端来创建数据集。

在 NodeJS 中导入测试版 require('@google-cloud/automl').v1beta1.AutoMlClient 而不是导入普通版本 (v1) require('@google-cloud/automl').v1 让我成功执行了创建数据集功能。

在 C# 中,您可以通过 POST request 实现相同的目的。希望这有帮助:)

在@RajithaWarusavitarana 评论和我的最后一个问题更新之后,下面是实现这一技巧的代码。令牌由 GoogleClientAPI nuget 生成,AutoML 由 REST 处理。

string GcpGlobalEndPointUrl = "https://automl.googleapis.com";
string GcpGlobalLocation = "us-central1";   // api "parent" parameter

public string GetToken(string jsonFilePath)
{
    var serviceAccountCredentialFileContents = System.IO.File.ReadAllText(jsonFilePath);

    var credentialParameters = NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(serviceAccountCredentialFileContents);
    var initializer = new ServiceAccountCredential.Initializer(credentialParameters.ClientEmail)
    {
        Scopes = new List<string> { "https://www.googleapis.com/auth/cloud-platform" }
    };
    var cred = new ServiceAccountCredential(initializer.FromPrivateKey(credentialParameters.PrivateKey));

    string accessToken = cred.GetAccessTokenForRequestAsync("https://oauth2.googleapis.com/token").Result;
    return accessToken;
}

public void GetDataSetList(string projectId, string token)
{
    var restClient = new RestClient(GcpGlobalEndPointUrl);

    var createDataSetReqUrl = $"v1beta1/projects/{projectId}/locations/{GcpGlobalLocation}/datasets";
    var createDataSetReq = new RestRequest(createDataSetReqUrl, Method.GET);
    createDataSetReq.AddHeader("Authorization", $"Bearer {token}");

    var createDatasetResponse = restClient.Execute(createDataSetReq);
    createDatasetResponse.Dump();
}

我从 google-api-dotnet-client Test File

中获取了令牌生成代码