LoginSignup
9
12

More than 5 years have passed since last update.

Watson APIを利用してPythonで多言語通訳botをSlackに作る

Last updated at Posted at 2017-12-10

はじめに

Slack上にWatsonのLanguage Translatorを活用した翻訳botを作ってみます。
想定として、もし日本語の通じない多国籍チームに入ることになってもなんとかSlack上の会話についていき発言できるように!多言語通訳をbotにしてもらいます。
ここでは、日本語、英語、ドイツ語の3言語にします。
通訳らしく発言を常に翻訳してくれるbotにします。

ユーザー発言 bot翻訳1 bot翻訳2
英語 日本語 ドイツ語
日本語 英語 ドイツ語
ドイツ語 英語 日本語 

環境

OS : Windows 10
botプログラム : Python3 - slackbotライブラリ
botを作る場所 : Slack
通訳(翻訳) : Watson - Language Translator

botプログラムはここに置いておきます。
https://github.com/kg1-thub/bot.git

翻訳はWatson APIを使います。
IBM Cloudライト・プランで一部機能が無料で使えるようになっており、Language Translatorもそのひとつです。
Watson APIのサービスを使い始める記事をこちらに記載しました。
【AI事始め】Watson APIをPythonで使ってみる(Language Translator)

事前準備

Slack上にbotを作成してAPIトークンを取得する

まずはSlackにbotを作成して、PythonプログラムとつなぐためのAPIキーを取得します。
以下のリンクからbotを作成します。bot作成には、SlackのWorkspaceの管理者権限が必要です。

Slack bot作成

このリンクをクリックすると次のような画面に移ります。

image.png

この画面でUsername(botの名前)を入力して「Add bot integration」ボタンを押してください。
Slack上のbotの表示名は次の画面で、設定できます。

「Add bot integration」ボタンを押すと次のようなbotの設定画面に移ります。

image.png

はい、API Tokenをひかえましょう。
あとでPythonで作るプログラムに指定します。
あとは、同じ設定画面内に「Full Name」という項目でbotのSlack上の表示名を指定できます。
この記事で作る通訳botの名前は「WatsonTranslatorくん」にします。

これでbotのガラができたイメージです。
次にbotの中身になる部分を作っていきます。

botプログラムを作成する

ここからbotプログラムの中身になる部分についての記述です。

多言語翻訳の実現方法を考える

botの中身になるプログラムの中でWatson API を使って、Language Translatorで翻訳を行います。

Language Translatorのモデルの考慮

ここで日本語⇔ドイツ語の翻訳については注意が必要です。

Language Translatorの翻訳する言語やドメイン(領域)にはモデルがあります。
例えば
 ・日本語から英語へ翻訳するニュースドメインのモデル
 ・英語からスペイン語へ翻訳する会話ドメインのモデル
というような翻訳言語を定めるモデルです。
モデルがない言語間の翻訳はできません。

Language Translatorのサービス作成時点での、日本語・ドイツ語・英語間のモデルの存在状況は以下でした。1

翻訳言語 モデル
日本語 ⇔ 英語 あり
ドイツ語 ⇔ 英語 あり
日本語 ⇔ ドイツ語 なし

日本語⇔ドイツ語間を直接翻訳するモデルがありません。

モデルのない言語間の翻訳への対策

モデルを作ればよいのでしょう2 けど、手間も時間もかけずに、とりあえず動くようにしたいので、
ここでは英語をハブにして、英訳したものをドイツ語・日本語に翻訳するという形をとることにします。

ユーザー発言 中継翻訳 bot翻訳
英語 日本語
英語 ドイツ語
日本語 英語
日本語 英語 ドイツ語
ドイツ語 英語
ドイツ語 英語 日本語 

Pythonプログラム作成

チャットボットのプログラムとしては、Pythonのslackbotライブラリを使います。
slackbotの導入、使い方はこちらを参考にしました。
PythonのslackbotライブラリでSlackボットを作る

Pythonプログラムを動かしておくと、Slack上の発言にbotが反応してくれます。

ファイル構成

ファイル構成は以下です。

slackbot
├─ run.py
├─ slackbot_settings.py
└─ plugins               
   ├─ __init__.py  
   └─ translator.py 

pyファイル内容

各pyファイルの内容を記載します。

run.py

このプログラムを実行することで、botプログラムが起動できるようになります。

run.py
# coding: utf-8

from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start slackbot')
    main()

slackbot_settings.py

bot設定プログラムです。
API_TOKENに、Slack上でbot作成時に採番されたAPI Tokenを指定します。

slackbot_settings.py
# coding: utf-8

# Slack-botのAPIトークンを指定
API_TOKEN = "{{ API_Token }}"

# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "ちょっと何言ってるかよくわかんないです"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']

__init__.py

空ファイルでいいです。

translator.py

ここが通訳botの中身(動き)の核になるプログラムです。
通訳botの動きとして以下にします。
 ・すべての発言をリッスン
 ・まず発言の言語識別
 ・そして翻訳して発信

translator.py
# coding: utf-8

from slackbot.bot import listen_to      # チャネル内発言で反応するデコーダ
from watson_developer_cloud import LanguageTranslatorV2 as LanguageTranslator

language_translator = LanguageTranslator(
  username = '{{ username }}',
  password = '{{ password }}'
)

@listen_to(r'.+') # すべての発言をリッスンする。正規表現。
def listen_func(message):
    text = message.body['text']     # メッセージを取り出す
    language = language_translator.identify(text)  
    source = language['languages'][0]['language']   # 言語識別
    if source not in ['ja','de'] :
        source = 'en'
        target1 = 'ja'
        target2 = 'de'
        msg1 = language_translator.translate(
            text=text,
            source=source,
            target=target1)
        msg2 = language_translator.translate(
            text=text,
            source=source,
            target=target2)
    else :
        if source == 'ja':
            target1 = 'en'
            target2 = 'de'
        elif source == 'de':
            target1 = 'en'
            target2 = 'ja'
        msg1 = language_translator.translate(
            text=text,
            source=source,
            target=target1)
        msg2 = language_translator.translate(
            text=msg1,
            source=target1,
            target=target2)
    message.send(msg1)      # target1への翻訳結果をsend
    message.send(msg2)      # target2への翻訳結果をsend

パラメータの意味説明は割愛します。API Referenceを読んでください。
以上です。

使ってみる

botを使うための手順は以下3点です。

1. (Slack) 通訳botを使うChannelを決めて、通訳botをインバイトしてChannelに所属させましょう。

2. (ローカルPC) pythonプログラムを起動しましょう。

$ cd slackbot
$ python run.py

3. (Slack) 通訳botを所属させたChannelで発言してみましょう。

実行例

以下の例では、1人3役(日本語発言/英語発言/ドイツ語発言)でお送りします。
「WatsonTranslatorくん」が通訳botです。

image.png

訳されたドイツ語の意味が正しいかとかよくわからない。。けどちゃんと動きました!

おわりに

Pythonで公開されているライブラリとサービス(Watson、Slack)を組み合わせて活用するだけで、
入力内容に応じて発言するチャットボットを簡単に形にすることができました。
今回は通訳botとしましたが、Watsonの他の機能や別のAIサービスと組み合わせるだけでも多様なチャットボットを自分で作れそうです。



  1. Language Translator の list modelsというAPIを使用するとモデルの情報確認ができます。Watson API Reference - Language Translator - list models 

  2. Langeage Translator の create modelというAPIでモデル作成ができます。Watson API Reference - Language Translator - create model 

9
12
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
9
12