こんにちは。木村です。
今回は日本語の形態素解析器SudachiとChatGPTのCode Interpreterの力も借りて、さくっとWikipediaの名詞の表記ゆれを調べてみた結果をお届けします。
処理の概要
形態素解析
Wikipedia日本語版の形態素解析を実施しました。マシンリソースの都合で全Wikpediaデータの1/10に絞りました。より詳しいデータの絞り込みについては後述の「付録1 対象データの詳細」に書きます。
形態素解析器はSudachi(https://github.com/WorksApplications/Sudachi)のpythonラッパーであるSudachipy(https://github.com/WorksApplications/SudachiPy)を使用しました。
集計
形態素解析結果をChat GPTのCode Interpreterに渡し、表記ゆれカウント処理とパワポ作成までをCode interpreterに実施させました(実際は、Code Interpreterインスタンスのメモリ不足で対象データすべてを扱えなかったため、少ないデータで動作検証し、ローカルで該当コードを使いまわしました)。より詳しい処理方法は後述の「付録2 処理方法」に書きます。
結果発表
表題の件、Sudachiの辞書では「親父」が標準形です。Wikipedia内での人気(使用頻度)は以下の通り。
「親父」、「おやじ」、「オヤジ」の3大勢力の中で一番人気は「オヤジ」でした。今回データを絞った中での接戦であり、これが有意な差かどうか、機会があれば全データで筆者によるバランスも考慮して調べてみたいですね。次は意見が2大勢力に分かれたケースです。
「公孫樹」、「鴨脚」という漢字もあるんですね。
上記のパワポスライドはCode Interpreterに生成させました。パワポの作成に限らず、作図系の作業は非常に便利です。
表記(表層形)の種類の多い順に、8種類以上の表記があった名詞の一覧を以下に貼ります。
上位で予期できていたのは「日本」くらいでした。「箱」など馴染みのある名詞でまたも知らない漢字を知ることができました。わかりにくいので上位3つの円グラフも掲載します。
「婆」、「姉」、「爺」、バリエーションの数は近くてもばらつきはそれぞれ異なりますね。
表記ゆれ解決の影響
表記ゆれ解決は自然言語処理でよく行われるタスクですが、目的によっては必ずしも必要とは限りません。例えば以下のような影響が出るからです。
語彙の豊富さ指標に影響する
語彙の豊富さについては単純なTTR(Type Token Ratio=異なり語数/延べ語数)からはじまり、Yule-Kなど延べ語数差の影響の排除を試みた応用的な様々な指標があります。表記ゆれを解決した場合は異なり語数が減るので、これらの値は変わります。例えば、ある2人のSNSの書き込みについて表記ゆれを解決しないで語彙の豊富さに関する指標を算出した場合、語彙が豊富とされた人のほうは、表記ゆれや誤用が多いだけかもしれません。
著者の特徴が減る
著者の特徴的な表現が減ることになるので、文章の著者推定や真贋判定は難しくなります。例えば自分の書いた文章を書き込む前に表記ゆれを解決しておくと、なりすまし被害の防衛策になります。他にも著者推定に役立つ指標は多くあります。例えば、品詞のn-gram、文頭や文末のパターン、段落の長さ、色彩語や比喩語の比率など[1]。これらへの直接的な影響は小さいため、表記揺れを単純悪用すると逆に不自然な改ざんとなって看破される可能性があります。
名詞以外の表記ゆれ対策について
名詞以外の表記ゆれ対策は、活用形などの考慮が必要なため一気に難易度が上がります。
例えば、意味解析の観点では以下の3つの文節は等価であり、「の」、「であった」、「だった」の表記は統一して扱いたいです。
私が子供の頃
私が子供であった頃
私が子供だった頃
しかしこれらをSudachiで形態素解析をすると、以下の通りに品詞が分かれてしまいます。上記の表記ゆれ対応には、品詞以外でのルール設定が必要になってしまいます。
上記の形態素解析結果になるのは、Sudachiの辞書は学校文法に近いUniDicとNEologdをベースにしているためです[2]。Sudachiはいわゆる学校文法と呼ばれることもあるIPAの品詞体系に近く、これらの品詞体系で形態素解析をしても同じ結果になります。一方で、学校文法とは異なる益岡・田窪文法の品詞体系で形態素解析をするならば判定詞という品詞があるため、対応できる場合もあります[3]。
弊社の慧(KEI)自然言語基盤エンジンではこのような表記ゆれ対策ができるように、現在アップデート中です。
付録1 対象データの詳細
Wikipedia日本語版の2023年5月1日のデータ(jawiki-20230501-cirrussearch-content.json.gz)から以下に説明する方法で絞ったデータが今回の対象データです。
絞る前の記事数:1,372,069件
◆空記事の除外
textの中身が空でない記事数:1,371,450件
◆長すぎる記事の除外
特定の超長文記事の表記の影響を低減するために5000文字未満に限定しました。
5000文字未満の記事数:1,231,395件
◆記事数を1/10に間引く
ローカルPCで現実的な処理時間で終えるため、記事を10個飛ばしで間引きました。
10/1に間引かれた5000文字未満の記事数:123,135件
付録2 処理方法
◆センテンス分解
速度重視で以下を使用しました。
https://github.com/wwwcojp/ja_sentence_segmenter
センテンス数:2,418,079文
◆言語判定による日本語センテンス以外の除外
言語判定により日本語のセンテンスのみに絞りました。速度重視で以下を使用しました。
https://pypi.org/project/langdetect/
また、URLも排除。
日本語のセンテンス数:2,047,143文
◆長すぎるセンテンスの除外
今回は切りの良い256文字未満に絞りました。長すぎる1文は、何らかの理由でセンテンス分解がうまくいっていない可能性が高く、文章になっていないことが多ためです。例えば、「ランカスター (ペンシルベニア州)」の記事に登場する、今回のセンテンス分解の結果の一つは以下であり、無視するのが妥当です。
「ロバート・フルトン:政治家、画家、クレルモン蒸気船の開発者ジーン・ガーバー:プロ・バスケットボール選手エドワード・ハンド少将:初期の愛国者トム・ハー:元メジャーリーグベースボール選手、ランカス…(後略)」
長すぎない日本語のセンテンス数: 2,010,033文
◆Sudachipy(デフォルト設定、追加辞書なし)で形態素解析
形態素数:55,997,698トークン
品詞の内訳は以下の通り。名詞は24,279,041個ありました。
名詞 24279041
助詞 11263307
補助記号 9489572
動詞 4651704
助動詞 2617835
接尾辞 1269008
空白 712840
接頭辞 319286
形状詞 256402
形容詞 241656
連体詞 237183
副詞 234596
接続詞 175253
代名詞 142281
記号 80109
感動詞 27625
◆確実に表記ゆれ多数の英数字のみ、カタカナのみの名詞の除外
この中で標準形が英数字のみから構成されるもの、カタカナのみから構成されるものは表記ゆれが多数あることがわかっていてランキングがおもしろくなくなるので省きました。ChatGPTは正規表現が得意なのですぐにできました。
残った1,639,3283個の名詞について表記ゆれを調べました。
◆表記ゆれのカウント
以下のように同じ標準形に対する表記(表層形)のバリエーションのカウントです。
結果は前述の通りです。
最後までお読みいただきありがとうございました。
参考文献
[1] 金 明哲,中村 靖子,上阪 彩香,土山 玄,孫 昊,劉 雪琴,李 広微,入江 さやか (2021) 文学と言語コーパスのマイニング
[2] 形態素解析器Sudachiの「辞書」はどのように作られているか: 複数の分割単位を例として(2020)https://zenn.dev/sorami/articles/c9a506000fd1fbd1cf98
[3] 益岡 隆志,田窪 行則 (1992) 基礎日本語文法・改訂版
kimura
最新記事 by kimura (全て見る)
- 親父?おやじ?オヤジ?一番人気は誰?ChatGPTのCode Interpreterに聞いてみた(Wikipediaの名詞の表記ゆれを調べた話) - 8月 29, 2023
- 過去の記事の空気を読んでみた - 8月 19, 2020