x-transformers 2.2.8__py3-none-any.whl → 2.2.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from itertools import zip_longest
2
3
 
3
4
  import torch
@@ -33,12 +34,15 @@ class EntropyBasedTokenizer(Module):
33
34
  def __init__(
34
35
  self,
35
36
  decoder: Module,
36
- entropy_threshold: float
37
+ entropy_threshold: float,
38
+ max_token_size: int | None = None
37
39
  ):
38
40
  super().__init__()
39
41
  self.decoder = decoder
40
42
  self.entropy_threshold = entropy_threshold
41
43
 
44
+ self.max_token_size = max_token_size
45
+
42
46
  @torch.no_grad()
43
47
  def forward(
44
48
  self,
@@ -53,7 +57,7 @@ class EntropyBasedTokenizer(Module):
53
57
  self.decoder.eval()
54
58
 
55
59
  is_var_length = exists(lens)
56
- batch, seq_len, device = *seq.shape, seq.device
60
+ batch, seq_len, device, max_token_size = *seq.shape, seq.device, self.max_token_size
57
61
 
58
62
  arange = torch.arange(seq_len, device = device)
59
63
 
@@ -94,7 +98,29 @@ class EntropyBasedTokenizer(Module):
94
98
  scatter_indices = rearrange(lens - 1, 'b -> b 1')
95
99
  boundaries.scatter_(-1, scatter_indices, True)
96
100
 
97
- num_tokens = boundaries.sum(dim = -1) # number of tokens
101
+ # handle max token size - technique has the flaw that repeating subsequences are grouped into one large token
102
+
103
+ if exists(max_token_size):
104
+ token_ids = boundaries.cumsum(dim = -1)
105
+ token_ids = F.pad(token_ids, (1, -1), value = 0)
106
+
107
+ max_num_tokens = boundaries.sum(dim = -1).amax().item()
108
+ token_ids_seq = torch.arange(max_num_tokens, device = device)
109
+
110
+ token_mask = einx.equal('j, b i -> b j i', token_ids_seq, token_ids)
111
+
112
+ token_sub_seq_arange = token_mask.cumsum(dim = -1)
113
+
114
+ sub_seq_boundaries = (token_sub_seq_arange % max_token_size == 0)
115
+ sub_seq_boundaries = (sub_seq_boundaries & token_mask).any(dim = 1)
116
+
117
+ boundaries = boundaries | sub_seq_boundaries
118
+
119
+ # number of tokens
120
+
121
+ num_tokens = boundaries.sum(dim = -1)
122
+
123
+ # get number of tokens as well as derived indices
98
124
 
99
125
  indices = arange_plus_one[boundaries].split(num_tokens.tolist())
100
126
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: x-transformers
3
- Version: 2.2.8
3
+ Version: 2.2.10
4
4
  Summary: X-Transformers
5
5
  Project-URL: Homepage, https://pypi.org/project/x-transformers/
6
6
  Project-URL: Repository, https://github.com/lucidrains/x-transformers
@@ -4,14 +4,14 @@ x_transformers/autoregressive_wrapper.py,sha256=reLCno9Z9pchVU79tBF8OMo21LwSZ67K
4
4
  x_transformers/belief_state_wrapper.py,sha256=YLUMk6t2MhFBEw5lHDDHJHcoCxTIkHvxTNY__GGZEKU,13374
5
5
  x_transformers/continuous.py,sha256=p0sCAiH1na236ygwgL1Yyhu36eZBf9cZvoW1JyP_fFE,7073
6
6
  x_transformers/dpo.py,sha256=xt4OuOWhU8pN3OKN2LZAaC2NC8iiEnchqqcrPWVqf0o,3521
7
- x_transformers/entropy_based_tokenizer.py,sha256=c9dcERmoK454mD3JKlxeU3cNwYVPi8I8bI91xrvVvOA,3938
7
+ x_transformers/entropy_based_tokenizer.py,sha256=ZISAQnbLCQMAbOxPXBbkTDkBl5se4Icvr_HrGMJWElA,4941
8
8
  x_transformers/multi_input.py,sha256=tCh-fTJDj2ib4SMGtsa-AM8MxKzJAQSwqAXOu3HU2mg,9252
9
9
  x_transformers/neo_mlp.py,sha256=XCNnnop9WLarcxap1kGuYc1x8GHvwkZiDRnXOxSl3Po,3452
10
10
  x_transformers/nonautoregressive_wrapper.py,sha256=2NU58hYMgn-4Jzg3mie-mXb0XH_dCN7fjlzd3K1rLUY,10510
11
11
  x_transformers/x_transformers.py,sha256=m2xiiTafFZiII-QZLCpPerdWbY8O41I6BAYCaaPdXig,111953
12
12
  x_transformers/xl_autoregressive_wrapper.py,sha256=CvZMJ6A6PA-Y_bQAhnORwjJBSl6Vjq2IdW5KTdk8NI8,4195
13
13
  x_transformers/xval.py,sha256=7S00kCuab4tWQa-vf-z-XfzADjVj48MoFIr7VSIvttg,8575
14
- x_transformers-2.2.8.dist-info/METADATA,sha256=U54PnKoqbbDeOAU2moEtVMOAejOvXnF6BDpakJTHud8,88686
15
- x_transformers-2.2.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- x_transformers-2.2.8.dist-info/licenses/LICENSE,sha256=As9u198X-U-vph5noInuUfqsAG2zX_oXPHDmdjwlPPY,1066
17
- x_transformers-2.2.8.dist-info/RECORD,,
14
+ x_transformers-2.2.10.dist-info/METADATA,sha256=cMSCK4d3F2o_MLRH_w8MYMsAhptWQug7fbm_wBhswuY,88687
15
+ x_transformers-2.2.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ x_transformers-2.2.10.dist-info/licenses/LICENSE,sha256=As9u198X-U-vph5noInuUfqsAG2zX_oXPHDmdjwlPPY,1066
17
+ x_transformers-2.2.10.dist-info/RECORD,,