Yapay Zeka

Olmayan şarkının şarkıcısı kim olur

Aklınıza gelen bir şarkı sözünü aramak istediniz. Daha önce birinin söylediği şarkı ise eğer işimiz kolay. Henüz hiç kimsenin söylemediği bir şarkı sözü arama alanına yazdığınızda ne geliyor? Eğer bu şarkıyı söyleseydi kim söylerdi diye merak ediyorsanız bu kodlar ve dataset aradığınızı verecektir. Verileri legal yollarla toplamadığım için bu konudaki çalışmalar paylaşmayacağım. Çalışan örnek aşağıdaki linktedir.

http://music.metinyakar.net

Açıklamalar: IIS gibi bir web uygulaması içerisinde yayınladığımda bir süre istek olmadığı zaman suspend olması ve istek aldığında zip dosyasını tekrar predict etmesi zaman aldığı için sayfa timeout’a düşebiliyordu. Bunun için Uygulama havuzundan seçili uygulamayı always running yapmak faydalı oluyor. Ciddi bir sunucu kaynağını sürekli dedike ettiğimizi hatırlamakta fayda var.

using Microsoft.ML;
using Microsoft.ML.AutoML;
using Microsoft.ML.Data;
using Microsoft.ML.Trainers;
using Newtonsoft.Json;
using Tensorflow.Contexts;
using Tensorflow.Keras.Engine;
using static Tensorflow.RunOptions.Types;

public class AI {
    MLContext context;
    ITransformer trainedModel;
    public AI() {
        context = new MLContext();
        trainedModel = context.Model.Load("model.zip", out var schema);
    }

    public void BuildModel() {
        if (!File.Exists("model.zip"))
            Test(Train());
        else
            Test();
    }

    public ITransformer Train() {
        var trainData = context.Data.LoadFromTextFile<DataModel>(path: "musics.csv", hasHeader: true, separatorChar: ',');
        var pipeline = context.Transforms.Text.FeaturizeText(inputColumnName: @"Words", outputColumnName: @"Words")
                                .Append(context.Transforms.Concatenate(@"Features", new[] { @"Words" }))
                                .Append(context.Transforms.Conversion.MapValueToKey(outputColumnName: @"SingerName", inputColumnName: @"SingerName"))
                                .Append(context.Transforms.NormalizeMinMax(@"Features", @"Features"))
                                .Append(context.MulticlassClassification.Trainers.SdcaMaximumEntropy(new SdcaMaximumEntropyMulticlassTrainer.Options() { L1Regularization = 1F, L2Regularization = 0.1F, LabelColumnName = @"SingerName", FeatureColumnName = @"Features" }))
                                .Append(context.Transforms.Conversion.MapKeyToValue(outputColumnName: @"PredictedLabel", inputColumnName: @"PredictedLabel"));

        var model = pipeline.Fit(trainData);
        Console.WriteLine("Model training completed");
        context.Model.Save(model, trainData.Schema, "model.zip");
        return model;
    }

    public void Test(ITransformer trainedModel=null) {
        if(trainedModel==null)
            trainedModel = context.Model.Load("model.zip", out var schema);

        var ml = context.Model.CreatePredictionEngine<DataModel, OutputModel>(trainedModel);
        var predict = ml.Predict(new DataModel {
            Words = "şarkı sözü deneme"
        });
        Console.WriteLine($"Predict : {predict.PredictedLabel}");
    }

    public string Predict(string key) {
        var ml = context.Model.CreatePredictionEngine<DataModel, OutputModel>(trainedModel);
        var predict = ml.Predict(new DataModel {
            Words = key
        });
        return predict.PredictedLabel;
    }
}