VictorSanh
commited on
Commit
•
5ea341f
1
Parent(s):
f653a92
bunch of updates
Browse files- added_tokens.json +4 -0
- modeling_img2html.py +5 -5
- preprocessor_config.json +2 -2
- processing_img2html.py +28 -21
- special_tokens_map.json +30 -0
- tokenizer.json +0 -0
- tokenizer.model +3 -0
- tokenizer_config.json +56 -0
added_tokens.json
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"<fake_token_around_image>": 32000,
|
3 |
+
"<image>": 32001
|
4 |
+
}
|
modeling_img2html.py
CHANGED
@@ -109,7 +109,7 @@ class Img2HTMLBaseModelOutputWithPast(ModelOutput):
|
|
109 |
@dataclass
|
110 |
class Img2HTMLCausalLMOutputWithPast(ModelOutput):
|
111 |
"""
|
112 |
-
Base class for
|
113 |
|
114 |
Args:
|
115 |
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
|
@@ -171,10 +171,10 @@ def expand_inputs_for_generation(
|
|
171 |
if attention_mask is not None:
|
172 |
model_kwargs["attention_mask"] = attention_mask.index_select(0, expanded_return_idx)
|
173 |
|
174 |
-
if model_kwargs["image_attention_mask"] is not None:
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
|
179 |
if model_kwargs["pixel_values"] is not None:
|
180 |
model_kwargs["pixel_values"] = model_kwargs["pixel_values"].index_select(0, expanded_return_idx)
|
|
|
109 |
@dataclass
|
110 |
class Img2HTMLCausalLMOutputWithPast(ModelOutput):
|
111 |
"""
|
112 |
+
Base class for Img2HTML causal language model (or autoregressive) outputs.
|
113 |
|
114 |
Args:
|
115 |
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
|
|
|
171 |
if attention_mask is not None:
|
172 |
model_kwargs["attention_mask"] = attention_mask.index_select(0, expanded_return_idx)
|
173 |
|
174 |
+
# if model_kwargs["image_attention_mask"] is not None:
|
175 |
+
# model_kwargs["image_attention_mask"] = model_kwargs["image_attention_mask"].index_select(
|
176 |
+
# 0, expanded_return_idx
|
177 |
+
# )
|
178 |
|
179 |
if model_kwargs["pixel_values"] is not None:
|
180 |
model_kwargs["pixel_values"] = model_kwargs["pixel_values"].index_select(0, expanded_return_idx)
|
preprocessor_config.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
"auto_map": {
|
3 |
-
"AutoProcessor": "processing_img2html.Img2HTMLProcessor",
|
4 |
-
"AutoImageProcessor": "image_processing_img2html.Img2HTMLImageProcessor"
|
5 |
},
|
6 |
"image_num_channels": 3,
|
7 |
"image_mean": [
|
|
|
1 |
{
|
2 |
"auto_map": {
|
3 |
+
"AutoProcessor": "HuggingFaceM4/img2html--processing_img2html.Img2HTMLProcessor",
|
4 |
+
"AutoImageProcessor": "HuggingFaceM4/img2html--image_processing_img2html.Img2HTMLImageProcessor"
|
5 |
},
|
6 |
"image_num_channels": 3,
|
7 |
"image_mean": [
|
processing_img2html.py
CHANGED
@@ -24,6 +24,7 @@ from transformers.processing_utils import ProcessorMixin
|
|
24 |
from transformers.tokenization_utils_base import BatchEncoding, PaddingStrategy, TextInput, TruncationStrategy
|
25 |
from transformers.utils import TensorType, is_torch_available
|
26 |
|
|
|
27 |
|
28 |
if is_torch_available():
|
29 |
import torch
|
@@ -40,7 +41,6 @@ def is_url(string):
|
|
40 |
result = urlparse(string)
|
41 |
return all([result.scheme, result.netloc])
|
42 |
|
43 |
-
|
44 |
class Img2HTMLProcessor(ProcessorMixin):
|
45 |
r"""
|
46 |
Constructs a Img2HTML processor which wraps a LLama tokenizer and Img2HTML image processor into a single processor.
|
@@ -60,7 +60,7 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
60 |
image_processor_class = "Img2HTMLImageProcessor"
|
61 |
tokenizer_class = "LlamaTokenizerFast"
|
62 |
|
63 |
-
def __init__(self, image_processor, tokenizer=None, image_size=
|
64 |
if image_processor is None:
|
65 |
raise ValueError("You need to specify an `image_processor`.")
|
66 |
if tokenizer is None:
|
@@ -76,11 +76,32 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
76 |
self.image_processor.image_size,
|
77 |
)
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
|
85 |
def __call__(
|
86 |
self,
|
@@ -90,7 +111,6 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
90 |
max_length: Optional[int] = None,
|
91 |
transform: Callable = None,
|
92 |
add_eos_token=False,
|
93 |
-
add_end_of_utterance_token=None,
|
94 |
debug=False,
|
95 |
return_tensors: Optional[Union[str, TensorType]] = TensorType.PYTORCH,
|
96 |
) -> BatchEncoding:
|
@@ -120,10 +140,6 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
120 |
set of transforms will be applied to the images
|
121 |
add_eos_token (`bool`, *optional*, defaults to `False`):
|
122 |
Adds `eos_token` at the end of the final prompt if True`
|
123 |
-
add_end_of_utterance_token (`bool`, *optional*)
|
124 |
-
Whether to automatically add `<end_of_utterance>` after each prompt's text input (unless followed by an
|
125 |
-
image). If `None` the tokenizer will be checked instead and if this token is found in
|
126 |
-
`additional_special_tokens` then the value will be `True`.
|
127 |
debug (`bool`, *optional*, defaults to `False`):
|
128 |
`True` value will help debug prompt generation by dumping useful information
|
129 |
return_tensors (`str` or `TensorType`, *optional*, defaults to `TensorType.PYTORCH`):
|
@@ -198,18 +214,12 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
198 |
In order to help debug prompt generation enable `debug=True` which will show you what's happening.
|
199 |
|
200 |
"""
|
201 |
-
|
202 |
-
# if the value isn't overriden by the user, check if the tokenizer was trained with this token and then use it
|
203 |
-
if add_end_of_utterance_token is None:
|
204 |
-
add_end_of_utterance_token = self.tokenizer_was_trained_with_end_of_utterance_token
|
205 |
-
|
206 |
# turn non-batched prompts into batched
|
207 |
if not any(isinstance(i, list) for i in prompts):
|
208 |
prompts = [prompts]
|
209 |
|
210 |
fake_token = "<fake_token_around_image>"
|
211 |
image_token = "<image>"
|
212 |
-
end_of_utterance_token = "<end_of_utterance>"
|
213 |
|
214 |
def image_tokens(last_was_image):
|
215 |
if last_was_image:
|
@@ -239,9 +249,6 @@ class Img2HTMLProcessor(ProcessorMixin):
|
|
239 |
image_objects.append(image)
|
240 |
last_was_image = True
|
241 |
else:
|
242 |
-
# we add end_of_utterance_token between each subsequent text prompts (but not at the last one!)
|
243 |
-
if add_end_of_utterance_token and last_was_text:
|
244 |
-
full_text += end_of_utterance_token
|
245 |
full_text += item
|
246 |
last_was_image = False
|
247 |
else:
|
|
|
24 |
from transformers.tokenization_utils_base import BatchEncoding, PaddingStrategy, TextInput, TruncationStrategy
|
25 |
from transformers.utils import TensorType, is_torch_available
|
26 |
|
27 |
+
from .image_processing_img2html import Img2HTMLImageProcessor
|
28 |
|
29 |
if is_torch_available():
|
30 |
import torch
|
|
|
41 |
result = urlparse(string)
|
42 |
return all([result.scheme, result.netloc])
|
43 |
|
|
|
44 |
class Img2HTMLProcessor(ProcessorMixin):
|
45 |
r"""
|
46 |
Constructs a Img2HTML processor which wraps a LLama tokenizer and Img2HTML image processor into a single processor.
|
|
|
60 |
image_processor_class = "Img2HTMLImageProcessor"
|
61 |
tokenizer_class = "LlamaTokenizerFast"
|
62 |
|
63 |
+
def __init__(self, image_processor, tokenizer=None, image_size=960, **kwargs):
|
64 |
if image_processor is None:
|
65 |
raise ValueError("You need to specify an `image_processor`.")
|
66 |
if tokenizer is None:
|
|
|
76 |
self.image_processor.image_size,
|
77 |
)
|
78 |
|
79 |
+
# @classmethod
|
80 |
+
# def _get_arguments_from_pretrained(cls, pretrained_model_name_or_path, **kwargs):
|
81 |
+
# # Hack overriding things
|
82 |
+
# from pathlib import Path
|
83 |
+
# from transformers.utils import direct_transformers_import
|
84 |
+
# # Dynamically import the Transformers module to grab the attribute classes of the processor form their names.
|
85 |
+
# transformers_module = direct_transformers_import(Path(__file__).parent)
|
86 |
+
|
87 |
+
# args = []
|
88 |
+
# for attribute_name in cls.attributes:
|
89 |
+
# class_name = getattr(cls, f"{attribute_name}_class")
|
90 |
+
# if isinstance(class_name, tuple):
|
91 |
+
# classes = tuple(getattr(transformers_module, n) if n is not None else None for n in class_name)
|
92 |
+
# use_fast = kwargs.get("use_fast", True)
|
93 |
+
# if use_fast and classes[1] is not None:
|
94 |
+
# attribute_class = classes[1]
|
95 |
+
# else:
|
96 |
+
# attribute_class = classes[0]
|
97 |
+
# else:
|
98 |
+
# if class_name == "Img2HTMLImageProcessor":
|
99 |
+
# attribute_class = Img2HTMLImageProcessor
|
100 |
+
# else:
|
101 |
+
# attribute_class = getattr(transformers_module, class_name)
|
102 |
+
|
103 |
+
# args.append(attribute_class.from_pretrained(pretrained_model_name_or_path, **kwargs))
|
104 |
+
# return args
|
105 |
|
106 |
def __call__(
|
107 |
self,
|
|
|
111 |
max_length: Optional[int] = None,
|
112 |
transform: Callable = None,
|
113 |
add_eos_token=False,
|
|
|
114 |
debug=False,
|
115 |
return_tensors: Optional[Union[str, TensorType]] = TensorType.PYTORCH,
|
116 |
) -> BatchEncoding:
|
|
|
140 |
set of transforms will be applied to the images
|
141 |
add_eos_token (`bool`, *optional*, defaults to `False`):
|
142 |
Adds `eos_token` at the end of the final prompt if True`
|
|
|
|
|
|
|
|
|
143 |
debug (`bool`, *optional*, defaults to `False`):
|
144 |
`True` value will help debug prompt generation by dumping useful information
|
145 |
return_tensors (`str` or `TensorType`, *optional*, defaults to `TensorType.PYTORCH`):
|
|
|
214 |
In order to help debug prompt generation enable `debug=True` which will show you what's happening.
|
215 |
|
216 |
"""
|
|
|
|
|
|
|
|
|
|
|
217 |
# turn non-batched prompts into batched
|
218 |
if not any(isinstance(i, list) for i in prompts):
|
219 |
prompts = [prompts]
|
220 |
|
221 |
fake_token = "<fake_token_around_image>"
|
222 |
image_token = "<image>"
|
|
|
223 |
|
224 |
def image_tokens(last_was_image):
|
225 |
if last_was_image:
|
|
|
249 |
image_objects.append(image)
|
250 |
last_was_image = True
|
251 |
else:
|
|
|
|
|
|
|
252 |
full_text += item
|
253 |
last_was_image = False
|
254 |
else:
|
special_tokens_map.json
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"bos_token": {
|
3 |
+
"content": "<s>",
|
4 |
+
"lstrip": false,
|
5 |
+
"normalized": false,
|
6 |
+
"rstrip": false,
|
7 |
+
"single_word": false
|
8 |
+
},
|
9 |
+
"eos_token": {
|
10 |
+
"content": "</s>",
|
11 |
+
"lstrip": false,
|
12 |
+
"normalized": false,
|
13 |
+
"rstrip": false,
|
14 |
+
"single_word": false
|
15 |
+
},
|
16 |
+
"pad_token": {
|
17 |
+
"content": "<unk>",
|
18 |
+
"lstrip": false,
|
19 |
+
"normalized": false,
|
20 |
+
"rstrip": false,
|
21 |
+
"single_word": false
|
22 |
+
},
|
23 |
+
"unk_token": {
|
24 |
+
"content": "<unk>",
|
25 |
+
"lstrip": false,
|
26 |
+
"normalized": false,
|
27 |
+
"rstrip": false,
|
28 |
+
"single_word": false
|
29 |
+
}
|
30 |
+
}
|
tokenizer.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
tokenizer.model
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dadfd56d766715c61d2ef780a525ab43b8e6da4de6865bda3d95fdef5e134055
|
3 |
+
size 493443
|
tokenizer_config.json
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"added_tokens_decoder": {
|
3 |
+
"0": {
|
4 |
+
"content": "<unk>",
|
5 |
+
"lstrip": false,
|
6 |
+
"normalized": false,
|
7 |
+
"rstrip": false,
|
8 |
+
"single_word": false,
|
9 |
+
"special": true
|
10 |
+
},
|
11 |
+
"1": {
|
12 |
+
"content": "<s>",
|
13 |
+
"lstrip": false,
|
14 |
+
"normalized": false,
|
15 |
+
"rstrip": false,
|
16 |
+
"single_word": false,
|
17 |
+
"special": true
|
18 |
+
},
|
19 |
+
"2": {
|
20 |
+
"content": "</s>",
|
21 |
+
"lstrip": false,
|
22 |
+
"normalized": false,
|
23 |
+
"rstrip": false,
|
24 |
+
"single_word": false,
|
25 |
+
"special": true
|
26 |
+
},
|
27 |
+
"32000": {
|
28 |
+
"content": "<fake_token_around_image>",
|
29 |
+
"lstrip": false,
|
30 |
+
"normalized": false,
|
31 |
+
"rstrip": false,
|
32 |
+
"single_word": false,
|
33 |
+
"special": true
|
34 |
+
},
|
35 |
+
"32001": {
|
36 |
+
"content": "<image>",
|
37 |
+
"lstrip": false,
|
38 |
+
"normalized": false,
|
39 |
+
"rstrip": false,
|
40 |
+
"single_word": false,
|
41 |
+
"special": true
|
42 |
+
}
|
43 |
+
},
|
44 |
+
"additional_special_tokens": [],
|
45 |
+
"bos_token": "<s>",
|
46 |
+
"clean_up_tokenization_spaces": false,
|
47 |
+
"eos_token": "</s>",
|
48 |
+
"legacy": false,
|
49 |
+
"model_max_length": 1000000000000000019884624838656,
|
50 |
+
"pad_token": "<unk>",
|
51 |
+
"sp_model_kwargs": {},
|
52 |
+
"spaces_between_special_tokens": false,
|
53 |
+
"tokenizer_class": "LlamaTokenizer",
|
54 |
+
"unk_token": "<unk>",
|
55 |
+
"use_default_system_prompt": true
|
56 |
+
}
|