コンテンツ翻訳/機械翻訳/機械翻訳クライアント類
機械翻訳サービスの利用には、コンテンツ翻訳拡張機能でクライアント・モジュールを経由しアクセスしています。既存のクライアントとしてApertiumならびにYandexほか、コード化が済んでいます。MTサービスの同類のクライアント追加、言語ペアへのマッピングは任意の件数で可能です。この解説文書で機械翻訳のクライアント構造を説明します。
技術要件

新しいMTクライアントは機械翻訳システムをローカルにホストしても、API経由でアクセスするリモートにホストしても成立します。サービスとして隔離できる点から、後者が推奨されます。クライアントがライセンスフリーで、Linux ディストロ対応でパッケージ可能なら、ウィキメディアのクラスタ上にホストすることを検討できます。一例としてApertiumのホスト先はwmflabs内部であり、ウィキメディアはYandexをホストしません。両者ともそれぞれに対応するウェブAPI経由でアクセスします。
翻訳 API
機械翻訳API(machine translation API)は、ソース言語、ターゲット言語、ソースコンテンツを入力とし、翻訳されたコンテンツが出力されます。
- APIが公開されていない場合、認証トークン(ほとんどの場合key)を受け付けます。
- 利便性のため、出力フォーマットはJSONにできます。
- APIはPOSTを受け付けるべきです(should)。
- APIは、ユーザー名などのユーザー識別可能な情報を要求してはいけません(should not)。CXServerはそれをMT Clientに提供しません。
- APIは、合理的な数のリクエストを毎分受け付けられるべきです(should)。
- APIは、リクエストごとに合理的な量のコンテンツを受け付けられるべきです(should)。
- APIの使用を分析するためのダッシュボードを設置することが推奨されます。ダッシュボードには、day/week/monthごとのリクエスト数と翻訳された文字数が含まれます。
APIはエラーコードを含めて文書化して公開されなければなりません(must)。
性能のガイドライン
コンテンツ翻訳はまだベータ段階にあることから、ログイン利用者であり個人設定で利用を選択した人にしか使えません。そこで現状の利用パターンは必ずしも将来像を正しく評価できない可能性があります。さらに加えるなら、機械翻訳の言語対を拡張すると、利用者も利用のリクエストも増えます。現状の 利用に基づくなら、ベースラインは以下のように把握しています。ご留意点として、これは最終的な評価とはなり得ません。API類はこれ以上の域値に設定する必要があります。
- 1万件超の要求/日
- 1000万文字超/日
- 5000文字超/日
入力形式
CXにおける翻訳原文はHTML形式で処理にかけます。HTML形式の翻訳とウィキ・マークアップの保持の両立は課題であり、それでもMTエンジンによっては両立できています(例:Yandex)。ApertiumはHTMLのマークアップを対象としません。それぞれの能力に応じ、CXはコンテンツをHTML形式もしくは平文形式(マークアップのない文章)で出力します。
翻訳の品質
機械翻訳の品質に関しては、該当する言語版ウィキペディアの投稿者から寄せられるフィードバックを参照しています。CXはMTを第一次の翻訳テンプレートに採用しており、その改善を翻訳者にお願いしています。そのため、フィードバックにおいて品質が目立って悪いと指摘される場合を除き、使用を継続できると判断します。
MT クライアントモジュールの新規開発
開発方法を学ぶ最良の方法は、YandexやAtertiumなどの既存のクライアントモジュールを参照することです。クライアントモジュールはcxserverの lib/mt フォルダーに存在します。たとえば、仮にクライアントを BabelFish MT Clientとすると、lib/mt フォルダー内に BabelFish.js という名前のファイルを作成します。
const MTClient = require( './MTClient.js' );
// クラスコンストラクタ
class BabelFish extends MTClient {
/**
* BabelFishを使用してコンテンツを翻訳する
*
* @param {string} sourceLang ソース言語のコード
* @param {string} targetLang Target language code
* @param {string} content Source language content
* @return {Promise} Translated text
*/
translate( sourceLang, targetLang, content ) {
// サービスへのAPIリクエストを追加します。Promiseオブジェクトを返します。
}
}
module.exports = BabelFish;
If your BabelFish service is not capable of translating HTML by retaining all markup in appropriate position in translation, instead of translate, you will have to write translateText method in the above code. Refer Apertium.js for such an example. Yandex.js is an example for MT client that is capable of handling both html and text content.
You need to add an entry in lib/mt/index.js for your new client.
To map a language pair to use this client, create a config file in config folder. You may refer exiting configuration files for examples. Then enable this MT engine in the cxserver config.yaml. Here also follow the existing entries for examples.
Restart the cxserver and test your client. You may want to read some unit tests existing for Apertium to write your own tests.
機械翻訳クライアント
コンテンツ翻訳拡張機能に対応する機械翻訳クライアントを、言語対ごとに一覧にします。