二日間でアイドル同士の掛け算を実装したお話
どうも、ミリオンライブのオタクです。
ゆりあんよりあんゆり、しずしほよりしほしず派です。
先日行われた高専カンファ北海道にて登壇し話した内容について話しきれなかったこと含めて軽くまとめたいと思います。
高専カンファ北海道についてはこちらを
元々10分枠で登壇予定だったケヴィンくんが風邪で喉をやられてしまったため、発表難しいから資料なしで2,3分だけ話させてくれとの事だったので残りの7分を僕が話すことになりました。これがカンファ二日前のお話。
元々考えてたことはあったので、気合で二日間で実装&スライド作るぞ!となりました。そのため色々適当だったりガバガバな部分がございますがご了承ください。
そもそも何を作ったのか
こちら僕の登壇資料になります。
高専カンファの資料あげました!#kosenconf131hokkaidohttps://t.co/848MeIYrhD
— カブ (@kab__nan) August 17, 2019
簡単に言うとミリオンライブのアイドル52人のカップリングがお似合いかどうかを値で出してみよう!!って感じです。
そもそもこれを思いついたのが先日行われたIM@S Engineer Talk2019でみかみんさんが自然言語処理のお話をしていたのがきっかけだったりします。
パクリではございません。リスペクトです
卒研でも自然言語処理っぽいことやったりしているので頑張れば出来るかなーって思い今回やってみました。
スライドにも書いてますがざっくり流れとしましては
pixiv百科事典の各アイドルのページから情報収集
↓
集めた情報を教師データにして各アイドルのベクトル値を求める
↓
求めたアイドルのベクトル値を掛け算
↓
いい感じの値が出てくる!!!!!
といった感じです。
本当は行列の掛け算でやるのが理想でしたが時間との兼ね合いで断念。
行列でやってたら例えば一行一列目はそのアイドルにおいての「女の子」の要素を値にしたもの、二行一列目は「男の子」の要素を値にしたもの~~~みたいな感じかなと
実装について
何度も言いますが急遽作ったものなのでソースコードが汚かったり他サイトからの引用があったりしますが見逃してください。
pixiv百科事典からのデータ収集
とにかくデータを大量に集めたかったためアイドル個人だけでなくカップリングやユニットの百科事典も利用しました。
split_text_nounという関数で形態素解析を行っています。
形態素解析にmecab-ipadic-neologdという辞書を利用しました。
普通の辞書では最近の言葉に対応していないため最新の単語まで網羅しているneologdを使いました。多分普通のmecabではアイドル名をフルネームで認識してくれないと思います。。。
学習部分
word2vecを使ってモデルを作成。
100回ほど学習させています。
””百合””という単語のベクトルを1.00とした場合、アイドルがその言葉にどれだけ近いかを各アイドルのベクトルとして判断。
seme変数とuke変数を用意しここにアイドルの名前をぶち込みます。
seme × uke ≠ uke × seme
を成り立たせるため兼攻めの値の方が大きい方が燃えるよなって思ったためsemeアイドルのベクトルを10倍しました。
結果としてはこれでいい感じになったので良かったです。
実行例
望月杏奈と七尾百合子の場合
望月杏奈 × 七尾百合子 = 0.521208516171705
七尾百合子 × 望月杏奈 = 0.383473814941553
正解!!!!!
最上静香と北沢志保の場合
最上静香 × 北沢志保 = 0.8480868357467131
北沢志保 × 最上静香 = 0.7599406408698961
解釈違い
最後に
これその都度ベクトル求めるために学習させてるから常に同じ値が出るわけではないんですよね。なので正直精度はガバガバです。
こんなガバガバ精度でも良ければ、誰々のカップリングの値が見たいと言っていただければ試してみます。
ただまあ好きなものを自己流で実現できるってことはやってて楽しかったですね。
こうやって就職した後も仕事で磨いたスキルを好きなことに活かせたらなぁと思います。
来年就職したら関東に住むから絶対Im@stady行くぞ!!!!
何か気になる点ございましたらtwitterの方にご連絡ください。
ご覧いただきありがとうございました。