さて
先日のM-1グランプリみなさん見ましたか?
自分は「かまいたち」を優勝予想したのですが
見事に外れました!!!!
見事王者に輝いたのは
初出場の精鋭
ミルクボーイ
このネタが優秀すぎたので
判別モデルを作ってみました。
解説動画はこちら
まずはデータです。
ミルクボーイのネタをみて文字起こし!!
データ化します。
こいつをそのままコピーしてcsvファイル化してもらえば
できると思います。
できたらモデル作りに入ります。
まずはライブラリのインポート
お次は
データの読み込みです。
データが読めたら次は
辞書を作ります。
このモデルは形態素解析を用いて
文章を単語化し、その単語をモデル用に使います。
単語辞書を先に作ります。
さて用意ができたら
学習データの作成に入ります。
目的変数は0,1でないといけないので
コーンフレークを1,違えば0にして設定します。
次に元のデータの文章を形態素解析して
単語が有れば1,なければ0と言うデータフレームを作り
元のデータフレームに結合します。
これでデータは揃いました。
学習用には
説明変数と目的変数が必要なので
いらないものを除外して設定します。
次は学習ですね
機械学習史上最も雑な判別モデルの作成です。
とにかく全部データ使ってモデルを作ります。
[[ 7 0]
[ 0 22]]
判別モデルの検証も適当にしていますが
正解率100%と言うギャグのようなモデルが出来上がります。
最後に
このモデルを使えるようにしましょう!!!
ここでは
widgetを使ってjupyter上で使えるようにしています。
実行してみると
入力値に対して判別結果が出力されます。
はい
このような判別モデルですが
データさえあれば
なんとかなるもんですね
まあ、学習用のデータに用いたものしかコーンフレーク認定されない
雑な学習モデルですが
初学者の学習用にはなかなか面白いかもしれません。
ミルクボーイのネタはまだまだ沢山あるので
以下のようなものもイケますね!!
・モナカかモナカ違うか
・サイゼかサイゼちゃうか
・俳優か男優か etc
M-1が始まる前までは
個人的には「かまいたち」を 優勝予想していたものの
ミルクボーイのネタの完成度には 正直驚きましたねーーー
その他の細かい予想は当たったので
データからお笑いに関する予測するということも
面白い研究分野の一つになっています。
最後に データからM-1で優勝する方法について
需要が有ればやりたいですねー
芸人の方々、ご連絡くださいませ!!
それでは
先日のM-1グランプリみなさん見ましたか?
自分は「かまいたち」を優勝予想したのですが
見事に外れました!!!!
見事王者に輝いたのは
初出場の精鋭
ミルクボーイ
このネタが優秀すぎたので
判別モデルを作ってみました。
解説動画はこちら
まずはデータです。
ミルクボーイのネタをみて文字起こし!!
データ化します。
かどうか | 説明文 |
---|---|
コーンフレーク | 甘くてカリカリしてて牛乳とかかけて食べるやつ |
違う | 死ぬ前の最後のご飯もそれでいい |
コーンフレーク | まだ寿命に余裕があるから食べてられんねん |
コーンフレーク | 最期のごはんに任命されたら荷が重いよ |
コーンフレーク | なんであんなに、栄養バランスの五角形が広いんかわからん |
コーンフレーク | パッケージに書いてる五角形めちゃくちゃでかいんやから |
コーンフレーク | 自分の得意な項目だけで勝負してる |
コーンフレーク | 牛乳の栄養素を含んだうえでの五角形 |
違う | 晩御飯ででてきても全然いい |
コーンフレーク | 晩飯で出てきたらちゃぶ台ひっくり返す |
コーンフレーク | まだ朝の寝ぼけてるときやから食べてられる |
コーンフレーク | 食べてるうちにだんだん目が覚めてくるから、最後にちょっとだけ残してまう |
コーンフレーク | 子どもの頃、なぜかみんな憧れたらしい |
コーンフレーク | ミロとフルーチェは憧れた |
コーンフレーク | トランシーバーも憧れました |
違う | お坊さんが修行も時に食べてる |
違う | 精進料理にカタカナのメニューなんかでえへん |
コーンフレーク | 朝から楽して腹を満たしたいという煩悩の塊 |
コーンフレーク | あれみんな煩悩に牛乳かけてる |
コーンフレーク | パフェとかの傘増しに使われているらしい |
コーンフレーク | あれは法律スレスレぐらいはいっとる |
違う | ジャンルでいうなら中華 |
違う | 中華だけではない |
コーンフレーク | 回るテーブルの上においたら回したとき全部飛び散る |
コーンフレーク | 食べてるときに誰に感謝したらええかわからん |
コーンフレーク | コーンフレークは生産者さんの顔がうかばへん |
コーンフレーク | 浮かんでくるのは腕組んでるトラの顔だけ |
コーンフレーク | 赤いスカーフのトラの顔だけ |
違う | おかんがではないと言えばちゃう |
できると思います。
できたらモデル作りに入ります。
まずはライブラリのインポート
import codecs import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from sklearn.metrics import confusion_matrix import warnings warnings.simplefilter('ignore') from janome.tokenizer import Tokenizer t = Tokenizer()
お次は
データの読み込みです。
df = pd.read_table('corn_model_data.csv') df.head()
データが読めたら次は
辞書を作ります。
このモデルは形態素解析を用いて
文章を単語化し、その単語をモデル用に使います。
単語辞書を先に作ります。
word_dict = {} for i,v in df.iterrows(): for token in t.tokenize(v[1]): h = token.part_of_speech.split(',')[0] if any([h=='名詞',h=='動詞',h=='形容詞']): key = token.surface word_dict[key]=0
さて用意ができたら
学習データの作成に入ります。
df['y'] = df['かどうか'].replace({'コーンフレーク':1,'違う':0})
目的変数は0,1でないといけないので
コーンフレークを1,違えば0にして設定します。
次に元のデータの文章を形態素解析して
単語が有れば1,なければ0と言うデータフレームを作り
元のデータフレームに結合します。
columns = [k for k,v in sorted(word_dict.items())] tf_df = pd.DataFrame(columns=columns) for i,v in df.iterrows(): tmp = word_dict.copy() for token in t.tokenize(v[1]): h = token.part_of_speech.split(',')[0] if any([h=='名詞',h=='動詞',h=='形容詞']): key = token.surface if key in tmp: tmp[key]=1 tmp_list = [v for k,v in sorted(tmp.items())] tmp_df = pd.DataFrame(data=np.array(tmp_list).reshape(1,len(tmp_list)),columns=columns) tf_df = tf_df.append(tmp_df) tf_df = tf_df.reset_index(drop=True) data_df = pd.concat([df,tf_df],axis=1)
これでデータは揃いました。
学習用には
説明変数と目的変数が必要なので
いらないものを除外して設定します。
x = data_df.iloc[0:,3:] y = data_df['y']
次は学習ですね
機械学習史上最も雑な判別モデルの作成です。
とにかく全部データ使ってモデルを作ります。
model = LogisticRegression(fit_intercept = False) model.fit(x,y) predict = model.predict(x) print('Accuracy : {0}%'.format(accuracy_score(y, predict)*100)) print(confusion_matrix(y, predict, labels=[0,1]))Accuracy : 100.0%
[[ 7 0]
[ 0 22]]
判別モデルの検証も適当にしていますが
正解率100%と言うギャグのようなモデルが出来上がります。
最後に
このモデルを使えるようにしましょう!!!
ここでは
widgetを使ってjupyter上で使えるようにしています。
from __future__ import print_function from ipywidgets import interact, interactive, fixed, interact_manual import ipywidgets as widgets def callback(word): if len(word)>0: data = word_dict.copy() for token in t.tokenize(word): h = token.part_of_speech.split(',')[0] if any([h=='名詞',h=='動詞',h=='形容詞']): key = token.surface if key in tmp: data[key]=1 input_list = [v for k,v in sorted(data.items())] input_df = pd.DataFrame(data=np.array(input_list).reshape(1,len(input_list)),columns=columns) input_predict = model.predict(input_df) if input_predict==1: print('それはコーンフレークや!!!') else: print('コーンフレークちゃうやないかい!!') else: print() interact(callback,word='')
実行してみると
入力値に対して判別結果が出力されます。
はい
このような判別モデルですが
データさえあれば
なんとかなるもんですね
まあ、学習用のデータに用いたものしかコーンフレーク認定されない
雑な学習モデルですが
初学者の学習用にはなかなか面白いかもしれません。
ミルクボーイのネタはまだまだ沢山あるので
以下のようなものもイケますね!!
・モナカかモナカ違うか
・サイゼかサイゼちゃうか
・俳優か男優か etc
M-1が始まる前までは
個人的には「かまいたち」を 優勝予想していたものの
ミルクボーイのネタの完成度には 正直驚きましたねーーー
その他の細かい予想は当たったので
データからお笑いに関する予測するということも
面白い研究分野の一つになっています。
最後に データからM-1で優勝する方法について
需要が有ればやりたいですねー
芸人の方々、ご連絡くださいませ!!
それでは
コメントする