#
Pipelines für Inferenzen

Die `pipeline()` macht es einfach, jedes beliebige Modell aus dem Hub für die Inferenz auf jede Sprache, Computer Vision, Sprache und multimodale Aufgaben zu verwenden. Selbst wenn Sie keine Erfahrung mit einer bestimmten Modalität haben oder nicht mit dem zugrundeliegenden Code hinter den Modellen vertraut sind, können Sie sie mit der `pipeline()` für Inferenzen verwenden! In diesem Beispiel lernen Sie, wie:

- Eine `pipeline()` für Inferenz zu verwenden.
- Einen bestimmten Tokenizer oder ein bestimmtes Modell zu verwenden.
- Eine `pipeline()` für Audio-, Vision- und multimodale Aufgaben zu verwenden.

Eine vollständige Liste der unterstützten Aufgaben und verfügbaren Parameter finden Sie in der `pipeline()`-Dokumentation.

##
Verwendung von Pipelines

Obwohl jede Aufgabe eine zugehörige `pipeline()` hat, ist es einfacher, die allgemeine `pipeline()`-Abstraktion zu verwenden, die alle aufgabenspezifischen Pipelines enthält. Die `pipeline()` lädt automatisch ein Standardmodell und eine Vorverarbeitungsklasse, die für Ihre Aufgabe inferenzfähig ist.

1. Beginnen Sie mit der Erstellung einer `pipeline()` und geben Sie eine Inferenzaufgabe an:

    >>> from transformers import pipeline

    >>> generator = pipeline(task="text-generation")

2. Übergeben Sie Ihren Eingabetext an die `pipeline()`:

    >>> generator(
    ...     "Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone"
    ... )  # doctest: +SKIP
    [{'generated_text': 'Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone, Seven for the Iron-priests at the door to the east, and thirteen for the Lord Kings at the end of the mountain'}]

Wenn Sie mehr als eine Eingabe haben, übergeben Sie die Eingabe als Liste:

    >>> generator(
    ...     [
    ...         "Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone",
    ...         "Nine for Mortal Men, doomed to die, One for the Dark Lord on his dark throne",
    ...     ]
    ... )  # doctest: +SKIP

Alle zusätzlichen Parameter für Ihre Aufgabe können auch in die `pipeline()` aufgenommen werden. Die Aufgabe `Text-Generierung` hat eine `generate()`-Methode mit mehreren Parametern zur Steuerung der Ausgabe. Wenn Sie zum Beispiel mehr als eine Ausgabe erzeugen wollen, setzen Sie den Parameter `num_return_sequences`:

    >>> generator(
    ...     "Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone",
    ...     num_return_sequences=2,
    ... )  # doctest: +SKIP

###
Wählen Sie ein Modell und einen Tokenizer

Die `pipeline()` akzeptiert jedes Modell aus dem Hub. Auf dem Hub gibt es Tags, mit denen Sie nach einem Modell filtern können, das Sie für Ihre Aufgabe verwenden möchten. Sobald Sie ein passendes Modell ausgewählt haben, laden Sie es mit der entsprechenden `AutoModelFor` und `AutoTokenizer` Klasse. Laden Sie zum Beispiel die Klasse `AutoModelForCausalLM` für eine kausale Sprachmodellierungsaufgabe:

    >>> from transformers import AutoTokenizer, AutoModelForCausalLM

    >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
    >>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")

Erstellen Sie eine `pipeline()` für Ihre Aufgabe, und geben Sie das Modell und den Tokenizer an, die Sie geladen haben:

    >>> from transformers import pipeline

    >>> generator = pipeline(task="text-generation", model=model, tokenizer=tokenizer)

Übergeben Sie Ihren Eingabetext an die `pipeline()` , um einen Text zu erzeugen:

    >>> generator(
    ...     "Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone"
    ... )  # doctest: +SKIP
    [{'generated_text': 'Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone, Seven for the Dragon-lords (for them to rule in a world ruled by their rulers, and all who live within the realm'}]

##
Audio-Pipeline

Die `pipeline()` unterstützt auch Audioaufgaben wie Audioklassifizierung und automatische Spracherkennung.

Lassen Sie uns zum Beispiel die Emotion in diesem Audioclip klassifizieren:

    >>> from datasets import load_dataset
    >>> import torch

    >>> torch.manual_seed(42)
    >>> ds = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
    >>> audio_file = ds[0]["audio"]["path"]

Finden Sie ein Audioklassifikation Modell auf dem Model Hub für Emotionserkennung und laden Sie es in die `pipeline()`:

    >>> from transformers import pipeline

    >>> audio_classifier = pipeline(
    ...     task="audio-classification", model="ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
    ... )

Übergeben Sie die Audiodatei an die `pipeline()`:

    >>> preds = audio_classifier(audio_file)
    >>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds]
    >>> preds
    [{'score': 0.1315, 'label': 'calm'}, {'score': 0.1307, 'label': 'neutral'}, {'score': 0.1274, 'label': 'sad'}, {'score': 0.1261, 'label': 'fearful'}, {'score': 0.1242, 'label': 'happy'}]

##
Bildverarbeitungs-Pipeline

Die Verwendung einer `pipeline()` für Bildverarbeitungsaufgaben ist praktisch identisch.

Geben Sie Ihre Aufgabe an und übergeben Sie Ihr Bild an den Klassifikator. Das Bild kann ein Link oder ein lokaler Pfad zu dem Bild sein. Zum Beispiel: Welche Katzenart ist unten abgebildet?

    >>> from transformers import pipeline

    >>> vision_classifier = pipeline(task="image-classification")
    >>> preds = vision_classifier(
    ...     images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
    ... )
    >>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds]
    >>> preds
    [{'score': 0.4335, 'label': 'lynx, catamount'}, {'score': 0.0348, 'label': 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor'}, {'score': 0.0324, 'label': 'snow leopard, ounce, Panthera uncia'}, {'score': 0.0239, 'label': 'Egyptian cat'}, {'score': 0.0229, 'label': 'tiger cat'}]

##
Multimodale Pipeline

Die `pipeline()` unterstützt mehr als eine Modalität. Eine Aufgabe zur Beantwortung visueller Fragen (VQA) kombiniert zum Beispiel Text und Bild. Verwenden Sie einen beliebigen Bildlink und eine Frage, die Sie zu dem Bild stellen möchten. Das Bild kann eine URL oder ein lokaler Pfad zu dem Bild sein.

Wenn Sie zum Beispiel das gleiche Bild wie in der obigen Vision-Pipeline verwenden:

    >>> image = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
    >>> question = "Where is the cat?"

Erstellen Sie eine Pipeline für “vqa” und übergeben Sie ihr das Bild und die Frage:

    >>> from transformers import pipeline

    >>> vqa = pipeline(task="vqa")
    >>> preds = vqa(image=image, question=question)
    >>> preds = [{"score": round(pred["score"], 4), "answer": pred["answer"]} for pred in preds]
    >>> preds
    [{'score': 0.9112, 'answer': 'snow'}, {'score': 0.8796, 'answer': 'in snow'}, {'score': 0.6717, 'answer': 'outside'}, {'score': 0.0291, 'answer': 'on ground'}, {'score': 0.027, 'answer': 'ground'}]