LoginSignup
5
6

More than 1 year has passed since last update.

BertとWord2vecを組み合わせて謎かけAIを作ってみた。

Last updated at Posted at 2022-09-06

お遊びアプリとして
BertとWord2vecを組み合わせて謎かけAIを作ってみた。

どんなアプリ

お題を入れると、謎かけを回答してくれるアプリ

> python .\nazokake.py

Please input odai : 利根川
2022-09-06 22:49:41.121694
「利根川」とかけて「出産」と説く その心は!
どちらも「用水/羊水(ヨウスイ)」がつきものです
2022-09-06 22:49:44.241902

Please input odai : 野球
2022-09-06 22:51:30.649636
「野球」とかけて「システム」と説く その心は!
どちらも「捕手/保守(ホシュ)」がつきものです
2022-09-06 22:51:33.327652

Please input odai : 銀行
2022-09-06 22:52:44.977923
「銀行」とかけて「禁止」と説く その心は!
どちらも「現金/厳禁(ゲンキン)」が欠かせません
2022-09-06 22:52:45.417922
Please input odai :

アルゴリズム

  1. 何個かの定型文を用意する。
XXXにYYYは必要です
XXXはYYYが課題です

2.定型文のXXX(例:利根川)の部分にお題をいれる。YYYをマスクする。

利根川に[MASK]は必要です

3.上記をBERTを使って、複数の[MASK]の候補リスト(100個ほど)する。

4.上記だけだと、お題と無関係な単語も出てきやすいので、
 word2vec.most_similarを使って、候補リストで、お題と関係性の強い単語に
 絞り込む
(今回は用水(ようすい)が候補の一つ)

5.上記で絞り込んだ候補リストのうち、同音異義語のDB に該当する単語があるか
 求めて、同音異義語の候補リストを求める(今回は羊水(ようすい)が候補の一つ)。

6.候補リストを定型文のYYYにおいてXXXをマスクする。

[MASK]に羊水は必要です

7.上記をさらにBERTを使って、複数の[MASK]の候補リストを求める(100個ほど)。
8.上記だけだと、候補と無関係な単語も出てきやすいので、
 word2vec.most_similarを使って、候補と関係性の強い単語に
 絞り込む(この場合:出産)

9.上記で複数候補がでてくるので,ランダムに並べ替えて早く答えが出てきたものを
解答する。

同音異義語のDB

こちらのVocabulary Database for Reading Japanese (VDRJ) Ver. 1.1
重要度順語彙データベース (Top 60894) 重要度順位 00001-60894 (42MB)
から作成
http://tatsuma2010.web.fc2.com/VDRJ_Ver1_1_Research_Top60894.xlsx
感謝です。

ソースコード

今後の課題

  • 時事問題に弱い。BERTや同音異義語の辞書を改める。
  • いくつかの候補の中から、何が最適解かを判断するのが難しい。
  • WEBサイトとかで公開したい。でも8GB以上のRAMが必要。ラニングが心配
5
6
1

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
5
6