Upload model
Browse files- config.json +19 -0
- configuration_mapper.py +25 -0
- model.safetensors +3 -0
- modeling_mapper.py +76 -0
config.json
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"architectures": [
|
3 |
+
"MapperModel"
|
4 |
+
],
|
5 |
+
"auto_map": {
|
6 |
+
"AutoConfig": "configuration_mapper.MapperConfig",
|
7 |
+
"AutoModel": "modeling_mapper.MapperModel"
|
8 |
+
},
|
9 |
+
"d_hidden": 1024,
|
10 |
+
"d_in": 64,
|
11 |
+
"d_out": 64,
|
12 |
+
"dropout": 0.1,
|
13 |
+
"layer_norm_eps": 1e-12,
|
14 |
+
"model_type": "embedding_mapper",
|
15 |
+
"n_layers": 6,
|
16 |
+
"n_out": 2,
|
17 |
+
"torch_dtype": "float32",
|
18 |
+
"transformers_version": "4.38.2"
|
19 |
+
}
|
configuration_mapper.py
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from transformers import PretrainedConfig
|
2 |
+
|
3 |
+
class MapperConfig(PretrainedConfig):
|
4 |
+
model_type = "embedding_mapper"
|
5 |
+
|
6 |
+
def __init__(self,
|
7 |
+
d_in: int = 64,
|
8 |
+
d_hidden: int = 1024,
|
9 |
+
n_layers: int = 6,
|
10 |
+
d_out: int = 64,
|
11 |
+
n_out: int = 2,
|
12 |
+
dropout: float = 0.1,
|
13 |
+
layer_norm_eps: float = 1e-12,
|
14 |
+
**kwargs
|
15 |
+
):
|
16 |
+
|
17 |
+
self.d_in = d_in
|
18 |
+
self.d_hidden = d_hidden
|
19 |
+
self.n_layers = n_layers
|
20 |
+
self.d_out = d_out
|
21 |
+
self.n_out = n_out
|
22 |
+
self.dropout = dropout
|
23 |
+
self.layer_norm_eps = layer_norm_eps
|
24 |
+
|
25 |
+
super().__init__(**kwargs)
|
model.safetensors
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5df4171738f7d9ec9a5451ecbae4a107b16af59f442d48718f4ca5ff41fdb403
|
3 |
+
size 82271096
|
modeling_mapper.py
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
import torch.nn as nn
|
3 |
+
import torch.nn.functional as F
|
4 |
+
|
5 |
+
from dataclasses import dataclass
|
6 |
+
|
7 |
+
from transformers import PretrainedConfig, PreTrainedModel
|
8 |
+
from transformers.utils import ModelOutput
|
9 |
+
|
10 |
+
from .configuration_mapper import MapperConfig
|
11 |
+
|
12 |
+
class FeedForward(nn.Module):
|
13 |
+
def __init__(self, d_in, d_out):
|
14 |
+
super().__init__()
|
15 |
+
self.fc1 = nn.Linear(d_in, d_out*2)
|
16 |
+
self.fc2 = nn.Linear(d_out, d_out)
|
17 |
+
|
18 |
+
def forward(self, x):
|
19 |
+
x = self.fc1(x)
|
20 |
+
x1, x2 = x.chunk(2, dim=-1)
|
21 |
+
x = self.fc2(F.silu(x1) * x2)
|
22 |
+
return x
|
23 |
+
|
24 |
+
class FeedForwardLayer(nn.Module):
|
25 |
+
def __init__(self, d_in, d_out, dropout=0.1, layer_norm_eps=None):
|
26 |
+
super().__init__()
|
27 |
+
self.ff = FeedForward(d_in, d_out)
|
28 |
+
self.skip = nn.Linear(d_in, d_out) if d_in != d_out else nn.Identity()
|
29 |
+
self.dropout = nn.Dropout(dropout)
|
30 |
+
self.LayerNorm = nn.LayerNorm(d_out, eps=layer_norm_eps) if layer_norm_eps else None
|
31 |
+
|
32 |
+
def forward(self, x):
|
33 |
+
x = self.dropout(x)
|
34 |
+
x = self.ff(x) + self.skip(x)
|
35 |
+
if self.LayerNorm:
|
36 |
+
x = self.LayerNorm(x)
|
37 |
+
return x
|
38 |
+
|
39 |
+
class Mapper(nn.Module):
|
40 |
+
def __init__(self, d_in, d_hidden, d_out, n_out, n_layers, dropout=0.1, layer_norm_eps=None):
|
41 |
+
super().__init__()
|
42 |
+
self.n_out = n_out
|
43 |
+
layers = [FeedForwardLayer(d_in, d_hidden, 0.0, layer_norm_eps)]
|
44 |
+
layers += [FeedForwardLayer(d_hidden, d_hidden, dropout, layer_norm_eps)
|
45 |
+
for i in range(n_layers)]
|
46 |
+
self.layers = nn.Sequential(*layers)
|
47 |
+
|
48 |
+
self.output_layer = FeedForwardLayer(d_hidden, d_out*n_out, 0.0, None)
|
49 |
+
|
50 |
+
def forward(self, x):
|
51 |
+
x = self.layers(x)
|
52 |
+
x = self.output_layer(x)
|
53 |
+
x = torch.stack(torch.chunk(x, self.n_out, -1), 1)
|
54 |
+
return x
|
55 |
+
|
56 |
+
@dataclass
|
57 |
+
class MapperModelOutput(ModelOutput):
|
58 |
+
mapper_out: torch.FloatTensor = None
|
59 |
+
|
60 |
+
class MapperModel(PreTrainedModel):
|
61 |
+
config_class = MapperConfig
|
62 |
+
def __init__(self, config):
|
63 |
+
super().__init__(config)
|
64 |
+
|
65 |
+
self.mapper = Mapper(config.d_in, config.d_hidden, config.d_out, config.n_out,
|
66 |
+
config.n_layers, config.dropout, config.layer_norm_eps)
|
67 |
+
|
68 |
+
def forward(self, embedding, return_dict=True):
|
69 |
+
|
70 |
+
mapper_out = self.mapper(embedding)
|
71 |
+
|
72 |
+
|
73 |
+
if not return_dict:
|
74 |
+
return (mapper_out, )
|
75 |
+
|
76 |
+
return MapperModelOutput(mapper_out=mapper_out)
|