-
Notifications
You must be signed in to change notification settings - Fork 8
Description
안녕하세요. 좋은 코드 공유해 주셔서 감사합니다. 해당 코드 테스트를 해보던 중 오류가 있는 것 같아 공유드립니다.
먼저, 분석 코드를 실행하여 아래와 같은 결과를 얻었습니다.
python token_analyzer.py --model_id meta-llama/Llama-4-Maverick-17B-128E-Instruct
>>>
...
모델: meta-llama/Llama-4-Maverick-17B-128E-Instruct
분석 대상 최대 토큰 ID: 201135
분석 대상 토큰 수: 201,032
순수 영문 토큰 수: 36,668
한글 가능성 토큰 수: 64,992
완성형 한글 포함 토큰 수: 5,490
특수문자 토큰 수: 2,509
미분류 토큰 수: 97,009
uncategorized_ids 97009
len(token_list) 97009
...그 이후 실제 토큰의 형태를 확인하기 위해 아래 코드를 실행했습니다.
# load
# 분석된 파일 로드
with open("/home/bjcho/project/2025/Llama4-Token-Editor/token_category_analysis.json", 'r') as f:
token_category = json.load(f)
# load tokenizer
model_id = token_category['model_id']
print(model_id)
llama4_tokenizer = transformers.AutoTokenizer.from_pretrained(model_id)
# print examples
token_ids = token_category['token_ids']['hangul_possible']
random.shuffle(token_ids)
for idx, token_id in enumerate(token_ids):
token_bytes = llama4_tokenizer.decode([token_id]).encode('utf-8')
print(f"id : {token_id} --- tokens : {llama4_tokenizer.decode([token_id])}", end=' : ')
print(token_bytes)
if idx == 50:
break다음은 출력 일부입니다.
id : 178536 --- tokens : -β : b'-\xce\xb2'
id : 36167 --- tokens : 향 : b' \xed\x96\xa5'
id : 158281 --- tokens : Влади : b'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8'
id : 155671 --- tokens : костей : b' \xd0\xba\xd0\xbe\xd1\x81\xd1\x82\xd0\xb5\xd0\xb9'
id : 106985 --- tokens : подвод : b' \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb2\xd0\xbe\xd0\xb4'
id : 82125 --- tokens : 時の : b'\xe6\x99\x82\xe3\x81\xae'
id : 156386 --- tokens : തിന : b'\xe0\xb4\xa4\xe0\xb4\xbf\xe0\xb4\xa8'
id : 179480 --- tokens : μαι : b'\xce\xbc\xce\xb1\xce\xb9'
id : 22608 --- tokens : ", : b'\xe2\x80\x9d\xef\xbc\x8c'
id : 156258 --- tokens : швей : b' \xd1\x88\xd0\xb2\xd0\xb5\xd0\xb9'
id : 38638 --- tokens : 증가 : b' \xec\xa6\x9d\xea\xb0\x80'
id : 195743 --- tokens : 안은 : b'\xec\x95\x88\xec\x9d\x80'
id : 169098 --- tokens : 怪物 : b'\xe6\x80\xaa\xe7\x89\xa9'
id : 177690 --- tokens : meş : b' me\xc5\x9f'
id : 112691 --- tokens : мышления : b' \xd0\xbc\xd1\x8b\xd1\x88\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f'
...
예시와 같이 한글 가능성이 없는 토큰이 'hangul_possible' 에 추가되는 것으로 보입니다.
특정 예시에 대해 확인해 보면,
token_id = 169098
tokens = llama4_tokenizer.decode([token_id])
token_bytes = llama4_tokenizer.decode([token_id]).encode('utf-8')
print(f"{tokens} - {token_bytes}")
>>> 怪物 - b'\xe6\x80\xaa\xe7\x89\xa9'위 token_id를 사용하여 한글 가능성 체크(token_analyzer.py 일부)를 수행하면
# 한글 가능성 체크
for i in range(len(token_bytes)):
remaining_sequence = token_bytes[i:]
print(can_be_hangul_utf8(remaining_sequence))
>>>
False
False
False
False
True # 여기서 한글가능성 True가 되어 저장
True과 같이 한글 가능성이 없어보이는 토큰이 함수 실행 결과 True 가 return되는것이 확인됩니다.
여기서 문제가 발생하는 것으로 보입니다.
감사합니다.