0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

小書きカタカナ「ㇰ」や「ㇷ゚」をgemma-4-E2B-itに追加してみる

0
Posted at

一昨日の記事の続きだが、gemma-4-E2B-itに「ㇰ」や「ㇷ゚」など小書きカタカナを追加してみることにした。resize_token_embeddingsのバグに巻き込まれたり、Gemma4TextScaledWordEmbeddingの構造がイマイチわからなかったり、model.safetensorsだとGoogle Colaboratory (GPU版)のメモリが足りなくなるのでpytorch_model.binに切り替えたりと、あちこち頑張ってみたのが、こんな感じ。

!pip install 'transformers>=5.5.0' 'mistral_common>=1.11.0' accelerate jinja2
import copy,torch,gc
from transformers import pipeline
from transformers.models.gemma4.modeling_gemma4 import Gemma4TextScaledWordEmbedding
w=[("ㇰ","ク"),("ㇱ","シ"),("ㇲ","ス"),("ㇳ","ト"),("ㇴ","ヌ"),("ㇵ","ハ"),("ㇶ","ヒ"),("ㇷ","フ"),("ㇸ","ヘ"),("ㇹ","ホ"),("ㇺ","ム"),("ㇻ","ラ"),("ㇼ","リ"),("ㇽ","ル"),("ㇾ","レ"),("ㇿ","ロ"),("ㇷ゚","プ")]
nlp=pipeline("image-text-to-text","google/gemma-4-E2B-it",device=-1)
n=nlp.model.model.language_model.embed_tokens_per_layer
g=copy.deepcopy(nlp.model.get_output_embeddings())
p={"embedding_dim":n.embedding_dim,"padding_idx":n.padding_idx,"embed_scale":n.scalar_embed_scale}
nlp.tokenizer.add_tokens([a for a,b in w])
e=nlp.model.resize_token_embeddings(len(nlp.tokenizer))
if(nlp.model.get_output_embeddings().out_features!=len(nlp.tokenizer)):
  nlp.model.set_output_embeddings(g)
  e=nlp.model.resize_token_embeddings(len(nlp.tokenizer))
g=Gemma4TextScaledWordEmbedding(num_embeddings=len(nlp.tokenizer),**p)
nlp.model.config.text_config.vocab_size=nlp.model.config.text_config.vocab_size_per_layer_input=len(nlp.tokenizer)
with torch.no_grad():
  g.weight[0:n.weight.size()[0],:]=n.weight
  nlp.model.model.language_model.embed_tokens_per_layer=g
  e.weight.cuda()
  g.weight.cuda()
  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
nlp.model.config.save_pretrained("tmpdir")
nlp.model.generation_config.save_pretrained("tmpdir")
nlp.processor.save_pretrained("tmpdir")
nlp.tokenizer.save_pretrained("tmpdir")
torch.save(nlp.model.state_dict(),"tmpdir/pytorch_model.bin")
del nlp,e,g,n,p
gc.collect()
nlp=pipeline("image-text-to-text","tmpdir",max_new_tokens=2048)
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で読み取られたアイヌ語の文章を記載します。

合和7年度アイヌ工芸品展「アイヌの美-形と彫-き」アニ アンレヘ チコレ ウサムペカ イコチョア チャマ ウ エチスケラエン。

アイヌ アナケ ネ テタ ワン アン クル ネ ワ 20 イケ ネ バエム エ コ パクノヤウン モシリ、ヤンケモシリ (カラフト)、ルトム オカタ オカイ。タネ ヤウン モシタ カイ サモモシタ タイ カイ、モシリ エビツタ オカイ。テタ アナケ チクニ、ニカブ、キチカブ、チオキイボネ、キラウ、シニチ、チェブフ、セイ アニ ウサ オカイ ベカラ。ネ アンベ オッタ ケツト アイヌング フ カイ アン。イノイ オッタ アイヌング タイ カイ アン。ビシカン モシリ エオカイ ワッタラ、アイヌ ワイマ、センカクメ、ミト、カネ、タマ コロ ワ ネアンペ

タパン イキ オッタ イロホ ビリヤ プ、セベキ ビリヤ プ チムケ ウ チサンケ。イコ コチ エㇰメカレン カッタ エネアミ。センカク トラ アンテセ ワ アンカラ チラケ カイ、ルトム ウンクル イカララワ ワ ラ クカイ カイ アン。

センカク トラ アンセ ワ アンカラ チラケ カイ、ルトム ウンクル イカララワ ワ ラ クカイ カイ アン。

タプ アナケ、アイヌブリヤ クニ、公益財団法人アイヌ民族文化財団

広益財団法人アイヌ民族文化財団

うーん、やっぱり小書きのカタカナは、あまり読めてない。追加学習が必要なのだろうけど、Gemma4TextScaledWordEmbeddingの学習って、どういう風にすればいいんだろ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?