transformersのresize_token_embeddingsに関するバグ(これとかこれとかこれ)は、どうも闇が深いらしく、なかなか治りそうにない。仕方ないので、resize_token_embeddingsを使わずに、gemma-4-E2B-itにアイヌ語小書きカタカナを追加する方法を考えた。端的には、gemma-4-E2B-itの未使用トークン(<unused0>~<unused6226>)を、小書きカタカナに入れ替えるアイデアである。Google Colaboratory (GPU版)だと、こんな感じ。
!pip install 'transformers>=5.5.0' 'mistral_common>=1.11.0' accelerate jinja2
import json,torch
from transformers import pipeline,AutoProcessor
w=[("ㇰ","ク"),("ㇱ","シ"),("ㇲ","ス"),("ㇳ","ト"),("ㇴ","ヌ"),("ㇵ","ハ"),("ㇶ","ヒ"),("ㇷ","フ"),("ㇸ","ヘ"),("ㇹ","ホ"),("ㇺ","ム"),("ㇻ","ラ"),("ㇼ","リ"),("ㇽ","ル"),("ㇾ","レ"),("ㇿ","ロ"),("ㇷ゚","プ")]
nlp=pipeline("image-text-to-text","google/gemma-4-E2B-it",max_new_tokens=2048)
nlp.processor.save_pretrained("tmpdir")
nlp.tokenizer.save_pretrained("tmpdir")
d=json.loads(nlp.tokenizer.backend_tokenizer.to_str())
for a,(k,v) in zip([a for a,b in w if a not in d["model"]["vocab"]],[(k,v) for k,v in d["model"]["vocab"].items() if k.startswith("<unused")]):
d["model"]["vocab"][a]=v
del d["model"]["vocab"][k]
if len(a)==2:
d["model"]["merges"].append([a[0],a[1]])
nlp.tokenizer.backend_tokenizer.from_str(json.dumps(d)).save("tmpdir/tokenizer.json")
nlp.processor=AutoProcessor.from_pretrained("tmpdir")
nlp.tokenizer=nlp.processor.tokenizer
e=nlp.model.get_input_embeddings()
g=nlp.model.model.language_model.embed_tokens_per_layer
with torch.no_grad():
x=nlp.tokenizer(["ャ","ヤ"])["input_ids"]
n=e.weight[x[0][0],:]-e.weight[x[1][0],:]
p=g.weight[x[0][0],:]-g.weight[x[1][0],:]
for x in nlp.tokenizer(w)["input_ids"]:
e.weight[x[0],:]=e.weight[x[-1],:]+n
g.weight[x[0],:]=g.weight[x[-1],:]+p
img="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/55d10bae-10b0-4a18-8e27-0907bc16361f.jpeg"
d=nlp([{"role":"user","content":[{"type":"image","image":img},{"type":"text","text":"OCR Ainu sentences."}]}])
print(d[0]["generated_text"][1]["content"])
『アイヌの美―彩りと輝き―』(京都文化博物館、2026年1月31日~3月19日)のウエランカラㇷ゚を読ませてみたところ、私(安岡孝一)の手元では以下の結果が出力された。
はい、提供された画像に含まれるアイヌ語と思われる文章をOCRで読み取ります。
以下はOCR結果です。
ウエランカラブ
合和7年度アイヌ工芸品展「アイヌの美-形と彫り-」アニ アンレヘ チコレ ワ ウサム ベカ イコチョアアマ ワ エチスケㇻレン。
アイヌ アナネ テタ ワン アン クル ネ ワ 20 イケ ネ バエム コ パクノヤウン モシリ、 ヤンケモシリ (カラブト)、ルム オッタ オカイ。タネ ヤウン モシタ カイ サモモシタ タイ カイ、 モシリ エビツタ オカイ。テタ アナネ チクニ、ニカブ、キチカブ、チオキイボネ、 キラウ、シニ、シュン、チエブブ、セイ アニ ウサ オカイ ベカラ。ネ アンベ オッタ ケツト アイヌング ファイ アイ。イン イモッタ アイヌリンク タイ カイ アン。ピシカン モシリ エオカイ ワッタラ、アイヌ ワイマ、センカクメ、メイト、カネ、タマ コラ ウ ネアンベ
タバン イキ オッタ イロホ ビリブ プ、ゼプビリカ ピチ チムケ ウ チサンケ。イココ エチスケㇻレン カトウ エニアミ。センカク トラ アンセ ワ アンカラ チㇻバ カイ。ルム ウンクル イカララワ ワ ラク カイ アン。
センカク トラ アンセ ワ アンカラ チㇻバ カイ。ルム ウンクル イカララワ ワ ラク カイ アン。
ネアンベ トラッソ クスト タクス チㇰプ テチウ 恵子 (1948~2010) カベ カイ エチスケㇻレン。エビバクタ、旧滞留 (イゼイクル)、下官証之 (カネスメクル)、磨戸康平 (イココカラ) タネ ナ。オサ オイビリカ プ カラ ワ コサルアウ ウタン ネ ワ クス ネアンベ
タブ アナネ、アイヌブリ ビㇻサ クニ、公益財団法人アイヌ民族文化財団 (アムココ トミ アニ アイヌブリ ビㇻサ ウタタ) ケ パキ ネ ワ、タネ 30 スチ チㇰン ナン タンベ エチスカラワ、テタ エイズブリ、タネ アン アイヌブリ、アムキル インネ チキビカ。イオッタ イキ、タバン イキ テコレ テツママ、ビㇼカリコウ ワネルサ ア ウタラ ウサ ウサ ワンカスイ ウタラ、パセタ チョイアイチクタン。
北海道立釧路芸術館
京都府京都文化博物館
公益財団法人アイヌ民族文化財団
注記:
これは提供された画像をOCR処理した結果であり、アイヌ語の文法や語彙の厳密な校正は専門家が行う必要があります。特に、固有名詞や専門用語、古い表記については、文脈によっては解釈が異なる可能性があります。
何だか良くわからない「注記」が出力されたものの、4月5日の記事同様、小書きカタカナは、あまり読めてない。やっぱり何とかして追加学習しなきゃダメかなあ。