AI によるオンラインマニュアル翻訳システムの開発ログ
AI によるオンラインマニュアル翻訳システムを開発したいので、そのために行ったことを日々記録していきます。仕事のスケジュールがいっぱいで纏まった時間が取れないため、どこまでやれるかわかりませんが、毎日少しずつでも進めていきたいと思います。
要件定義
まずは思い付いた要件を大雑把に書き留めます:
- 今のところ Web アプリケーションを想定
- オンラインマニュアルの英語版と日本語版の URL または HTML ファイルを AI に渡して、文体やスタイル、UI 等の定訳を学習させることができる
- 学習させた AI に新バージョンの英語版 HTML や XML を渡すと、UI、文体、スタイルが既存のバージョンと正確に一致した日本語版を吐き出してくれる
- 各種設定で翻訳のスタイルを指定できる。スタイルの具体例:
- 2 バイト文字と 1 バイト文字の間には半角スペースを 1 つ入れる
- 「サーバー」等の音引きの有無
- 「である」調と「ですます」調の使い分け
- 英数字はすべて 1 バイト文字
- AI に翻訳させる新バージョンの内容は、原文も訳文も機密保持のため学習不可設定にできる
- Excel ファイルや CSV ファイルで作成した用語集を渡して AI に用語を学習させることができる
- 翻訳したファイルのスタイルや用語が正しいかどうかを正規表現等でチェックする機能
今日はスケジュールが詰まっていてあまり時間が取れないので、先日の要件定義を ChatGPT に見せて、疑問点や足りない点を指摘してもらいました。
ChatGPT の回答
要件定義は非常に明確で、全体的にしっかりとカバーできています。ただし、以下の点を追加または確認すると、さらに具体的で実現可能な計画になります。
疑問点や足りない点
-
AIモデルの選定とカスタマイズ
要件2で「AIに文体やスタイル、UI等の定訳を学習させる」とありますが、どのAI翻訳モデルを利用するかの検討が必要です。また、事前学習済みのモデルをファインチューニングするのか、ゼロからトレーニングするのかによって、技術的な構成が変わります。以下を確認しておくと良いです:- どのAI翻訳モデルを使用するか(Google、DeepL、OpenAIなど)
- カスタムモデルを開発するためのリソースやツールの可用性
-
学習データの構造とフォーマット
英語と日本語のオンラインマニュアルのURLやHTMLファイルをAIに渡す際、そのフォーマットや構造がどのようになっているかに依存します。HTMLやXMLファイルは単純なテキストと違い、タグを保持する必要があります。これに対して、どう学習データを構造化するのかを明確にする必要があります。 -
スタイルガイドのカスタマイズの柔軟性
翻訳スタイルの指定(要件4)に関しては、多岐にわたるカスタマイズが求められるため、ユーザーがインターフェースを通じて自由にルールを設定できる仕組みが必要です。たとえば、UI上で正規表現を入力するか、あるいは選択肢ベースにするか、そのインターフェースの仕様を考えると良いでしょう。 -
UIや文体の一致度の精度
UI、文体、スタイルの一致度をどの程度厳密にするかも考慮が必要です。機械翻訳の結果が元のUIに正確に一致するかどうかをどのように評価するか、基準や評価方法を設計しておくと良いでしょう。 -
用語集の管理とバージョン管理
ExcelやCSVファイルで用語集を渡せる(要件6)とありますが、用語集が頻繁に更新される場合、バージョン管理の仕組みや、新バージョンとの適用範囲の違いをどう扱うかを考えておく必要があります。 -
セキュリティと機密保持
要件5で「学習不可設定にする」とありますが、これは外部APIを使う場合に、確実にその設定がサポートされているかを確認する必要があります。もし自社でカスタム翻訳AIを構築する場合、データの非保存やオンプレミスでの運用も検討する必要があります。 -
スケーラビリティ
要件が満たされた場合、将来的に多くのユーザーや大量のデータを扱う可能性があるので、クラウドインフラやスケーラブルなアーキテクチャ(AWSやAzureなど)を検討することも重要です。 -
テストとデバッグ
翻訳結果がどのようにチェックされるか(要件7)に関連して、正規表現以外にAIによる自己評価や人間によるレビューのフローをどのように組み込むかも考慮すると良いです。
これらの点を考慮し、プロトタイピング段階でそれぞれの要件に対して具体的な技術選定やワークフロー設計を進めると、スムーズな開発が可能になると思います。
AI によるオンラインマニュアル翻訳システムを開発したいと考えた背景
今日は急ぎの翻訳案件のお陰で、先程までずっと仕事をしていました😭 本来ならこのような無理筋の仕事は引き受けないのですが、このプロジェクトの場合は依頼主のクライアント様にも翻訳会社にも長年お世話になっているため、簡単には断れません。
尤も、翻訳会社側に対しては、このままでは過労死しかねないので翻訳者を増やして欲しいとずっとお願いしているのですが、色々と難しいプロジェクトのため、クライアント様のお眼鏡に適う翻訳者がなかなか見つかりません。今まで私以外では 5 人のフリーランス翻訳者がこのプロジェクトに関わりましたが、そのうちクライアント様のお眼鏡に適ったのは 2 人だけで、残り 3 人のうち 2 人はまったく適性がなく、1 人は適性云々の前に諸事情によりこのプロジェクトから半ば撤退してしまいました。また、お眼鏡に適った翻訳者のうち、1 人は家庭の事情で翻訳業そのものから撤退してしまいました。
このプロジェクトの報酬がもっと高額であれば、当然よい翻訳者を見つけ易くなるのですが、残念ながらクライアント様は翻訳者如きに今以上の報酬を支払うつもりなど毛頭ないご様子です。
私がAI によるオンラインマニュアル翻訳システムを開発したいと考えた背景には、そのような事情があります。
さて、今日は ChatGPT に次の質問をしてみました。
このシステムに適した AI 翻訳モデルについて
質問
マニュアルの翻訳なので、原文が同じなら常に同じ訳文が出力されるようにしたいです。この場合、最も適している AI 翻訳モデルはどれでしょうか? DeepL でしょうか?
ChatGPT の回答
マニュアルのように「原文が同じなら常に同じ訳文が出力される」必要がある場合、以下の観点から最適な翻訳モデルを選定するのが良いでしょう。
1. DeepL
- 特長: DeepLは高品質な翻訳結果と自然な日本語の生成に定評があり、ビジネス向け翻訳でも広く利用されています。
- カスタマイズ性: DeepLにはAPIがあり、用語集を事前登録することで、特定の言葉が常に指定した訳で出力されるように調整できます。ただし、DeepL自体に「原文と同じ訳を返す」といった精密なルール適用機能は制限的です。
- 再現性: 標準的な翻訳で再現性はありますが、バージョン更新や学習データが変更されると、微妙な調整が必要になる場合もあります。
2. カスタム学習モデル(Hugging Face Transformers + 自社データ)
- 特長: OpenAIやHugging Faceのようなカスタムモデルでのトレーニングにより、ドメイン固有の言い回しを持つ翻訳が可能になります。さらに、カスタムモデルは「同じ原文で同じ訳文」を返すための制御がしやすいです。
- カスタマイズ性: 自社データを使って一貫した訳を学習させることで、特定の文に対して固定の訳を得やすくなります。また、Hugging Face Transformersでは用語集やスタイルガイドに基づいたデータで事前に訓練させることができ、再現性の高い翻訳が可能です。
- 再現性: モデルの学習データを固定し、さらに「同一文の一貫性を保つように」チューニングすれば、同じ入力に対して常に同じ出力を得られるようになります。
3. ルールベースのポストプロセッシング
- 特長: 上記のモデルに対して、原文と訳文の一致率やルールを追加的にチェックする「ルールベースのポストプロセッシング」を導入すると、さらに精密なコントロールが可能です。これにより、特定の表現が揺れずに訳出されるようにカスタマイズできます。
- カスタマイズ性: DeepLやカスタム学習モデルで得た出力を、特定のルール(正規表現や条件式など)でさらに一貫性のあるものにします。
おすすめ
再現性を確保するためには、カスタム学習モデル(Hugging Face Transformers)+ルールベースのポストプロセッシングの組み合わせが最も適していると思われます。これにより、既存マニュアルのデータを基に一貫した翻訳が可能になり、用語やスタイルの揺れを最小限に抑えることができます。
ChatGPT の回答を見て考えたこと
恥ずかしながら、Hugging Face Transformers のことは初めて知りました。明日はそれについて調べてみたいと思います。
Hugging Face Transformers について調べてみる
ざっと調べて分かったことを以下にまとめます。
Hugging Face とは
「Hugging Face」とは、AI モデルやデータセットを共有または利用することを主な目的としたプラットフォームです。
Hugging Face についての解説:
Transformers とは
「Transformers」とは、Hugging Face で提供されている Google が開発した AI モデルのオープンソースライブラリです。自然言語処理 (NLP) のデファクトスタンダードとして活用されており、ChatGPT はこれを元に開発されたのだそうです。全然知らなかった…
Hugging Face Transformers 公式ドキュメント:
GitHub:
Hugging Face Transformers の解説記事:
機械学習のことはなーんもワカラン状態なので勉強する必要がありますね。とりあえず公式ドキュメントのチュートリアルをやってみるのが良さそうです。
Hugging Face Transformers の Quick tour
今日は Quick tour のページをざっと見てみました。
次のコマンドで必要なライブラリをインストールする必要があるみたいです。
!pip install transformers datasets evaluate accelerate
でも実行すると「command not found」になります。Python をインストールしたのは 1 年以上前なのでバージョンが古いのかも?
python --version
これも「command not found」になりました。どうも新たにインストールしたほうが良さそうです。
↑こちらの記事に従って最新版の Python をインストールして、次のコマンドを実行したら無事バージョンが表示されました。python3 --version
あまり進まなかったけど、今日はここまで。
明日はライブラリをインストールします。こちらの記事が役立ちそう。
Hugging Face Transformers を試すための準備
Hugging Face Transformers を試すために「transformers-test」というディレクトリを作成し、その下に「lib」というディレクトリを作成して、その中に必要なライブラリをインストールします。
pip3 install transformers datasets evaluate accelerate -t lib
上記のコマンドを実行したところ、次のエラーが発生しました:
...
Collecting tokenizers<0.21,>=0.20 (from transformers)
Using cached tokenizers-0.20.1.tar.gz (339 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [6 lines of output]
Cargo, the Rust package manager, is not installed or is not on PATH.
This package requires Rust and Cargo to compile extensions. Install it through
the system's package manager or via https://rustup.rs/
Checking for Rust toolchain....
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
tokenizers ライブラリの一部が Rust で書かれているため、Rust のツールチェーン(Rust と Cargo)が必要なのだそうです。ターミナルで次のコマンドを実行し、Rust と Cargo をインストールします:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
念のため rustc --version
を実行してバージョンが表示されることを確認したら、再度次のコマンドを実行します:
pip3 install transformers datasets evaluate accelerate -t lib
しかし、またエラーが発生してしまいました。Python のバージョンが tokenizers ライブラリの依存パッケージ pyo3 のサポート範囲外 (Python 3.13 はまだ対応していない) であるため、Python 3.12 をインストールする必要があるようです。pyenv を使ってインストールします:
pyenv install 3.12.0
インストール後に python --version
を実行しましたが…やっぱり「command not found」になります。ChatGPT に聞いてみたところ、システム全体の Python 3.13 が pyenv による Python 3.12.0 の指定よりも優先されているようです。~/.zshrc ファイルに pyenv の初期化設定と python3 のエイリアスを追加します:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
alias python="/Users/username/.pyenv/versions/3.12.0/bin/python3"
変更を反映するために、次のコマンドでシェルの設定ファイルを再読み込みします:
source ~/.zshrc
この後、python --version
を実行したら、「Python 3.12.0」と表示されました!
ここでもう一度次のコマンドを実行します:
pip3 install transformers datasets evaluate accelerate -t lib
無事に必要なライブラリをインストールできました!!
今日はここまでにします。かなり手間取ってしまったなぁ💦
先日まではワクテカで Hugging Face Transformers を試そうとしていたのですが、Recursion のサブスクが 11 月末で切れてしまうことに気付きました。割引価格になっていたときに 1 年プランに申し込んだものの、今年は忙しすぎて殆ど利用できていません。さすがに勿体ないので、AI によるオンラインマニュアル翻訳システムの開発は一旦中断して、11 月いっぱいは Recursion でバックエンドの勉強をしようと思います。
そうやってあっちフラフラ、こっちフラフラしているうちに開発が頓挫してしまうような気もしないでもないですが、どうせ私は SQL が出来なさ過ぎて仕事に支障が出ているくらいなので、ここらでしっかりバックエンドの勉強をしておかないとオンラインマニュアル翻訳システムの開発など到底無理だと思います。
そんなわけで、この開発ログは 12 月までお休みします。再開できますように…