如何为简单分类创建新的 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();
}
中获取了令牌生成代码
作为 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();
}
中获取了令牌生成代码