🔥

苦痛だったOSSの翻訳が報われた話

2023/03/25に公開
1

誰?

唐澤 克幸と申します
普段は自作キーボード(カスタムキーボード)や、GiteeなどでFOSSを漁っては翻訳やPRを出してを日常的に行っています
Androidのビルドとかもしてます

最近はもっぱらGenerative AIにハマっています。
特定のコミュニティに居続けるタイプなので、あまりTwitterなどには顔を出しません(が、一応あります)

最初に

まず、私がどんな翻訳を始めたのかを説明します。
大きな枠組みでいうと、最近流行りの画像生成AIであるStable Diffsuion
それをローカル上で動かすプロジェクトです。
OSSなのでいくつかありますが、関連するプロジェクトで、もっとも早くにリリースされたAUTOMATIC1111版stable-diffusion-webui(以下sd.webui)のローカライズです。

本題

本題に入ろうと思います。
基本的にうろ覚えなので、commitやPRを辿っていく形になりますが、申し訳ありません。

~11月中旬らへん

この頃はまだsd.webuiを使い始めたころだったような気がします。
もともと、その前から使ってはいたのですが、自分の時間に余裕ができてからはかなりドップリ浸かり始めたと思います。

自分ではできないことを、やらせてくれる楽しみを覚え始めました。
その頃にはすでに前任者であるyuuki76氏が翻訳を行ってくれていました。
https://github.com/yuuki76/webui-localization-ja_JP
使い始めた頃はかなり助けられました。
そのあと少しして、sd.webuiのcommitのスピードがかなり早く、機能追加も早いことに気が付きました。

とくにまぁ不便は感じていなかったのですが、まだ始まったばかりの界隈でここまで伸びているのであれば今後もかなりの成長や機能追加があるだろうと思ったのを覚えています。
なにせ瞬間的な盛り上がりだけでいえばいまよりもあった気がするので。
それが11月の中旬頃だったと思います。

他の翻訳はすでにある程度体制が整っていたような気がしますし、zh-CNなどはすでに3桁Starはあったと思います。
しかし、日本語訳のリポジトリはあまり整っておらず、翻訳そのものが大きなコミュニティでなかったですし、そもそもGitHubなどに対する知見なども一般のsd.webuiのユーザーはあまりなかったこともあり、PRなどもまったく来ていない状態でした。

https://github.com/yuuki76/webui-localization-ja_JP/commit/546a27eb36883031026b84b94092a7106649b922

ある程度JPのユーザーとして貢献したかったのか、それとも自分ならやり切れるというエゴだったのかもしれません。
たぶん後者ですね。

とくにこの頃はやりたいこともなかったので、少し大きめのリポジトリに自分で翻訳で継続してみたいと思い、以下のようなissueを出しました。

https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/4953

ここからが地獄一歩だったのかもしれません。
自我を出してしまったことの最大のミスだと思います。

https://github.com/yuuki76/webui-localization-ja_JP/pull/1

ここにある程度はまとまっていますが、PRを出して返答がないのでClashSAN(Collabolators)にリストへの更新をかけてもらっています。

11月終わり

上記らへんのPRだったりissueが解消したので、自分のリポジトリへ引き継ぐ作業だったり、Crowdinを整える作業をしたり、一度翻訳に関してのルールを制定したりをしていました。
大幅なREADMEの追加もこの辺でしていました。
このあたりから?
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/54a201852ba8ff171f31113e4152eeb134f99fa7?diff=split

で、まぁたぶんこの頃は楽観視していました。

12月

とくになにもなかったので、ちょくちょく翻訳を進めてたりをしました。
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/9fa7e2f38eda264a59e40077f0a156ae06721286
この辺からが12月でしょうか?

浮上してきた問題点

この頃から少しずつ翻訳手伝ってくれる方がいたので少しずつ進めていたのですが、問題点が少しありました。
リポジトリの体制を見ていただくとわかるのですが、翻訳のソースの取得が難解すぎます。

どういうことかというと、

こんな感じです
実のところもっとあって、

  1. 拡張機能がないjsonはわざわざクリーンなsd.webuiをもう1つ用意
  2. 拡張機能を含むjsonも欲しい拡張機能だけを盛り込んだ、もう1つのsd.webuiが必要
  3. 上記2つを用意しないと、日本語訳などの邪魔なURLを含んだjsonがある。
    のでさらに、検証用にもう1つのsd.webuiが必要
  4. sd.webuiのコミットがあってないと管理できないので不用意にgit pullをしないための控えなど
  5. 自分の趣味で使うためのsd.webui

まぁ書いてたらキリがないので切るのですが、いろいろと厄介なことがありました。
当時はsd.webuiだけでディレクトリが10個くらいあった気がします。

しかも、sd.webuiはなにかしらcheckpointが入ってないといけないので、SD1.5かなにかを入れていました。
それだけでだいたい30GBくらいストレージを占有しています。(PyTorchとかは別なはず)

頑張ってました。

頑張っていたと思います。(努力しろと言われたらぐうの音も出ません)
自分はPythonが苦手で、全くと言っていいほど書けません。
ChatGPTを使っていろいろ頑張ろうと思っていましたし、自動化しようとしてました。

pushしない言い訳に聞こえるかもしれませんが、実はローカルでバカみたいにいろいろやってました。
ただ、成果は全く出ず、12/22を境目にコミットが途切れ始めます
Star数もなければ、翻訳をしてくれる人も全く増えません。
筆者はTwitterもやっていなければ、とくにコレと言って宣伝らしい宣伝もしていません。
もちろん他の方のようにイラストをめちゃくちゃ出力して、拡散されてみたいなこともないです。
ただの一般ユーザーの1人にすぎないですし。

https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/046a9ab0bde8682377d445cf8eab073ea4a6c3d6

1月

正月です。
なにもないです。

言い訳すると、

  • 上旬は親戚への挨拶周りや集まりや、学校の再開
  • 中旬はコロナに感染して一週間寝込む
    • 入院しかけました
  • 下旬は学校側の研究成果に備える

etc...
実をいうと、もうArchiveしてもいいかなという気持ちがありました。
翻訳する人はいないですし、そもそもユーザーがいるのかわからない
OSSなので、別に自由だと思うのですが、自分のエゴで始めたものだったので迷っていました。
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/607a8906f887c1673b615b8f4289abe90af03075

このあたりからcommitがめちゃくちゃ減ってます。
1月中なんて3日しか稼働していません。

InvokeAIとの出会い

これがいちばんデカかったです。(言い訳)

  • ChakraUI + TypeScript + Redux + React
    Webフロントエンドの最前線のような美麗なUIの組み合わせ
  • i18nextでしっかりとした他言語対応
  • リポジトリとReleasesが切り分けられている環境

個人的にお手本のような環境でした。
拡張機能がなかったり、safetensorsが途中までは扱えなかったりと、少し厄介な部分はありましたが、それを抜きにしても使いやすく、メンテナンスもしやすかったのです。
公式のDiscordもあるので、翻訳に関する相談も最悪はできる環境がありましたし、すぐに翻訳を投げました。
日本のユーザーの方々は、InvokeAIを追ってない方のほうが多いと思うので分からないかもしれませんが、なぜユーザー数が少ないのかが分からないほど素晴らしかったです。
実際相当な期間InvokeAIを使っていました。
https://github.com/invoke-ai/InvokeAI/pull/2397

2月

これはもう見るに値しないどころじゃないですね
完全にInvokeにハマってましたし、卒業も近づいてきていろいろとやることが増えていました。

上にある画像の下に見えるMar 2, 2023
分かりますかね?
1月から3月まで進捗がないんです!
本当にごめんなさい
皆さんはたぶんこの頃LoRAやControlNetで盛り上がっていた時だと思います。
自分は2月中もうずっと目をそらしていました。
下手したら自分でメンテするからもういいやとか思った人もいると思います。
本当にごめんなさい
謝ることしかできないですが、マジで精神を壊されていました。
何回か某Discordサーバーでボヤいていたのですが、Archive or Closeを本当に視野に入れていました。

3月

上旬

さすがにマズいよなと思い、ソースを自分1人じゃなくてもできるように他のソースを取ってくることにしました。
軽いPyスクリプトくらいなら書けるので、さすがに少しでも負担を減らすべきだと考えました。

試行錯誤したといわれても分からないと思うので

試行錯誤

ソースの参照先をzh-CN(中国簡体字)に変更する

https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/d376651e85ab0f661cc0e896fa88922031df09ab

  1. もちろん翻訳されていない場所は英語にならない
    もともと英語の部分がzh-CNになるので
  2. git submoduleがCrowdinでは認識してくれない
    • そのため、差分だけ使うこともできない

試行錯誤2

少しでも翻訳のソースを取得してからが楽になるようなPRを送ってくれた方がいた
ありがとうございます。
少しは真面目に負担が減りました。

https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/f674aaf67f895cf773b9d9dce4ff9361be45ed26

  1. やはり翻訳のソースを取ってくるほうがつらい
  2. 根本的解決にならない

こんな感じです。
もっとやれと言われたそうなんですが、これ以上改善する方法を模索するのも本当に辛かったです。
なにができるかが分からない上に、最低限別のWebUIが必要なのはいいとして、安定した取得ができない。

3月16日

転機

途轍もない転機が訪れました。

zh-TW(中国語繁体字)
主に台湾などで使われる字体の中国語のローカライズを行っているリポジトリをふと見たところ、なんとソースだけがキレイに上がっていました。
本当に転機でした。
https://github.com/benlisquare/stable-diffusion-webui-localization-zh_TW/commit/95fa4da3820593a150346df7e5719738a3993adb

ChatGPTに聞いていくつかのダウンロードマネージャを試しました。
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/commit/056cd0ec1bb862e0ae952cac3a2ffc3ed518590e
最終的に
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP/blob/main/.github/workflows/update-source.yaml

こんな感じのクソコードで取ってくることに成功しました。
エンジニアの方が見たら吐き気すると思いますが、最適化は苦手なんです..。

めちゃくちゃ喜びました。
自分1人でも最悪なんとかなることになったので
たとえ翻訳対象が16000語に増えようとも、チビチビやっていくことでなんとかなったと思います。

2度目の転機

最悪はこれでよかったのですが、某Discordサーバーで少し呼びかけをしました。
マジで呼びかけっていうのも変だし、おこがましいんですが、自分の大したことない知名度じゃこれくらいしかできませんでした。
手伝ってくれた方ありがとうございます。

それで少し話を進めたら、初心者向けの方へブログを書いてくれている、sp8999さんがこんなことを言ってくれました。
本当に押しつけがましくてごめんなさい。

ぶっちゃけこんな面倒なことまぁやらないでしょと思ってました。本当にダメなの前提で書いたので。
こう言っちゃなんですが、たぶん自分なら不言不実行です。

やっぱ誠実な人ってすごいんですね
書いていただけました。

実際に書いていただいた記事はこちらです。
https://sp8999.com/stable-diffusion/2023/03/20/870/
https://twitter.com/sp8999/status/1637845882635968512

すごいですね
こんな大したことないプロジェクト1つを記事にしていただいて600いいねですよ
ぶっちゃけ翻訳する人が1人でも増えてくれたらうれしいなと思っていました。

そのあとは本当にすごかったです。
外出していたのですべては見られなかったのですが、昼の12時時点くらいで半分、午後22:00頃に帰宅した頃には一応とはいえ100%になっていました。

そこから少しREADMEやなんかを整えて、03/22の早朝の3:32、100%に到達してから少し時間が経過していましたが、翻訳をすべてマージできました。
https://twitter.com/Ktsyk_Krsw/status/1638247189515481089

えっ!?
1日で100%まで到達!?
しかも18000語近い翻訳が!?

信じられますか?
かれこれ3か月全く動かなかったプロジェクトが一気に進みました。

しかもそれまでは6000語で進捗状況が45%くらいでした。
それでもぶっちゃけ100%になれば十分だと思っていました。

マジで?
そう思ってました。
本当に意味が分からなかったので。

ツイートをした後も、本当に信じられないし、興奮したままだったので、CrowdinのReports見たらこんなことになってました。
https://twitter.com/Ktsyk_Krsw/status/1638263280912441344

Whats!?
9000%ですよ 9000% さすがに少し意味が分からなくて、本当に自分の目がおかしくなったのかと思いました。

現在

そこから少し余裕ができて、いろいろとリポジトリの改修だったり、READMEだったり、CrowdinのDisscusionに参加したり。
少なくとも自分だけでやらなくてもいいと思えるくらいには余裕ができました。

とある方が関西弁ネイティブなのでやりたいおっしゃられていたので、それに対応したりする余裕までできました。
(日本語オンリーでl10nをマネジメントすることなどほとんどないので、要望があれば受け付けています。)

https://twitter.com/Ktsyk_Krsw/status/1639240754047647744

zh-TWのリポジトリに自分のリポジトリ構造を採用して変更してくださったり、
https://github.com/benlisquare/stable-diffusion-webui-localization-zh_TW

自分だけのオリジナルの翻訳がほしい!という方に向けてテンプレートリポジトリを作成したりしています。
https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-template

いまでこそまだApprovedな翻訳は全くないものの、Disscusionはそれなりに行われ、1時間に最低でも1回は変更が入っています。
投票も増えてきており、確実に質が高まっているのを感じられています。

終わりに

翻訳に参加してくださった方、本当にありがとうございます。
また、Contributorや、以前から翻訳を続けてくださった方には感謝しかありません。

自分だけでは全くここまでこれなかった
それどころか、他人を頼ることしかできなかった自分が情けなくて仕方ありません。
今後はしっかりとこのリポジトリを成長させていければと思います。

まだ依然として、翻訳の質は高いとは言えない状況にあります。
もしさらにお手伝いいただける方は以下をご参照ください!

https://github.com/Katsuyuki-Karasawa/stable-diffusion-webui-localization-ja_JP
https://crowdin.com/project/stable-diffusion-webui-localization-ja_JP

今後のGenerative AIのさらなる発展に貢献していきたいと思います!
最後まで、この拙い文章を読んでいただき、ありがとうございました!

https://github.com/Katsuyuki-Karasawa

https://twitter.com/Ktsyk_Krsw

https://t.me/Katsuyuki_Karasawa

https://civitai.com/user/Katsuyuki_Karasawa

https://huggingface.co/Katsuyuki-Karasawa

AIものづくり研究会

Discussion

rokurorokuro

ローカライズ用の拡張機能の管理者になられた方なので、Pythonでの開発が得意な人だと思っていました。

外から見ている限り、何かで困っているというよりは、プロジェクトに割く時間がない人という印象でした。「Hires steps」→「高解像度化の回数」のような誤訳が長期間放置されているようだったので、初心者が機能の意味を誤解する恐れがあると思い、翻訳に参加したくてCrowdinの使い方を尋ねましたが、結局一週間後に自己解決するまで反応がありませんでした。そのため、管理者がWebUIに対する関心を失っているのではないかと考えました。

リポジトリのjsonファイルが重複する現象を報告した時も、「ソースは自分ではないのでコチラに投げられても困るとしか言えません」という言い方が少し不快に感じました。別のリポジトリに依存している身で、原因を確認する気もなく向こうに非があると断定しているように感じ(仮にそうだったとしても解決に貢献する気が無い言い方に見える)、このプロジェクトに関わってから一番イライラした瞬間でした。

しかし、記事を読んで背景事情を知り驚きました。本当はちゃんとできるのに雑にやっていたとかではないので、仕方がないことだと今では理解できます。

「便りが無いのは良い便り」という言葉があるように、何事もなければ順調に進んでいるように見られるので、助けが必要な時は積極的にアピールすることが大切だと記事を読んで感じました。他の人ならすぐに分かるかもしれない問題に、自分だけが長時間悩んでしまうことがあるからです。

例えば、

しかも、sd.webuiは何かしらのcheckpointが必要で、SD1.5などを入れていました。
それだけで約30GBのストレージが占有されています。(PyTorchは別)

この問題に対しては、モデルや拡張機能のフォルダにシンボリックリンクを使えば解決できていたと思います。また、シンボリックリンクの参照先を切り替えるスクリプトを作成することで、拡張機能の管理も容易になります。

しかし、精神的なプレッシャーを感じていると問題を一人で抱え込んでしまいがちです。私も同じ立場だったら間違いなく同様に苦労していたと思います。お疲れ様でした。