如何为简单分类创建新的 AutoML 数据集 (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);

我收到以下错误:

字段: dataset.dataset_metadata;消息:未设置必填字段

根据本用户手册,我应该设置Dataset Metadata Type,但该列表仅包含特定类型的分类(翻译/图像分类等(,我找不到简单的分类类型。 如何使用 API 创建简单的分类数据集?在AutoML UI中,只需单击一个简单的按钮("新数据集"( - 并且必须仅提供名称和区域 - 没有分类类型。

我还尝试设置:

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

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

更新

我刚刚注意到 Nuget 适用于 AutoML v1,但 v1 测试版确实包含TablesDatasetMetadata用于正常分类的数据集元数据类型。我无言以对。

我今天在使用 NodeJS 客户端创建数据集时也遇到了这种情况。由于 Google AutoML 表服务处于测试级别,因此您需要使用 AutoML 客户端的测试版。在Google云文档中,他们使用beta客户端来创建数据集。

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

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

在@RajithaWarusavitarana评论和我的最后一个问题更新之后,下面是解决问题的代码。令牌由GoogleClientAPInuget 生成,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测试文件中获取了令牌生成代码

最新更新