非実用的文章のテキストマイニングによる定量的分析の試み:場面ごとの文体ダッシュボード
はじめに 実用的な文章であれ,非実用的な文章―――たとえば二次創作小説,SS,怪文書,その他―であれ,よりよいものを書こうとするには,どうすればよいでしょうか.以前の記事では,その目的で,執筆の最中,あるいは執筆後の推敲に使える手法として,日本語変換システム『ATOK』およびそれに統合して利用できる各種辞書であるとか,『一太郎』に付属する校正ツールであるとか,あるいは今はやりの大規模言語モデル(LLM)だとかを簡単に紹介しました.LLM およびそれによって得られる生成物の利用については,日進月歩で変わりゆく分野であることから,いまだに議論が続いていますが,各種ガイドラインに従う限り,有用な技術であることは変わりありません.LLM を使えば,先の記事に示したように,自分の書いたものに対する定性的分析は,自然言語――われわれが普段使う言葉――を用いて,容易に行えることは否定できません. ただ,これには取りこぼしがあります.最近では,自然言語処理(NLP)と言えば LLM といった風潮があります.ただ,実際のところはそうではなく,NLP というのは,LLM 以外も含んだ,より広い概念であるはずです.特に,データ傾向の可視化などに用いられる,テキストマイニングと呼ばれる手法は,文章の定量的解析に,いまだに有用な技術です.もちろん,LLM でもプロンプトを工夫すればできるのかもしれませんが,やや牛刀を以て鶏を割くというきらいがあります.とりわけ,非実用的な文章を解析しようとするときに,いちいち LLM を利用して,大量の計算資源を浪費するのは,持続可能な開発という点でも問題があると思います――というのは半分冗談ではありますが. そこで,この記事では,テキストマイニングを中心とする伝統的な NLP の技法を用いて,自作の非実用的な文章を解析した試みを,備忘録としてまとめておきます.まずは,テキストを場面ごとに区切り,文体のダッシュボードとでも呼ぶべきものを作るべく,基礎的な指標を抽出して比較することにしました. なお,先ほどのようにとうとう語ってはみましたが,実のところ私は NLP の専門家でも,ましては情報学の体系的教育を受けた人間でもないので,以下は――あるいはこれまでの話も――話半分で,自己責任のもとお読みください.以下の手順は,LLM にも示唆を求めつつ――惜しむらくは,このご時世,自分で一からコードを書くことの意義が揺らいでいることです――,自分で適宜修正を行いました. 準備 NLPのツールとしては,Python で書かれた有用なものが多く存在するので,それを利用できる環境を整えればよいと思います.私が利用している環境は,Windows 11 上の WSL2 (Ubuntu) です.これには新しめの Python 3 がついてくるはずです.また,テキストエディタは Visual Studio Code としました.これを構築する方法は,どこにでも転がっているし,いっそのこと LLM に訊けば分かることなので,ここでは示しません. 具体的には pandas ――これはデータ解析に汎用的に使われるツールですが――や spaCy を使うのですが,前者はともかく,後者は apt では入らず,pip などを用いる必要があります.ただ,グローバルで pip を普通に使ってしまうと,ライブラリが入り乱れて後々面倒になるので,仮想環境を使うことにしました.仮想環境といえば venv というイメージがありましたが,最近は uv というものがはやりなので,これを使います. 詳しくは公式のウェブサイトを見ていただきたいのですが,uv は以下で導入できます(sudo 不要): 1 curl -LsSf https://astral.sh/uv/install.sh | sh 仮想環境の構築は以下の通りです(ディレクトリ名は好きなものに変えてください): 1 2 3 mkdir nlp-playgrounds cd nlp-playgrounds uv init そして,くだんの pandas, spaCy と,spaCy のモデル,ついでにビジュアライズ用に matplotlib と seabornを以下で導入します: ...