AI・機械学習

人工知能を作りたい①

palm

こんにちは、Palmです。

最近、Pythonの学習を再開しました。しかし、私が最後に何かを開発したのは1年前で、家にある書籍も古いため、ライブラリが正常に動かないことがわかりました。今のPythonの流行もわからなくなってきました。現在やりたいことは、ニュース記事などをカテゴリーに分けて学習データを確保し、自分のブログがどのカテゴリーに位置しているかを分析することですが、作り方がわからず保留中です。

話は変わりますが、今日は人工知能の初歩であるおうむ返しプログラムを作ります。

今回の目標は、とりあえずプログラムと会話します。

会話といっても意思疎通できるわけではなく、ユーザーが何か入力すると、その返事が返ってくるものです。

Miraiという名前の人工知能にしてみました。

全体のコードです。

1class Mirai:
2    def __init__(self, name):
3
4        self.name = name
5        self.responder = Responder('Repeat')
6
7    def dialogue(self, input):
8
9        return self.responder.response(input)
10
11    def get_responder_name(self):
12
13        return self.responder.name
14
15    def get_name(self):
16
17        return self.name
18
19class Responder:
20
21    def __init__(self, name):
22
23        self.name = name
24
25    def response(self, input):
26      
27        return '{}とはなんですか?'.format(input)
28
29def prompt(obj):
30
31    return obj.get_name() + ':' + obj.get_responder_name() + '> '
32
33print('Miraiとの会話を始めます')
34
35mirai = Mirai('Mirai')
36
37while True:
38    inputs = input(' > ')
39    if not inputs:
40        print('会話を終了します')
41        break
42    else:
43        response = mirai.dialogue(inputs)
44        print(prompt(mirai), response)

解説

本体クラス

1class Mirai:

Mirai本体のクラスを宣言します。

1def __init__(self, name):
2    self.name = name
3    self.responder = Responder('Repeat')

コンストラクタでインスタンス変数nameresponderを初期化します。

name: Miraiオブジェクトの名前。
responder: Responderオブジェクトを'Repeat'という名前で初期化します。

1def dialogue(self, input):
2    return self.responder.response(input)

ユーザの入力に応じてresponderresponse()メソッドを呼び出し、応答文字列を取得します。

input: ユーザの発言。

1def get_responder_name(self):
2    return self.responder.name

応答に使用されたResponderオブジェクトの名前を返します。

1def get_name(self):
2    return self.name

Miraiオブジェクトの名前を返します。

応答クラス

1class Responder:
Responder(応答)クラスを宣言します。
1def __init__(self, name):
2    self.name = name

コンストラクタでインスタンス変数nameを初期化します。

name: Responderオブジェクトの名前。

1def response(self, input):
2    return '{}とはなんですか?'.format(input)

ユーザの入力に対する応答文字列を生成し返します。

input: ユーザが入力した文字列。

1def prompt(obj):
2    return obj.get_name() + ':' + obj.get_responder_name() + '> '

Miraiのプロンプトを作る関数。

obj: 呼び出し元のMiraiオブジェクト。

以下の形式で文字列を返します。

「’Miraiオブジェクト名:応答オブジェクト名 > ‘」の文字列を返す

実行

1print('Miraiとの会話を始めます')
2mirai = Mirai('Mirai')
3
4while True:
5    inputs = input(' > ')
6    if not inputs:
7        print('会話を終了します')
8        break
9    else:
10        response = mirai.dialogue(inputs)
11        print(prompt(mirai), response)

会話を開始し、ユーザーの入力を待ち受けます。入力がない場合は会話を終了し、それ以外の場合はMiraiオブジェクトのdialogue(応答文字列を取得する)メソッドを呼び出して応答を表示します。

まとめ

また、おうむ返しBotを作ってみました!しかし、Botとは自然な会話をしたいので、次はパターン辞書というものを作ってみます。パターン辞書とは、特定の発言に対して決まった応答を返す辞書のことです。例えば、「ありがとう」と言ったら「どういたしまして」と返すように設定します。

最後まで読んでいただきありがとうございました!

合わせて読みたい
オウム返しBotを作ってみた
オウム返しBotを作ってみた
スポンサーリンク
ABOUT ME
Palm
Palm
東京通信大学3年生
私はpalm(ぱるむ)です。お花や自然が大好きです。専門学校でWeb開発を学び、東京通信大学に編入しました。得意分野は、ウェブ開発(フロントエンド、バックエンド)や機械学習(自然言語、データ分析)です。趣味で色々デモ開発をしています。
記事URLをコピーしました