Struct ZeroShotClassificationModel

Source
pub struct ZeroShotClassificationModel { /* private fields */ }
Expand description

Template used to transform the zero-shot classification labels into a set of natural language hypotheses for natural language inference.

For example, transform [positive, negative] into [This is a positive review, This is a negative review]

The function should take a &str as an input and return the formatted String.

This transformation has a strong impact on the resulting classification accuracy. If no function is provided for zero-shot classification, the default templating function will be used:

fn default_template(label: &str) -> String {
    format!("This example is about {}.", label)
}

§ZeroShotClassificationModel for Zero Shot Classification

Implementations§

Source§

impl ZeroShotClassificationModel

Source

pub fn new( config: ZeroShotClassificationConfig, ) -> Result<ZeroShotClassificationModel, RustBertError>

Build a new ZeroShotClassificationModel

§Arguments
  • config - SequenceClassificationConfig object containing the resource references (model, vocabulary, configuration) and device placement (CPU/GPU)
§Example
use rust_bert::pipelines::sequence_classification::SequenceClassificationModel;

let model = SequenceClassificationModel::new(Default::default())?;
Source

pub fn new_with_tokenizer( config: ZeroShotClassificationConfig, tokenizer: TokenizerOption, ) -> Result<ZeroShotClassificationModel, RustBertError>

Build a new ZeroShotClassificationModel with a provided tokenizer.

§Arguments
  • config - SequenceClassificationConfig object containing the resource references (model, vocabulary, configuration) and device placement (CPU/GPU)
  • tokenizer - TokenizerOption tokenizer to use for zero-shot classification.
§Example
use rust_bert::pipelines::common::{ModelType, TokenizerOption};
use rust_bert::pipelines::sequence_classification::SequenceClassificationModel;
let tokenizer = TokenizerOption::from_file(
    ModelType::Bert,
    "path/to/vocab.txt",
    None,
    false,
    None,
    None,
)?;
let model = SequenceClassificationModel::new_with_tokenizer(Default::default(), tokenizer)?;
Source

pub fn get_tokenizer(&self) -> &TokenizerOption

Get a reference to the model tokenizer.

Source

pub fn get_tokenizer_mut(&mut self) -> &mut TokenizerOption

Get a mutable reference to the model tokenizer.

Source

pub fn predict<'a, S, T>( &self, inputs: S, labels: T, template: Option<ZeroShotTemplate>, max_length: usize, ) -> Result<Vec<Label>, RustBertError>
where S: AsRef<[&'a str]>, T: AsRef<[&'a str]>,

Zero shot classification with 1 (and exactly 1) true label.

§Arguments
  • input - &[&str] Array of texts to classify.
  • labels - &[&str] Possible labels for the inputs.
  • template - Option<Box<dyn Fn(&str) -> String>> closure to build label propositions. If None, will default to "This example is {}.".
  • max_length -usize Maximum sequence length for the inputs. If needed, the input sequence will be truncated before the label template.
§Returns
  • Result<Vec<Label>, RustBertError> containing the most likely label for each input sentence or error, if any.
§Example
use rust_bert::pipelines::zero_shot_classification::ZeroShotClassificationModel;

let sequence_classification_model = ZeroShotClassificationModel::new(Default::default())?;

let input_sentence = "Who are you voting for in 2020?";
let input_sequence_2 = "The prime minister has announced a stimulus package which was widely criticized by the opposition.";
let candidate_labels = &["politics", "public health", "economics", "sports"];

let output = sequence_classification_model.predict(
    &[input_sentence, input_sequence_2],
    candidate_labels,
    None,
    128,
);

outputs:

let output = [
    Label {
        text: "politics".to_string(),
        score: 0.959,
        id: 0,
        sentence: 0,
    },
    Label {
        text: "economy".to_string(),
        score: 0.642,
        id: 2,
        sentence: 1,
    },
]
.to_vec();
Source

pub fn predict_multilabel<'a, S, T>( &self, inputs: S, labels: T, template: Option<ZeroShotTemplate>, max_length: usize, ) -> Result<Vec<Vec<Label>>, RustBertError>
where S: AsRef<[&'a str]>, T: AsRef<[&'a str]>,

Zero shot multi-label classification with 0, 1 or no true label.

§Arguments
  • input - &[&str] Array of texts to classify.
  • labels - &[&str] Possible labels for the inputs.
  • template - Option<Box<dyn Fn(&str) -> String>> closure to build label propositions. If None, will default to "This example is about {}.".
  • max_length -usize Maximum sequence length for the inputs. If needed, the input sequence will be truncated before the label template.
§Returns
  • Result<Vec<Vec<Label>>, RustBertError> containing a vector of labels and their probability for each input text, or error, if any.
§Example
use rust_bert::pipelines::zero_shot_classification::ZeroShotClassificationModel;

let sequence_classification_model = ZeroShotClassificationModel::new(Default::default())?;

let input_sentence = "Who are you voting for in 2020?";
let input_sequence_2 = "The central bank is meeting today to discuss monetary policy.";
let candidate_labels = &["politics", "public health", "economics", "sports"];

let output = sequence_classification_model.predict_multilabel(
    &[input_sentence, input_sequence_2],
    candidate_labels,
    None,
    128,
);

outputs:

let output = [
    [
        Label {
            text: "politics".to_string(),
            score: 0.972,
            id: 0,
            sentence: 0,
        },
        Label {
            text: "public health".to_string(),
            score: 0.032,
            id: 1,
            sentence: 0,
        },
        Label {
            text: "economy".to_string(),
            score: 0.006,
            id: 2,
            sentence: 0,
        },
        Label {
            text: "sports".to_string(),
            score: 0.004,
            id: 3,
            sentence: 0,
        },
    ],
    [
        Label {
            text: "politics".to_string(),
            score: 0.975,
            id: 0,
            sentence: 1,
        },
        Label {
            text: "economy".to_string(),
            score: 0.852,
            id: 2,
            sentence: 1,
        },
        Label {
            text: "public health".to_string(),
            score: 0.0818,
            id: 1,
            sentence: 1,
        },
        Label {
            text: "sports".to_string(),
            score: 0.001,
            id: 3,
            sentence: 1,
        },
    ],
]
.to_vec();

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T