識別子は検証され、データは放置される? ―化学物質をめぐる Wikipedia と Wikidata の温度差

Translate this post

※一応、筆者は化学を専攻しているはずです

きっかけ

最近、趣味で Python を独習している。京大理学部中央図書館の蔵書を眺めていると、「Python for chemists」という本があった。化学者向けの Python 導入本で、英語で書かれている。自然言語処理やデジタル人文学といった分野には興味があるが、1つの武器では太刀打ちできる気がしていない。まずは化学でどう使われているかを勉強してから、そちらに入っても遅くない。むしろ違う視野を持っている方が便利そうである。

なお、読解や進捗管理はもっぱらAIに任せている。最初は Gemini を使っていたが、途中から実験がてら ChatGPT を使って、Claude を使って…ととっかえひっかえ。この記事を書いている段階では、一番使い心地の良い Claude を使っている。(もちろんこの記事を書くに当たっての情報収集も任せたわけだ。トークンの屍の上にこの記事は成立している。)

蛇足気味なので話を戻そう。本を順々に進めていく中で、”Chemistry Databases and File Formats” という一章があった。化学物質をコンピュータでどう表現するか、というのに焦点を当てた章である。また、化学物質のオンラインデータベースを紹介する内容だが、その中でウィキペディアを「化学データベース」の一つとして紹介してあった。

「ウィキペディアとウィキデータは化学物質の基礎データや識別子をどう整備しているのか」という疑問も湧いた。この機会にまとめてみたので、この場で紹介してみようと思う。

なお余談ではあるが、私が勉強で使っている本は Cambridge Core で読むことができる。ウィキペディア図書館のライセンスでも読むことができるため、定期的にウィキメディアに投稿している方々は無料でアクセスできる。(と、User:Eugene Ormandy さんからご指摘を受けました)

化学物質の識別子とデータベース

まずこの本では、化学構造をテキストで表現する記法、SMILES、InChI、MDL Molfile、CMLなどを紹介している。そしてもう一つ、InChI の表記法をもとに作成された識別子として、InChIKey が紹介されている(「いんちきー」と呼びたくなる名前)。化学物質を文字列として表現したものを、さらに変換(ハッシュ化)した文字列で、識別子としても扱われている。

過りんさん。もとい、過リン酸。InChIでは、1S/H3O5P/c1-5-6(2,3)4/h1H,(H2,2,3,4) と表記し、Keyは MPNNOLHYOHFJKL-UHFFFAOYSA-N である。(画像; Public Domain)

こうした識別子を検索できるオンラインサービスとして、ChemSpider(王立化学会運営)、PubChem(米NIH運営)、NIST Chemistry WebBook(米国立標準技術研究所)などと並んで、ウィキペディアを挙げていた。

ウィキペディアについての紹介を要約してみると、以下のとおりである。(あくまでも英語版の話であることには注意)

  • CH3COOHやethanoic acidのような一般名・慣用名で検索すると、化合物の記事(”Acetic acid”)に飛ぶ。C2H4O2のような化学式で検索すると、その組成式を持つ化合物の一覧ページ(要は曖昧さ回避ページ)に飛ぶ。
  • 化学物質の記事は、サイドバー(要はインフォボックス)に、InChIKeyなどの識別子に加え、外部データベースへのリンクや、密度、融点、沸点、pKaなどの基礎データも、たいてい併記されている。

以下では、化学物質の「識別子(InChIKeyなど)」と「基礎データ」の二つが Wikipedia と Wikidata でそれぞれどう扱われているかを見ていこう。

ウィキペディアでの事例

本では「サイドバー」として言及されていた、Template:Chemboxというテンプレートについてみてみよう。このテンプレートはさらに「Identifiers」「Properties」「Structure」「Thermochemistry」「Hazards」などのモジュールが存在し、物質に応じて必要なセクションだけを組み合わせて使う設計になっている。

モジュールの一つ、Template:Chembox Identifiers は、InChIKey の他にも、CAS登録番号、PubChem CID、ChemSpider ID、ChEBI、ChEMBL、UNII(米FDA)、KEGG、DrugBank、RTECS、EC番号、DTXSID(米EPAのCompTox Chemistry Dashboardの識別子)など、非常に多くの識別子フィールドが用意されている(ようである)。日本語版ウィキペディアではさらに、J-GLOBAL ID や 日本化学物質辞書の番号 の欄も用意されており、少し「日本版」だとも感じる。また、「構造の表現法」である SMILES や InChI も、この Identifiers セクションに置かれている。

基礎データについては、モル質量(MolarMass)、密度(Density)、融点(MeltingPt)、沸点(BoilingPt)、酸解離定数(pKa)などが、Template:Chembox Properties、熱容量や標準生成エンタルピーなどの熱化学データは、Template:Chembox Thermochemistry の担当となっている。これらの数値も、識別子と同様に基本は手入力で、_refパラメータを使えば脚注をつけられることなっている。

CheMoBot の活躍

(※調べていったらかなり面白かったので、長文になっています)

識別子は基本的に編集者が一つひとつ手入力するものだ。ただし英語版には、識別子の値を外部の一次情報源と照合する「CheMoBot」という検証ボットが稼働していたようである(WP:CHEMVAL)。Botを運営していたのは、英語版ウィキペディアの現役管理者・User:Beetstraという方らしい。

Wikipedia Signpost, 2009年5月18日号 に面白い話が載っている。WikiProject Chemistry が、化学物質記事のCAS登録番号を手作業で検証しようとしたところ、発行元であるCAS(米国化学会)側が「Wikipediaのために自社データベースを使うのは利用規約違反」と反発した。議論の末、CASは態度を軟化させ、6000件以上のCAS登録番号などのデータをWikiProject Chemistryに提供し、さらに誰でも参照できる検証用サイトcommonchemistry.orgを新たに立ち上げたという。Wikipedia:Bots/Requests for approval/CheMoBot 2 のページを読んでみると、この検証活動によってCAS登録番号の誤り率が「1〜2%から1〜2‰まで下がった」という意見も出ている。

CheMoBotのBot申請は、2回行われていた。最初の申請(CheMoBot、2008年7月15日提出)では「この許可の範囲ではメイン空間を一切編集しない」とし、実際の活動も Wikipedia:WikiProject Chemicals/Log/2008-08-09 のようなプロジェクトのログページに変更を記録するだけだった。申請ページでは「検証済みのデータをどこに保管するか」をめぐって1か月以上にわたり延々と議論が続いていたようだが、最終的に選ばれたのは「ある版を丸ごと『検証済み』に指定し、その OLDID 一つだけを記録する」という方式がとられた。この申請の承認には結局4か月近くかかり、2008年11月11日にようやく認められた。

その後、記事のChembox自体に検証タグを直接書き込めるようにする申請(CheMoBot 2)が2009年9月に承認され、CAS登録番号ならCASNo_Ref、ChemSpider IDならChemSpiderID_Ref……といったフィールドに、{{cascite}}(CAS用)、{{chemspidercite}}(ChemSpider用)…という専用テンプレートを自動で書き込むようになった(Template:Cascite)。

緑のチェックと赤いバツのどちらかを表示するが、赤いバツは「値が間違っている」という意味ではない。ある識別子(例えばCAS登録番号)が一度「正しい」と人間の手で確認されると、その時点の版が”verified revision”として記録される。以後、誰かがその値を書き換えると、CheMoBotは機械的に{{cascite|changed|??}}へタグを更新し、赤バツを表示する——これは「前回確認した内容から変更があり、まだ再確認できていません」という意味でしかなく、誤字修正のような正しい訂正であっても、荒らしによる改悪であっても、区別なく同じ赤バツが付く。逆に緑のチェックも「今のところ最後に人間が確認した値と一致している」ことを示すだけで、その確認がいつ行われたかは記事からはわからない(Template:Cascite)。つまり赤バツも緑チェックも、値の正誤そのものではなく「最後の人力確認からのズレの有無」を表す、機械的なフラグである。実際、開発者のBeetstra自身もBot申請の議論の中で”The bot is not going to correct the values, it only tags the pages”(このボットは値を訂正するわけではなく、ただページにタグを付けるだけだ)と明言している(CheMoBot 2)。ちなみに値が変更されても、荒らしがすぐ差し戻される可能性を考慮して5〜10分ほど待ってからタグを更新する仕様になっていたようだ。

しかしこのボットは2018年6月19日を最後に編集が止まっており、現在は「稼働停止中のボット」に分類されている(投稿記録)。

日本語版ウィキペディアでは似たような活動は(私の調べた限り)確認できなかった。GAの「酢酸」の記事には同様の緑色のチェックマークがついているが、これは英語版からのコピペのようである。テンプレートの方も特に使ってあるような痕跡はない。

ウィキデータの整備状況

一方のウィキデータでは、WikiProject Chemistryが化学物質関連のプロパティを体系立てて整備している(Wikidata:WikiProject Chemistry/Properties)。

ウィキデータ勉強会1 にて、ウィキデータを適当に触っていると、隣で作業していた方がウィキデータのウィキプロジェクトのページを見ていて、ウィキデータにもウィキプロジェクトがあることを知った。また、ウィキデータ・クエリサービスについても初めて知った。これらにざっと目を通して、「プロパティを統一されている方がデータベースとしては価値がある。ウィキペディアでは体裁がバラバラでも最悪何とかなるだろうけど、ウィキデータではそれだといろいろ不都合が生じる。だから、ウィキペディア以上にウィキデータではウィキプロジェクトは価値がある存在だと思った。」と感想として話した記憶があるが、それを改めて実感させられた。

識別子だけでも次のようなプロパティがある。

プロパティ内容
P231CAS Registry Number
P233 / P2017canonical SMILES / isomeric SMILES
P234InChI
P235InChIKey
P661ChemSpider ID
P662PubChem CID
P683ChEBI ID
P652UNII

教科書が挙げていた基礎データの側にも、対応するプロパティが揃っている。

プロパティ内容
P2101melting point(融点)
P2102boiling point(沸点)
P2054density(密度)
P1117pKa
P2056specific heat capacity(比熱容量)
P3078standard enthalpy of formation(標準生成エンタルピー)
P274chemical formula(化学式)

化学物質にまつわるプロパティは多種多様に存在するが、その一覧は「Wikidata:WikiProject_Chemistry/Properties」にまとめてある。また、「Wikidata:WikiProject_Chemistry/Tools」というページも個人的にはすごーく面白そうである。

融点・沸点・密度・pKaといった値には、温度・圧力・相(気体/液体/固体)などを表す修飾子を個別に付け、それぞれに出典を紐づけられる。例えば酢酸の項目(Q47512)を見てみると、密度が「20 °Cで1.05 g/cm³」「25 °Cで1.0446 g/cm³」のように、測定条件ごとに複数の値が別々の出典付きで並んでいた。融点も「16.6±0.1 °C」「17±3 °C」のように、出典の異なる複数の測定値がそのまま両方残されている。

そういった記述の自由性が高いのは、Chemboxとの決定的な違いと思う。Infobox 系統は、完結のために1つのプロパティに対応する値を1行で記述することが暗黙の了解になっているように思う。私もInfoboxに入力する場合は、一番有力だと思う情報だけを入力し、他の説については注釈に送る場合が多い。両論併記を行うことも可能というのはよい。また、ウィキデータの値は、normal(通常、デフォルト)、 preferred(優先)、deprecated(非推奨)の3段階で評価することもできるため、「もっともらしいのはこれ」と示すこともある程度可能であるようだ。(※酢酸のウィキデータでは、特にランク付けをされていなかった。)

Wikipedia と Wikidata の連携

今回いちばん気になった点がここである。ウィキデータ勉強会2では、「ウィキペディアのインフォボックスとウィキデータでデータが違うことがある。片方を変更しても、もう片方が自動的に対応できない状態にあるから。」という話が出たような気がする。

ここで私の今の持論を話すと、「Infobox単位で、プロパティ同士で対応するものがあれば、ウィキペディアのインフォボックスからBotにウィキデータに入力させて、インフォボックスはウィキデータから読み込むべきではないか」と思っている。収拾がつかなくなりそうなので、あくまでもインフォボックス単位でやるべきだとは思っているが…。

化学物質について結論から言うと、ウィキペディアのChemboxとウィキデータは、基本的には別々に管理されている。全面的な自動同期はしていないようである。

ただし、部分的に自動連携している項目もある。

  • 英語版:DTXSID(EPAのCompTox Chemistry Dashboard番号)は、テンプレート内に「default: Property P3117 from Wikidata」とコメントされており、記事側に値がなければウィキデータの値が自動で使われる。
  • 日本語版:{{Chembox Identifiers}}の解説には「WikiData:下記については、WikiDataからのデータが自動表示されます。E番号」とあり、E番号(食品添加物番号)がウィキデータから自動表示される。このテンプレートには「ウィキデータを利用しているテンプレート」というカテゴリも付いている。

基礎データ(モル質量・密度・融点・沸点・pKa・熱容量・標準生成エンタルピーなど)については、こうした「デフォルトでウィキデータの値を使う」という仕組みは{{Chembox Properties}}や{{Chembox Thermochemistry}}のドキュメントを見る限り見当たらなかった。つまり基礎データは識別子以上に、ウィキペディアとウィキデータが完全に独立して値を持っている状態と言える。

まとめると現状は、「基本はウィキペディア側で手入力+ボット検証、ウィキデータは(DTXSIDやE番号のような)ごく一部の識別子だけを補完する」という段階的な連携にとどまっている。両者を突き合わせて矛盾がないか確認するような仕組みは、少なくとも今回調べた範囲では見当たらなかった。実際、酢酸の融点はウィキデータ上に出典の異なる複数の値(16.6±0.1 °Cと17±3 °C)がそのまま残っている一方で、英語版Wikipediaの酢酸記事の融点表示は「16 to 17 °C」という独自の範囲表記になっており、完全には一致しない。「両者を突き合わせる自動照合は簡単ではない」と思わせられます。もちろんそれが分かっているから、Infobox 単位で検討していくべきだと主張しているわけだが…。

【余談】元祖ウィキデータ? – Data pages

最後に、教科書が触れていた「データページ」についても触れてみよう。ここまで見てきた「基礎データ」の延長線上にある話で、Chemboxに収まりきらないほど詳細な物性データ(分光データ、蒸気圧の温度依存性、熱力学的性質の表など)を、「物質名 (data page)」という独立したページに切り出す仕組みだ。現在131件のページがCategory:Chemical data pagesに含まれている。

例えば Acetic acid (data page)には、誘電率や表面張力、蒸気圧と温度の関係式、NMR・IR・MSのスペクトルデータなどが、CRC Handbook of Chemistry and PhysicsやNIST Chemistry WebBookといった文献を出典に、細かい表としてまとめられている。

このDiff記事を書くきっかけは、このデータページの存在を知ったことである。これを見た瞬間、「今ならそういったデータを取り扱おうと思えば、ウィキデータを使うはず。つまり、ウィキデータの先祖的な存在なのでは?」という発想がよぎった。

実際に Acetic acid (data page) という記事は2005年6月に作成されている。ウィキデータの正式リリースが2012年なので、その7年も前のものである。私の発想は正しそうに思えた。

しかし、履歴を見てみると全くの真逆だった。まずこの記事の初版の編集要約は “keeping the info from the previous table”(前のテーブルの情報を保持するため)。つまり、このページは最初から独立ページとして設計されたというよりも、本体のAcetic acidの記事に入っていた肥大化した表を、記事本体をすっきりさせるために切り出して”退避”させた、という方が正しそうである。その後、他の利用者によって “Added more sections” され、現在の骨格ができている。

もっと興味深い情報もあった。Data pagesは、WP:RAWDATA(生データの羅列を禁じる方針)違反ではないかという理由で、繰り返し削除・統合の議論にかけられてきていた。WP:DPCLEANUPというページを見てみるとわかるが、Datapages にいついては少なくとも4回以上、大きな削除議論の波が存在していたという。

直近では2026年6月にも、 Methane (data page) を含む複数ページに対して「説明のない生データの羅列であり、記事本体にマージすべき」とWP:RAWDATAを根拠に削除・統合を提案したという事例(削除依頼ページ)があるようだ。これに対する反論は「Chemboxに入れると肥大化するのでリンクとして分離しているだけで、独立記事として存在しているわけではない」「この論点は過去に何度も却下されている」というもので、Keep(存続) で決着がついている。

一方ですべての記事が存続を許されたわけではなかった。Category:Chemical data pages (merged) には、実際に本体記事へ統合された、もしくは本記事には記述すべきでないデータのみとなった7項目 (Aluminium chloride, Aluminium sulfate, Antimony trioxide, Beryllium oxide, Bismuth(III) oxide, Calcium hydroxide, Potassium nitrate) が分類されている。

さてさて、これを受けた私の一言。「なるほど。私はこれが『元祖ウィキデータ』的な立ち位置のものだと思っていたんだ。むしろ真逆だったという訳か。」

それに対する回答がこのようなものだった。

「その直感も的外れではなくて、むしろ面白いのはそこですね。年代だけ見れば逆に「先輩」筋にあたる—2005年に生まれた仕組みが2012年のウィキデータより先に同じ課題(インフォボックスに入りきらない実測値の置き場)にぶつかっていたわけですから。

ただ「データベース的な体裁を取ることへの態度」という一点では、まさに真逆でした。ウィキデータは最初から「これは構造化データベースです」と開き直って別プロジェクトとして独立させたからこそ、個々のステートメントを堂々と並べられる(酢酸の融点が2つ出典違いで残っていても誰も咎めない)。一方Data pagesは、あくまで「Wikipediaの記事」という体裁を保ったまま同じ衝動—ハンドブックの数値をそのまま置きたい—を満たそうとしているせいで、”Wikipedia is not a database”という根本方針に定期的に照らし合わされ、20年経った今も「これは記事なのか、データの垂れ流しなのか」を都度弁明させられ続けている。

つまり同じ欲求から出発しているのに、一方は「データベースになる」ことを選んで自由になり、もう一方は「記事のふりをし続ける」ことを選んだせいで、いまだに存在を疑われ続けている、という構図ですね。元祖というより、同じ問題への「別解でありながら、片方だけがいまだにその選択の代償を払っている」状態、と言った方が近いかもしれません。」

あとがき

本稿では、化学物質の識別子および基礎データについて、ウィキペディアおよびウィキデータの現状やその連携について簡単にまとめてみました。ふと気になったことを調べだすとここまで発展するものなのですね。その結果、これは共有しておいた方が良さそうかも?と思い、こうして Diff 記事に整形しました。リンクを貼ってしまった後に、敬体・常体のどちらかに統一するのも煩わしいので、混同させたままの状態としています。ご容赦ください。

一番の発見は、「Data page」はウィキデータの先祖ではなく、むしろ真逆の存在だったこと、でした。「インフォボックスに収まりきらない実測値をどこに置くか」という同じ課題に対して、ウィキデータは「データベースであること」を開き直っているからこそ、対応できるのでは?という、忘れていた視点を思い出すことができました。また、調べていく中で、このテーマは面白そうというものがいろいろと見つかったといういいことがありました。

さてさて。冒頭で少しAIについての話もしました。この記事を書いた前日に初めて Claude を触って、良さげな感じを覚えたので少し課金をしてみました。もともとメインで Google Gemini を使っていて、他のAIは使っていませんでした。この記事を書いた理由の一つは、Claude のお手並み拝見です(モデルはとりあえず Sonnet 5 です。)。この記事の下調べを手伝ってもらいました。この記事を書くのには4時間ほどかかったでしょうか。噂には聞いていましたが、効率が恐ろしいほどあがりますね。正直全くの初心者(使い始めて1日目の人間)が触っても、この短時間でここまでできるというのは、なんというか…。その先は怖いのでやめましょう。

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?