Update README.md
Browse files
README.md
CHANGED
|
@@ -58,6 +58,9 @@ def wrap_prompt(prompt: str, tokenizer) -> str:
|
|
| 58 |
return tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
| 59 |
|
| 60 |
def detect_gene_token_space(tokenizer):
|
|
|
|
|
|
|
|
|
|
| 61 |
vocab = tokenizer.get_vocab()
|
| 62 |
gene_ids = sorted(idx for tok, idx in vocab.items() if tok.startswith(GENE_PREFIX))
|
| 63 |
if not gene_ids:
|
|
@@ -76,12 +79,21 @@ with torch.no_grad():
|
|
| 76 |
inputs = tokenizer([text], return_tensors="pt")
|
| 77 |
inputs = {k: v.to(next(model.parameters()).device) for k, v in inputs.items()}
|
| 78 |
outputs = model(**inputs)
|
|
|
|
| 79 |
# Take logits for the last token only
|
| 80 |
logits = outputs.logits[0, -1, :].to("cpu", dtype=torch.float32)
|
|
|
|
| 81 |
# Mask non-gene tokens
|
| 82 |
gene_token_tensor = gene_token_tensor.to(dtype=torch.long, device=logits.device)
|
| 83 |
gene_logits = logits[gene_token_tensor]
|
|
|
|
|
|
|
| 84 |
order = torch.argsort(gene_logits, descending=True)
|
|
|
|
|
|
|
| 85 |
sorted_gene_ids = gene_token_tensor[order]
|
| 86 |
sorted_gene_tok = tokenizer.convert_ids_to_tokens(sorted_gene_ids.tolist())
|
| 87 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
return tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
| 59 |
|
| 60 |
def detect_gene_token_space(tokenizer):
|
| 61 |
+
"""
|
| 62 |
+
Used to detect the boundary of special gene tokens in the tokenizer vocabulary for subsequent masking non-gene tokens.
|
| 63 |
+
"""
|
| 64 |
vocab = tokenizer.get_vocab()
|
| 65 |
gene_ids = sorted(idx for tok, idx in vocab.items() if tok.startswith(GENE_PREFIX))
|
| 66 |
if not gene_ids:
|
|
|
|
| 79 |
inputs = tokenizer([text], return_tensors="pt")
|
| 80 |
inputs = {k: v.to(next(model.parameters()).device) for k, v in inputs.items()}
|
| 81 |
outputs = model(**inputs)
|
| 82 |
+
|
| 83 |
# Take logits for the last token only
|
| 84 |
logits = outputs.logits[0, -1, :].to("cpu", dtype=torch.float32)
|
| 85 |
+
|
| 86 |
# Mask non-gene tokens
|
| 87 |
gene_token_tensor = gene_token_tensor.to(dtype=torch.long, device=logits.device)
|
| 88 |
gene_logits = logits[gene_token_tensor]
|
| 89 |
+
|
| 90 |
+
# Sort by logits
|
| 91 |
order = torch.argsort(gene_logits, descending=True)
|
| 92 |
+
|
| 93 |
+
# Ranked Gene List with Scores (logits)
|
| 94 |
sorted_gene_ids = gene_token_tensor[order]
|
| 95 |
sorted_gene_tok = tokenizer.convert_ids_to_tokens(sorted_gene_ids.tolist())
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
## Special Gene Token Example
|
| 99 |
+
In `<|PhenoGemini-Special-Token-Entrez-ID-64087|>`, the numeric value after the final hyphen represents the Entrez Gene ID.
|