Overview

We start by defining the structures.

For multi-label classification, we introduce a new enum class and a different PHP class to handle multiple labels.

<?php

$loader = require 'vendor/autoload.php';

$loader->add('Cognesy\\Instructor\\', __DIR__.'../../src/');



use Cognesy\Instructor\Instructor;



/** Potential ticket labels */

enum Label : string {

    case TECH_ISSUE = "tech_issue";

    case BILLING = "billing";

    case SALES = "sales";

    case SPAM = "spam";

    case OTHER = "other";

}



/** Represents analysed ticket data */

class TicketLabels {

    /** @var Label[] */

    public array $labels = [];

}

?>

Classifying Text

The function multi_classify executes multi-label classification using LLM.

<?php

// Perform single-label classification on the input text.

function multi_classify(string $data) : TicketLabels {

    return (new Instructor())->respond(

        messages: [[

            "role" => "user",

            "content" => "Label following support ticket: {$data}",

        ]],

        responseModel: TicketLabels::class,

    );

}

?>

Testing and Evaluation

Finally, we test the multi-label classification function using a sample support ticket.

<?php

// Test single-label classification

$ticket = "My account is locked and I can't access my billing info.";

$prediction = multi_classify($ticket);



dump($prediction);



assert(in_array(Label::TECH_ISSUE, $prediction->labels));

assert(in_array(Label::BILLING, $prediction->labels));

?>