8日目の記事となりますはじめにこんにちは!三瀬と申します。アドカレは学生時代に身内のコミュニティでやっていたのですが、どれも好きな作品や概念をゆるく布教し散らかすものだったので、TechなBlogのアドカレは初めてです。Pocketsにハマりまくって聖地巡礼したレポ記事を書いていた時が一番輝いていたかもしれない。シャイニーカラーズ」の応援に力を注いでおります。楽曲のコンセプトや衣装のビジュアル、カードイラストの構図など魅力的な点を挙げればキリがないのですが、個人的に一番♰良い♰と思っているのは、数々のシナリオです。今年に入って国語辞典レベルに分厚いシナリオブックが発売されるほど力が入っており、時には笑わせつつ時には想像を120度くらい上回ってくる激重展開を見せてくるなど、アイドルに対して多角的な視点で攻めてくるシナリオが毎度のように刺さっています。そんな私の最近の悩みなのですが、シナリオを自分で解釈する力が衰えてきました。雰囲気では色々と見出せるものの、感想が中々言語化できずに他人の考察ブログに解釈を委ねてしまうことも多々あります。深い考察力を身につけるために、そのシナリオの特徴を手軽に可視化できないか.....と考えたので、今回は自然言語処理ライブラリの「GiNZA」を使って文章を様々な方法で解析してみました。形態素解析したデータを用いてワードクラウドも作ってみようと思います。GiNZAとは詳しくは公式ドキュメントをご参照ください。簡単に説明すると、日本語に特化した自然言語処理のオープンソースライブラリです。「spaCy」という、文章のトークナイズやベクトル化を行うための高度な自然言語処理ライブラリを用いて学習されています。雑にまとめると、日本語に対して割と何でもできます。百聞はなんとやらなので、早速使っていきましょう。解析に用いる文章はシャイニーカラーズの推しシナリオを....収集することは難しいので今回は宮沢賢治さんの「やまなし」を使っていきます。クラムボンがかぷかぷわらうやつ。「やまなし」の本文は青空文庫さんから取得しました。実際に使ってみましょう使用言語はPythonで、ノートブック上での実行を想定しています。必要なモジュールおよび日本語フォント(後々ワードクラウドに使うため)をインストールしていきます。fonts-ipafont-gothicモジュールをインストールできたら、さっそく「やまなし」本文を取得し、GiNZAモデルをspaCyに読み込ませて解析して、トークンごとに表示させてみましょう。token.tag_)実行結果は以下のようになっています。1657トークンあったので最初の一文分だけ抜粋しました。分解されたトークンのテキストおよび、品詞の種類が表示されていますね。次に、spaCyの可視化用の拡張機能である「displaCy」を使って、文中の重要な要素となりうるエンティティを強調表示してみます。style="ent",jupyter=True)こんな感じ。抽出された各エンティティの種類が「Animal」「Dish」等表示されています。「やまなし」における蟹達は主要人物なのですが食事(Dish)扱いされているのと、最初の谷川がPersonで出てきているのがちょっと面白い。次に、せっかく形態素解析したデータがあるので名詞のみを抜き出してワードクラウドにしてみましょう。Pythonには入力した単語リストをワードクラウドに起こす「WordCloud」というライブラリがあるのでそちらを使っていきます。目盛りを非表示にするplt.show()実行結果は以下のようになります。クラムボンが一番大きいと思っていたのですが、思ったより小さいのと2つに分裂してる。?とまあこんな感じに、ワードクラウドに起こせば頻出単語を可視化できるので、「やまなし」を知らない人が見ても「蟹や魚が出てくるし海の物語なんだろうな」といったことが一瞬で理解できるようになります。あとどのようなロジックでこの図を作っているかは分かっていないのですが個人的には「魚」の字の中に色々入りこんでるのがツボ。あとは、GiNZAで解析したデータはトークンごとにベクトルが格納されており、また文全体のベクトルを見ることができるので、各名詞句のベクトルと文ベクトルのコサイン類似度を比較することで、どの部分が「やまなし」にとって最も重要なのかを計算してみましょう。コサイン類似度は自分で計算...するまでもなく、計算してくれるメソッドがあるのでそちらを使っていきます。print(r)名詞句を抜き出し、そのベクトルと文ベクトルのコサイン類似度トップ10を表示しています。実行結果は以下のようになりました。2つあるな...と思ったけど純粋に文中に2回出てきているだけでした。類似度の上位3つほどを見る限り、ベクトル的に「やまなし」の中で重要なのは最後のやまなしが流れてくるシーンなのでしょうか。4位以下と比べてもかなり高くなっています。文中の重要な要素の判定に対して絶対的な材料になるわけでは無いのですが、参考程度にはセリフや表現の雰囲気が掴めてくると思います。まとめ今回紹介したようなものだと既に文章をペッと貼り付けるだけで表示してくれるツールがWeb上にごろごろ転がっている気がするのですが(少なくともワードクラウドは調べたらあった)、GiNZA等をうまく活用できれば自分が可視化したいものを無限通りに生み出せると思います。いい感じに自分のニーズに合った分析をして、解釈材料として役立てられたら嬉しくなれそうですね。ちなみに今回「やまなし」を選んだ理由ですが、自分が知っている文学作品の中で最も雰囲気がシャイニーカラーズのシナリオに近いと思っているからです。おまけ突然ですが、推しに近い文章を書きたいと思ったことはありますでしょうか。オタクとしての生活を歩んでいるうちに、気がついたら普段の会話でキャラクターの発言や構文を真似て喋ってしまうことが多々あります。本当に自分は推しに近い発言ができているのでしょうか...と考えたので、おまけとしてGiNZAを使って自分がインプットした発言が推しキャラの発言とどれだけ類似しているのかを計測してみました。深層学習にかけた方が確実にいい精度が出せると思うのですが、まあ思いつきなのでやってみましょう。メロスの発言を使用していきます。'たくさんの人を殺したのか。