【NLP入門】jetson_nanoで会話アプリで遊んでみる♪


今回はjetson_nanoでどこまでできるか、会話アプリを実行できるところまでやってみた。
インストールは前回の続きである。

pykakasiのインストール

$ pip3 install pykakasi
...
Successfully built klepto dill pox
Installing collected packages: dill, pox, klepto, pykakasi
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python3.6/dist-packages/dill'
Consider using the `--user` option or check the permissions.

Permission denied:が出たので、--userを付けて、再度実行します。

$ pip3 install pykakasi --user
Collecting pykakasi
  Using cached https://files.pythonhosted.org/packages/b9/64/d8d6ed5401aca2b9513f8012f2e5a7f805886ddc3012de3c40953c9fa671/pykakasi-1.1-py2.py3-none-any.whl
Collecting klepto (from pykakasi)
Requirement already satisfied: six in ./.local/lib/python3.6/site-packages (from pykakasi) (1.12.0)
Collecting pox>=0.2.6 (from klepto->pykakasi)
Collecting dill>=0.3.0 (from klepto->pykakasi)
Installing collected packages: pox, dill, klepto, pykakasi
Successfully installed dill-0.3.0 klepto-0.1.7 pox-0.2.6 pykakasi-1.1

無事にインストール出来ました。
以下の例を動かしてみます。

# coding: utf-8
from pykakasi import kakasi
kakasi = kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
conv = kakasi.getConverter()
filename = '本日は晴天なり.jpg'
print(filename) # 本日は晴天なり.jpg
print(type(filename))
print(conv.do(filename))

無事に以下の出力が得られました。

$ python3 pykakasi_ex.py
本日は晴天なり.jpg
<class 'str'>
honjitsuhaseitennari.jpg

mecab-python3をインストールする

前回失敗した、mecab-python3のインストールを実施する。
今回は、この参考のとおりに実施する。

ubuntu 18.10 に mecab をインストール
以下で、無事にインストール出来ました。

$ sudo pip3 install mecab-python3

ただし、今回は途中でpip3のupgradeを実施してしまったので、以下の参考のようにpipを再インストール実施しました。
Python pip3 – pip upgradeした後 「cannot import name ‘main’ 」error

$ sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

pyaudioのインストール

会話アプリは一応、音声会話出力をしているので、pyaudioを利用しています。
ということで、今回はマイクもスピーカもないので削除すればいいと思いますが、後々のためにインストールしておきます。
PyAudioのインストール| Python備忘録
以下で簡単にインストールできました。

$ sudo apt-get install python3-pyaudio

会話アプリの変更

ほぼ、同じアプリが動きましたが、以下二点変更しました。
①上記に記載しましたが、音声出力は今回は削除しました
②ファイルの入出力を変更しました。特に、QAはcsvから\t区切りのtxtにしました。
ということで、天気とブルべのQAの読込は以下の関数で実施しました。

def train_questions(mecab,line):
    questions = []
    answers = []
    if line=="天気":
        file = 'conversation_wu.txt'
    elif line=="ブルべ":
        file = 'conversation_ju.txt'
    for line in open(file, "r", encoding="utf-8"):
        cols = line.strip().split('\t')
        questions.append(mecab.parse(cols[0]).strip())
        answers.append(cols[1])
    return questions, answers

コード全体は以下に置きました。

something2speak/auto_QAconversation_nano.py

まとめ

・会話アプリをJetson_nanoで動かしてみた
・動きはほぼ同様なタイミングで回答が返ってくるから十分使えそうである

・日本語入力が簡単には出来なかった
・マイク認識までは出来たので、音声入出力もやれそうな気がする