### Description

When completing a zero_shot classification task, there is the input sequence (provided by the user), and labels (also provided by the user). 

Tokenization as it is done now tokenizes the input sequence len(labels) times. We should really only do it once and pass those tokenized values to request builder. 

Some of the changes introduce here: https://github.com/elastic/elasticsearch/pull/84777 should make implementing this simpler (as there will be a unified temporary tokenization result object).
x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/inference/nlp/ZeroShotClassificationProcessor.java
}
    @Override
    public NlpTask.RequestBuilder getRequestBuilder(NlpConfig nlpConfig) {
        final String[] labelsValue;
        if (nlpConfig instanceof ZeroShotClassificationConfig zeroShotConfig) {
            labelsValue = zeroShotConfig.getLabels().toArray(new String[0]);
        } else {
            labelsValue = this.labels;
        }
        if (labelsValue == null || labelsValue.length == 0) {
            throw ExceptionsHelper.badRequestException("zero_shot_classification requires non-empty [labels]");
        }
        return new RequestBuilder(tokenizer, labelsValue, hypothesisTemplate);
    }
    @Override
    public NlpTask.ResultProcessor getResultProcessor(NlpConfig nlpConfig) {
        final String[] labelsValue;
        final boolean isMultiLabelValue;
        final String resultsFieldValue;
        if (nlpConfig instanceof ZeroShotClassificationConfig zeroShotConfig) {
            labelsValue = zeroShotConfig.getLabels().toArray(new String[0]);
            isMultiLabelValue = zeroShotConfig.isMultiLabel();
            resultsFieldValue = zeroShotConfig.getResultsField();
        } else {
            labelsValue = this.labels;
            isMultiLabelValue = this.isMultiLabel;
            resultsFieldValue = this.resultsField;
        }
        return new ResultProcessor(entailmentPos, contraPos, labelsValue, isMultiLabelValue, resultsFieldValue);