こんにちは。りん(User:Lin Xiangru)です。たまには技術ブログみたいなものを書いてみよう。
※本稿で利用している写真(スクリーンショット)は、特定の記述がない限り、Lin Xiangru, CC BY-SA 4.0 です。
発端
私は今期、生成AIに関する講義を受講している。そこで、Gemini canvas についての紹介と、それを活用する課題が出題された。
普段、ウィキペディアで記事を書いていて、家系図を作成するのが面倒だと思うことがある。というか、最近では面倒だと思い、記事に家系図を載せることがない。しかし、Wikidataをうまく活用すれば、家系図なんて自動的に作成できるだろうというのは、頭の中では理解できる(し、なんとなく頭の中にその考えは浮かんでいる)。問題はそれを実行するだけのプログラミング力がないということだ。こうしたことをちゃんと勉強したいなとは思っているが、正直勉強する時間がない。
そこで、そうした部分はAIに丸投げしてはどうだろうか。私はウィキペディアのソースの書き方も、他人の書いたソースを見て、それを解読する形で覚えていったので、あわよくば、この形で覚えていけばいいのかもという算段だ。
ところで、他にもいいツールがあるということはなんとなく聞いているが、京都大学は Google と提携を結んでいて(※)、全学生に教育用の Google workspace アカウントが配布されているため、とりあえずは gemini を使っているという感じだ。
(※…詳細は「グーグル・クラウド・ジャパン合同会社とAIの活用を核に大学DXの実現に向けた包括連携協定を締結しました」を参照)
今回のゴール
今回は「小城藩」を例に使う。この小城藩は、①藩主家の交代がない(あると少し煩雑になる)、②兄弟間での相続がある、③明らかな養子相続(鍋島直虎)が1回だけある、ということで、家系図は比較的書きやすく、なおかつ最低限テストしておきたい部分が存在する。自分が記事を改稿したというのも理由の一つだが、パッと思いついた藩の中では、一番実験の対象にしやすそうな藩と判断した。
なお完成系としてイメージしているのはこうだ。
これに加えて、代数が分かるといいなと思った。
(※追記; それに加えて、藩主の子供のうち、ウィキペディアに記事がある人物は最低限加えてもいいような気がしているが、それはまた別の機会にやってみる。)
考えるより手を動かそう
とりあえず、私が最初に想定していたことはこうである。
・対象となる人物(記事)は、[[category:小城藩主]]が付与されている記事、およびその父親、そのまた父親…にさかのぼる。
・親子・兄弟関係は、P22(父)、P40(子)、P3373(兄弟姉妹)、P569(生年月日)で判断する。
うだうだ話してもしょうがないので、まずは適当にプロンプトを打ち込んでみる。
「各藩の藩主の家系図を自動的に生成するツールを作成してください。まず、その藩の藩主であるかを調べるには、日本語版ウィキペディアにて、[[Category:〇〇藩主]]に格納されているかどうかで判断が可能です。続いて、その人間たちのつながりはWikidataで判断できます。P40 でリンクされている場合は、リンク先が子供であるという意味です。出力する情報は、ウィキテキストで出力してください。Template:Tree chart を使うことを推奨します。 」
最初から長文を打ち込む方がいいのかもしれないが、まずはどのようなものができるのか気になったので、この程度にとどめてみた。兄弟関係や養子関係まで最初に指定してしまうと、修正が大変そう。この状態での出力では当然、同一Category内に格納されているテンプレートの情報も拾ってしまうので、追加で「標準名前空間」の記事に限定するようにした。その出力結果は以下のとおり。
いろいろツッコみどころはあるが(ツッコみどころしかないだろうが)、初動としては決して悪くはない。
ここからいろいろ改善していく。
一つ大きな問題点
ところで、ウィキデータには「在位」に相当するプロパティが存在しない(※当社調べ)。
正確には、P39(公職)がそれに近く、P39で「小城藩主」(正確には「大名」をリンクする方が正しい気もしているが、今回の目的を達成するためには、[[Category:小城藩主]]にリンクするべきであろう)と指定したうえで、その修飾子として「開始日」と「終了日」を記述すれば、代数などの情報はうまく整理できる。しかし、そのようなことをするのは正直面倒である。(どなたか、Infoboxの情報から、Botかなにかでウィキデータにインポートしていただけると助かります…)
今回の作成では、なるべく私がウィキデータを触る手間を減らしたいので、代数をどう考えるかは、一つ悩みどころである。(つまりほとんどの大名のウィキデータ項目で既に整備されているプロパティに絞って)
まずはここをどう対処するかを考える。
というかそもそも、藩主の在位年については、Infoboxにすらその項目がないじゃないですか…(終了のお知らせ)
藩主のデータ元を変えてみる
…(。´・ω・)ん?
先代・次代テンプレートや、ナビゲーションテンプレートの存在を忘れていた!
(※[[Template:小城藩主]]みたいなテンプレートのことです。)
このテンプレートを活用する利点として、①家が分かれているため、そこの区別が簡単にできる、②在位年も隣に書いてあるため、代数を簡単に判別可能、③基本的にテンプレートの書き方が統一されている、などがあります。特に大事なのは、③です!統一性が一番大事!。[[category:〇〇藩主]]が格納される記事を叩くよりも、ナビゲーションテンプレートを活用する方が早そうですね。
さてさて方向転換。ここまで考えたことをGeminiくんにぶつけます。待ってろよ。
ここまでの話を言った結果がこちら。
親子関係をうまく分析できていますね。さてさて、ここから条件をいろいろ付け加えていきましょう。
人物の位置関係を正しく記述させる
このテンプレートは、「それぞれのボックスはタイル3枚分の幅を持つ」のですが、私がその設定を忘れていたため、なぜきれいに表記できないのかよくわかりませんでした。[[Template:tree chart]] の使い方を読み込んで、もう一度作戦を考えなおすことにしました。
とりあえず、まずは人物の位置を正しく記述するようにしました。人物は「1」「5」など n ≡ 1 (mod 4) 番目の引数に限定されますが、兄弟関係などにより並列する場合は、「1」番目の引数になった次は「3」番目の引数となるといった面倒なパターン分けが出てきます。自分では絶対に記述したくない。
ところで、このあたりから勝手に線を引くようになっています。どうやら、最初から線の存在を考慮してはいたものの、位置計算を間違えて線は0.5番目の引数である!(自然数じゃない!びっくり!)としていたようです。
いろいろありましたが、なんとか理解してくれたようです。
兄弟関係・養子関係を定義する
本来こちらを先にやるべきだったのかなと思っています。
家系図を書くとき、兄弟関係や養子関係も反映する必要があります。特に上図では、養子関係をうまく説明できていません。
兄弟関係は、生年月日(P569)でどちらが兄か弟か判断できるようにまでなっています。なので線の引き方を教えるだけで十分で、
「親が1番目の引数となっていて、その子供が2人いる場合は、その間に{{Tree chart| | ) | – | – | – | . | | | | | | | | | }}でつなぎます。3人いる場合は、{{Tree chart| | ) | – | – | – | v | – | – | – | . | | | | | | | | | }}と、1人増えるごとに、 ) の左隣に | – | – | – | v が1個増えるというイメージです。」
と説明すれば十分でしょう。これで兄弟関係もうまく反映できるようになりました。
最後に養子関係を定義します。ここでは鍋島直虎がそれに該当します。下図は、以前作成した鍋島家の家系図なのですが、鍋島直虎は本藩佐賀藩からの養子ではあるのですが、男系をさかのぼれば鍋島勝茂(小城初代の鍋島元茂の父)にたどります。どこまでを家系図での養子ととらえるのか迷いますが、4代前(高祖父)までに藩主がいなければ、「養子」という扱いで、前藩主と破線で結ぶことにしました。
「父親(P22)を4代(つまり高祖父)までさかのぼってください。それまでに、別の藩主につながる場合は、一番関係の近い藩主までの家系を記述してください。つながらない場合は、「養子」と判断します。この場合は、前の藩主の下に位置させてください。通常は、実線(|)で記述するところを、養子関係の場合は、破線(:)で記述します。 」
そうすることで…こう!当初の目的通り、うまく記述できました。
テスト
同じく佐賀藩の支藩である蓮池藩や鹿島藩でもテストをしてみました。蓮池藩に関しては正しく系図が書けています。
鹿島藩に関しては1個だけミスがあります。これは支藩あるあるで、鹿島藩の鍋島直煕はピンチヒッターとして本藩佐賀藩主に転向し、鹿島藩は養子の鍋島直宜が継いだけど、結局その後は、前の藩主・直煕の息子が跡を継いでいますね。こうしたとき、どのように書けばいいかを指定していなかったため、とりあえず直宜を実線で結んだようです。こうしたこまごまとした部分は、出力されたコードを手動で修正するだけで十分ですね。
なお、佐賀藩で実験していない理由ですが、佐賀藩は龍造寺氏→鍋島氏と、途中で大名家が変わっています。まだ、そちらには対応させていないので、これは今後対応していきましょう。(おそらく簡単に対応できる)
まとめ
大学の講義のついでに…というモチベのまま、いろいろ格闘していました。実験段階で出力されたコードは、記録のために、User:Lin Xiangru/実験室 のページの履歴に保存しています。
大体3時間くらいでしょうか。(+Diffの執筆で1時間)それくらいで、今後の記事執筆に役立ちそうなツールができるのでしたら、速いものです。それにしても、技術の進歩って恐ろしいですね。この1,2年でガラッと、一般人が扱いやすくなったというか、それとも受け入れるようになったのか。
私自身、ウィキペディア執筆をやっていて、そうしたツールをうまく乗りこなせていないというか、逆にツールに乗せられているような利用者を目にします。それでその人が損害を負う分は気にしないのだが、その結果としてウィキペディアに損害が出ているような…。そういう意味で、私は基本的にツールは名目上利用を禁止しつつ、使いこなせる自信がある人が、こっそりうまく使えばいいというスタンスです。そして、あまり自分はそういったものを使いたがりません。
ただただ、そう言っているうちに、私たち(日本語版ウィキペディア)が取り残されてしまったら、それはそれで…ですね。ESEAP Conference でも のりまき さんがいろいろコメントしていましたが、私もどうにかツールを乗りこなす方法を見つけなければと、少しずつつ考えが変わっています。乗りこなせる自信がある人がまずは、乗りこなし方を見せていかなければ。少し傲慢な態度のような気はしますが。
Can you help us translate this article?
In order for this article to reach as many people as possible we would like your help. Can you translate this article to get the message out?
Start translation













