HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

ELIZAの系譜

The Genealogy of Eliza (elizagen.org)

15 pointsby abrax31411 コメント

要約

本プロジェクトは、ELIZAプログラムのコードからファミリーツリーを構築できるかを検証する「ELIZAGenコード系統学プロジェクト」の現状を報告するものです。60年以上にわたり、ELIZAは何百回も再実装されてきましたが、本研究ではソースコードではなくアーキテクチャを比較し、進化生物学のツールを用いてプログラム間の関係性を分析しています。

全文翻訳

ELIZAの系譜ELIZAプログラムのコードからファミリーツリーを構築できるか?このページでは、ELIZA実装を生物標本のように扱い、系統学のツールを適用するELIZAGenコード系統学プロジェクトの現状を報告します。60年以上にわたり、ELIZAは何百回も再実装されてきました。コピーされ、言語をまたいで移植され、発表された説明から再構築され、教育用に簡略化され、芸術として再想像されてきました。ソフトウェアには、生物学的または写本的な系譜を固定するような物質的な連続性がないため、ソーステキストを比較する代わりにアーキテクチャを比較します。各プログラムは一連の抽象的な特徴(キーワードをランク付けするか?バックトラッキングマッチャーを持つか?以前の入力の記憶を保持するか?)によって記述され、結果として得られた特徴行列は、進化生物学の標準的な最節約ソフトウェアであるPAUP*で分析されます。現在のコーパスには、8つの言語で1965年から2025年までの27個の標本が含まれており、13個の二値特徴で記述されています。この作業は進行中であり、ドラフト論文「Reconstructing Program Genealogies from Abstract Program Descriptions: The ELIZA Case Study (A Work in Progress)」(Jeff Shrager、2025年12月)にまとめられています。PAUP*からの現在の最節約ツリーは、BiopythonのBio.Phyloで描画されています。水平距離は分岐長(特徴変化の数)です。標本名には、著者、おおよその年(XX = 不明)、および言語が示されています。フルサイズの画像をクリックしてください。ツリーの読み方完全なELIZAの基底ポリトミー。ルートには、ELIZAのアーキテクチャ全体を保持しており、これらの特徴においては区別がつかないプログラムがあります。Weizenbaumの1965年のMAD-SLIPオリジナル、Bernie Cosellの1966年のBBN Lisp(Weizenbaumのコードを見ずにCACM論文から書かれたもの)、その他のいくつかのLispバージョン、1970年のSNOBOLおよびBurroughs B5500 Algolバージョン、Javaバージョン、Anthony Hayの2021年のC++再構築です。60年と非常に異なる言語ですが、同じ設計です。簡略化された派生クレード。そのコアから分岐しているのは、主にマイクロコンピューター時代のBASICバージョン(1977年にCreative Computingで発表されたJeff Shragerの1973年のBASIC ELIZAの子孫)と、Python、JavaScript、およびいくつかの簡略化されたLispバージョンです。これらは通常、初期のマイクロコンピューターの制限、教育目的(例:Norvigの1991年のPAIPにおけるLisp)、または単に異なるプログラミング文化のために、バックトラッキング、メモリ、キーワードの優先順位を削除しています。検証標本。3つの標本が手法をテストします。バイト単位で完全に同一のクローン(E18、E20)のペアは、期待通りゼロ分岐長で一緒に配置されます。対照(E22、会話とは全く関係のないパターンマッチングファイルユーティリティ)はELIZAクレード内にネストします。したがって、現在の特徴は、会話的なものというよりは一般的なパターンマッチングアーキテクチャを捉えており、より優れた会話的特徴が必要であることが示唆されます。LadyMouth(E21、Sarah Cistonによるフェミニスト批判アートチャットボット)は、すべての特徴でゼロスコアです。これは最大の距離に位置します。これはアーキテクチャではなく、役割と批評によってELIZAライクなプログラムであり、確認された外れ値として機能します。論文では、この結果を文字通りの子孫の線ではなく、テキストの伝統の地図として読むのが最善であると主張しています。これは、実装が保存、適応、収束的再実装、および批評を通じてどのように関連しているかを示しています。作成方法収集と正規化。標本はアーカイブ、出版物、リポジトリから収集され、軽度に正規化(空白、コメント、メタデータ)されました。LLMで特徴を抽出し、手作業でキュレートします。言語モデルが最初プログラムの構造的および行動的特徴を提案しました。語彙を手作業で編集し、すべての標本をラウンドロビンで処理して語彙を拡張し、新しい特徴が現れなくなるまで続け、各ラウンド後に手動でキュレートしました。分類。すべての標本は、凍結された語彙でスコアリングされ、プログラム対特徴行列が生成されました。ツリーの推論。行列はNEXUSに変換され、PAUP*で最節約法(ヒューリスティック検索、TBR分岐交換)の下で分析され、結果のツリーはBiopythonで描画されました。特徴ルールベースのパターンマッチング純粋な手続き的または統計的ロジックではなく、明示的なルールのセット(各ルールにはパターンと関連する応答がある)によって動作が駆動されます。キーワード優先順位キーワードまたはルールには数値の優先順位があり、どのルールが適用されるかを決定します。同義語翻訳ルールが適用される前に、表面的な形式(同義語、活用形)を正規化されたトークンにマッピングします。バックトラッキングマッチャーマッチャーは可変長の入力セグメントを消費し、複雑なパターンを満たすためにそれらをバックトラックできます。ワイルドカードとクラスパターン言語は、ワイルドカード(例:数値セグメントプレースホルダー)およびトークンクラスまたはプロパティベースのマッチをサポートします。セグメントストレージ一致した入力セグメントは、応答生成中に後で参照できるように保存されます。テンプレート再構成応答は、位置によって一致したセグメントを参照するテンプレートを埋めることによって構築されます。メモリールール過去の入力が選択され、専用のメモリールールによって後で取得されます。フォールバックルールより具体的なものが一致しない場合に適用される明示的なデフォルト(「最後の手段」)ルールがあります。句読点に敏感な入力は、明示的な区切り文字とブレーク文字のセットでトークン化されるため、句読点がトークンやフレーズを形成します。順序付けられたメモリメモリは(ランダムではなく)順序で呼び出されます。リスト/シンボル処理プログラムは、文字列処理ではなく、主にリストとシンボルの処理を使用します。分離可能なスクリプトスクリプトは、言語処理コード(別個のファイルにあるかどうかにかかわらず)から本質的に分離されています。標本とその特徴✓ = 特徴が存在、空白 = 不在、? = 決定できなかった。各標本名には、分析された(正規化された)ソースコードへのリンクがあります。標本ルールベースのパターンマッチングキーワード優先順位同義語翻訳バックトラッキングマッチャーワイルドカードとクラスセグメントストレージテンプレート再構成メモリールールフォールバックルール句読点に敏感な順序付けられたメモリリスト/シンボル処理分離可能なスクリプトE01 Cosell66Lisp✓✓✓✓✓✓✓✓✓✓✓✓✓E02 Trembly17Cobol✓✓✓✓✓✓✓E03 SamsonXXLisp✓✓✓✓✓✓✓✓✓✓✓✓✓E04 KMPXXLisp✓✓✓✓✓✓✓✓✓E05 JonLXXLisp✓✓✓✓✓✓✓✓✓✓✓✓✓E06 Babcock15BASIC✓✓✓✓✓✓✓E07 Hay21CPP✓✓✓✓✓✓✓✓✓✓✓✓✓E08 Juul23BASIC✓✓✓✓✓✓✓E09 DavenportXXBASIC✓✓✓✓✓✓✓✓E10 Srijak08Python✓✓✓✓✓✓✓✓✓✓E11 Strout05Python✓✓✓✓✓✓✓E12 Shrager73BASIC✓✓✓✓✓✓✓E13 Norvig91Lisp✓✓✓✓✓✓✓✓E14 Cherry82Lisp✓✓✓✓✓?✓✓E15 Bell79BASIC✓✓✓✓✓✓E16 Dunlop97JS✓✓✓✓✓✓E17 Platt79BASIC✓✓✓✓E18 JonLXXLisp clone✓✓✓✓✓✓✓✓✓✓✓✓✓E19 Weizenbaum65MADSLIP✓✓?✓✓✓✓✓✓✓✓✓✓E20 Shrager73BASIC clone✓✓✓✓✓✓✓E21 Ciston15LadyMouthPythonE22 Shrager15FilerCPP foil✓✓✓✓✓E23 Jull99Java✓✓✓✓✓E24 HaydenXXJava✓✓✓✓✓✓✓✓✓✓✓✓✓E25 Haxpor15PHP✓✓✓✓✓✓✓✓✓✓✓✓E26 Duquet70SNOBOL✓✓✓✓✓✓✓✓✓✓✓✓✓E27 Fricks70B5500Algol✓✓✓✓✓✓✓✓✓✓✓✓✓データ、コード、論文ELIZAGen GitHubリポジトリのgenealogyフォルダにすべてあります。ドラフト論文:PDF・LaTeXソース・参考文献結果:特徴行列(CSV)・特徴語彙(YAML)・NEXUSファイル・ツリー・PAUP*ログパイプライン:ハウツーとREADME・elizagen_library.py・cvs2nexus.py・draw_paup_trees.py標本:全27プログラムのソースコード作業メモ:分析からのLLM会話このプロジェクトは、2022年のブログ記事「A Code-Based ELIZA Phylogeny」から発展しました。もし、コーパスに含めるべきELIZA実装(特にマイクロコンピューター以前のもの、非英語のもの、芸術的なもの)をご存知でしたら、Jeff Shrager(jshrager@gmail.com)までご連絡ください。