somehowchris commited on
Commit
313a165
verified
1 Parent(s): 8c45a40

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +31 -8
README.md CHANGED
@@ -62,23 +62,46 @@ from transformers import AutoModel, AutoTokenizer
62
  tokenizer = AutoTokenizer.from_pretrained("evm-alpha/semantic-evm-mlm-chkp1000")
63
  model = AutoModel.from_pretrained("evm-alpha/semantic-evm-mlm-chkp1000")
64
 
65
- # Encode bytecode (as hex string)
66
- bytecode = "0x608060405234801561001057600080fd5b50"
67
- inputs = tokenizer(bytecode, return_tensors="pt")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  outputs = model(**inputs)
69
 
70
- # Get embeddings (mean pooling across sequence)
71
  embeddings = outputs.last_hidden_state # [batch, seq_len, hidden_size]
72
- attention_mask = inputs["attention_mask"] # [batch, seq_len]
73
- masked_embeddings = embeddings * attention_mask.unsqueeze(-1)
74
- pooled = masked_embeddings.sum(1) / attention_mask.sum(1, keepdim=True) # mean pooling
75
  ```
76
 
77
  ## Limitations
78
 
 
79
  - Max context: 512 tokens (~256 bytes of bytecode)
80
  - Optimized for EVM bytecode patterns; not intended for natural language
81
- - Trained only across ethereum, optimism, base, unichain, bsc and bera
82
 
83
  ## License
84
 
 
62
  tokenizer = AutoTokenizer.from_pretrained("evm-alpha/semantic-evm-mlm-chkp1000")
63
  model = AutoModel.from_pretrained("evm-alpha/semantic-evm-mlm-chkp1000")
64
 
65
+ # This tokenizer uses byte-level BPE (GPT-2 style).
66
+ # You must convert raw bytes to the GPT-2 unicode format:
67
+
68
+ def bytes_to_unicode_map():
69
+ """GPT-2 byte-to-unicode mapping."""
70
+ bs = list(range(ord("!"), ord("~") + 1)) + list(range(ord("隆"), ord("卢") + 1)) + list(range(ord("庐"), ord("每") + 1))
71
+ cs = bs[:]
72
+ n = 0
73
+ for b in range(256):
74
+ if b not in bs:
75
+ bs.append(b)
76
+ cs.append(256 + n)
77
+ n += 1
78
+ return dict(zip(bs, [chr(c) for c in cs]))
79
+
80
+ BYTE_MAP = bytes_to_unicode_map()
81
+
82
+ def encode_evm_bytes(data: bytes) -> str:
83
+ """Convert raw EVM bytes to tokenizer input string."""
84
+ return "".join(BYTE_MAP[b] for b in data)
85
+
86
+ # Example: encode raw EVM bytecode
87
+ bytecode_hex = "608060405234801561001057600080fd5b50"
88
+ raw_bytes = bytes.fromhex(bytecode_hex)
89
+ tokenizer_input = encode_evm_bytes(raw_bytes)
90
+
91
+ inputs = tokenizer(tokenizer_input, return_tensors="pt")
92
  outputs = model(**inputs)
93
 
94
+ # Get embeddings (mean pooling)
95
  embeddings = outputs.last_hidden_state # [batch, seq_len, hidden_size]
96
+ mask = inputs["attention_mask"].unsqueeze(-1)
97
+ pooled = (embeddings * mask).sum(1) / mask.sum(1)
 
98
  ```
99
 
100
  ## Limitations
101
 
102
+ - Trained on specific EVM chains; may not generalize to all EVM variants
103
  - Max context: 512 tokens (~256 bytes of bytecode)
104
  - Optimized for EVM bytecode patterns; not intended for natural language
 
105
 
106
  ## License
107