ZeroTrain / 2.query_token.py
aifeifei798's picture
Upload 8 files
07a5dc6 verified
Raw History Blame Contribute Delete
1.87 kB
import sys
import pandas as pd
from transformers import AutoTokenizer
MODEL_PATH = "./Qwen3-0.6B"
CSV_FILE = "gravity_scan_0.6B.csv"
def query(word):
print(f"[*] 正在从 {MODEL_PATH} 探测词汇: '{word}' ...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
if not pd.io.common.file_exists(CSV_FILE):
print(f"[-] 错误: 未找到基准表 {CSV_FILE}!")
return
df = pd.read_csv(CSV_FILE)
# 1. 真实分词切分分析
token_ids = tokenizer.encode(word, add_special_tokens=False)
print("\n" + "=" * 75)
print(f"🎯 目标词: 【{word}】 ➔ 分词器切分 ID: {token_ids}")
print("-" * 75)
print(f"{'Token ID':<10} | {'当前字符':<16} | {'强吸引至 (Top-1)':<18} | {'置信度':<8} | {'引力熵'}")
print("-" * 75)
for tid in token_ids:
row = df[df["token_id"] == tid]
if not row.empty:
r = row.iloc[0]
print(f"{tid:<10} | {str(r['char']):<16} | {str(r['top1_target']):<18} | {r['top1_prob']*100:>6.1f}% | {r['entropy']:.4f}")
else:
print(f"{tid:<10} | [未找到记录]")
print("=" * 75)
# 2. 全词表模糊检索相关 Token
print(f"\n[*] 全词表中所有包含 '{word}' 的独立 Token 吸引子分布:")
fuzzy = df[df["char"].str.contains(word, case=False, na=False)]
if not fuzzy.empty:
for _, r in fuzzy.iterrows():
print(f" ➜ ID: {int(r['token_id']):<6} | Token: {str(r['char']):<14} ➔ 强吸引至: {str(r['top1_target']):<14} (置信度: {r['top1_prob']*100:>5.1f}%, 熵: {r['entropy']:.3f})")
else:
print(" [未找到其他衍生 Token]")
print("=" * 75 + "\n")
if __name__ == "__main__":
target_word = sys.argv[1] if len(sys.argv) > 1 else "bikini"
query(target_word)