質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

667閲覧

予測結果で1単語しか取得できない

taiyo2017

総合スコア170

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/15 13:34

予測結果で1単語しか取得できないです。

results = model.predict(([inputs_test, queries_test]))

とコードを書き、予測を行いました。inputs_testとqueries_testの両方とも文章です。
resultsは

[ 3.21644141e-19 3.78001817e-19 3.39815929e-19 3.40177768e-19 3.60394786e-19 4.06273790e-19 3.39361238e-19 3.24065453e-19 4.41847985e-19 2.93369856e-10 1.13723978e-07 1.50309251e-10 6.48446644e-11 3.56832533e-19 3.52974097e-19 9.99999881e-01 4.44034430e-19 3.08016865e-08 4.01408857e-19 3.11011742e-19 3.21737405e-19 2.83691905e-19]

のような配列です。

val_max = np.argmax(pred_results[n]) for key, val in word_dct.items(): if val == val_max: pred = key print(pred)

とサンプルコードを見ながら結果の予測を行なったのですが、これだとprint(pred)で1単語しか出力できません。

resultsの結果を使って、入力した文章の予測結果を文章形式で出力したいのですが、どのようにコードを書けばいいでしょうか?

ちなみに、参考サイトはこちらです。
https://github.com/priya-dwivedi/Deep-Learning/blob/master/qa_chat_bot/memory_network_q1.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これだとprint(pred)で1単語しか出力できません。

条件が当てはまる度に、predが上書きされているからです。


ジェネレータを上手く使うのが最善ですが、如何せん慣れるまでは分かりづらいです。
ですので、ここではリストに放り込んでいく方法を紹介します。

Python

1val_max = np.argmax(pred_results[n]) 2 3preds = [] 4for key, val in word_dct.items(): 5 if val == val_max: 6 preds.append(key) 7 8print(preds)

これなら、結果をリストとしてまとめて受け取れます。

投稿2018/08/15 13:38

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taiyo2017

2018/08/15 14:03

ありがとうございます。提示していただいたコードを書きましたが、1こしか取れないのが変わりませんでした。おそらくnp.argmax(pred_results[n]) で1つの値に絞っていることが原因のようです。。。もしpred_results[n]でヒットした全ての文字を取得する方法をご存知でしたらお願いします
LouiS0616

2018/08/15 14:06

valがpred_results[n]に含まれる場合、ということでしょうか?
taiyo2017

2018/08/16 13:34

はい、そういうことです
LouiS0616

2018/08/16 13:49

それなら、条件式 val == val_max を val in pred_results[n] に置き換えれば良いのでは。
guest

0

ベストアンサー

まず前提として、これはQuestion Answeringの問題で、質問文に対して相応しい回答を1単語で返すシステムですよね。
学習に使うデータもそうなっています。

1 John travelled to the hallway. 2 Mary journeyed to the bathroom. 3 Where is John? hallway 1

クエリは文章ですが回答は単語ですからこのデータからどう学習しても文章ででてくるはずはありません=文章ででてくるような学習ができるはずはありません。

提示されたコードとは別のデータを用意したのでしょうか? そうだとしてもモデルを設計しなおさない限り学習すらできなかったはずです。どうなっているのでしょう?


pred_results[n]はn番目の問題の答えを全部の単語に対して確信度(それらしさ)を収めたデータです。
np.argmax(pred_results[n])は確信度が一番高い単語のインデクス値です。
ここからvocab[val_max - 1]で単語が取れると思うんですけど、なんでわざわざループで調べてるんでしょうか? という感じのコードですね。

投稿2018/08/16 14:06

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taiyo2017

2018/08/16 14:56

はい、データは別のものを使いました。 John travelled to the hallway. Mary journeyed to the bathroom. ・ ・ ・ のような文章のみのデータを学習させました。 学習はエラーは出ずに終わりましたが、モデルを設計する必要がありますか?
taiyo2017

2018/08/16 14:58

データ読み込みで分かち書きしたりするロジックのところはコードを書き換えていますが、それ以外は基本urlのコードを使っています。初心者質問で申し訳ないのですが、今回目的の文章を生成する、ということを行うためにはコードを書き換える必要があるのでしょうか?
quickquip

2018/08/16 15:44

論文の図とコードを数分読んだだけですが、Predicted Answerは1×Vの行列(Vの列ベクトル)ですから1単語しか予測してないですね。このモデルは1単語を予測する(正確には全単語の確信度を計算する)様になってます。
quickquip

2018/08/16 15:46

「文章のみのデータを学習させました。」とのことですが、モデルの出力が1×V行列なのでそれと同じ次元の正解データを用意しないと学習できないわけです。それはどうしたんでしょう? というか何を学習させたんですか?
quickquip

2018/08/16 16:04

>今回目的の文章を生成する、ということを行うためにはコードを書き換える必要があるのでしょうか? コードというかモデル自体設計し直しと思います。回答文をエンコードする層を後ろに付けて学習させて、予測結果ベクトルから回答文をデコードする、みたいな付け足しもアリかもしれませんが、私は研究者じゃないのでそんなことができるのか、できるとしてどの程度見込みがあるのかは直感が効きません(おそらくは無謀)。学習に使うデータセットで論文を検索してみて、その論文の実装を使うか、そのモデルを実装してしまう方がずっと筋がいいと思います。
taiyo2017

2018/08/18 04:17

なるほど・・・、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問