Upgraded to sentis 1.4.0-pre3
Browse files- DebertaV3.cs +36 -55
- README.md +1 -1
- deberta-v3-xsmall-zeroshot-v1.1-all-33.sentis +2 -2
DebertaV3.cs
CHANGED
@@ -13,33 +13,52 @@ public sealed class DebertaV3 : MonoBehaviour
|
|
13 |
public string hypothesisTemplate = "This example is about {}";
|
14 |
public string[] classes = { "politics", "economy", "entertainment", "environment" };
|
15 |
|
16 |
-
Ops ops;
|
17 |
IWorker engine;
|
18 |
-
ITensorAllocator allocator;
|
19 |
string[] vocabularyTokens;
|
20 |
|
21 |
const int padToken = 0;
|
22 |
const int startToken = 1;
|
23 |
const int separatorToken = 2;
|
24 |
const int vocabToTokenOffset = 260;
|
25 |
-
const BackendType backend = BackendType.GPUCompute;
|
26 |
|
27 |
void Start()
|
28 |
{
|
29 |
-
vocabularyTokens = vocabulary.text.Replace("\r", "").Split("\n");
|
30 |
-
|
31 |
-
allocator = new TensorCachingAllocator();
|
32 |
-
ops = WorkerFactory.CreateOps(backend, allocator);
|
33 |
-
|
34 |
-
Model loadedModel = ModelLoader.Load(model);
|
35 |
-
engine = WorkerFactory.CreateWorker(backend, loadedModel);
|
36 |
-
|
37 |
if (classes.Length == 0)
|
38 |
{
|
39 |
Debug.LogError("There need to be more than 0 classes");
|
40 |
return;
|
41 |
}
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
string[] hypotheses = classes.Select(x => hypothesisTemplate.Replace("{}", x)).ToArray();
|
44 |
Batch batch = GetTokenizedBatch(text, hypotheses);
|
45 |
float[] scores = GetBatchScores(batch);
|
@@ -57,15 +76,15 @@ public sealed class DebertaV3 : MonoBehaviour
|
|
57 |
|
58 |
Dictionary<string, Tensor> inputs = new()
|
59 |
{
|
60 |
-
{"
|
61 |
-
{"
|
62 |
};
|
63 |
|
64 |
engine.Execute(inputs);
|
65 |
-
TensorFloat
|
66 |
-
|
67 |
|
68 |
-
return scores;
|
69 |
}
|
70 |
|
71 |
Batch GetTokenizedBatch(string prompt, string[] hypotheses)
|
@@ -105,39 +124,6 @@ public sealed class DebertaV3 : MonoBehaviour
|
|
105 |
return batch;
|
106 |
}
|
107 |
|
108 |
-
float[] ScoresFromLogits(TensorFloat logits)
|
109 |
-
{
|
110 |
-
// The logits represent the model's predictions for entailment and non-entailment for each example in the batch.
|
111 |
-
// They are of shape [batch size, 2], with two values per example.
|
112 |
-
// To obtain a single value (score) per example, a softmax function is applied
|
113 |
-
|
114 |
-
TensorFloat tensorScores;
|
115 |
-
if (multipleTrueClasses || logits.shape.Length(0, 1) == 1)
|
116 |
-
{
|
117 |
-
// Softmax over the entailment vs. contradiction dimension for each label independently
|
118 |
-
tensorScores = ops.Softmax(logits, -1);
|
119 |
-
}
|
120 |
-
else
|
121 |
-
{
|
122 |
-
// Softmax over all candidate labels
|
123 |
-
tensorScores = ops.Softmax(logits, 0);
|
124 |
-
}
|
125 |
-
|
126 |
-
tensorScores.MakeReadable();
|
127 |
-
float[] tensorArray = tensorScores.ToReadOnlyArray();
|
128 |
-
|
129 |
-
tensorScores.Dispose();
|
130 |
-
|
131 |
-
// Select the first column which is the column where the scores are stored
|
132 |
-
float[] scores = new float[tensorArray.Length / 2];
|
133 |
-
for (int i = 0; i < scores.Length; i++)
|
134 |
-
{
|
135 |
-
scores[i] = tensorArray[i * 2];
|
136 |
-
}
|
137 |
-
|
138 |
-
return scores;
|
139 |
-
}
|
140 |
-
|
141 |
List<int> Tokenize(string input)
|
142 |
{
|
143 |
string[] words = input.Split(null);
|
@@ -164,12 +150,7 @@ public sealed class DebertaV3 : MonoBehaviour
|
|
164 |
return ids;
|
165 |
}
|
166 |
|
167 |
-
void OnDestroy()
|
168 |
-
{
|
169 |
-
engine?.Dispose();
|
170 |
-
allocator?.Dispose();
|
171 |
-
ops?.Dispose();
|
172 |
-
}
|
173 |
|
174 |
struct Batch
|
175 |
{
|
|
|
13 |
public string hypothesisTemplate = "This example is about {}";
|
14 |
public string[] classes = { "politics", "economy", "entertainment", "environment" };
|
15 |
|
|
|
16 |
IWorker engine;
|
|
|
17 |
string[] vocabularyTokens;
|
18 |
|
19 |
const int padToken = 0;
|
20 |
const int startToken = 1;
|
21 |
const int separatorToken = 2;
|
22 |
const int vocabToTokenOffset = 260;
|
|
|
23 |
|
24 |
void Start()
|
25 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
if (classes.Length == 0)
|
27 |
{
|
28 |
Debug.LogError("There need to be more than 0 classes");
|
29 |
return;
|
30 |
}
|
31 |
|
32 |
+
vocabularyTokens = vocabulary.text.Replace("\r", "").Split("\n");
|
33 |
+
|
34 |
+
Model baseModel = ModelLoader.Load(model);
|
35 |
+
Model modelWithScoring = Functional.Compile(
|
36 |
+
input =>
|
37 |
+
{
|
38 |
+
// The logits represent the model's predictions for entailment and non-entailment for each example in the batch.
|
39 |
+
// They are of shape [batch size, 2] i.e. with two values per example.
|
40 |
+
// To obtain a single score per example, a softmax function is applied
|
41 |
+
FunctionalTensor logits = baseModel.Forward(input)[0];
|
42 |
+
|
43 |
+
if (multipleTrueClasses || classes.Length == 1)
|
44 |
+
{
|
45 |
+
// Softmax over the entailment vs. contradiction dimension for each label independently
|
46 |
+
logits = Functional.Softmax(logits);
|
47 |
+
}
|
48 |
+
else
|
49 |
+
{
|
50 |
+
// Softmax over all candidate labels
|
51 |
+
logits = Functional.Softmax(logits, 0);
|
52 |
+
}
|
53 |
+
|
54 |
+
// The scores are stored along the first column
|
55 |
+
return new []{logits[.., 0]};
|
56 |
+
},
|
57 |
+
InputDef.FromModel(baseModel)
|
58 |
+
);
|
59 |
+
|
60 |
+
engine = WorkerFactory.CreateWorker(BackendType.GPUCompute, modelWithScoring);
|
61 |
+
|
62 |
string[] hypotheses = classes.Select(x => hypothesisTemplate.Replace("{}", x)).ToArray();
|
63 |
Batch batch = GetTokenizedBatch(text, hypotheses);
|
64 |
float[] scores = GetBatchScores(batch);
|
|
|
76 |
|
77 |
Dictionary<string, Tensor> inputs = new()
|
78 |
{
|
79 |
+
{"input_0", inputIds},
|
80 |
+
{"input_1", attentionMask}
|
81 |
};
|
82 |
|
83 |
engine.Execute(inputs);
|
84 |
+
TensorFloat scores = (TensorFloat)engine.PeekOutput("output_0");
|
85 |
+
scores.CompleteOperationsAndDownload();
|
86 |
|
87 |
+
return scores.ToReadOnlyArray();
|
88 |
}
|
89 |
|
90 |
Batch GetTokenizedBatch(string prompt, string[] hypotheses)
|
|
|
124 |
return batch;
|
125 |
}
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
List<int> Tokenize(string input)
|
128 |
{
|
129 |
string[] words = input.Split(null);
|
|
|
150 |
return ids;
|
151 |
}
|
152 |
|
153 |
+
void OnDestroy() => engine?.Dispose();
|
|
|
|
|
|
|
|
|
|
|
154 |
|
155 |
struct Batch
|
156 |
{
|
README.md
CHANGED
@@ -14,7 +14,7 @@ There are more models of different sizes that are compatible made by [MoritzLaur
|
|
14 |
|
15 |
## How to Use
|
16 |
|
17 |
-
* Ensure Sentis version
|
18 |
* Create a new scene in Unity 2023
|
19 |
* Add the DebertaV3.cs file to a GameObject in the scene
|
20 |
* Assign model and vocabulary
|
|
|
14 |
|
15 |
## How to Use
|
16 |
|
17 |
+
* Ensure Sentis version is 1.4.0-pre.3
|
18 |
* Create a new scene in Unity 2023
|
19 |
* Add the DebertaV3.cs file to a GameObject in the scene
|
20 |
* Assign model and vocabulary
|
deberta-v3-xsmall-zeroshot-v1.1-all-33.sentis
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2d1eec4f37a0c222acb32d6ae67945c1099019cac8bd22cdc9ff7b548adcaf9d
|
3 |
+
size 301898184
|