<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>デジタル・ヒューマニティーズ |</title><link>https://clementgodbarge.com/ja/tag/%E3%83%86%E3%82%B7%E3%82%BF%E3%83%AB%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%B9/</link><atom:link href="https://clementgodbarge.com/ja/tag/%E3%83%86%E3%82%B7%E3%82%BF%E3%83%AB%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%B9/index.xml" rel="self" type="application/rss+xml"/><description>デジタル・ヒューマニティーズ</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ja-jp</language><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>デジタル・ヒューマニティーズ</title><link>https://clementgodbarge.com/ja/tag/%E3%83%86%E3%82%B7%E3%82%BF%E3%83%AB%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%B9/</link></image><item><title>tei-mcp v0.3：原文を書き換えずにTEIを付ける</title><link>https://clementgodbarge.com/ja/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;
とき、目標はAIアシスタントにTEIマークアップをでっち上げさせないことでした。スキーマによるグラウンディングで、問題の一部は片づきました。P5仕様をツール経由で直接引けるようになれば、モデルは要素の意味や受け入れる属性を当て推量しなくて済む。出力は検証を通ります。&lt;/p&gt;
&lt;p&gt;しかしTEIエンコーディングにおけるハルシネーションには二つの顔があり、スキーマが捉えるのはその一つだけです。仕様に照らした検証が教えてくれるのは、&lt;em&gt;マークアップ&lt;/em&gt;が整っていることまで。そのマークアップが包む&lt;em&gt;テキスト&lt;/em&gt;については何も語りません。そして害の大きいハルシネーションが潜んでいるのは、まさにそこ――テキストそのもの――なのです。v0.3の目玉であるスパン固定合成は、これを防ぐためだけに設計されました。&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;目次&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#スキーマが捉えられないハルシネーション"&gt;スキーマが捉えられないハルシネーション&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#スパン固定合成"&gt;スパン固定合成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#これは何で何でないか"&gt;これは何で、何でないか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#teiの外でも大事な理由"&gt;TEIの外でも大事な理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#アップデートの入手"&gt;アップデートの入手&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="スキーマが捉えられないハルシネーション"&gt;スキーマが捉えられないハルシネーション&lt;/h2&gt;
&lt;p&gt;モデルに16世紀のフランス語書簡をエンコードさせると、見たところ非の打ちどころのないTEI文書が返ってくることがよくあります。ヘッダーは埋まり、&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;タグは正しい位置にあり、&lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt;も整っている。&lt;code&gt;validate_document&lt;/code&gt;にかければ通ります。&lt;/p&gt;
&lt;p&gt;そこで本文を原文と突き合わせてみてください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt;が&lt;code&gt;même&lt;/code&gt;になっています。コンマが一つ移動している。&lt;code&gt;luy&lt;/code&gt;はいつの間にか&lt;code&gt;lui&lt;/code&gt;に現代化されている。写本で読みにくかった節は、もっと読みやすいものに「訂正」されている。どれも頼んだ覚えのない変更です。どれにも印はつきません。文書はスキーマ上は妥当で、しかしひっそりと間違っている。&lt;/p&gt;
&lt;p&gt;エンコードされたテキストがそのまま恒久的な記録となり、後続の読者、検索インデックス、引用のよりどころになるアーカイブのワークフローにとって、これこそもっとも重大な故障の型です。壊れたタグは腹立たしい。しかし5年間誰も気づかない現代化された綴りは、汚損なのです。&lt;/p&gt;
&lt;h2 id="スパン固定合成"&gt;スパン固定合成&lt;/h2&gt;
&lt;p&gt;新リリース（v0.3）は、まさにこの故障の型を狙い撃ちにしたハルシネーション防止の仕組みを搭載しています。設計目標は、本文のハルシネーションを単に起こりにくくするのではなく、構造上ありえなくすることです。&lt;/p&gt;
&lt;p&gt;考え方は単純です。&lt;strong&gt;モデルは本文を一文字も打たない&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;代わりに、ワークフローはこう進みます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;モデルは&lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;を呼び、原文のプレーンテキストを不変の文字列として受け取ります。&lt;/li&gt;
&lt;li&gt;付けたいタグごとに&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt;を呼び、原文上の文字範囲にTEI要素を登録します。&lt;/li&gt;
&lt;li&gt;終わったら&lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;を呼びます。サーバーは記録されたタグを元のプレーンテキストに織り込んで最終的なTEIを描画し、そのうえで、描画された文書の平文の内容が原文と等しいことを&lt;em&gt;バイト単位で&lt;/em&gt;検証します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;バイトが一致すれば、文書が返ってきます。一致しなければ――モデルのタグがどういうわけか、原文と1文字でも違う本文を含意していれば――&lt;code&gt;compose()&lt;/code&gt;は汚損した文書を返す代わりに例外を投げます。&lt;/p&gt;
&lt;p&gt;このワークフローには、モデルが原文と本文の異なるTEI文書を生み出す経路が存在しません。この不変条件は機械的なもので、モデルの振る舞い頼みではありません。モデルがハルシネーションを起こさないと信じる必要はない。信じるべきは、二つのバイト列の&lt;code&gt;==&lt;/code&gt;比較だけです。&lt;/p&gt;
&lt;h2 id="これは何で何でないか"&gt;これは何で、何でないか&lt;/h2&gt;
&lt;p&gt;スパン固定合成はスキーマ・グラウンディングを&lt;strong&gt;補う&lt;/strong&gt;ものであって、置き換えるものではありません。スキーマ・グラウンディングのツール群（&lt;code&gt;validate_document&lt;/code&gt;、&lt;code&gt;lookup_element&lt;/code&gt;、&lt;code&gt;valid_children&lt;/code&gt;、そして元の16個の残り）は、モデルが&lt;em&gt;妥当な&lt;/em&gt;TEIを作る助けになります。スパン固定合成は、そのTEIの中の本文が原文に&lt;em&gt;忠実である&lt;/em&gt;ことを保証します。実運用に耐えるエンコーディングのワークフローは両方の軸を満たさなければならず、いまや両方が一つのサーバーで賄えます。&lt;/p&gt;
&lt;p&gt;万能薬でもありません。&lt;code&gt;compose()&lt;/code&gt;はまだ、登録されたタグが読み込み済みのODDカスタマイズのもとで許されるかどうかを確認しません。これは次の課題です。記録されたタグはプロセスのメモリ上にあり、再起動すると消えます。また原文ファイルは、サーバーが動く場所から読める必要があります。いずれも対処可能ですし、中核の不変条件を揺るがすものではありません。&lt;/p&gt;
&lt;h2 id="teiの外でも大事な理由"&gt;TEIの外でも大事な理由&lt;/h2&gt;
&lt;p&gt;このパターンは一般化できます。モデルにテキストの注釈付け、変換、ラッピングを頼むとき――そして、モデルがテキストを「改善」する力よりも元のテキストの完全性のほうが大事なときはいつでも――同じ形の解決策が使えます。モデルにテキストを打ち直させてはいけません。テキストに対する指示を出させ、決定論的なコンポーザーに、等価性の不変条件のもとでそれを適用させるのです。&lt;/p&gt;
&lt;p&gt;とりわけデジタル版にとって、これは責任をもってモデルに任せられる仕事の範囲を変えます。エンコーディングは突如として、出力をいちいち原文と手作業で突き合わせなくても委ねられる仕事になる。退屈な道は機械が引き受け、編集者は綴りではなくマークアップを点検すればよいのです。&lt;/p&gt;
&lt;h2 id="アップデートの入手"&gt;アップデートの入手&lt;/h2&gt;
&lt;p&gt;すでにtei-mcpを入れている場合：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;新規なら：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;スパン固定合成を使うには、原文プレーンテキストのディレクトリをサーバーに指定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各ファイルのステム（拡張子を除いた名前）が文書IDになります（&lt;code&gt;letter_001.txt&lt;/code&gt; →
&lt;code&gt;letter_001&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;ソースコード、完全なドキュメント、不変条件の設計ノート：
&lt;/p&gt;</description></item><item><title>もう一つのデジタル版のかたち</title><link>https://clementgodbarge.com/ja/post/cavriana-edition/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/cavriana-edition/</guid><description>&lt;p&gt;一次史料の大半は、公刊されないまま眠っています。それを何とかするために私たちが頼ってきたモデル――助成金頼みのデジタル版――は、高くつき、中央集権的で、壊れやすく、とても大規模には通用しません。私はこのほど、Cavrianaの書簡の校訂版をなぜ別のやり方で構築しているのかを説明した
を公開しました。最小限のインフラで有機的に育ち、保守は自動化され、協働に開かれ、助成金など要らないほど安上がりな、デジタル化された一次史料。それは、制度の後ろ盾があろうとなかろうと機能する、そういうデジタル・ヒューマニティーズを擁護する議論です。&lt;/p&gt;</description></item><item><title>tei-mcp</title><link>https://clementgodbarge.com/ja/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcpaiエージェントのためのtei-p5"&gt;tei-mcp：AIエージェントのためのTEI P5&lt;/h2&gt;
&lt;p&gt;tei-mcpは、AIコーディングアシスタントが
仕様を直接引けるようにする、オープンソースの
サーバーです。記憶した訓練データ――もっともらしくて誤ったマークアップの温床です――に頼る代わりに、AIはその場で仕様に問い合わせられます。&lt;/p&gt;
&lt;h2 id="機能"&gt;機能&lt;/h2&gt;
&lt;p&gt;サーバーはTEI P5のODDを解析し、16のツールを公開します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要素、クラス、マクロ、モジュールを名前で&lt;strong&gt;検索&lt;/strong&gt;。大文字小文字は区別せず、綴り間違いには候補を提示&lt;/li&gt;
&lt;li&gt;TEIのクラス階層全体で&lt;strong&gt;属性を解決&lt;/strong&gt;（ローカル＋継承）&lt;/li&gt;
&lt;li&gt;クラスとマクロを解決しながら、&lt;strong&gt;内容モデルを展開&lt;/strong&gt;して構造化された木に&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;入れ子を検証&lt;/strong&gt;――直接の親子関係、または経路を追跡した再帰的な到達可能性&lt;/li&gt;
&lt;li&gt;TEI P5に照らして&lt;strong&gt;文書を検証&lt;/strong&gt;：内容モデル、属性、閉じた値リスト、参照の整合性、非推奨警告&lt;/li&gt;
&lt;li&gt;漸進的な編集ワークフロー向けに&lt;strong&gt;単一要素を検証&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ODDカスタマイズを読み込み&lt;/strong&gt;、スキーマをプロジェクト固有のサブセットに絞り込み&lt;/li&gt;
&lt;li&gt;正規表現で、あらゆるエンティティ型を横断して&lt;strong&gt;検索&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="インストール"&gt;インストール&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;または、次のコマンドで直接実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="使い方"&gt;使い方&lt;/h2&gt;
&lt;p&gt;MCP互換のクライアント（Claude、Cursor、Windsurfなど）に追加します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ソースコードとドキュメントは
にあります。&lt;/p&gt;</description></item><item><title>tei-mcp：AIエージェントのためのTEI P5</title><link>https://clementgodbarge.com/ja/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/tei-mcp/</guid><description>&lt;p&gt;AIコーディングアシスタントにTEI XMLを書かせたことがある人なら、間違いの多さに気づいているはずです。要素があってはならない場所に現れる。属性が捏造される。入れ子の規則が無視される。モデルはTEIがどんなものかを大まかには知っていますが、仕様についての確かな知識は持ち合わせていないのです。&lt;/p&gt;
&lt;p&gt;tei-mcpは、AIエージェントにTEI P5ガイドラインをツール経由で直接引かせることで、この問題を解決します。&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;目次&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcpとは"&gt;MCPとは&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tei-mcpにできること"&gt;tei-mcpにできること&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#なぜ大事か"&gt;なぜ大事か&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#使いはじめる"&gt;使いはじめる&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="mcpとは"&gt;MCPとは&lt;/h2&gt;
&lt;p&gt;
（MCP）は、AIアプリケーションを外部のデータソースやツールにつなぐためのオープン標準です。AI用のUSBポートと考えてください。Claude、Cursor、Windsurfをはじめ互換性のあるクライアントなら何でも、単一のプロトコルで専門的なサービスに差し込めます。&lt;/p&gt;
&lt;p&gt;MCPサーバーは、AIが会話の途中で呼び出せる&lt;em&gt;ツール&lt;/em&gt;を公開します。記憶した訓練データに頼る代わりに、モデルは生きた、権威ある情報源に問い合わせられるのです。&lt;/p&gt;
&lt;h2 id="tei-mcpにできること"&gt;tei-mcpにできること&lt;/h2&gt;
&lt;p&gt;tei-mcpはTEI P5のODD仕様を解析し、編集者やエンコーダーがよく抱く疑問に答える16のツールを公開します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;この要素は何か？&lt;/strong&gt; 要素、クラス、マクロ、モジュールを名前で引けます。大文字小文字は区別せず、綴り間違いには候補を提示します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;どんな属性を取るか？&lt;/strong&gt; クラス階層全体をたどって属性を解決します――まずローカルの属性、次に継承された属性を順に。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中に何を入れられるか？&lt;/strong&gt; 内容モデルを構造化された木に展開するか、有効な子要素の一覧を平坦に取り出します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;この要素はここに置けるか？&lt;/strong&gt; 親子の入れ子を確認するか、要素階層全体を通じた到達可能性を追跡します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;この文書は妥当か？&lt;/strong&gt; TEI XMLファイルを仕様に照らして検証します。内容モデル、属性値、閉じた値リスト、参照の整合性、非推奨警告まで。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自分のプロジェクトのスキーマは？&lt;/strong&gt; ODDカスタマイズファイルを読み込めば、上のすべてをプロジェクト固有のTEIサブセットに絞り込めます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="なぜ大事か"&gt;なぜ大事か&lt;/h2&gt;
&lt;p&gt;TEIエンコーディングでは、ガイドラインを絶えず引く必要があります。熟練したエンコーダーはよく使うパターンを体で覚えていますが、それでもなじみの薄い要素や込み入った内容モデルとなれば仕様を確かめます。そうした身についた知識を持たないAIアシスタントの場合、問題はもっと深刻です。もっともらしく見えて誤ったマークアップをでっち上げてしまうのです。&lt;/p&gt;
&lt;p&gt;tei-mcpがあれば、AIは当て推量をしなくて済みます。山括弧を一つ打つ前に、仕様で答えを引けるからです。結果として得られるのは、TEI P5に――あるいはプロジェクトのODDカスタマイズに――準拠したマークアップです。&lt;/p&gt;
&lt;h2 id="使いはじめる"&gt;使いはじめる&lt;/h2&gt;
&lt;p&gt;PyPIからインストールします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、MCPクライアントの設定に追加します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;サーバーは初回起動時にTEI仕様をダウンロードし、MCP互換のクライアントならどれとでも動きます。&lt;/p&gt;
&lt;p&gt;ソースコードと完全なドキュメント：
&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/ja/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon大規模teiコーパスのための並列xslt処理"&gt;Multi-Saxon：大規模TEIコーパスのための並列XSLT処理&lt;/h2&gt;
&lt;p&gt;Multi-Saxonは、LXML（広く使われているPythonのXMLライブラリ）では扱えないXSLT 2.0および3.0の変換を並列に実行できるようにし、XML処理ツールの重大な空白を埋めます。XML TEI文書の大規模なコレクションに的を絞って設計されており、効率のよい並列実行で処理時間を大幅に縮めます。&lt;/p&gt;
&lt;h2 id="主な機能"&gt;主な機能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高度なXSLT対応&lt;/strong&gt;：LXMLの手に余るXSLT 2.0および3.0の変換を処理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;並列処理&lt;/strong&gt;：並列化により、大規模な文書コレクションの変換時間を劇的に短縮&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEIに最適化&lt;/strong&gt;：Text Encoding Initiative（TEI）のXML文書に特化して設計&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;スケーラブルな性能&lt;/strong&gt;：数百から数千の文書からなるコーパスを効率よく処理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;クロスプラットフォーム&lt;/strong&gt;：さまざまなOSや環境で動作&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="multi-saxonが解決する問題"&gt;Multi-Saxonが解決する問題&lt;/h2&gt;
&lt;p&gt;TEIを扱うデジタル・ヒューマニティーズの研究者は、往々にして二つの壁にぶつかります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML（Pythonでよく使われるXML処理ライブラリ）はXSLT 1.0にしか対応しておらず、XSLT 2.0/3.0の高度な機能が使えない&lt;/li&gt;
&lt;li&gt;TEI文書の大規模なコーパスを一つずつ順に処理すると、途方もない時間がかかる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxonは、Saxonの高度なXSLT機能を活かしつつ処理を複数のコアに振り分けることで、この両方に対処し、大幅な性能向上を実現します。&lt;/p&gt;
&lt;h2 id="実装"&gt;実装&lt;/h2&gt;
&lt;p&gt;Multi-SaxonはPythonとJavaのSaxonプロセッサを組み合わせ、高性能な変換パイプラインを構成します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;堅牢なXSLT 2.0/3.0処理にJavaのSaxonライブラリを使用&lt;/li&gt;
&lt;li&gt;マルチプロセッシングにより、利用可能なCPUコアに変換を分散&lt;/li&gt;
&lt;li&gt;スループットを最大化するようプロセッサプールを効率よく管理&lt;/li&gt;
&lt;li&gt;TEI文書をバッチ処理するための簡潔なインターフェースを提供&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用例"&gt;使用例&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;multi_saxon&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize with your XSLT stylesheet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transform.xsl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform a single document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform an entire directory in parallel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform_directory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="デジタルヒューマニティーズへのインパクト"&gt;デジタル・ヒューマニティーズへのインパクト&lt;/h2&gt;
&lt;p&gt;大規模なTEI文書コレクションを扱うデジタル・ヒューマニティーズのプロジェクトにとって、Multi-Saxonは次のことを可能にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LXMLでは不可能な、コーパス全体にわたる複雑な変換&lt;/li&gt;
&lt;li&gt;処理時間の劇的な短縮（マルチコア環境では5〜10倍になることも珍しくありません）&lt;/li&gt;
&lt;li&gt;XSLT 2.0/3.0の高度な機能による、より洗練された分析&lt;/li&gt;
&lt;li&gt;文書コレクション全体を処理するワークフローの簡素化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ソースコードとドキュメントは
にあります。&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/ja/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/code/persnamer/</guid><description>&lt;h2 id="persnamerteiをバーチャル国際典拠ファイルにつなぐ"&gt;persNamer：TEIをバーチャル国際典拠ファイルにつなぐ&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamerは、VIAF（バーチャル国際典拠ファイル）の典拠データをTEI XML文書に取り込む作業を効率化する、専用のPythonツールです。VIAF識別子をそのまま使えるTEIマークアップに変換することで、デジタル校訂版のための構造化された人物エントリを作る手作業を大きく減らします。&lt;/p&gt;
&lt;h2 id="teiにおける典拠管理の難しさ"&gt;TEIにおける典拠管理の難しさ&lt;/h2&gt;
&lt;p&gt;デジタル校訂版では、標準化された名前や生没年を含め、歴史上の人物を正確に同定することがしばしば求められます。プロジェクト全体で典拠管理を一貫させるには、次の手順が要ります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;歴史的テキストの中の人物を同定する&lt;/li&gt;
&lt;li&gt;その人物についての典拠データを探す&lt;/li&gt;
&lt;li&gt;正しく整形されたTEIエントリを作る&lt;/li&gt;
&lt;li&gt;プロジェクト全体で参照を一貫させる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらの手順はふつう手作業で、時間がかかり、不整合も起こりがちです。&lt;/p&gt;
&lt;h2 id="persnamerの仕組み"&gt;persNamerの仕組み&lt;/h2&gt;
&lt;p&gt;persNamerは、次の手順でこのワークフローを自動化します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;VIAFデータの取得&lt;/strong&gt;：VIAF識別子を受け取ると、HTTPコンテントネゴシエーションでRDFデータを取得します&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主要情報の抽出&lt;/strong&gt;：RDFを解析し、優先名、生年月日、没年月日を取り出します&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEIマークアップの生成&lt;/strong&gt;：欠かせない二つのXMLスニペットを作ります。
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;典拠ファイルのエントリ&lt;/strong&gt;（生成した&lt;code&gt;xml:id&lt;/code&gt;、&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;birth&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;death&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt;をもつ&lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt;要素）&lt;/li&gt;
&lt;li&gt;それとは別の&lt;strong&gt;注釈タグ&lt;/strong&gt;（典拠エントリを参照する&lt;code&gt;ref&lt;/code&gt;属性をもつ&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この二つの出力があるおかげで、編集者は典拠ファイルを一元管理しながら、注釈タグをTEIテキストに手軽に挿し込めます。&lt;/p&gt;
&lt;h2 id="主な機能"&gt;主な機能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;標準化されたID生成&lt;/strong&gt;：&lt;code&gt;pers-[familyname]-[givenname initial]&lt;/code&gt;の形式で一貫したXML IDを生成（例：&lt;code&gt;pers-deteligny-c&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RDF解析&lt;/strong&gt;：&lt;code&gt;rdflib&lt;/code&gt;を使い、さまざまなRDFプロパティ（&lt;code&gt;rdfs:label&lt;/code&gt;、&lt;code&gt;schema:name&lt;/code&gt;、&lt;code&gt;viaf:mainHead&lt;/code&gt;など）から情報を抽出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コマンドラインインターフェース&lt;/strong&gt;：必須引数はVIAF番号だけという手軽さ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;詳細な出力&lt;/strong&gt;：最終的なXMLとあわせて、処理の経過を詳しく表示&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用例"&gt;使用例&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python persNamer.py &lt;span class="m"&gt;314802260&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコマンドの出力は次のとおりです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persName&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;birth&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;death&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;persName&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="デジタルヒューマニティーズでの用途"&gt;デジタル・ヒューマニティーズでの用途&lt;/h2&gt;
&lt;p&gt;persNamerがとりわけ役立つのは、次のような場面です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;典拠管理を必要とするデジタル校訂版&lt;/li&gt;
&lt;li&gt;歴史上の人物を扱うTEIエンコーディングのプロジェクト&lt;/li&gt;
&lt;li&gt;文書を典拠レコードに結びつけるリンクトデータの取り組み&lt;/li&gt;
&lt;li&gt;大規模なTEIコーパス全体での一貫性の確保&lt;/li&gt;
&lt;li&gt;デジタル・ヒューマニティーズの授業での、典拠管理という概念の指導&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="実装"&gt;実装&lt;/h2&gt;
&lt;p&gt;persNamerはPythonで書かれており、以下に依存しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTPリクエストに&lt;code&gt;requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;RDF解析に&lt;code&gt;rdflib&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;XML処理に&lt;code&gt;lxml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ソースコードとドキュメントは
にあります。&lt;/p&gt;</description></item><item><title>事前学習済み言語モデルで大量の書誌を解析する</title><link>https://clementgodbarge.com/ja/post/bibliography/</link><pubDate>Thu, 07 Jul 2022 19:04:14 +0200</pubDate><guid>https://clementgodbarge.com/ja/post/bibliography/</guid><description>&lt;p&gt;自動化は、デジタル・ヒューマニティーズのプロジェクトのコストを下げる鍵です。これまで、学術の現場で編集作業につきものの単調で骨の折れる仕事は、手一杯の研究者が高いコストをかけてこなすか、学生に「外注」するかのどちらかでした。この
で私が論じているのは、こうした報われない仕事の大半は自動化&lt;em&gt;できる&lt;/em&gt;だけでなく、自動化&lt;em&gt;すべき&lt;/em&gt;だということです。編集作業を自動化すれば、デジタル・ヒューマニティーズのプロジェクト全体のコストが下がります。なにより、低所得地域の研究者が貴重な文書を手早く、無理のない費用で公刊できるようになるのです。&lt;/p&gt;
&lt;p&gt;
では、たとえばデジタル版のXMLラベル付け作業の大半を事前学習済み言語モデルに任せられることを示しました。&lt;/p&gt;
&lt;p&gt;本稿ではもう一つの例として、参考文献を取り上げます。&lt;/p&gt;
&lt;h2 id="問題"&gt;問題&lt;/h2&gt;
&lt;p&gt;学術論文に引かれた文献から書誌データベースを作るのは、それ自体は難しくありません。
のような目録でさっと検索して特定の形式で書誌をダウンロードするか、手元のデータベースから自動で取り込めばよい。論文が1本か2本なら、これで事足ります。
ところが文献の数がある一線を越えると、この作業はたちまち味気なく、時間ばかり食うものになります。そこで
のような解析アルゴリズムの出番となるわけですが、こうしたアルゴリズムは規模を広げるのが難しいことがあります。
私たちの
に収められた150本以上の学術エッセイをanystyleで変換したときには、積み上がった誤りの量はとても手に負えるものではありませんでした。多くの出典を正しく認識できず、近世の書物の長ったらしい標題を別のものと取り違え、特定のウェブページやオンライン動画といった型破りな文書には歯が立たなかったのです。パーサーがうまく働くのは、著者がシカゴ、トゥラビアン、MLAといった広く知られた規約を忠実に守っている限りのことで、規範から少しでも外れれば誤りになります。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;ここで
&lt;mark&gt;事前学習済み言語モデル&lt;/mark&gt;
の出番です。
&lt;mark&gt;どんな書誌スタイルのパターンでも――自分で考案したスタイルでさえ――たちどころに飲み込み&lt;/mark&gt;
、わずかな例だけで、整形済みの大量の参考文献を
にきちんと変換してくれるからです。&lt;/p&gt;
&lt;p&gt;2021年の初め、私は幸運にもOpenAIの
を早期に使う機会に恵まれました。Codexは、自然言語をコードに、またその逆に翻訳するモデルです。OpenAIによれば十数のプログラミング言語に通じており、この記事を書いている時点ではAPIはまだベータ版ですが、すでにGitHubの
のような人気アプリケーションを動かしています。&lt;/p&gt;
&lt;p&gt;このAPIをあれこれ試すうちに、&lt;code&gt;BibTeX&lt;/code&gt;のようなもっと単純なコードにもよく効くことに気づきました。&lt;/p&gt;
&lt;p&gt;実際、安定して動かすのに必要だったのは、入力プロンプトの例が4つだけでした。&lt;/p&gt;
&lt;h3 id="入力プロンプト"&gt;入力プロンプト&lt;/h3&gt;
&lt;p&gt;References:
Bayle, Ariane. “Patients exemplaires: la correspondance médicale de Fioravanti.” In &lt;em&gt;Vulgariser la médecine. Du style médical en France et en Italie&lt;/em&gt;, edited by Andrea Carlino and Michel Jeanneret, 181–212. Geneva: Droz, 2009.&lt;/p&gt;
&lt;p&gt;Berns, Andrew D. &lt;em&gt;The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth&lt;/em&gt;. Cambridge: Cambridge University Press, 2015.&lt;/p&gt;
&lt;p&gt;Gabler, Hans Walter. “Theorizing the Digital Scholarly Edition.” &lt;em&gt;Literature Compass&lt;/em&gt; 7, no. 2 (2010): 43–56.
.&lt;/p&gt;
&lt;p&gt;Findlen, Paula. &lt;em&gt;Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy&lt;/em&gt;. Berkeley: University of California Press, 1994.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@incollection&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;bayle2009&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bayle, Ariane}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Vulgariser la médecine. Du style médical en France et en Italie}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Patients exemplaires: la correspondance médicale de Fioravanti}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Carlino, Andrea and Michel Jeanneret}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2009}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Geneva}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Droz}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{french}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;berns2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berns, Andrew D.}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge University Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2015}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@article&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;gabler2010&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Gabler, Hans Walter}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Theorizing the Digital Scholarly Edition}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;journal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Literature Compass}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{7}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{43-56}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;doi&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{10.1111/j.1741-4113.2009.00675.x}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2010}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;findlen1994&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Findlen, Paula}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berkeley}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{University of California Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1994}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="結果"&gt;結果&lt;/h3&gt;
&lt;p&gt;
&lt;mark&gt;は目覚ましく、2,000件を超える書誌参照がほんの数日で変換されました。&lt;/mark&gt;
入力プロンプトで示したパターンを正確に再現しただけでなく、プロンプトにはなかったエントリ型やフィールド型まで正しく補ってきたのです。つまり&lt;code&gt;GPT-3&lt;/code&gt;は&lt;code&gt;BibTeX&lt;/code&gt;を完璧に使いこなせる、ということです。もっと意外だったのは、実質的に英語で訓練されたモデルでありながら、すべての言語（ロシア語、フランス語、イタリア語、ラテン語、ギリシャ語、ドイツ語、スペイン語など）を見分け、毎回正しい&lt;code&gt;langid&lt;/code&gt;フィールドを付けてきたことでしょう。&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;GPT-3には現在、入出力のサイズに制限があり、処理できる言語トークンは最大2048です。この制限が外れれば、同じ作業はおそらく1時間以内で済むでしょう。&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;いささか予想外なことに、GPT-3は元の参照にない情報まで付け加えてきました。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Baillot, Anne, and Anna Busch. “Editing for Man and Machine.” In &lt;em&gt;Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting&lt;/em&gt;, Vol. 13. Variants (Journal of the European Society for Textual Scholarship). Leicester, 2015.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;たとえばこの書誌では、GPT-3は論文を読めるオープンアクセスリポジトリ（
）への永続リンクを、HAL独自のフィールド&lt;code&gt;HAL_ID&lt;/code&gt;と&lt;code&gt;HAL_VERSION&lt;/code&gt;まで含めて追加しています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@inproceedings&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;baillot2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Editing for Man and Machine}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Baillot, Anne and Busch, Anna}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Leicester}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;series&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Variants (Journal of the European Society for Textual Scholarship)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bruhn, Siglinde and Schreiber, Manfred}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{halshs-01233380}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{v1}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こうした補足が示しているのは、
&lt;mark&gt;GPT-3が書誌を解析するだけでなく、当初学習した内容をもとにそれを補完している&lt;/mark&gt;
ということです。その点で、GPT-3の訓練より後の日付の文献に対しても同じように振る舞うのかどうかは、確かめてみたいところです……&lt;/p&gt;
&lt;h2 id="限界"&gt;限界&lt;/h2&gt;
&lt;p&gt;とはいえ、GPT-3は完璧ではありません。人間が目を光らせている必要があります。よく知られた弱点の一つが
で、ときに事実をでっち上げ、ありそうもない仮定を置くのです。&lt;/p&gt;
&lt;p&gt;私の実験でGPT-3の支離滅裂さが露わになったのは、ある著者の姓を「Ruscelli」から「Ruscello」へ勝手に変えたときでした。近世イタリアの姓は複数形と単数形が区別なく使われましたから、厳密には誤りとは言えません。しかし今日の慣例では、姓が複数形であれ単数形であれ、そのまま残すのが筋です。今どきMachiavelliをMachiavelloと呼ぶ人はいませんし、同じ理屈でRosselliではなくRosselloと書くのが決まりです。GPT-3がこの慣例を無視したのは、年代の感覚が欠けているからでしょうか。それとも、参考文献のこの箇所ではたまたま隣り合う姓がすべて単数形だった（Bariletto、Cesano、Rossello）ので、それに引きずられて推測したのでしょうか。
誰にもわかりません。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Bibtex" data-lang="Bibtex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;rossello1565&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Della summa de’ secreti universali}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Rossello, Timoteo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Venice}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Giovanni Bariletto}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1565}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;ruscello1559&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{La seconda parte de’ secreti del Reverendo Donno Alessio Piemontese}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Ruscello, Girolamo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Pesaro}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bartolomeo Cesano}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1559}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="結論"&gt;結論&lt;/h2&gt;
&lt;p&gt;4年にわたる緊密な協働のなかで書かれ、
150本以上のエッセイは、私たちが校訂・翻訳した写本について欠かせない情報を提供するだけでなく、貴重な書誌情報も含んでいます。&lt;/p&gt;
&lt;p&gt;これらの書誌をデータベースにまとめておけば、編集者は書式を瞬時に切り替えられ、思いどおりの形で表示できる自由度が増します。データベースはまた、校訂版とそれを生んだプロジェクトについての貴重な情報源にもなり、研究者に新しい分析の視点を開きます。そしてこうしたデータベースは、高い精度で、しかも記録的な短期間で完成させられるのです。&lt;/p&gt;
&lt;p&gt;たしかに、とりわけGPT-3のハルシネーション癖のせいで、いくらかの誤りが紛れ込むことはあるでしょう。しかし事前学習済み言語モデルの次の世代は、この問題を和らげてくれるはずです。&lt;/p&gt;</description></item><item><title>Avviso | 私たちを近代にしたニュースを公刊する（1537—1743年）</title><link>https://clementgodbarge.com/ja/project/map/</link><pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/project/map/</guid><description>&lt;p&gt;&lt;em&gt;Avviso&lt;/em&gt;プロジェクトの主眼は、メディチ家のコレクションの一部をなし、現在はフィレンツェ国立文書館に所蔵されている、&lt;em&gt;avvisi&lt;/em&gt;と呼ばれる35,000点の近世の手書きニュースレターを、デジタル化し、保存し、目録化し、校訂し、文脈のなかに位置づけ、広く公開することにあります。
約35,000点の&lt;em&gt;avvisi&lt;/em&gt;――近世の手書きニュースレター――の目録化、デジタル化、公開を、Medici Archive ProjectのMedici Interactive Archiveプラットフォームを通じて行います。&lt;/p&gt;</description></item><item><title>効率的な校訂</title><link>https://clementgodbarge.com/ja/project/dce/</link><pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/project/dce/</guid><description>&lt;p&gt;デジタル校訂版は重荷です。高度に専門的な人員が担う転写、翻訳、注釈の労働は何千時間分にもなり、長期の制度的支援に加えて相当な資金を必要とします。&lt;/p&gt;
&lt;p&gt;デジタル・ヒューマニティーズの花形プロジェクトが運営に必要な巨額の資金を集められるのは、ある意味ではありがたいことです。&lt;/p&gt;
&lt;p&gt;とはいえ、裕福な財団や大学、政府機関の気前のよさに寄りかかり、大量の人手を長期にわたって必要とし続けるやり方は、将来に通用する経済モデルとは言えません。一次史料の野心的なデジタル版を作れる研究者が増えているにしても、この営みは依然として少数の富裕国の特権にとどまり、その文化的覇権をいっそう強めています。&lt;/p&gt;
&lt;p&gt;世界中の歴史的文書をより広い公衆に開くためには、
&lt;mark&gt;デジタル校訂版のコストは桁違いに下がらなければなりません&lt;/mark&gt;
。&lt;/p&gt;
&lt;p&gt;この一連のブログ記事では、世界中の研究者が一次史料をより速く、最小限の費用で公刊するために使える、さまざまなアプローチと技術的な部品を検証します。&lt;/p&gt;
&lt;p&gt;とりわけ、機械学習、ブロックチェーン、分散型ストレージといった技術を取り上げます。&lt;/p&gt;</description></item><item><title>デジタル校訂版のマークアップを自動化する</title><link>https://clementgodbarge.com/ja/post/gpt3/</link><pubDate>Mon, 22 Nov 2021 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/gpt3/</guid><description>&lt;h1 id="はじめに"&gt;はじめに&lt;/h1&gt;
&lt;p&gt;予算を食いつぶさずにデジタル校訂版をつくるには、どうすればよいのでしょうか。効率的な校訂をめぐるシリーズの第1回となる本稿では、意味的マークアップをはじめとする校訂作業の自動化に、事前学習済み言語モデルがどこまで役立つかを検討します。&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;目次&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#愛は金勘定をしない"&gt;愛は金勘定をしない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#高い敷居"&gt;高い敷居&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#transformer自動化への最短経路か"&gt;Transformer――自動化への最短経路か？&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#codex"&gt;Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#openaiの外へ"&gt;OpenAIの外へ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#実験1テキストの分類"&gt;実験1――テキストの分類&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#プロンプト設計"&gt;プロンプト設計&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#テスト"&gt;テスト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#結果"&gt;結果&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#実験2意味的マークアップ"&gt;実験2――意味的マークアップ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#プロンプト設計-1"&gt;プロンプト設計&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#テスト-1"&gt;テスト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h1 id="問題"&gt;問題&lt;/h1&gt;
&lt;h2 id="愛は金勘定をしない"&gt;愛は金勘定をしない&lt;/h2&gt;
&lt;p&gt;愛にかかわることでは費用を数えない――古い諺はそう言います。デジタル校訂版ほど、これがよく当てはまるものもありません。転写、翻訳、注釈にかかる作業は何千時間にも及び、
の場合には、高度な専門性をもつ何百人もの協力者がそれを担ってきました。&lt;/p&gt;
&lt;p&gt;デジタル・ヒューマニティーズの花形プロジェクトが運営に必要な巨額の資金を集められるのは、ある意味ではありがたいことです。とはいえ、裕福な財団や大学、政府機関の気前のよさに寄りかかり、大量の人手を長期にわたって必要とし続けるやり方は、将来に通用する経済モデルとは言えません。&lt;/p&gt;
&lt;p&gt;実際、世界中の研究者に歴史的文書をより広い公衆へ開いてもらいたいのなら、
&lt;mark&gt;デジタル校訂版のコストは桁違いに下がらなければならない&lt;/mark&gt;
のです。&lt;/p&gt;
&lt;h2 id="高い敷居"&gt;高い敷居&lt;/h2&gt;
&lt;p&gt;いささか逆説的ですが、
&lt;mark&gt;解決の糸口は、
のような労働集約的なプロジェクトの側にあるのかもしれません。というのも、それらは貴重な訓練データになる&lt;/mark&gt;
からです。マークアップをはじめ、デジタル校訂につきものの最も味気なく反復的な作業を自動化するための、またとない教材というわけです。&lt;/p&gt;
&lt;p&gt;マークアップが取るに足らない作業だ、と言いたいのではありません。それどころか、
&lt;mark&gt;マークアップは今や、本格的なデジタル学術プロジェクトに欠かせない構成要素です。&lt;/mark&gt;
によって標準化されたマークアップのおかげで、文書とそれが伝えるテキストについて、構造、欄外の書き込み、抹消、異文、紙の種類、染み、書体……と、思いつく限りの側面を記録できるようになりました。&lt;/p&gt;
&lt;p&gt;次に挙げるのは
からの一例で、マークアップがテキストに情報（カテゴリー、構造、意味領域、抹消など）を上乗せし、ひいてはデジタル版に紙の先祖にはない強みを与えている様子がわかります。&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt; プレーンテキスト &lt;/th&gt;
&lt;th&gt; XMLマークアップ&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pour rompre grenades et donner
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux artifices de foeu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mects parmy la pouldre et la sixiesme
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;partye dicelle de vif argent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p008r_2&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;categories=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arms and armor&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;Pour rompre &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;grenades&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; et donner&lt;span class="nt"&gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;artifices de foeu&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ab&amp;gt;&lt;/span&gt;Mects parmy la &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;pouldre&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&amp;lt;ms&amp;gt;&lt;/span&gt;six fois autant&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt; de
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/del&amp;gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&lt;/span&gt;et&lt;span class="nt"&gt;&amp;lt;/del&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;ms&amp;gt;&lt;/span&gt;la sixiesme partye&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dicelle de &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/ab&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;この情報はアーカイブとしての価値にとどまらず、以前に別の場所で示したとおり、総合や分析にも役立ちます。ただし、この種の注釈は途方もなく時間を食います。同じテキストを翻訳、転写、現代語化といった複数の姿で用意しなければならないことが多いからです。&lt;/p&gt;
&lt;h1 id="解決策"&gt;解決策&lt;/h1&gt;
&lt;h2 id="transformer自動化への最短経路か"&gt;Transformer――自動化への最短経路か？&lt;/h2&gt;
&lt;p&gt;2020年、
は汎用の大規模言語モデルの最新ファミリー、GPT-3を鳴り物入りで発表しました。「Generative Pre-trained Transformer 3」の略です。Transformerは人工知能の分野ではまだ新しい突破口で、プロンプトを読み、ごく少数の例を眺めるだけで、目を見張る速さで新しいタスクを覚えます。目的に合わせたデータセットで追加訓練（ファインチューニング）を施し、応答速度と精度を上げることもできます。GPT-3とその同類が
と呼ばれるゆえんです。&lt;/p&gt;
&lt;p&gt;OpenAIによれば、GPT-3は空前の1750億パラメータを備え、570GBを超えるテキストで訓練されています。その大半は英語の文書で、おそらく
から集められたものでしょう。この途方もない規模ゆえに、GPT-3はこの分野の新たな基準となり、追加の訓練なしに、そら恐ろしいほどの真実味でさまざまな仕事をこなします。もっともらしい
を書き、チャットルームで
、
、
、文書を翻訳し、専門用語を解説する、といった具合です。&lt;/p&gt;
&lt;p&gt;2021年5月からOpenAIのAPIを早期に使えたおかげで、私は難問とされる仕事の数々でこのモデルを試すことができました。フランス語の詩や新ラテン語のテキストの英訳、類推の説明、さらにはカントの『人倫の形而上学の基礎づけ』第4巻を7歳児向けに噛み砕くこと（説得力はいまひとつでしたが）まで。&lt;/p&gt;
&lt;h3 id="codex"&gt;Codex&lt;/h3&gt;
&lt;p&gt;GPT-3の最近の展開のひとつは、コンピュータ言語に的を絞ったものです。&lt;em&gt;Codex&lt;/em&gt;と名付けられたこのモデルは、自然言語をコンピュータ言語に、またその逆へと翻訳します。たとえば「大文字で始まる単語だけを探す」正規表現が欲しいと言えば、GPT-3はすぐさま動く正規表現に訳してくれます：&lt;code&gt;[A-Z]+\w+&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;OpenAIによれば、&lt;em&gt;Codex&lt;/em&gt;はPython、JavaScript、Go、Perl、PHP、Ruby、Swiftなど十数のコンピュータ言語を扱えます。擬似コードをそのままコードに変換してくれるので、使う側は言語の煩わしい構文ではなく、問題を解くための論理の手順と戦略に集中できるのです。&lt;/p&gt;
&lt;h3 id="openaiの外へ"&gt;OpenAIの外へ&lt;/h3&gt;
&lt;p&gt;言うまでもなく、この分野の役者はOpenAIだけではありません。先に触れたとおり、北京智源人工知能研究院は2021年、さらに大きく高性能な&lt;em&gt;Wu Dao 2&lt;/em&gt;を発表しました。NvidiaとMicrosoftは手を組み、その名も&lt;em&gt;Megatron-Turing NLG 530B&lt;/em&gt;というモデルを世に出しました。
や
といった小さめのスタートアップも一般向けにAPIを提供していますし、
のようなオープンソースの取り組みも見逃せません。もっともAIの世界の動きは速く、新しい動向を追うには
を覗くのが一番です。&lt;/p&gt;
&lt;h1 id="実験"&gt;実験&lt;/h1&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;この実験のねらいは、校訂作業を信頼できるかたちで自動化するための、いちばん安上がりな道を見つけることです。ここで扱う作業の一部は教師あり学習でも自動化できる、という反論もあるでしょう。その仮説は別の記事で検討します。&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;GPT-3のようなTransformerは、たとえば16世紀の技術・科学写本に注釈を付けることを学べるのでしょうか。&lt;/p&gt;
&lt;h2 id="実験1テキストの分類"&gt;実験1――テキストの分類&lt;/h2&gt;
&lt;p&gt;まずは比較的やさしいところから。「few-shot learner」たるGPT-3なら、Ms Fr 640の各項目を私たちの編集チームがどう分類してきたかを、すぐに飲み込めるはずです。&lt;/p&gt;
&lt;h3 id="プロンプト設計"&gt;プロンプト設計&lt;/h3&gt;
&lt;p&gt;訓練には最小限のプロンプトを使い、例としてプレーンテキストの短い項目を4つ選びました。「医学」「武器と甲冑」「絵画」に関するものが含まれています。&lt;/p&gt;
&lt;h3 id="テスト"&gt;テスト&lt;/h3&gt;
&lt;p&gt;次に、最初の例には入っていなかった別の一節を貼り付けました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Working neatly
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Never put down, if you can, two colors one on top of the other.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;But next, having made your design carefully, keep the place of shadows for them alone,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;amp; also separately that of lights &amp;amp; highlights, without layering one color all over &amp;amp; then highlighting or else shading on it.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;And in this way, you further your work, economize your colors &amp;amp; work neatly.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Which is the reason that, the colors not being muddled nor mixed together, they do not die &amp;amp; you soften the colors better, since they are not so thick.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;出力は内容とぴたりと一致しています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;painting&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GPT-3の訓練に選んだ最初のテキスト群にすら含まれていなかったカテゴリーの項目で試してみると、驚くべき結果が返ってきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;jewelry&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="結果"&gt;結果&lt;/h3&gt;
&lt;p&gt;「jewelry（宝飾）」というカテゴリーは、私たちのMs. Fr. 640校訂版には存在しません。編集チームはもっと広い「Stones（石）」というカテゴリーを
。それでもGPT-3の勘は悪くなく、もう少し訓練すればMs. Fr. 640のどの項目でも、ひいては同種の16世紀技術文書の項目でも分類できるようになりそうだ、ということを示しています。&lt;/p&gt;
&lt;h2 id="実験2意味的マークアップ"&gt;実験2――意味的マークアップ&lt;/h2&gt;
&lt;p&gt;ハードルをもう少し上げましょう。GPT-3のようなTransformerが編集上の基準に従ってテキストを分類できるのなら、テキストのマークアップの一部を見分けることもできるのでしょうか。&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;em&gt;Secrets of Craft and Nature&lt;/em&gt;は、意味的ラベルと構造的ラベルを
います。あいにくGPT-3は、
などのプロジェクトと違って画像を処理できません。文書の構造的・物質的な側面の大半を認識するにはこの能力が要りますから、将来のGPTには備わることになるでしょう。ここではそうしたタグは脇に置き、画像認識を必要としないマークアップに絞ります。&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="プロンプト設計-1"&gt;プロンプト設計&lt;/h3&gt;
&lt;p&gt;意味的タグは、動物、植物、地名、感覚的な入力などへの言及を扱います。訓練用プロンプトには、校訂版からいくつか例を選びました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Input prompt--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The following is a list of words and their corresponding semantic tags
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannons: &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannons&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flasks: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;flasks&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wooden: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wooden&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iron: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;iron&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parchment: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;parchment&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;goats: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;goats&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lambs: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;lambs&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;leather: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;leather&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fine fatty earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;fine fatty earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Venice: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Venice&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Flemish: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Flemish&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond: &lt;span class="nt"&gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnuts skin: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnuts&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; skin&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;molten lead: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;molten lead&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;today: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;today&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;In the past: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;In the past&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Clockmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Clockmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;red copper: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;red copper&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;crucible: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;crucible&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bellows: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;bellows&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;charcoal: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;charcoal&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;founders: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;founders&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="テスト-1"&gt;テスト&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Davinci-codex&lt;/code&gt;モデルで、&lt;em&gt;Apothecary&lt;/em&gt;、&lt;em&gt;smoke&lt;/em&gt;、&lt;em&gt;glassmakers&lt;/em&gt;、&lt;em&gt;latten&lt;/em&gt;、&lt;em&gt;snake&lt;/em&gt;といった易しい単語を試してみましょう。結果は即座に返ってきて、非の打ちどころがありません。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Apothecary: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Apothecary&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smoke: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;smoke&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;glassmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;glassmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;latten: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;latten&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;snake: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;snake&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もう一段難しいのは、&lt;em&gt;copper plates&lt;/em&gt;、&lt;em&gt;walnut oil&lt;/em&gt;、&lt;em&gt;wood block&lt;/em&gt;のような複合語です。ここでは、GPT-3が入れ子のタグをきちんと扱えるかどうかを見ます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;copper plates: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;copper plates&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnut oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnut&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wood block: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wood block&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果は玉石混淆でした。&lt;code&gt;Davinci-codex&lt;/code&gt;が正しくラベル付けできたのは&lt;em&gt;walnut oil&lt;/em&gt;だけで、&lt;em&gt;copper plates&lt;/em&gt;と&lt;em&gt;wood block&lt;/em&gt;に含まれる&lt;code&gt;tl&lt;/code&gt;と&lt;code&gt;m&lt;/code&gt;の入れ子タグは見逃しています。もっとも、次のテストが示すように、この種の誤りは訓練プロンプトを改善すれば減らせます。入れ子タグの例を5つ足したところ、&lt;code&gt;Davinci-codex&lt;/code&gt;は（&lt;em&gt;oil paintbrushes&lt;/em&gt;の）1件を除いて、ほぼ完璧な結果を返しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannon powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannon&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;arquebus powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;arquebus&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oil paintbrushes: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;oil&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; paintbrushes&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sheep footbones: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;sheep&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; footbones&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bronze mortar: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&amp;lt;m&amp;gt;&lt;/span&gt;bronze&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt; mortar&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="結論"&gt;結論&lt;/h1&gt;
&lt;p&gt;忘れてならないのは、これらのテストがごく短いテキスト断片で行われたことです。例とプロンプトにもっと文脈を与えれば、GPT-3系のモデルはさらによい結果を出すだろうと私は見ています。加えて、目的に合わせたデータセットでファインチューニングすれば、ラベル付けの精度はまず間違いなく上がるでしょう。
事前学習済み言語モデルの信頼性を実証するには、もっと大規模な実験が必要でしょう。それでも、
&lt;mark&gt;このアプローチを使えば、編集者は注釈作業のいくつかをわずか数ステップで自動化でき、膨大な時間と費用を節約できる可能性がある&lt;/mark&gt;
――そう結論づけることはできます。&lt;/p&gt;</description></item><item><title>写本の可視化2（アップデート）</title><link>https://clementgodbarge.com/ja/post/treemap2/</link><pubDate>Sat, 20 Nov 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/treemap2/</guid><description>&lt;p&gt;お約束どおり、
で紹介したインタラクティブ・ツリーマップの新バージョンです。今回は表示モードが二つあります。&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;快適に閲覧するには、ページの設定をライトモードにしてください（右上の月のアイコンをクリック）。&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet"
/&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="stacked"&gt;
&lt;div class="switch"&gt;
&lt;input
type="checkbox"
name="group-by-category-switch"
id="group-by-category-switch"
checked
/&gt;
&lt;label for="group-by-category-switch"&gt; Group folios by category &lt;/label&gt;
&lt;/div&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>アーカイブのビジュアルブラウザ</title><link>https://clementgodbarge.com/ja/post/treemap/</link><pubDate>Sun, 20 Jun 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/treemap/</guid><description>&lt;h1 id="問題"&gt;問題&lt;/h1&gt;
&lt;p&gt;デジタル版はある逆説を抱えています。難解な文書をより広い公衆に開く一方で、非物質化に伴って感覚的な手がかりが失われ、読者は方向を見失い、中身に取り組む気力さえ削がれてしまいがちなのです。膨大な文書リポジトリを渉猟するのは、それだけで煩わしく、気後れのする作業になります。これはアーカイブ調査に不慣れな利用者だけでなく、認知障害のある読者にも当てはまります。&lt;/p&gt;
&lt;h1 id="解決策"&gt;解決策&lt;/h1&gt;
&lt;p&gt;ここで役に立つのがアーカイブのメタデータです。こうしたデータがあれば、読者にもう一つの感覚的な手がかりを与えるインタラクティブな視覚的抽象を作ることができ、使い勝手とアクセシビリティの両方が高まります。アーカイブを目で辿れるようにするには、ツリーマップでも、階層データを手際よく分解してくれる図なら何でも用は足ります。&lt;/p&gt;
&lt;h1 id="実験"&gt;実験&lt;/h1&gt;
&lt;p&gt;最初の実験では、&lt;code&gt;D3.js&lt;/code&gt;用の
を改変し、ハイパーリンクを加えました。写本BnF Ms Fr 640とそのフォリオ、各フォリオ内の項目を表しています。色は支配的なカテゴリーを示します。各項目にカーソルを重ねると、写本へのハイパーリンクを含むさらなる情報が表示されます。
こうしてツリーマップはインタラクティブな視覚的索引となり、写本の内容だけでなく、各フォリオと各項目の大きさまで、素早く軽快に一望させてくれます。
&lt;del&gt;今後数か月は、別の図や別の階層を試しながら、このアイデアの実験を続けていきます……ご期待ください！&lt;/del&gt; ツリーマップの新バージョンは
。&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;快適に閲覧するには、ページの設定をライトモードにしてください（右上の月のアイコンをクリック）。&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet" /&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;Click any cell to zoom in, or the top to zoom out.&lt;/p&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>一目でわかるアーカイブ</title><link>https://clementgodbarge.com/ja/post/dashboard/</link><pubDate>Mon, 24 May 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/dashboard/</guid><description>&lt;h1 id="問題"&gt;問題&lt;/h1&gt;
&lt;p&gt;歴史的なアーカイブというものは、気が遠くなるほど雑然としていることがあります。
の&lt;em&gt;Mediceo del Principato&lt;/em&gt;はその典型です。目録が整っているのはごく一部にすぎず、多くの文書はこれといった理由もなく6,500巻以上に散らばっています。話をさらにややこしくするのが、閲覧できる巻数（現地では&lt;em&gt;filze&lt;/em&gt;、つまり綴りと呼びます）の制限です。平時なら上限は1日4&lt;em&gt;filze&lt;/em&gt;。ところがパンデミックの時期には、2週間に4冊にまで減りました。詳しい目録がない以上、この途方もない規模のアーカイブを前にした研究者は、目当ての文書に手早くたどり着くための戦略を練らざるをえません。&lt;/p&gt;
&lt;h1 id="解決策"&gt;解決策&lt;/h1&gt;
&lt;p&gt;運に任せる人もいれば、年代、受取人、差出人、文書群の由来、言語などを手がかりに、根拠のある当たりをつける人もいるでしょう。しかし、こうした変数を同時に&lt;em&gt;眺めて&lt;/em&gt;みると、アーカイブの構造について思いがけないパターンが浮かび上がり、当たりの精度が上がることがあります。私の経験では、研究者がふつうスプレッドシートに書き溜めているメタデータをグラフにするだけで、文書館での状況把握は格段に楽になるのです。&lt;/p&gt;
&lt;h1 id="実験"&gt;実験&lt;/h1&gt;
&lt;p&gt;私が今取り組んでいるのは、16世紀のあるスパイの書簡です。その手紙は数百の&lt;em&gt;filze&lt;/em&gt;に散らばり、別々の名義で、別々の――ときに思いがけない――宛先へ、別々の場所から書かれています。目当ての手紙が眠っていそうな&lt;em&gt;filze&lt;/em&gt;を絞り込むために、私はダッシュボード、つまりインタラクティブなデータ可視化のウェブアプリケーション（
）を組みました。地理や年代の情報をはじめあらゆる種類のデータを、文書群の階層図（
）と結びつけたものです。ダッシュボードを見れば、何がすでに見つかっていて、それが全体のどれほどにあたり、新しい手紙をどこで探せばよさそうかが一目でわかります。しかも特定の変数をクリックすれば、すべての図が更新され、それに応じた相関が表示されます。&lt;/p&gt;
&lt;h1 id="次の一手"&gt;次の一手&lt;/h1&gt;
&lt;p&gt;もっと大事なのは、おそらく、このダッシュボードが視覚的な索引に転用できることでしょう。書簡の校訂版がオンラインで公開されたあかつきには、ダッシュボードはもう一つの入口となり、読者はそこからデータを渉猟できるようになります。守秘上の理由から、いまは一部を伏せたスクリーンショットしかお見せできませんが、完全版は来年公開する予定です。それまでのつなぎとして、プロトタイプも近く公開します。どうぞお楽しみに。&lt;/p&gt;</description></item><item><title>Making &amp; Knowing Project</title><link>https://clementgodbarge.com/ja/project/mk/</link><pubDate>Sun, 27 Dec 2020 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/project/mk/</guid><description>&lt;p&gt;
は、2014年にPamela H. Smithが創設し、数百人の協力者を擁する研究・教育プロジェクトで、コロンビア大学の
を拠点としています。&lt;/p&gt;
&lt;p&gt;私はポストドクトラル・フェローとしてこのプロジェクトに加わり、とりわけBnF Ms. Fr. 640の
に携わりました。この比類ない16世紀フランス語写本は、芸術家がすなわち科学者でもあった時代のものづくりと素材について、生の声を伝えてくれます。&lt;/p&gt;
&lt;p&gt;デジタル版は
で豊富なデータを自由に使えるようにしています。来年にかけて、この校訂版とそのデータをめぐる一連のブログ記事を公開する予定です。PythonやRでテキストをいかに簡単にダウンロードし、分析できるかをお見せしましょう。どうぞお楽しみに。&lt;/p&gt;</description></item><item><title>BnF Ms. Fr. 640の意味的マークアップを可視化する</title><link>https://clementgodbarge.com/ja/post/visualization/</link><pubDate>Sun, 20 Dec 2020 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/post/visualization/</guid><description>&lt;h1 id="概要"&gt;概要&lt;/h1&gt;
&lt;p&gt;データの豊かな校訂版には、あらゆる研究目的のために抽出し、分析し、可視化できる貴重な編集上の注釈が詰まっています。2020年に公開された
もその一つで、メタデータファイルをGitHubリポジトリからダウンロードできるようにしています。本稿では、これらの変数をすべて相関行列にまとめ、いくつかの方法で可視化する手順を示します。&lt;/p&gt;
&lt;h1 id="データ"&gt;データ&lt;/h1&gt;
&lt;p&gt;Making and Knowing Projectは、写本の内容に関する最新情報をまとめたスプレッドシート&lt;code&gt;entry_metadata.csv&lt;/code&gt;を生成しています。ファイルはMaking &amp;amp; Knowingの
から取得できます。あるいは、Matthew Kumarによる優れた
――BnF Ms. Fr. 640のPython版――を使えば、マークアップをさらに加えた独自の.csvファイルを作ることもできます。&lt;/p&gt;
&lt;h2 id="pythonの準備"&gt;Pythonの準備&lt;/h2&gt;
&lt;p&gt;データの整形にはPandas、ヒートマップにはMatplotlibとseaborn、そして最後に、相関に基づくネットワークを描くためにNetworkXを使います。
この種の変数にはピアソン法は避け、代わりに𝜙𝐾法を使います。この相関手法と、対応するライブラリ&lt;code&gt;PhiK&lt;/code&gt;については、あらかじめ
しておいてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#install packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;phik&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# import modules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;networkx&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;nx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="データの準備"&gt;データの準備&lt;/h2&gt;
&lt;p&gt;まず、
のmetadataフォルダから、校訂版の最新のメタデータファイルをダウンロードします。
使うのは必要な列だけです。このデモでは英訳&lt;code&gt;tl&lt;/code&gt;の意味的タグをすべて選びますが、フランス語転写&lt;code&gt;tc&lt;/code&gt;や正規化版&lt;code&gt;tcn&lt;/code&gt;のタグを選んでもかまいません。
データはセミコロン区切りになっているので、Pythonに数えてもらう必要があります。そこで正規表現&lt;code&gt;[^;\s][^\;]*[^;\s]*&lt;/code&gt;を使い、stack-unstackの手法で数えます。
行列を読みやすくするために、各列の名前を付け替えます。急ぎならこの手順は飛ばしてもかまいませんが、この段階でデータフレームが&lt;code&gt;tagsrn&lt;/code&gt;という名前になっていることだけは覚えておいてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# load the edition&amp;#39;s metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;entry_metadata.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# select the tags you want to correlate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dftags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# count comma separated values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagcount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dftags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dropna&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[^;\s][^\;]*[^;\s]*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unstack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# rename columns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagsrn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagcount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;animals&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;body parts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;currency&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;definitions&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;environment&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;material&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;medical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;measurement&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;music&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;plant&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;toponym&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;person&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;profession&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sensory&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tool&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;temporal&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;weapons&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;German&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Greek&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Occitan&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Poitevin&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="相関"&gt;相関&lt;/h1&gt;
&lt;p&gt;データフレームが整ったら、各変数間の相関係数を計算します。この段階で大事なのは、自分のデータを理解し、もっとも適した相関手法を選ぶことです。&lt;code&gt;pandas-profiling&lt;/code&gt;パッケージが、この作業には特に役立ちます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# calculate correlation coefficient with the phi k method&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cortag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagsrn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;phik_matrix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;cortag&lt;/code&gt;が相関行列です。ここからいろいろな可視化を試せます。&lt;/p&gt;
&lt;h1 id="可視化"&gt;可視化&lt;/h1&gt;
&lt;p&gt;まず試せるのは、&lt;code&gt;seaborn&lt;/code&gt;の
を使い、色で符号化した行列として描くことです。&lt;/p&gt;
&lt;h3 id="相関ヒートマップ"&gt;相関ヒートマップ&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="BnF Ms. Fr. 640の相関ヒートマップ"
srcset="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp 320w, https://clementgodbarge.com/post/visualization/heatmap_hu_eca41311a0e0ac17.webp 480w, https://clementgodbarge.com/post/visualization/heatmap_hu_1650defb643c0285.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp"
width="760"
height="665"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;テキストをよく知っている人なら、このヒートマップが実に理にかなっていることがすぐにわかるでしょう。たとえば人名はラテン語と強く相関しています。とりわけ16世紀の人文主義者のあいだでは、名前をラテン語化するのが習わしだったからです。&lt;/p&gt;
&lt;p&gt;このヒートマップは当たり前のことを言っているだけだ、という人もいるかもしれません。あながち間違いではなく、一見したところ医学タグはその好例に見えます。予想どおり、身体部位、計量、植物と相関しているからです。&lt;/p&gt;
&lt;p&gt;しかしヒートマップを一行ずつ丹念に読んでいくと、興味深く、思いがけない相関が見つかります。たとえば医学タグがイタリア語やラテン語の語と相関していることは、Ms. Fr. 640の医療レシピの出どころについて手がかりをくれます。同様に、職業、定義、計量のあいだの相関は、職業的アイデンティティが16世紀の技術的言説をどれほど深く形づくっていたかを物語っています。&lt;/p&gt;
&lt;h3 id="相関クラスターマップ"&gt;相関クラスターマップ&lt;/h3&gt;
&lt;p&gt;ヒートマップは「探索」の場面では便利ですが、聴衆の目には少し雑然と映るかもしれません。写本の中の特定の意味的クラスターについて論じている――あるいはまだ探している――ときはなおさらです。Seabornの&lt;code&gt;clustermap&lt;/code&gt;モジュールなら、面白い結果が得られるでしょう。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dendrogram_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cbar_pos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;.06&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.68&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="BnF Ms. Fr. 640の相関クラスターマップ"
srcset="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp 320w, https://clementgodbarge.com/post/visualization/clustermap_hu_2dac945fa40a8ac6.webp 480w, https://clementgodbarge.com/post/visualization/clustermap_hu_3abaf7b36a53572.webp 753w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp"
width="753"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;ピクセル化した（そう、この語はOEDにも載っています）昆虫のように見えるのはさておき、このクラスターマップは、孤立したタグ（上と左）と互いに結びついたタグとをはっきり分けてくれます。音楽とポワトゥー方言（誰が予想したでしょう！）のような孤立したクラスターと、計量、素材、定義、武器のようなより中心的なクラスターも見分けられます。職業はより多くと結びついていますが、少なくともこの相関行列では、特定のクラスターには属していません。&lt;/p&gt;
&lt;h3 id="相関ネットワーク"&gt;相関ネットワーク&lt;/h3&gt;
&lt;p&gt;行列に含まれる相関をさらに凝縮したいなら、ネットワークグラフが優雅な解決策です。写本の内容を人に伝えたい場面では、とりわけそうです。
そのためには、行列をエッジとノードのリストに変換し、弱い相関をグラフから落とすための閾値を決める必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# transform the data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# threshold &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;.6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;G&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# draw network using Kamada &amp;amp; Kawai&amp;#39;s algorithm &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draw_kamada_kawai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;with_labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;black&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="BnF Ms. Fr. 640の相関グラフ"
srcset="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp 320w, https://clementgodbarge.com/post/visualization/graph_hu_85295e5fba6293bc.webp 480w, https://clementgodbarge.com/post/visualization/graph_hu_4190dbca7e86ffc1.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;エッジやノードが多すぎるなら、閾値を変えてすっきりさせられます。あるいは&lt;code&gt;.write_gexf()&lt;/code&gt;関数でグラフを書き出し、&lt;code&gt;Gephi&lt;/code&gt;でいじることもできます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_gexf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;graph.gexf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果は本稿の冒頭でご覧いただけます。&lt;/p&gt;
&lt;h3 id="アップデート円形の重み付きネットワーク"&gt;アップデート――円形の重み付きネットワーク&lt;/h3&gt;
&lt;p&gt;相関行列を重み付きネットワークとして表示する方法を探していて、
面白いアプローチを見つけました。ここでは私たちのデータセットに合わせて手を加えます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create graph weighted by correlation coefficients (unfiltered)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine a threshold to remove some edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# list to store edges to remove&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;remove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# loop through edges in Gx and find correlations which are below the threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;corr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#add to remove node list if abs(corr) &amp;lt; threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;corr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# remove edges contained in the remove list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove_edges_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; edges removed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;エッジをいくつか落としたら、色と太さを決めます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine the colors of edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_colour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;correlation&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#ff872c&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# orange&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#f11d28&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# red&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_thickness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;degree&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ノードには、接続数に比例した大きさも与えます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# assign node size depending on number of connections (degree)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;node_size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果は、より多くのノードとはるかに多くのエッジを収めながら、なお読みやすく情報量の多い重み付きグラフです。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="BnF Ms. Fr. 640の重み付き相関グラフ"
srcset="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp 320w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_9f0550eb49c17f11.webp 480w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_a9106989817361fb.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Filippo Cavrianaの秘密書簡、1568—1589年</title><link>https://clementgodbarge.com/ja/project/cavrianas-correspondence/</link><pubDate>Fri, 27 Dec 2019 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ja/project/cavrianas-correspondence/</guid><description>&lt;p&gt;Filippo Cavrianaの秘密書簡は、フランス宗教戦争の比類ない証言です。フランス宮廷とその外の日々を刻んだ陰謀、戦闘、交渉、共謀を、20年以上にわたって伝えています。&lt;/p&gt;
&lt;p&gt;これらの書簡は
にありますが、大半は目録のない数百の綴り――フィレンツェで&lt;em&gt;filze&lt;/em&gt;と呼ばれるもの――に散らばっています。ここ数年で数十通の新しい書簡を見つけることができたものの、この種のアーカイブ調査は年々難しくなっています。フィレンツェからの距離、イタリアの一部の公共サービスの劣化、そして新型コロナウイルスのパンデミック。そのすべてが、この種の公刊プロジェクトを長く先の見えない道のりにしています。&lt;/p&gt;
&lt;p&gt;困難が増しているとはいえ、一次史料の公刊は歴史家の仕事の一部であり続けるべきです。ただし、その公刊がとる形は、おそらく変わっていくべきでしょう。一次史料の公刊は、上に述べた状況に適応するだけでなく、この研究の漸進的な性格をもっとよく映し、誰か別の人が引き継げるようになっていなければなりません。&lt;/p&gt;
&lt;p&gt;そこから生まれたのが、&lt;strong&gt;スケーラブル&lt;/strong&gt;で、&lt;strong&gt;持続可能&lt;/strong&gt;で、&lt;strong&gt;信頼でき&lt;/strong&gt;、&lt;strong&gt;プラットフォームに依存せず&lt;/strong&gt;、そして&lt;strong&gt;協働的&lt;/strong&gt;にもなりうる、新しいタイプのデジタル公刊プロジェクトという構想です。&lt;/p&gt;
&lt;p&gt;校訂版はすでにオンラインで公開されています：&lt;strong&gt;
&lt;/strong&gt;。フィレンツェ国立文書館、マントヴァ、BnFからこれまでに転写した書簡を集めたもので、新しい書簡が見つかるたびに育っていきます。その設計の背後にある考え方は、
で説明しました。&lt;/p&gt;</description></item></channel></rss>