File size: 1,327 Bytes
98d1e65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from pydoc import text

import torch


class TextClassifier:

    def __init__(
        self,
        model,
        tokenizer,
        context_length,
        device=None,
    ):
        self.model = model
        self.tokenizer = tokenizer
        self.context_length = context_length

        if device is None:
            device = (
                "cuda"
                if torch.cuda.is_available()
                else "cpu"
            )

        self.device = torch.device(device)

        self.model.to(self.device)

        self.model.eval()

    @torch.no_grad()
    def classify(
        self,
        prompt_text: str
    ):

        encoded = self.tokenizer.encode(prompt_text)

        tokens, padding_mask = self.tokenizer.pad(
            [encoded],
            max_length=self.context_length,
            )

        encoded_tokens = torch.tensor(
            tokens,
            dtype=torch.long,
            device=self.device,
        )

        encoded_mask = torch.tensor(
            padding_mask,
            dtype=torch.bool,
            device=self.device,
        )


        logits = self.model(
            encoded_tokens,
            padding_mask=encoded_mask,
        )

        prediction = torch.argmax(
            logits,
            dim=-1,
        )

        return prediction.item()