最近,东谈主工智能 (AI) 以惊东谈主的速率越来越受接待。
OpenAI 的 ChatGPT 是东谈主工智能的挫折,眷注高涨。
ChatGPT 激励了很多公司效仿的 AI 应用趋势。
你到处皆在阅读和听到对于东谈主工智能的信息。名东谈主饰演奇怪跳摆动作的视频和图像出现,或者您听到“执行上”也曾死了几年的艺术家的采访和歌曲。
底下将讲授东谈主工智能的确实功能。看成开辟东谈主员,咱们风气于分类想考并将问题领悟为小法子,这恰是总共东谈主工智能的责任神色。它们基于所谓的模子,这些模子也曾针对各自的应用规模进行了西宾。
示例:
若是您向 ChatGPT 提取图片,则必须使用 DALL-E 等单独的模子。
若是你条目一首诗,ChatGPT 使用讲话模子。
ChatGPT 只不外是一个使用不同模子来完成手头任务的聊天机器东谈主。
这等于我想运行并编写一个微型东谈主工智能的地点,该东谈主工智能将客户驳斥(以目田文骨子式提供)分类为正面或负面。
看成 .NET 开辟东谈主员,Microsoft 提供了一个低门槛的机器学习初学 ML.NET。这个免费的开源框架不错猖獗地将 ML 模子集成到新的和现存的 .NET 应用法子中,而无需了解 Python、R 或其他 ML 库。ML.NET 已包含很多用于常见用例的现成模子,而且不错猖獗集成到现存的 .NET 应用生命周期中。
机器学习的基础常识
术语“机器学习”描述了教测度机从数据中学习格式和关系的方法,而不是使用法例和法子逻辑对它们进行显式编程。其方针是使机器八成寥寂于样本数据进行“学习”,并应用这些常识来科罚近似的问题。
基本上有三种类型的学习:
监督学习
监督学习是一种机器学习方法,其中为模子提供西宾数据,包括输入数据(举例文本)和相应的所需输出(举例“正”或“负”瓜分类)。使用这些示例,系统不错学习识别将输入与输出关连的格式。这使它八成在以后瞻望新的、看不见的输入的正确输出。一个经典的应用示例是图像中的对象识别。
例:
使用 ML.NET 进行监督学习的一个应用示例是将居品驳斥分类为“正面”或“负面”。法子如下:
// Loading the training data with reviews and labels
var data = mlContext.Data.LoadFromTextFile(pathToFile);
// Creating the processing pipeline
var pipeline = mlContext.Transforms.Text.FeaturizeText("ReviewText", "Features")
.Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression("Label"));
// Training the model
var model = pipeline.Fit(data);
在这少量上,咱们有一个经过西宾的模子,不错对新驳斥进行分类。
无监督学习
无监督学习是一种机器学习方法,其中模子仅提供未标记的输入数据,举例文本或图像,而莫得任何关连的方针变量或分类。系统必须寥寂识别此原始数据中的结构、格式和关连性。一个典型的应用规模是聚类,其中不异的输入数据被汇总到组中。可能的示例是基于营销数据识别客户群,或者在分析文本时证实主题规模对新闻著作进行分组。
例:
无监督学习不错与文本聚类 ML.NET 一齐使用,举例:
// Loading the text data
var data = mlContext.Data.LoadFromTextFile(pathToFile);
// Create the text featurisation pipeline
var pipeline = mlContext.Transforms.Text.FeaturizeText("ArticleText", "Features");
// Train the clustering model
var model = mlContext.Clustering.Trainers.KMeans(pipeline, numberOfClusters: 5).Fit(data);
// Predict the cluster membership for new articles
var predictions = model.Transform(data);
举例,通过这种神色,新闻著作不错自动分类为政事、交易、体育等主题集群。
ML.NET 主要侧重于监督和部分无监督学习。ML.NET 现时莫得为强化学习提供任何特定的复旧,在强化学习中,东谈主工智能在模拟环境中通过奖励进行西宾。这种学习范式特地用于策略发现任务,举例游戏或经由优化。
强化学习
强化学习是一种学习范式,其中东谈主工智能在模拟环境中通过反复训诲进行西宾。与监督学习比拟,莫得具有输入输出对的完整西宾示例。相悖,系统会收到每个操作的分数(奖励),这标明该操作有多“好”。通过最大化蕴蓄的奖励,东谈主工智能学会了为任务找到最好策略。这种强化学习旨趣特地用于需要找到复杂策略的任务。例子包括棋盘游戏,如国外象棋或围棋,还有机器东谈主适度、经由优化或自动驾驶的应用。
示例:
一个经典的应用法子示例是国外象棋玩家代理。这里的环境可能是一个棋盘,可能的动作是移动动作。然后,代理财收到每步棋的评估,举例,+1 示意笃定的棋子凯旋,-5 示意行将输掉棋子。通过很多西宾游戏,东谈主工智能不错学习哪些动作不错带来永久的凯旋,从而最大猖狂地升迁其蕴蓄奖励。
修复开辟环境
若要运利用用 ML.NET,咱们需要版块 4.6.1 或更高版块的 .NET Core 或 .NET Framework 环境。ML.NET 不错在 Visual Studio、Visual Studio Code 或高歌行中使用。
第一步是装置所需的 NuGet 包 ML.NET:The first step is to install the required NuGet packages of :
Install-Package Microsoft.ML
此主包包含基本功能,举例 ML.NET 高下文、数据挽回以及包含模子和任务的目次。对于其他功能,不错添加其他包,举例用于图像处理的 Microsoft.ML.Vision 或用于推选系统的 Microsoft.ML.Recommender。
装置后,咱们不错在 Visual Studio 中创建 .NET Core 或 .NET Framework 适度台应用法子并运行开辟。
(可选)集成器具(如 Visual Studio 中的模子生成器界面或 ML.NET CLI )可用于可视化数据和创建模子。我稍后再谈这个问题。
创建第一个 ML 模子
底下,通过示例迟缓讲授 ML.NET 的基本见解:
客户驳斥的分类基于目田文本。
成果应该是将这些评级归类为正面或负面。
这是一个经典的监督学习问题。
咱们创建新的 C# 适度台应用法子并导入 ML.NET NuGet 包。
接下来,咱们将数据集加载到责任内存中。在咱们的示例中,咱们需要一个 TSV(制表符分隔文献)文献。这由适度台应用法子中的粗浅类示意:
此类代表 TSV 文献中的每一滑。
publicclassReciewData
{
}
当今,咱们为 TSV 数据的每一列添加属性:
publicclassReviewData
{
publicstring ReviewText { get; set; }
publicbool Label { get; set; }
}
倒霉的是,这还不及以加载此 TSV 文献并教 ML.Net 怎样援用此文献。
为此,咱们需要属性:LoadColumn 加上列的索引。
publicclassReviewData
{
[LoadColumn(0)]
publicstring ReviewText { get; set; }
[LoadColumn(1)]
publicbool Label { get; set; }
}
这是从 ReviewText 属性到 TSV 文献 ReviewText 列的粗浅映射。
当今,让咱们处理文献的存储旅途,并将它们保存在咱们的应用法子中:
起初,咱们创建西宾文献的旅途,即 TSV 文献 (Review.tsv)。
string baseDirectory = @"..\\..\\AI";
string subDirectory = "TrainingData";
string trainingDataFilePath = Path.Combine(baseDirectory, subDirectory, "Reviews.tsv");
咱们将使用此文献来西宾要用于分类的模子。
当今,咱们界说要西宾的模子的旅途。此模子保存为 ZIP 文献。
string modelPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "model.zip");
当今咱们需要一个 MLContext 变量。MLContext 可与 EF DbContext 相忘形。因此,每当要使用机器学习时,皆必须与 MLContext 进行交互,近似于 EF Core 中的 DBContext。
当今咱们已准备好加载数据。咱们不错证实需要操作它来证实咱们的条目西宾模子。
当今咱们构建模子:
为此,咱们需要 ML.NET 的特定类型。The IDataView:
var trainingDataView = mlContext.Data.LoadFromTextFile(trainingDataFilePath, separatorChar: '\t', hasHeader: true);
当今,我不错使用 MLContext 中名为 LoadFromTextFile 的函数。' 当今用于将数据投影到咱们率先创建的类中。当今必须将西宾文献的旅途传递给此函数。看成奖励,咱们不错在这里指定更多选项,举例 TSV 文献的分隔符以及咱们的西宾文献是否有标头(咱们有一个标头,是以我将此参数修复为 true)。
当今咱们也曾将数据加载到 DataView 中,咱们不错运行预处理了。预处理是创建所谓的管谈的一种方法。这以后可用于在咱们有传入数据(举例咱们的客户分数)时实施瞻望。为此,咱们需要从创建的数据视图 (IDataView) 中提取数据,然后对其进行挽回,以便将其用作机器学习过程的一部分。
当今,让咱们创建管谈。这具有特定的复返类型:IEstimator:
///
/// Creates the machine learning pipeline for review classification.
///
/// The ML context.
/// The machine learning pipeline.
publicstaticIEstimatorCreatePipeline(MLContext context)
{
return context.Transforms.Text.FeaturizeText("Features", "ReviewText")
.Append(context.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: "Label"))
.AppendCacheCheckpoint(context);
}
**Context.Transforms.Text。**FeaturizeText 是 ML.NET 中的文本挽回组件,用于将文本数据挽回为数值身分。
“特征”是包含生成的数值特征的新列称呼。
**“ReviewText”**是 TSV 文献中包含要挽回为数字特征的文本的列的称呼。
当今运行西宾模子:
**'。Append“将下一步添加到管谈中。使用“Context.BinaryClassification.Trainers.SdcaLogisticRegression”**西宾模子,该算法界说了要西宾模子的算法,在本例中为 SdcaLogisticRegression 算法。“标签”是示意要瞻望的方针变量的列或列的称呼。在咱们的示例中,它是对这种评估是积极的照旧颓靡的分类。
让咱们再次回顾一下:
此高歌生成实施以下法子的管谈:
文本特征化:“ReviewText”列中的文本将挽回为数字身分,并存储在新的“身分”列中。
模子西宾:“特征”列中的数值特征用于西宾具有“标签”列中方针变量的二元分类模子。
当今,咱们也曾创建了管谈,不错运行西宾模子了。
var pipeline = CreatePipeline(mlContext);
var model = pipeline.Fit(trainingDataView);
咱们使用“管谈。适当(...)' 高歌证实 TSV 文献中的数据西宾模子。然后将模子存储在内存中。
关联词,为了保存模子而无谓每次皆创建和重新西宾它,咱们不错使用“Save”方法。这使咱们八成将西宾好的模子保存在特定的文献旅途中。通过这种神色,咱们不错在需要时粗浅地加载和使用模子,而无谓每次皆重新西宾它。
MlContext 中有一个选项,咱们不错在其中找到 Save 函数:
context.Model.Save(model, schema, modelPath);
起初,咱们从 TSV 文献的 IDataView 传输经过西宾的模子和架构,然后传输要保存模子的旅途。
咱们当今也曾西宾了咱们的模子并将其保存到硬盘中。
当今咱们需要另一个示意西宾的 DataSet 的类,即模子的成果(瞻望类)。为此,咱们从 TSV 文献 (ReviewData) 创建另一个与 DataSet 类具有近似结构的类。
publicclassReviewPrediction
{
[ColumnName("PredictedLabel")]
publicbool PredictedLabel { get; set; }
}
该属性界说在 MLContext 中使用“PredictedLabel”列的称呼来读取其中的瞻望值。
为了将模子磋磨到瞻望类,咱们当今需要一个 PipelineEngine。咱们从 MLContext 再次创建此引擎。
var predictionEngine = mlContext.Model.CreatePredictionEngine(model);
咱们将泛型类型 TSrc(源)和 TDst(方针)用于输入和输出类,“ReviewData”和“ReviewPrediction”(“Good rating”、“Positiv”)。
各个组件偏握交互当今应该是不错延续的:为什么咱们需要将文本挽回为数字特征,为什么咱们需要准备数据以便测度机八成延续它,以及咱们的“ReviewData”类是咱们的源类,“ReviewDataPrediction”是咱们的方针类。
当今咱们也曾完成了准备法子,咱们不错参预瞻望阶段。
当今,让咱们来处理实施瞻望并复返预期方针变量的代码。
在咱们的示例中,瞻望成果是一个布尔值。
第一步是输入一个分数,然后咱们将其写入“ReviewData”输入类。
var input = newReviewData { ReviewText = inputReviewText };
变量“ReviewText”是一个字符串变量,包含咱们的审阅。
当今,咱们将“ReviewData”类型的输入变量传递到咱们刚刚创建的管谈。
因此,咱们收到“ReviewPrediction”输出类,当今不错通过该变量从模子看望方针变量。
// Classify the new rating and display the result
var prediction = predictionEngine.Predict(input);
Console.WriteLine($"The classification for the rating ‘{ input.ReviewText}’ is: { (prediction.PredictedLabel ? "Positiv" : "Negativ")}");
若是模子具有考究的西宾数据,咱们当今应该取得正确的瞻望成果。
它似乎有用。
固然,这仅仅一个小例子,模子并不完竣,但若是你西宾得好,遐想情况下它应该老是复返正确的成果。
以下扩张已添加到示例中,用于在输入不正确或未知时重新西宾模子。
启动应用法子时,您不错遴荐向模子添加新数据和径直西宾,也不错创建新防护。
鄙人面的著作中,我将仔细征询图像识别和瞻望。
回顾:
尽管本文仅限于文天职类,但仔细不雅察并带有少量创造力,所描述的方法开辟了很多可能性。举例,对某个分类的识别可用于自动触发进一步的过程。
总的来说,不错说东谈主工智能具有弘大的后劲,不错在泛泛生计的很多规模为咱们提供复旧并优化经由。文天职类仅仅广漠可能应用中的一个例子。不错假定,翌日越来越多的规模将受益于东谈主工智能的可能性,这将为公司和个东谈主开辟新的契机。
若是你心爱我的著作,请给我一个赞!谢谢