日本語入力の推理ADVを支える、名前のある技術の一覧
The named techniques behind a Japanese text-input mystery adventure
D01-4-T02-named-techniques-index・技術・日本語入力でプレイする仕組み
『霧走町 流氷に眠る』は、選択肢を出さず、入力された日本語を書き下ろしの証言のどれかに当てて返す推理アドベンチャーです。
その判断と、それを確かめる道具と、作り方には、ほとんど全部に既にある名前が付いています。この一覧は、連載の T03〜T64 で扱う名前を一つの表にしたものです。
この回の位置と、前後の回#
区切り: T01〜T02 全体と一覧(2 回のうち 2 回目)
先に読むとよい回: T01(全体の構造と、使っている技術と言語)
次に読む回: T03(文字の正規化)
この一覧の使い方#
- 正式名(英語)は、その綴りで検索すれば解説か論文が出るように書きました。略称と日本語での呼び名も並べます
- 初出は、今日(10 月 29 日)に検索して、書誌を確かめたものだけです。論文の本文までは読んでいません。確かめられなかった所は「—」にしました
- 「代表」と書いたものは、その名前を最初に出した論文ではなく、よく引かれる早い時期の代表例です
- 「名前どおりか」の印は次の 4 つです
◎ 名前どおり
○ 名前どおりだが、範囲が狭い・限定つき
△ 変形(どこが違うかを一言)
造語 うちで付けた名前(近い既存の名前を添える) - 失敗の名前(Goodhart 則など)は、踏んだこととして載せています。印は「名前どおりに起きたか」です
- 「回」は、その名前を詳しく書く回の番号です。1 日 2 本、夕方と夜に出します
- 表は回の順に、7 つに区切りました
一覧(T03〜T24 日本語入力を解いて返すまで)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | この作品で何に使っているか | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| Unicode Normalization Forms | UAX #15・NFKC | Unicode 正規化 | Unicode Consortium, Unicode Standard Annex #15 Unicode Normalization Forms。初の承認版 1999、Unicode 3.0(1999)で規格と結びつく | 入力と言い換えを同じ形に畳む norm/1(全角→半角・カタカナ→ひらがな・約物と長音を落とす・敬体を常体へ) | △ NFKC からは全角 ASCII→半角だけを採り、約物・空白・長音の除去、小文字化、カタカナ→ひらがな、敬体→常体を足した(NFKC の部分集合ではない) | T03 |
| character n-gram | — | 文字 n-gram | 代表: Suen 1979, n-Gram Statistics for Natural Language Understanding and Text Processing, IEEE Trans. PAMI 1(2)(名付けの初出は —。言語判別は Beesley 1988、分類は Cavnar & Trenkle 1994・Damashek 1995, Science 267) | 正規化した文字の 2・3-gram に 1-gram を重み 0.5 で混ぜた疎ベクトル | △ 1-gram を弱く混ぜる | T04 |
| term frequency–inverse document frequency | tf–idf・IDF | 単語の重み付け(idf は逆文書頻度) | IDF: Spärck Jones 1972, A statistical interpretation of term specificity and its application in retrieval, Journal of Documentation 28(1) | 言い換え 2,845 文を文書として idf を計算し、文字 n-gram に掛ける | ◎ | T04 |
| cosine similarity(vector space model) | VSM | コサイン類似度・ベクトル空間モデル | Salton, Wong & Yang 1975, A vector space model for automatic indexing, Communications of the ACM 18(11) | 表層の点と埋め込みの点の両方 | ◎ | T04・T05 |
| Multilingual E5 Text Embeddings | mE5・multilingual-e5-small | 多言語 E5(文の埋め込み) | Wang, Yang, Huang, Yang, Majumder & Wei 2024, Multilingual E5 Text Embeddings: A Technical Report, arXiv:2402.05672 | 384 次元の文ベクトル。int8 の ONNX で、入力の全文と節ごとに引く | ◎ 接頭辞 "query: " は推奨どおり。点の使い方は T08 の変形 | T05 |
| mean pooling | — | 平均プーリング | 代表: Reimers & Gurevych 2019, Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks, EMNLP-IJCNLP 2019 | 最後の層のトークンの平均をとり、L2 正規化する | ◎ 1 文ずつパディングなしで流すので mask は全 1 | T05 |
| SentencePiece | — | センテンスピース(サブワードの分割器) | Kudo & Richardson 2018, SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing, EMNLP 2018 System Demonstrations | e5 の語彙ファイルを C++ で読み、UE と CLI で同じ分割をする | ◎ 推論の分割だけを C++ で書き直した | T06 |
| Unigram language model(subword segmentation) | Unigram LM | ユニグラム言語モデルによる分割 | Kudo 2018, Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates, ACL 2018 | 語彙の確率で最尤の分割を選ぶ | ◎ 学習と確率的な分割はしない | T06 |
| ONNX Runtime | ORT | ONNX ランタイム | Microsoft。2018 年 10 月にプレビュー、2018 年 12 月 4 日に GitHub で公開(MIT) | UE は NNE 経由で同梱の DLL(ライセンスの札は 1.24.1・DLL の中の版は 1.24.3)、Windows の CLI は同じ DLL を、Linux のサーバは 1.24.1 を C API で直接 | ◎ | T07 |
| int8 quantization(dynamic quantization) | INT8 | 8 ビット量子化(動的量子化) | 代表: Vanhoucke, Senior & Mao 2011, Improving the speed of neural networks on CPUs, NIPS 2011 Workshop(8 ビット整数の推論。dynamic quantization の語の初出は —。Jacob ほか 2018, CVPR 2018 も) | 配布物の大きさのため、e5-small を int8 にした ONNX を使う | ◎ | T07 |
| bitwise reproducibility | — | ビット単位の再現性 | — | 焼いたベクトルと実行時の計算が一致するかを、言い換え 2,845 文で確かめる embedcheck | △ いつもの検査はビット一致ではなく、コサインの最小値(今日 1.000000)とモデルの指紋で見る。ただし 10/29 に Windows と Linux で焼き直した vectors.bin はバイトまで一致した | T07 |
| hybrid search(sparse-dense retrieval) | — | ハイブリッド検索 | —(早い用例: Luan, Eisenstein, Toutanova & Collins 2021, Sparse, Dense, and Attentional Representations for Text Retrieval, TACL 9〔arXiv 2020〕・Gao ほか 2021, Complement Lexical Retrieval Model with Semantic Residual Embeddings, ECIR 2021) | 文字 n-gram の tf–idf(疎)と e5 の埋め込み(密)の二本で当てる | △ 融合が重み付きの点の加算(対照表 §2) | T08 |
| convex combination(score fusion) | CC | 点の凸結合 | 代表: Bruch, Gai & Ingber 2024, An Analysis of Fusion Functions for Hybrid Retrieval, ACM TOIS 42(1)(online 2023・arXiv 2022) | C = max(表層, 0.3×表層 + 0.7×伸ばした埋め込み) | △ 表層との max をとる・埋め込みは 0.82 未満を 0 に切って 0〜1 へ伸ばす | T08 |
| Reciprocal Rank Fusion | RRF | 逆順位融合 | Cormack, Clarke & Büttcher 2009, Reciprocal rank fusion outperforms Condorcet and individual rank learning methods, SIGIR 2009 | k=60 で実装して同じ評価データで測り、線形結合に負けたので採らず、実装も消した | 使っていない(測って不採用) | T09 |
| gazetteer(dictionary-based named entity recognition) | NER | 固有表現の辞書 | 「named entity」の語は MUC-6(1995)のために作られた: Grishman & Sundheim 1996, Message Understanding Conference-6: A Brief History, COLING 1996。gazetteer の語の初出は — | entities.json の語と別名。意図の entities に当たれば 1 つ 0.15、最大 2 つ加点 | △ 抜き出すのは作品の辞書にある語の出現だけで、型は人物かどうかしか持たない。使い先は照合の加点・段の条件・主張の材料・手帳の欄 | T10 |
| TimeML / TIMEX3 | TIMEX3 | 時間表現の認識と正規化 | Pustejovsky ほか 2003, TimeML: Robust Specification of Event and Temporal Expressions in Text, IWCS-5 | 入力から月日・時刻・時間帯を取り出し、作品の暦で正規化して意図の条件に使う | △ 注釈の規格ではなく、規則で値だけを取る。原文に無い値は埋めない | T11 |
| clause identification(clause segmentation) | — | 節の切り出し | Tjong Kim Sang & Déjean 2001, Introduction to the CoNLL-2001 Shared Task: Clause Identification, CoNLL-2001 | 句読点で割った節ごとに埋め込みを引いて最大をとる。進む問いが 2 つ並べばどちらからかを尋ねる | △ 統語解析をせず、句読点と言語資源の規則で割る | T12 |
| negation scope resolution | — | 否定の作用域の解決 | Morante & Blanco 2012, *SEM 2012 Shared Task: Resolving the Scope and Focus of Negation, *SEM 2012 | 根拠の語の後ろに否定があれば主張を確定せず聞き返す(反対の主張にはしない)。疑問なら確認してから進める。引用の中の語は数えず、反語(〜のではないか)と名詞に掛かる否定(〜ではない根拠)は否定に数えない | △ 学習器ではなく、共通の言語資源(input.json)の語と規則 | T13 |
| anaphora resolution | — | 照応解析(指示語の解決) | Hobbs 1976, Pronoun Resolution, Research Report 76-1, City College, CUNY(1978 の Lingua 44 の論文はその縮約) | 「前者」「後者」を、画面に出した本文だけから解く。解けなければ進めずに尋ねる | △ 探す範囲を表示済みの文に限る | T14 |
| grounding(common ground) | — | 共通基盤の確立 | Clark & Brennan 1991, Grounding in communication, Perspectives on Socially Shared Cognition(APA) | プレイヤーが見た文だけを、会話の共通の土台として扱う | ◎ | T14 |
| intent classification(intent detection) | — | 意図の分類 | —(代表: Gorin, Riccardi & Wright 1997, How May I Help You?, Speech Communication 23) | 248 の意図に、言い換え 2,845 文(意図あたり 11.5)を持たせて当てる | ◎(対照表 §2) | T15 |
| k-nearest neighbors(exemplar-based classification) | k-NN | 最近傍法 | Fix & Hodges 1951, Discriminatory analysis, nonparametric discrimination: consistency properties(USAF School of Aviation Medicine の報告)。解析は Cover & Hart 1967, Nearest neighbor pattern classification, IEEE Trans. IT 13(1) | 意図ごとに、言い換えの中の最大の点をその意図の点にする | △ k=1 の最近傍を意図ごとにとり、そのあと閾値で答えるかを決める | T15 |
| classification with a reject option | — | 棄却つき分類 | Chow 1970, On optimum recognition error and reject tradeoff, IEEE Trans. IT 16(1) | 採用 0.33・聞き返し 0.27 の固定の閾値で、答える/聞き返す/受け流すを分ける | △ 閾値は手で決めた固定値で、校正していない(対照表 §5-C)。方法としては k-NN OOD detection(Sun, Ming, Zhu & Li 2022, Out-of-Distribution Detection with Deep Nearest Neighbors, ICML 2022)の k=1 の形 | T16 |
| selective classification(selective prediction) | — | 選択的予測 | El-Yaniv & Wiener 2010, On the Foundations of Noise-free Selective Classification, JMLR 11 | 順位付けの点と答えてよいかの点を分けた(減点は順位にだけ効かせる) | △ 同上 | T16 |
| conformal prediction | — | コンフォーマル予測 | Vovk, Gammerman & Shafer 2005, Algorithmic Learning in a Random World, Springer | 使っていない。実際の分布のラベルつき標本を持っていないため、保証の前提が無い | 使っていない(理由つき) | T16 |
| non-understanding recovery(conversational repair) | — | 非理解からの回復・会話の修復 | Bohus & Rudnicky 2005, Sorry, I Didn't Catch That! — An Investigation of Non-understanding Errors and Recovery Strategies, SIGdial 2005 | 聞き返し(F1)・誘導(F2)・受け流し(F4)・3 手外したときの救済(F5) | ◎(対照表 §2) | T17 |
| clarification request(explicit confirmation) | CR | 明確化要求・明示的な確認 | Purver 2004, The Theory and Use of Clarification Requests in Dialogue, 博士論文(University of London) | 「事件の夜の居場所か? それとも別の話か」と聞き、「はい/違う」は否定を先に見て読む | ◎ | T17 |
| retrieval-based response selection | — | 検索型の応答選択 | 代表: Jafarpour & Burges 2010, Filter, Rank, and Transfer the Knowledge: Learning to Chat, Microsoft Research Technical Report(Banchs & Li 2012, IRIS, ACL 2012 Demos・Ji, Lu & Li 2014, arXiv:1408.6988 も。課題としては Lowe ほか 2015, The Ubuntu Dialogue Corpus, SIGDIAL 2015) | 返す文は台本の中から選ぶだけ。生成しない | ◎(対照表 §2) | T18 |
| information state update approach | ISU | 情報状態の更新による対話管理 | Traum & Larsson 2003, The Information State Approach to Dialogue Management, Current and New Directions in Discourse and Dialogue(Kluwer)。先行は Larsson & Traum 2000, Natural Language Engineering 6 | フラグと「表示済みの会話」を状態に持ち、段の梯子で返事を決める | △ 更新規則を一般の対話行為ではなく、意図と段の前提(requires)で書く | T19 |
| frame-based dialogue management | — | フレーム型の対話管理 | Bobrow ほか 1977, GUS, a frame-driven dialog system, Artificial Intelligence 8(2) | 突きつけの材料(requiresEntities)が揃ったら段を進める | △ 枠を埋めるために聞き返すのではなく、揃った材料で段を選ぶ | T19 |
| 主張(claim) | — | 推理の主張 | 造語。近い名前は recognizing textual entailment(Dagan, Glickman & Magnini 2006, The PASCAL Recognising Textual Entailment Challenge, LNCS 3944) | claims.json の語・固有名詞・順序・除外と極性で、推理を言えたかを決める | 造語。含意の認識はしていない(条件を作者が書く) | T20 |
| data provenance | PROV | データの来歴(出所) | W3C 2013, PROV-DM: The PROV Data Model(勧告)。where-provenance は Buneman, Khanna & Tan 2001, Why and Where: A Characterization of Data Provenance, ICDT 2001 | 手帳の行に where・who・source を持たせ、画面に出た事実だけを控える | △ PROV のモデルは使わず、行ごとの出所の欄だけ | T21 |
| side channel | — | サイドチャネル | 代表: Kocher 1996, Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems, CRYPTO '96 | 文字の検査を全部通ったまま、図の並べ方から推理の答えが漏れた(踏んだ失敗) | ◎(対照表 §3) | T22 |
| Illusion of Causality in Visualized Data | — | 図の並置から因果を読む錯覚 | Xiong, Shapiro, Hullman & Franconeri 2019, Illusion of Causality in Visualized Data, IEEE VIS 2019 | 同上。数値の軸を持つ図を採らず、図は章の後にだけ見せる | ◎(対照表 §3) | T22 |
| deterministic replay(record and replay) | — | 決定的な再実行・記録と再生 | record and replay: LeBlanc & Mellor-Crummey 1987, Debugging Parallel Programs with Instant Replay, IEEE Trans. Computers C-36(4) | 同じ入力列を流し直すと同じ出力になる。凍結したプレイのログを今のビルドで流し直す replay | △ 非決定な出来事を記録して再生するのではなく、非決定そのものを無くした | T23 |
| FNV-1a(Fowler–Noll–Vo hash) | FNV | FNV ハッシュ | FNV: Fowler & Vo が 1991 年に IEEE POSIX P1003.2 委員会へ出した案に Noll が改良(IETF の FNV の草案による)。FNV-1a の変形の年と提案者は Noll の頁にも書かれていない | セーブ(adv-save/2)に作品の内容の指紋を入れ、読み込むときに違えば変換せずに拒む | △ 式は FNV-1a だが offset basis の末尾の 1 桁が落ちていて、標準の値と合わない。64 ビット。暗号学的な強さは要らない用途 | T24 |
| content fingerprint | — | 内容の指紋 | — | 読み込んだ作品データのファイルごとに FNV-1a をとり、パスと値をパス順に並べて、もう一度 FNV-1a に通した値 | ◎ | T24 |
一覧(T25〜T29 画面と入力)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | この作品で何に使っているか | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| Input Method Editor / Text Services Framework | IME・TSF | 日本語入力・テキストサービスフレームワーク | TSF: Microsoft の文書では Windows 2000(TSF 1.0)から | 入力欄で変換中の文字列をそのまま通す | ◎ 自分では TSF を呼ばず、UE とブラウザに任せる | T25 |
| ITextInputMethodSystem(Unreal Engine) | — | UE の文字入力の仕組み | —(製品の API) | MomijiUI のキャンバスが入力欄の枠を描き、編集中だけ SEditableText を重ねて UE の IME の口をそのまま使う | ◎ | T25 |
| Windows voice typing | — | 音声入力(Win+H) | Windows 10 Fall Creators Update(2017)で Win+H の口述に | 入力欄がふつうの文字入力なので、声がそのまま質問になる | ◎ ゲームの側には何も足していない | T26 |
| header-only library | — | ヘッダだけのライブラリ | — | core/ の 20 ファイル 9,766 行を、UE・CLI・Linux のサーバが写さずにコンパイル | ◎ | T27 |
| declarative UI | — | 宣言的 UI | — | MomijiUI。画面を JSON で書き、UE の Slate とブラウザの canvas の 2 つの描画器で描く | ◎ | T28 |
| conformance testing | — | 適合性試験 | ISO/IEC 9646-1, Conformance testing methodology and framework — Part 1: General concepts。初版 1991(第 2 版 1994) | 同じ画面の JSON を UE とブラウザで描いて照合する(Scripts/momiji-ui-conformance.ps1、-Browsers で 3 つのブラウザエンジン) | △ 半分は参照実装(UE)との差分テスト(differential testing)に近い | T29 |
一覧(T30〜T33 配る仕組み)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | この作品で何に使っているか | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| stateless server(REST の stateless 制約) | — | 状態を持たないサーバ | Fielding 2000, Architectural Styles and the Design of Network-based Software Architectures, 博士論文(UC Irvine) | セーブをブラウザが持ち、毎手送って新しいものを受け取る | △ stateless の制約だけを採った。API は REST の資源ではなく「1 手を送る」口 | T30 |
| token bucket | — | トークンバケット | —(早い用例: Partridge 1992, RFC 1363 A Proposed Flow Specification。Turner 1986, New directions in communications, IEEE Communications Magazine 24(10) は leaky bucket の出所) | IP ごとの桶(容量 2・毎秒 2 つ補充)。空なら 429 と retry-after: 1。返事待ちは 32 まで | ◎ 時計は単調な performance.now() | T31 |
| HTTP conditional requests / range requests | ETag・304・206 | 条件つき要求・範囲要求 | Fielding, Nottingham & Reschke (Eds.) 2022, RFC 9110 HTTP Semantics(§13・§14) | 弱い ETag(大きさ+更新時刻)で 304、no-cache、動画と音の Range に 206(範囲外は 416) | △ If-None-Match を文字列の完全一致で見る(RFC は弱い比較)・HEAD に 405・If-Range と Last-Modified は扱わない | T32 |
| rsync algorithm(delta-transfer) | — | rsync の差分転送 | Tridgell & Mackerras 1996, The rsync algorithm, Technical Report TR-CS-96-05(Australian National University) | ブラウザ版の更新で、変わったファイルだけを送る | ◎ | T33 |
| principle of least privilege | PoLP | 最小権限の原則 | Saltzer & Schroeder 1975, The Protection of Information in Computer Systems, Proceedings of the IEEE(1974 の CACM 版が先行) | 配置だけをする固定のスクリプト 1 本にだけ、パスワード無しの sudo を許す | ◎ | T33 |
一覧(T34〜T49 確かめ方)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | この作品で何に使っているか | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| static analysis / invariant checking | — | 静的解析・不変条件の検査 | — | lint。台本と作品データを実行せずに、規則(話者ごとの字数・名前の解禁・ヒントの対応先など)で検査 | ◎(対照表 §2) | T34 |
| static reachability analysis | — | 静的な到達可能性解析 | reachability analysis: Bochmann 1978, Finite State Description of Communication Protocols, Computer Networks 2(「static」を付けた語の初出は —) | clearpath。設計データの依存から、クリアに要る手を実行せずに逆算する | △ 対照表 §2 は ◎ だが、出すのは到達できる状態の全部ではなく、否定の前提を捨てて逆にたどった 1 本の鎖(自動計画の delete relaxation と relaxed plan に近い) | T35 |
| explicit-state model checking | — | 明示的状態のモデル検査 | Clarke & Emerson 1981, Design and synthesis of synchronization skeletons using branching time temporal logic, Logic of Programs(LNCS 131)。Queille & Sifakis が独立に同じ方法 | reach。フラグの状態を全部歩く | ◎ 到達状態を章ごとに全部歩く(次の章の出発点は、その章へ入った状態の積。手数の上限は unguided の深さにだけ効く。対照表 §2 の「手数で切る」は誤り) | T36 |
| bounded model checking | BMC | 有界モデル検査 | Biere, Cimatti, Clarke & Zhu 1999, Symbolic Model Checking without BDDs, TACAS 1999 | reach の unguided の「n 手以内に焦点へ届くか」 | △ 元の BMC は SAT に帰着させる記号的な方法。うちは全探索で、深さの上限を性質の側に持つだけ | T36 |
| safety property | — | 安全性 | Lamport 1977, Proving the Correctness of Multiprocess Programs, IEEE TSE SE-3(2) | どの状態でも次の焦点がある(focusless=0)・焦点へ n 手で行ける(unguided=0) | △ focusless は不変条件(safety)だが、unguided は AG と有界の EF を組み合わせた性質で、単純な safety ではない | T36 |
| inline assertion / executable specification | — | 台本の中の期待・実行できる仕様 | — | 台本の !expect(この意図に着地する)・!expect-not(落ちてはいけない先) | ◎(対照表 §2) | T37 |
| golden master testing(characterization testing) | — | ゴールデンマスター・特性テスト | characterization test: Feathers 2004, Working Effectively with Legacy Code(Prentice Hall)。golden master の語の初出は — | golden/dev(176 件)の凍結した入力と期待。期待は今の出力を写したのではなく、照合器より前の commit で人が書いた意図の id | △ 今の出力を写す方式ではない・holdout の使い方が変形(T42) | T38 |
| approval testing | — | 承認テスト | — | 使っていない。golden master の別名で、今の出力を人が見て正解として固定する形。golden/dev との違い(出力を写すか)を T38 で説明し、踏みかけた形は T54 | 使っていない(T54 で踏みかけた) | T38 |
| metamorphic testing(metamorphic relation) | MT | メタモルフィックテスト | Chen, Cheung & Yiu 1998, Metamorphic Testing: A New Approach for Generating Next Test Cases, Technical Report HKUST-CS98-01 | adv-sim mutate。体言止め・助詞落ち・常体・記号なし・入力の間違い・言いかけに言い換えて、同じ意図に着地するか(probe-mut 747 件) | ◎ 以前は「変異テスト」と呼んでいた(名前の誤用。対照表 §6 で直した) | T39 |
| mutation testing / fault injection | — | 変異テスト・故障の注入 | DeMillo, Lipton & Sayward 1978, Hints on Test Data Selection: Help for the Practicing Programmer, IEEE Computer 11(4) | 作品データを 1 か所わざと壊して、検査が赤くなるかを見る | ◎(対照表 §2) | T40 |
| confusion matrix / precision and recall / coverage | — | 混同行列・適合率と再現率・カバレッジ(棄権) | precision と recall: Kent, Berry, Luehrs & Perry 1955, Machine literature searching VIII, American Documentation 6(2)(precision の語は後から)。confusion matrix の語の初出は — | play --verdict の 4 値。LEAK=旗が立ったのに話題の語が無い(誤って受理)、MISS=受け皿に落ちた(棄却・棄権。正誤は問わない)、DRIFT=話題が重ならない採用、ANSWERED=それ以外(正解表との一致ではない) | ○(対照表 §2) | T41 |
| adaptive data analysis / reusable holdout | Thresholdout | 適応的なデータ分析・再利用できる holdout | Dwork, Feldman, Hardt, Pitassi, Reingold & Roth 2015, The reusable holdout: Preserving validity in adaptive data analysis, Science | golden/holdout を毎回は回さず、使った記録を残し、結果で何かを直したら(actedOn)使い切り | △ Thresholdout(ノイズを足す)は使わない。回数の上限は 2026-08-20 に外し、いまは actedOn だけで使い切りを決める | T42 |
| w-shingling / Jaccard coefficient | — | シングリングとジャッカード係数 | Jaccard 係数: Jaccard 1901, Étude comparative de la distribution florale dans une portion des Alpes et des Jura, Bulletin de la Société Vaudoise des Sciences Naturelles 37(英語は 1912, New Phytologist 11(2))。w-shingling: Broder 1997, On the resemblance and containment of documents, SEQUENCES '97(IEEE CS) | lint の L18。検査の文が言い換えの辞書に写っていないかを見る | ◎(対照表 §2) | T43 |
| train-test contamination(benchmark leakage) | — | 評価データの汚染 | —(代表: Brown ほか 2020, Language Models are Few-Shot Learners, arXiv:2005.14165 の 13-gram の重なりの調査) | L18 が見つけるもの。踏んだ話は T50 | ◎(対照表 §2・§3) | T43・T50 |
| differential testing | — | 差分テスト | McKeeman 1998, Differential Testing for Software, Digital Technical Journal 10(1) | adv-work-diff(2 つの作品データの骨を比べる)と、KaedeVN を別の実装で同じに動かすための記録の比較 | △ 対照表 §2 は ◎ だが、adv-work-diff が比べるのは同じ企画から手と機械の二通りで起こした作品データで、被検査物は骨を起こす工程 | T44 |
| requirements traceability matrix | RTM | 要求の追跡表 | — | ledger.tsv(手の台帳)。要求と実装を並べ、分母を決める | △ 台帳は 5 列で検査の列が無い(要求 ↔ 実装の二項)。L35 は前向き・後ろ向きの追跡だけを見る | T45 |
| data-driven testing / declarative test manifest | — | データ駆動テスト・宣言的な検査の目録 | — | runs/suite.json。検査の目録を作品の中に置き、検証の道具に作品名を書かない | ◎(対照表 §2) | T46 |
| evidence ledger(assurance case) | — | 証拠の台帳 | —(assurance case の記法 GSN は Kelly 1998, Arguing Safety: A Systematic Approach to Safety Case Management, 博士論文〈University of York〉。「assurance case」の語の初出は —) | acceptance.json の PASS/WARN/FAIL/UNMEASURED と、測った commit より新しければ NOT-RUN | △ NOT-RUN の規則は独自(対照表 §2) | T47 |
| playtesting by LLM agents | — | AI に初見で遊ばせる | — | 作品を知らない AI にプレイヤー役をさせ、保存物から再実行できるようにする | ○(対照表 §2 の playtesting) | T48 |
| LLM-as-a-judge | — | LLM を採点者にする | Zheng ほか 2023, Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena, NeurIPS 2023 Datasets and Benchmarks | 通読テストの読み手(adv-reader)と点検(adv-auditor)が LLM の判定役。プレイの採点(adv-judge)は LLM を使わず、入力の列を今の版に流し直して算術で数える | △ 対照表 §2 は「AI 初見プレイ+adv-judge」を LLM-as-a-judge とするが、adv-judge は LLM ではない | T49 |
| self-preference bias | — | 自己優遇の偏り | Panickssery, Bowman & Feng 2024, LLM Evaluators Recognize and Favor Their Own Generations, NeurIPS 2024 | 作った本人のセッションに採点させない理由 | ◎(対照表 §3) | T49 |
一覧(T50〜T57 失敗の名前)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | うちで起きたこと | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| Goodhart's law | — | グッドハートの法則 | Goodhart 1975, Problems of Monetary Management: The U.K. Experience(Reserve Bank of Australia の会議)。広く引かれる言い方は Strathern 1997, European Review 5(3) | 落ちた入力を言い換えの辞書に写して、通じ率が 23% から 100% になった | ◎(対照表 §3) | T50 |
| surrogation | — | 代理指標と目的の取り違え | Choi, Hecht & Tayler 2012, Lost in Translation: The Effects of Incentive Compensation on Strategy Surrogation, The Accounting Review 87(4) | 手順書に自分で足した「10 項目 PASS」を完成と読んだ | ◎(対照表 §3) | T51 |
| stale artifact(false negative) | — | 古い成果物による見逃し | — | 古い bake(焼いたベクトル)で、回帰があるのに検査が緑になった | ◎(対照表 §3) | T52 |
| obsolete test(test rot) | — | 陳腐化したテスト | — | 仕様変更で消えた出来事を、期待の行が待ち続けて永久に FAIL した | ◎(対照表 §3) | T53 |
| Guru Checks Output / blind re-baselining | — | 「人が出力を見て正解とする」・盲目的な基準の更新 | Guru Checks Output: WikiWikiWeb(c2.com)の頁 GuruChecksOutput(定義は John Farrell。年は頁に無い)。blind re-baselining は — | golden の期待値を「いま通る値」に書き換えかけた(実際に書き換えた差分は無い)。自己検証する !expect を併用する | ○ 踏みかけただけで、踏んではいない | T54 |
| Fragile Test | — | 壊れやすいテスト | Meszaros 2007, xUnit Test Patterns: Refactoring Test Code(Addison-Wesley)の test smell の目録 | 無関係な変更(検査の台本・台帳の更新)で、測定の結果が NOT-RUN になった | ○ 落ちたのは個々の検査ではなく結果の有効期限。Context Sensitivity に近く、下の over-invalidation の方が名前として合う | T55 |
| over-invalidation(coarse-grained dependencies) | — | 過剰な無効化(粗い依存) | — | NOT-RUN の監視に検査の道具と記録まで入れ、無関係な変更で測定が NOT-RUN になった。被検査物と道具を分けた | ◎(対照表 §3) | T55 |
| gold plating | — | 作り込みすぎ | — | 回帰テストが全部緑なのに、評価者の感想を根拠に要件外の改善を 21 回の探索的テストで続けた | ◎(対照表 §3) | T56 |
| exit criteria | — | 終了基準 | —(ISTQB の用語。IEEE 829 には「exit criteria」の名の節は無い) | 修正のたびに「再テスト未了」を再探索の命令と読み、終わらなかった。テスト計画を一か所に決めて閉じた | ◎(対照表 §3) | T56 |
| saturation effect | — | 飽和効果 | Mathur 2008, Foundations of Software Testing: Fundamental Algorithms and Techniques, Pearson Education | 検査を増やすループをいつ止めるか | △ 名前を借りているだけ(Mathur の教科書の語で、ISTQB の用語ではない) | T56 |
| single source of truth | SSOT | 単一の正 | — | 台本の目録をスクリプトに持ち、作品が増えて腐った。対象と同じ場所に置いた | ◎(対照表 §3) | T57 |
| Don't Repeat Yourself | DRY | 繰り返しを避ける原則 | Hunt & Thomas 1999, The Pragmatic Programmer | 同上 | ◎(対照表 §3) | T57 |
| shotgun surgery | — | 散弾銃の手術(1 つの変更が多くの箇所に散る) | Fowler 1999, Refactoring: Improving the Design of Existing Code, Addison-Wesley, 第 3 章 Bad Smells in Code(Beck と共著の章) | 同上 | ◎(対照表 §3) | T57 |
一覧(T58〜T64 作り方と周辺。どれも作る側の話で、遊んでいる間には動きません)#
| 正式名(英語) | 略称 | 日本語での呼び名 | 初出(著者・年・題・出た場所) | この作品で何に使っているか | 名前どおりか | 回 |
|---|---|---|---|---|---|---|
| generate-and-test / generator-verifier gap | — | 生成と検査・生成と検証の非対称 | generator-verifier gap: Song ほか 2024, Mind the Gap: Examining the Self-Improvement Capabilities of Large Language Models, arXiv:2412.02674(ICLR 2025。論文の語は generation-verification gap)。generate-and-test の名付けの初出は —(代表: Newell 1969・Newell & Simon 1972) | 制作で生成 AI に台詞やコードを書かせ、検査を通ったものだけを採る | ◎(対照表 §2) | T58 |
| spec-driven development | SDD | 仕様駆動開発 | —(学術の初出は無い) | 企画のファイルが単一の正で、コードではない | △ 対照表 §2 は ◎ だが、霧走町の第一章だけは作品データから企画を逆に起こした(adv-beats-from-work.mjs) | T59 |
| sketch-based synthesis | — | スケッチによるプログラム合成 | Solar-Lezama, Tancau, Bodík, Seshia & Saraswat 2006, Combinatorial sketching for finite programs, ASPLOS 2006 | 企画から作品データの骨を機械で起こし、穴だけを埋めさせる(adv-scaffold.ps1 の 13 工程。-Compare で 14。文書では 9 段と呼んできた) | ◎(対照表 §2) | T60 |
| Blueprint First, Model Second | — | 骨組みが先、モデルが後 | Qiu ほか 2025, Blueprint First, Model Second: A Framework for Deterministic LLM Workflow, arXiv:2508.02721 | 同上 | ◎(対照表 §2) | T60 |
| schema-first code generation | — | スキーマ先行のコード生成 | — | 同上 | ◎(対照表 §2) | T60 |
| color quantization / k-means | — | 減色・k 平均法 | 減色: Heckbert 1982, Color Image Quantization for Frame Buffer Display, SIGGRAPH '82。k-means: MacQueen 1967, Some Methods for Classification and Analysis of Multivariate Observations, Fifth Berkeley Symposium | 生成した背景の絵を 16 色・480×270 に落とす(寒色とは限らない)。配色は Maximum Coverage で作り k-means で磨く(「K-means 8」は 8 色でなく、動いた画素が 7 以下で止める閾値) | △ 手引きは絵ごとに色と形を手で直すと決めているが、第一章の 6 枚は自動の減色+矩形で指定した網だけで、修復・仕上げの手描きは 0 | T61 |
| dithering(ordered dithering) | — | ディザ・組織的ディザ | Bayer 1973, An optimum method for two-level rendition of continuous-tone pictures, Proc. IEEE International Conference on Communications | 第一章の 6 枚の網は全部、2×2 の Bayer の表と同じ閾値で置いた(自動ディザ〈4×4 の Bayer〉は実装があるが使っていない) | △ ordered dithering だが、画面全体でなく条件を満たした画素(23.7〜26.2%)にだけ置く | T61 |
| text-to-speech | TTS | 音声合成 | — | 声つきのプレイ動画。台本で UE を録り、AivisSpeech で声を重ねる(ゲームの中では声を出さない) | ◎ | T62 |
| git worktree | — | Git の作業ツリー | Git 2.5(2015 年 7 月)で入った | 作業ごとの worktree で並列に作り、main は同期とビルドだけ | ◎ | T63 |
T64 は連載のまとめで、新しい名前は出しません。
名前の付け方の決まり#
- 名前があるものは、その名前で呼ぶ。訳語や言い換えを新しく作らない。自分の言い方を使い続けると、外の知見が引けず、人に説明できず、既にある対処を作り直すことになるからです
- 名前どおりに使っていない所は「〇〇の変形」と書き、理由を添える。理由が言えない変形は、名前どおりのやり方に戻す
- 造語に既存の名前をかぶせない。造語は造語と書き、近い名前を挙げて違いを書く(表の「主張」)
- 同じ日本語が二つの別の方法を指していないかを確かめる。うちでは「変異テスト」が、言い方を変える検査(metamorphic testing)と、データを壊す検査(mutation testing)の両方を指していました。いまは分けて呼んでいます
- 新しい罠を踏んだら、対処を考える前に名前を調べる。名前があれば、対処も既にあります
- 1 回の検索で出なかったことを「名前が無い」と書かない。分野(検索・テスト・統計・ビルド)を変えて 2〜3 回引く
- 初出は書く日に検索して確かめる。確かめられないものは書かない
明日の夕方の T03 から、この表の上から順に書きます。最初は文字の正規化(NFKC と、うちの norm/1。norm/1 は NFKC の部分集合ではない)です。
表の技術が実際に動いているのを、第一章のブラウザ版で入力して試せます。無料で、プロフィールのリンクから。