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 |
+
}
|