私は中国語への翻訳機を作成しました
日本語の文章を構文解析して日本人が読める偽中国語翻訳機を作った記事『我偽中国語翻訳機作成了』が、たくさんいいねされていてうらやましい。
構文解析しなくても近いものが翻訳APIでちょちょいとできるんじゃね、と思ってやってみた。
以前に使ってみたことがあったので、IBM Cloud の Language Translator を使った。
でも、Language Translator の既存の翻訳言語モデルに
日本語から中国語へ直接変換するモデルは現時点ではないみたい。
英語は各言語に直接変換するモデルがあるみたい。
翻訳言語 | モデル |
---|---|
日本語 ⇔ 英語 | あり |
中国語 ⇔ 英語 | あり |
日本語 ⇔ 中国語 | なし |
ということで英語を中継して中国語を作成するプログラムにします。
発言 | ➡ | 中継 | ➡ | 最終 |
---|---|---|---|---|
日本語 | ➡ | 英語 | ➡ | 中国語 |
以前に同じようなことをやりました。
Watson APIを利用してPythonで多言語通訳botをSlackに作る
IBM Cloud - Language Translator の利用準備
- IBM Cloudのアカウントを作成
- Language Translator のサービスインスタンス作成
- 作成したインスタンスのサービス資格情報から apikey を取得
こちらの url でインスタンス作成
IBM Cloud - Language Translator
アカウント作成からインスタンス作成まで こちらの記事 参考。サービスのバージョンアップで画面イメージが違っていますが、やることは同じです。
- pythonライブラリ ibm-watson のインストール
pip install --upgrade ibm-watson
IBM Cloud APIを使って翻訳してみる
実装
watson_language_translator.py
from ibm_watson import LanguageTranslatorV3
language_translator = LanguageTranslatorV3(
version='2018-05-01',
iam_apikey='{apikey}',
url='https://gateway.watsonplatform.net/language-translator/api'
)
langs = [['ja','日'], ['en','英'], ['zh-cn','中']]
# langs = [開始言語, 中継言語, 出力言語]
for _ in range(10):
print('■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。')
text = input('%s> ' % (langs[0][1],))
for i in range(len(langs)-1):
translation = language_translator.translate(
text=text,
source=langs[i][0],
target=langs[i+1][0])
text = translation.result['translations'][0]['translation']
print('%s:%s' % (langs[i+1][1], text,))
print()
結果
>python watson_language_translator.py
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私は中国語への翻訳機を作成しました
英:I have created a translator for Chinese.
中:我为中国人创作了翻译。
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私はお酒を飲みたい
英:I want to drink.
中:我想喝
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私は本日定時退社します
英:I'm leaving the company today.
中:我今天要离开公司
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私は理解しました
英:I understood.
中:我明白了
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私は明日、伊豆大島に行きたい
英:I want to go to Izu Oshima tomorrow.
中:我明天要去伊豆大岛
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 私は昨日、日本の料理を食べました
英:Yesterday, I ate Japanese food.
中:昨天我吃了日本菜
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> 今日は10時に仕事が終わります
英:I'm done at 10 o'clock today.
中:我今天十点就完成了
■ 日本語を入力してね。1回英語を中継して、中国語に翻訳するよ。
日> あなたは何時に終わりますか?
英:What time do you end up?
中:你几点结束?
結論
- 日本人の読める偽中国語は、翻訳APIで作れなかった。
中国語はむずかしいってこと。 - 英語を経由することで中国語に翻訳した時には意味、情報が落ちるケースがあった。
ひとつの英単語で広い意味を持ってたりするため。
例えば drink だけで、酒を飲むという意味がある。