雑談AI(BlenderBot2.0)とプリトークをしてみる(インストール編)

Facebookから、面白そうなリリースが発表されました。
https://parl.ai/projects/blenderbot2/

こちらがテキストを打ち込むと応答を返してくれる、いわゆる雑談AIというものですが、このBlenderbot2.0の特徴は文脈を保って長期的な会話が可能なこと、知らない話題はググって対応してくれること。

オープンソースで誰でも試せるとのことなので、さっそく構築してみます。

環境

CPU Intel(R) Core(TM) i7-6700HQ
GPU NVIDIA GeForce GTX 1070
OS   Ubuntu20.04(WSL)

インストール

色々試行錯誤して動きました。
これだけで動くかはわかりませんが、備忘として残しておきます。

apt update
apt upgrade
alias python='/usr/bin/python3'
git clone https://github.com/facebookresearch/ParlAI.git ~/ParlAI
cd ~/ParlAI ; python setup.py develop
pip install 'git+https://github.com/rsennrich/subword-nmt.git#egg=subword-nmt'

まずblenderbot1.0が動くか確認してみましょう。2.0のほうが必要なものが多いので。

python parlai/scripts/safe_interactive.py -t blended_skill_talk -mf zoo:blender/blender_90M/model

最初はあれが足りないこれが足りないと言ってくれるので、言われたら都度インストールしていきましょう。環境によって変わると思いますが、ぼくはこれをいれました。要らないものも入っていると思います。

pip install 'urllib3==1.25'
pip install pip install boto3
pip install coloredlogs
pip install iopath
pip install docformatter
pip install emoji
pip install fairscale
pip install flake8
pip install PIL
pip install pillow
pip install sklearn
pip install transformers

GPUで動かしたかったのでcudaのインストール。GTX1070は下記で行けましたが、機器構成によっては別のインストールが必要かと思います。
インストールしないとcpuで動くことになります。

apt -y install nvidia-driver-440
apt -y install nvidia-cuda-toolkit
nvcc --version

実行(失敗)

よくわからないままとりあえず実行

python parlai/scripts/safe_interactive.py -t blended_skill_talk -mf zoo:blenderbot2/blenderbot2_400M/model

失敗。search_serverというオプションを指定しないといけないようです。
google.comとかでいいか(適当)

python parlai/scripts/safe_interactive.py -t blended_skill_talk -mf zoo:blenderbot2/blenderbot2_400M/model --search_server google.com

いろんなもののダウンロードが始まります。4G近いもののダウンロードがあったりします。
まったくダウンロードが終わらず、途中でCTRL+Cを押して中断してしまいました。
すると次以降、こんなエラーが出ることに…。

遭遇したエラー1

RuntimeError: unexpected EOF, expected 2246315 more bytes. The file might be corrupted.

途中で中断したため、ファイルが壊れているようです。そして残念なことに何が壊れているか教えてくれません…。
ParlAI/data/models/ の下にいくつかディレクトリがあり、その中のどれかが原因の可能性が高いです。
ディレクトリごと消せば、再びダウンロードしてくれます。壊れていると分かっているなら自動的に再ダウンロードしてくれればいいのに

遭遇したエラー2

怪しいディレクトリを消し、再び実行

File "/root/ParlAI/parlai/core/build_data.py", line 501, in modelzoo_path
raise ImportError(
ImportError: Could not find pretrained model in parlai.zoo.bart.bart_large or parlai.zoo.bart.build. Please check your spelling and make sure you've pulled from master.

…なんのことやら。modelsの下に「bart」というディレクトリはあるものの、ちゃんとダウンロードできていたはず…。
探してみるとこちらで話題になっていました。
https://github.com/facebookresearch/ParlAI/issues/3808

実行(成功)

search_serverを正しく指定したらうまくいった、とのことで、記載に従ってParlAI_SearchEngineを導入。
https://github.com/JulesGM/ParlAI_SearchEngine

git clone https://github.com/JulesGM/ParlAI_SearchEngine.git
cd ParlAI_SearchEngine/
pip install -r requirements.txt

下記コマンドを実行すると待ち状態に。

python search_server.py serve --host 0.0.0.0:8080

別ウィンドウを立ち上げて、コマンド実行。ParlAI_SearchEngineでの説明通り、search_serverには 0.0.0.0:8080 を指定します。

python parlai/scripts/interactive.py -t blended_skill_talk -mf zoo:blenderbot2/blenderbot2_400M/model --search_server 0.0.0.0:8080

ずらずらと起動メッセージが流れた後…

Enter [DONE] if you want to end the episode, [EXIT] to quit.
16:31:52 | creating task(s): blended_skill_talk
[ loading personas.. ]
 [NOTE: In the BST paper both partners have a persona.
You can choose to ignore yours, the model never sees it.
In the Blender paper, this was not used for humans.
You can also turn personas off with --include-personas False]
[context]: your persona: i also like eating sushi.
your persona: my favorite food is pizza.
Enter Your Message:

入力待ちのメッセージが!ようやく会話可能になりました。

会話してみる

寿司の話題を振ってほしそうなメッセージが出ていたので、最初は適当に話を合わせてみます。

人間:こんにちは。寿司の何が好き?
(Hello! What's you like sushi?)
BlenderBot2Fid:寿司は好き。でもあんまり食べられないんだ。仕事は何をしているの?
(I love sushi, but I don't eat it often. What do you do for a living?)
人間:東京だよ。君は?
(I am in tokyo.Are you?)
BlenderBot2Fid:暇なときに何をするのが好き?私は家のリフォームが好き。
(What do you like to do in your spare time? I like to work on remodeling homes.)

「living」をどこ住みと勘違いして応答したために、会話がチグハグに…。以降DeepL翻訳に頼ります。

人間:いいね。休みの日にはよく散歩に出かけるよ。
(oh,good.I often go for walks when I am on vacation.)
BlenderBot2Fid:いや、私は日本には住んでいない。アメリカさ。何か趣味はある?
(No, I'm not in Japan. I'm in the United States. Do you have any hobbies?)
BlenderBot2Fid:それはとても楽しそうだね。買い物は好き?私は娘たちを連れて買い物をするのが大好きなんだ。
(That sounds like a lot of fun! Do you like shopping? I love to take my daughters shopping with me.)
人間:うん、よく買い物に行くよ。秋葉原も近いし。
(Yes, I often go shopping. Akihabara is close by.)
BlenderBot2Fid:私は秋葉原に行ったことがないんだ。どんなところ?お金がかかるのかな?
(I have never been to akihabara. What is it like there? Is it expensive?)
人間:たくさんのアニメとゲームの店、そしてメイド喫茶があるね。
(There are many anime and game stores, and maid cafes.)
BlenderBot2Fid:それは楽しそうだ。メイド喫茶に行ってみたい。どんなメイドさんがいるんだろう?
(That sounds fun. I would love to go to a maid cafe. What kind of maids do they have?)

会話のギャップを埋めるべく連続応答してくれたんでしょうか。しかし、英語がちゃんとしていると驚くほど会話が自然です。

こんな人工知能に、プリティシリーズの話をしてみたらどうなるのか?
次回、会話編に続きます。

この記事が気に入ったらサポートをしてみませんか?