codeShare commited on
Commit
a78db43
1 Parent(s): 04ba1c9

Upload sd_token_similarity_calculator.ipynb

Browse files
Files changed (1) hide show
  1. sd_token_similarity_calculator.ipynb +70 -23
sd_token_similarity_calculator.ipynb CHANGED
@@ -59,9 +59,11 @@
59
  "\n",
60
  "\n",
61
  "def token_similarity(A, B):\n",
62
- " #Tensor vector length (2nd order, i.e (a^2 + b^2 + ....)^(1/2)\n",
 
63
  " _A = LA.vector_norm(A, ord=2)\n",
64
  " _B = LA.vector_norm(B, ord=2)\n",
 
65
  " #----#\n",
66
  " result = torch.dot(A,B)/(_A*_B)\n",
67
  " #similarity_pcnt = absolute_value(result.item()*100)\n",
@@ -70,6 +72,7 @@
70
  " result = f'{similarity_pcnt_aprox} %'\n",
71
  " return result\n",
72
  "\n",
 
73
  "def similarity(id_A , id_B):\n",
74
  " #Tensors\n",
75
  " A = token[id_A]\n",
@@ -81,11 +84,39 @@
81
  "#print(token[8922].shape) #dimension of the token\n",
82
  "\n",
83
  "mix_with = \"\"\n",
84
- "mix_method = \"None\""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  ],
86
  "metadata": {
87
  "id": "Ch9puvwKH1s3",
88
- "collapsed": true
 
89
  },
90
  "execution_count": null,
91
  "outputs": []
@@ -119,6 +150,7 @@
119
  " R = torch.rand(768)\n",
120
  " _R = LA.vector_norm(R, ord=2)\n",
121
  " A = R*(_A/_R)\n",
 
122
  "\n",
123
  "\n",
124
  "mix_with = \"\" # @param {\"type\":\"string\",\"placeholder\":\"(optional) write something else\"}\n",
@@ -138,6 +170,26 @@
138
  " R = torch.rand(768)\n",
139
  " _R = LA.vector_norm(R, ord=2)\n",
140
  " C = R*(_C/_R)\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  "\n",
142
  "if (mix_method == \"None\"):\n",
143
  " print(\"No operation\")\n",
@@ -145,14 +197,15 @@
145
  "if (mix_method == \"Average\"):\n",
146
  " A = w*A + (1-w)*C\n",
147
  " _A = LA.vector_norm(A, ord=2)\n",
148
- " print(\"Tokenized prompt tensor A has been recalculated as A = w*A + (1-w)*C , where C is the tokenized prompt 'mix_with' tensor C\")\n",
149
  "\n",
150
  "if (mix_method == \"Subtract\"):\n",
151
- " tmp = (A/_A) - (C/_C)\n",
152
- " _tmp = LA.vector_norm(tmp, ord=2)\n",
153
- " A = tmp*((w*_A + (1-w)*_C)/_tmp)\n",
 
154
  " _A = LA.vector_norm(A, ord=2)\n",
155
- " print(\"Tokenized prompt tensor A has been recalculated as A = (w*_A + (1-w)*_C) * norm(w*A - (1-w)*C) , where C is the tokenized prompt 'mix_with' tensor C\")\n",
156
  "\n",
157
  "#OPTIONAL : Add/subtract + normalize above result with another token. Leave field empty to get a random value tensor\n",
158
  "\n",
@@ -166,14 +219,6 @@
166
  " result = result.item()\n",
167
  " dots[index] = result\n",
168
  "\n",
169
- "name_A = \"A of random type\"\n",
170
- "if (id_A>-1):\n",
171
- " name_A = vocab[id_A]\n",
172
- "\n",
173
- "name_C = \"token C of random type\"\n",
174
- "if (id_C>-1):\n",
175
- " name_C = vocab[id_C]\n",
176
- "\n",
177
  "\n",
178
  "sorted, indices = torch.sort(dots,dim=0 , descending=True)\n",
179
  "#----#\n",
@@ -194,11 +239,11 @@
194
  "\n",
195
  "\n",
196
  "if (print_Divider):\n",
197
- " print('//---//') # % value\n",
198
  "\n",
199
- "print('') # % value\n",
200
- "print('Here is the result : ') # % value\n",
201
- "print('') # % value\n",
202
  "\n",
203
  "for index in range(list_size):\n",
204
  " id = indices[index].item()\n",
@@ -207,14 +252,15 @@
207
  " if (print_ID):\n",
208
  " print(f'ID = {id}') # IDs\n",
209
  " if (print_Similarity):\n",
210
- " print(f'similiarity = {round(sorted[index].item()*100,2)} %') # % value\n",
211
  " if (print_Divider):\n",
212
  " print('--------')\n",
213
  "\n",
214
  "#Print the sorted list from above result"
215
  ],
216
  "metadata": {
217
- "id": "iWeFnT1gAx6A"
 
218
  },
219
  "execution_count": null,
220
  "outputs": []
@@ -250,7 +296,8 @@
250
  ],
251
  "metadata": {
252
  "id": "QQOjh5BvnG8M",
253
- "collapsed": true
 
254
  },
255
  "execution_count": null,
256
  "outputs": []
 
59
  "\n",
60
  "\n",
61
  "def token_similarity(A, B):\n",
62
+ "\n",
63
+ " #Vector length#\n",
64
  " _A = LA.vector_norm(A, ord=2)\n",
65
  " _B = LA.vector_norm(B, ord=2)\n",
66
+ "\n",
67
  " #----#\n",
68
  " result = torch.dot(A,B)/(_A*_B)\n",
69
  " #similarity_pcnt = absolute_value(result.item()*100)\n",
 
72
  " result = f'{similarity_pcnt_aprox} %'\n",
73
  " return result\n",
74
  "\n",
75
+ "\n",
76
  "def similarity(id_A , id_B):\n",
77
  " #Tensors\n",
78
  " A = token[id_A]\n",
 
84
  "#print(token[8922].shape) #dimension of the token\n",
85
  "\n",
86
  "mix_with = \"\"\n",
87
+ "mix_method = \"None\"\n",
88
+ "\n",
89
+ "#-------------#\n",
90
+ "# UNUSED\n",
91
+ "\n",
92
+ "# Get the 10 lowest values from a tensor as a string\n",
93
+ "def get_valleys (A):\n",
94
+ " sorted, indices = torch.sort(A,dim=0 , descending=False)\n",
95
+ " result = \"{\"\n",
96
+ " for index in range(10):\n",
97
+ " id = indices[index].item()\n",
98
+ " result = result + f\"{id}\"\n",
99
+ " if(index<9):\n",
100
+ " result = result + \",\"\n",
101
+ " result = result + \"}\"\n",
102
+ " return result\n",
103
+ "\n",
104
+ "# Get the 10 highest values from a tensor as a string\n",
105
+ "def get_peaks (A):\n",
106
+ " sorted, indices = torch.sort(A,dim=0 , descending=True)\n",
107
+ " result = \"{\"\n",
108
+ " for index in range(10):\n",
109
+ " id = indices[index].item()\n",
110
+ " result = result + f\"{id}\"\n",
111
+ " if(index<9):\n",
112
+ " result = result + \",\"\n",
113
+ " result = result + \"}\"\n",
114
+ " return result"
115
  ],
116
  "metadata": {
117
  "id": "Ch9puvwKH1s3",
118
+ "collapsed": true,
119
+ "cellView": "form"
120
  },
121
  "execution_count": null,
122
  "outputs": []
 
150
  " R = torch.rand(768)\n",
151
  " _R = LA.vector_norm(R, ord=2)\n",
152
  " A = R*(_A/_R)\n",
153
+ " name_A = 'random_A'\n",
154
  "\n",
155
  "\n",
156
  "mix_with = \"\" # @param {\"type\":\"string\",\"placeholder\":\"(optional) write something else\"}\n",
 
170
  " R = torch.rand(768)\n",
171
  " _R = LA.vector_norm(R, ord=2)\n",
172
  " C = R*(_C/_R)\n",
173
+ " name_C = 'random_C'\n",
174
+ "\n",
175
+ "name_A = \"A of random type\"\n",
176
+ "if (id_A>-1):\n",
177
+ " name_A = vocab[id_A]\n",
178
+ "\n",
179
+ "name_C = \"token C of random type\"\n",
180
+ "if (id_C>-1):\n",
181
+ " name_C = vocab[id_C]\n",
182
+ "\n",
183
+ "# Peaks feature\n",
184
+ "#peaks_A = get_valleys(A)\n",
185
+ "#peaks_C = get_valleys(C)\n",
186
+ "#print(f\"The elementwise top 10 highest values for A is at indices {peaks_A}\")\n",
187
+ "#print(\"-------\")\n",
188
+ "#print(f\"The elementwise top 10 highest values for C is at indices {peaks_C}\")\n",
189
+ "#print(\"-------\")\n",
190
+ "#//------//\n",
191
+ "\n",
192
+ "print(f\"The similarity between A '{name_A}' and C '{name_C}' is {token_similarity(A, C)}\")\n",
193
  "\n",
194
  "if (mix_method == \"None\"):\n",
195
  " print(\"No operation\")\n",
 
197
  "if (mix_method == \"Average\"):\n",
198
  " A = w*A + (1-w)*C\n",
199
  " _A = LA.vector_norm(A, ord=2)\n",
200
+ " print(f\"Tokenized prompt tensor A '{name_A}' token has been recalculated as A = w*A + (1-w)*C , where C is '{name_C}' token , for w = {w} \")\n",
201
  "\n",
202
  "if (mix_method == \"Subtract\"):\n",
203
+ " tmp = w*A - (1-w)*C\n",
204
+ " _tmp = LA.vector_norm(tmp, ord=2)\n",
205
+ " A = (_A/_tmp)*tmp\n",
206
+ " #//---//\n",
207
  " _A = LA.vector_norm(A, ord=2)\n",
208
+ " print(f\"Tokenized prompt tensor A '{name_A}' token has been recalculated as A = _A * norm(w*A - (1-w)*C) , where C is '{name_C}' token , for w = {w} \")\n",
209
  "\n",
210
  "#OPTIONAL : Add/subtract + normalize above result with another token. Leave field empty to get a random value tensor\n",
211
  "\n",
 
219
  " result = result.item()\n",
220
  " dots[index] = result\n",
221
  "\n",
 
 
 
 
 
 
 
 
222
  "\n",
223
  "sorted, indices = torch.sort(dots,dim=0 , descending=True)\n",
224
  "#----#\n",
 
239
  "\n",
240
  "\n",
241
  "if (print_Divider):\n",
242
+ " print('//---//')\n",
243
  "\n",
244
+ "print('')\n",
245
+ "print('Here is the result : ')\n",
246
+ "print('')\n",
247
  "\n",
248
  "for index in range(list_size):\n",
249
  " id = indices[index].item()\n",
 
252
  " if (print_ID):\n",
253
  " print(f'ID = {id}') # IDs\n",
254
  " if (print_Similarity):\n",
255
+ " print(f'similiarity = {round(sorted[index].item()*100,2)} %')\n",
256
  " if (print_Divider):\n",
257
  " print('--------')\n",
258
  "\n",
259
  "#Print the sorted list from above result"
260
  ],
261
  "metadata": {
262
+ "id": "iWeFnT1gAx6A",
263
+ "cellView": "form"
264
  },
265
  "execution_count": null,
266
  "outputs": []
 
296
  ],
297
  "metadata": {
298
  "id": "QQOjh5BvnG8M",
299
+ "collapsed": true,
300
+ "cellView": "form"
301
  },
302
  "execution_count": null,
303
  "outputs": []