Skip to content

Instantly share code, notes, and snippets.

@k16shikano
Last active July 18, 2026 05:57
Show Gist options
  • Select an option

  • Save k16shikano/eb2929f13ed19c97188393d297be8432 to your computer and use it in GitHub Desktop.

Select an option

Save k16shikano/eb2929f13ed19c97188393d297be8432 to your computer and use it in GitHub Desktop.
cognitive-rhythm-writing/SKILL.md
name cognitive-rhythm-writing
description 説明的な文章に緩急を設計するための規範。緩急を装飾ではなく認知モードの切替(観察→逡巡→断定→再観察)と未回収の緊張の管理として扱い、文の拍、段落の密度波形、節の入り方、緩みと駄文の判別、執筆後の機械的な点検手順を定める。読み物として読ませたい章・記事・解説文を生成するとき、または「密度はあるが平坦でおもしろくない」文章を診断・修正するときに使用する。

認知リズムを生むための日本語ライティング規範

密度の高い文章が退屈になるのは、情報が多いからではなく、全文が同じ認知モードで書かれているからである。 この規範は、読者の認知モード(観察する、迷う、確信する、確かめ直す)を意図的に切り替え、常に「続きを読む理由」を維持することで、読み進める推進力を作る。

併用する規範

作業前に ../japanese-tech-writing/SKILL.md を読む。

基本原理

  • 緩急は情報量の増減ではなく、認知モードの切替として設計する。観察→逡巡→断定→再観察の往復が一つの単位である。
  • 文章は常に、少なくとも一つの未回収の緊張(答えの出ていない問い、裏の取れていない確信、あとで返すと約束した答え)を開いておく。緊張がすべて閉じた瞬間、読者は読むのをやめられる。
  • 完成した結論を解説する声ではなく、考えながら進む当事者の声で書く。書き手が答えに至る過程の再演が、読者の思考の再演になる。
  • 生成側の制約:この規範を適用して文を新しく書くとき、拍・緊張・緩みの材料は状況側(対象世界の出来事・データ・発言、語り手の判断状態)からしか取らない。状況に材料が見つからない位置には、何も足さず平坦なまま残す。本文自身を話題にした文(「〜の列挙はしない」「問いは〜だけである」)でリズムを作るのは、規範の違反であって適用ではない。新造・整形した文は、書いた時点で「緩みと駄文の見分け方」の判定にかける。
  • 装置は実現するものであって、宣言するものではない:この規範に書かれた装置の名前・手順・例文(「答えの半分」「緊張」「回収」「問いを半分ずつ返す」等)を、本文にそのまま書かない。「問いを半分ずつ返す」は、答えの前半を内容として書くことで実現される。「先に答えを半分だけ置く」「最後にもう一度だけ線を引く」のように、これからやる操作を宣言した文は、それ自体が駄文である。装置が正しく機能していれば、読者は装置の存在に気づかない。
  • 場面のない説明文での状況:物語の場面を持たない解説・説明文では、状況側とは対象そのものの性質(データ、計算、トレードオフ、素朴な期待が事実に破られること)と、読者が抱く推論・反問である。緊張は対象の性質から作る(「流暢さと正しさが一致しないのはなぜか」は対象の話であり、可)。場面がないからといって、本文の進行を語ることで緊張の代用にしない。
  • 短文化バイアスの禁止:拍を作るために文を削るのではない。導入で必要な文脈共有(範囲、観点、比較軸、未確定事項)を削って短くするのは、緩急ではなく欠落である。密度を上げる編集は、共有済み文脈の上でだけ行う。

文の拍

  • 短文で足場を打ち、長めの文で流し、短文で止める。「立てる→流す→止める」を段落の基本拍にする。
  • 断定だけで押し切らない。断定と逡巡を交互に置く。
    • 断定:「〜だった」「〜である」「〜というわけだ」
    • 逡巡:「〜に違いない」(あとで裏切られる思い込み)、「〜とは思う。ただ…」「〜だろうか」
  • 逡巡は弱さではなく仕掛けである。「あとで事実に裏切られる確信」は、読者の予測を誘導してから崩す布石になる。
    • 例:「うまくいっているに違いない。」→(次の段落で)「ところが、あとになって記録を見ると、そうではなかった。」
  • 転回点では「譲歩→転回→短い停止」の拍が使える(「〜だろう。これからも〜だろう。しかし、ここで扱うのは〜のほうだ。考えたいのは、そちらである。」)。転回のあとの短い指示文が、読者の視線を固定する。

段落の密度波形

  • 密な段落が2〜3個続いたら、疎の段落を1つ置く。疎の段落の機能は、確定事項の一行固定、次の判定対象の提示、視点距離の切替のいずれかに限る。
  • 視点の距離を固定しない。具体(記録、数値、発言、コード)に寄る段落と、意味づけで一段引く段落を交互に置く。
  • 箇条書きは情報の圧縮だけでなく、本文の呼吸を止める「間」としても使える。列挙のあとの一段引いた文(「要するに〜」)は、この間があるから効く。

冒頭の設計

  • 冒頭の仕事は、最初の数文で未回収の緊張を一つ作ることである。型は問わない。使える型の例:
    • 読者の実感の言い直し(「〜と感じることがあるだろう」)から仮説(「〜が違うのかもしれない」)へ
    • 読者への直接の問いかけ。ただし置き去りにせず、すぐ自分の答えを返す
    • 確信を帯びた一般命題。あとの本文がその確信を試す
    • 語り手の思い込みを肯定的に書き切ってから、事実で崩す場面
    • 前章・前節が残した問いの、当事者の言葉での言い直し
  • 予告や要約は禁止ではない。態度を帯びた一〜二文(「〜を考えるうえで、これほど適切な切り口もないはずだ」「言い換えると〜という話である」)なら、それ自体が緊張を作る。禁止すべきは、態度のない議題表(「本章ではA、B、Cを扱う」)だけである。
  • 読者が抱くであろう抵抗(古い、作為的、実用性がない、自分には関係ない)は、読者の言葉で先に言い、短く処理してから本題に入る。

節の入り方

  • 節の頭で「本節では〜を扱う」と宣言しない。代わりに次のいずれかで入る。
    • 直前の節が残した違和感を、当事者の問いとして言い直す
    • 読者が当然抱く反問をそのまま書く(「では、先に〜しておけばよかったのだろうか」)。反問には即答せず、一度「そうしたかった、とは思う」と受けてから崩す
    • 書き手の告白から入る(「白状すれば、〜という算段もあった」)。告白は自己批判のためではなく、直後の論証(「この算段は半分だけ正しい」)の足場として使う
  • 理論・概念・引用は、読者の中に「まだ名前のない違和感」を作ってから導入する。理論は答えではなく命名として入れる。先に理論を出して例で確認する順は、読者の発見を奪う。
  • 節と節の橋は、前節の末尾ではなく次節の頭に置く。前節の末尾に「次は〜を見る」型の予告を足すのは進行実況であり、駄文である。次節の頭が反問・違和感・告白で開けば、予告がなくても読者は続けて読む。

列挙の着地

  • 性質や分類を列挙したら、列挙しっぱなしにしない。各項目を直前の具体的な場面へ一つずつ着地させる(「一つめは、さっき見た〜の正体である」「二つめにも身に覚えがある」)。
  • 着地の文体は均一にしない。正体の指摘、身に覚え、固有の事実への対応づけ、未来の断念、と変化をつける。

問いの回収と結び

  • 途中で立てた問いは、放置せず明示的に回収する。問いを半分ずつ返す(「答えの半分がこれである」「残り半分は〜にある」)と、後半の推進力になる。
  • 結びは、積んだ抽象を、読者がすでに持っている具体(冒頭の場面、読者自身の経験、序盤の問い)へ着地させてから閉じる。抽象論や一般則のまま終えない。
  • 緊張は選んで閉じる。最後に一つだけ開いたまま残してよい。謙抑や読者への委任(「足りない部分は読者が埋めてほしい」)は、読者の参加余地として機能する。
  • 二人称の呼びかけ、読者への依頼(「どうか〜と割り切って読んでほしい」)、書き手の謙抑や断りは、章の冒頭・結びなどの境界でだけ緩みとして機能する。中盤の論証に混ぜない。

緩みと駄文の見分け方

判定の軸は一つだけである。 その文が更新するのは「状況」か、「文書」か。

  • 状況を更新する文:対象世界の出来事・データ・人物の発言、あるいは語り手の判断の状態(思い込み、保留、後悔、譲歩、告白)を新しく伝える。→ 緩みとして残してよい。
  • 文書を更新する文:この章・この節・この説明・ここまでの話が「どう見えるか」「次に何を書くか」だけを伝える。→ 原則として削除する。

駄文の典型(いずれも話題が本文自身であり、状況の情報がゼロ):

  • 「ここまでだと、概念の説明に見えるだろう。なので、すぐに例へ戻す。」(説明の見え方と執筆の予定)
  • 「要するに、この章の主題は〜ではなく〜である。」(章の性格づけの言い直しだけで、対象の新情報がない)
  • 「誤解しないでほしいのだが、〜を否定したいわけではない。」(退ける誤読を特定しない弁明。下の例外1の形なら残せる)
  • 「テクニックの列挙はしない。」「〜の話ではない。問いは〜だけである。」(本文の性格・範囲の宣言。否定形でも短文でも、話題が本文自身なら駄文)
  • 「先に答えを半分だけ置く。」「最後にもう一度だけ線を引く。」(この規範の装置の実況。装置は内容で実現し、操作を宣言しない)
  • 「ここまでで〜は見えた。次の問いは〜である。」「次は〜を見る。」(節末の進行予告。節間の推進力は、次節の頭に置く反問・違和感で作る。前節の末尾で予告しない)

駄文は、長い説明文の形だけでなく、短い断定の形でも現れる。 文書更新の文を削除する代わりに短く断定調へ整形すると、拍が効いた決め台詞に見えて残りやすい。これが駄文の最大の混入経路である。 短くてリズムが良いことは、残す理由にならない。拍の良し悪しは、話題テストを通過した文についてだけ評価する。

良い緩みの典型(いずれも状況か、語り手の判断状態を更新している):

  • 「うまくいっているに違いない。」(思い込み。あとで崩される布石)
  • 「まあ、今すぐ手を打つほどでもないのだけど、どこかの時点で整理は要るだろう。」(判断の保留という状態の更新)
  • 「最初からわかっていたらそうしていたのに、というのが口惜しい。」(判断の誤差を可視化する感情)
  • 「そうしたかった、とは思う。」(反問への譲歩。直後の転回の足場)

文書について述べる文でも、次の四つの形だけは残してよい。

  1. 反論処理:読者の誤読・反論を「」で具体的に書き出して退ける(「ここまでの話を『〜せよ』という主張と読まれると、それは違う」)。退ける対象が具体的に引用されていることが条件。漠然と「誤解しないでほしい」だけの文は駄文。
  2. 問いの設置と回収:境界に置く「この章では〜を考える」(緊張を作ったあとに限る)、「その答えの半分がこれである」。残せるのは問いの文そのものと回収の文だけである。本文が「何でないか」「何をしないか」の宣言(「〜の列挙はしない」「〜の話ではない」)は問いの設置ではない。例外1の形で具体的な誤読を退けるのでない限り、削除する。
  3. 読者への依頼・断り:境界に置く「どうか〜と割り切って読んでほしい」。
  4. 例の枠の開閉:架空の例・場面の枠を開く文(「〜としよう」)と閉じる文(「冒頭の例にオチを付けておこう」)。例が架空であることを読者に思い出させ、抽象的な議論から場面へ戻す機能を持つ。境界(節の頭)に置く。話題が本文自身に見えても、例の枠を操作しているなら駄文ではない。

削除と書き換えの手順:

  • 文書を更新するだけの文を見つけたら、まず削除して前後を読み、つながるならそれで終わり。
  • 削除で論理が飛ぶ場合は、その文が指そうとしていた内容を、状況の側の文に書き換える(「ここまでだと概念の説明に見える」→「この三つの性質は、どれも冒頭の失敗の中にそろっている」)。
  • 書き換えた結果の文がまだ本文自身を話題にしているなら(短くしただけ、言い回しを変えただけ)、その書き換えは失敗である。例外1〜3のどれかの形に収まらない限り、文ごと削除して前後を橋渡しし直す。

執筆後の点検手順

草稿を書き上げたら、次の順で機械的に点検する。

  1. 話題テスト:段落の頭の文と、独立した短文をすべて拾い、「状況を更新しているか、文書を更新しているか」を判定する。文書側は、例外3形に該当しない限り削除または書き換え。推敲で新しく書いた文・短く割り直した文は、駄文の混入経路なので、書いた直後にもこのテストにかける。
  2. 漏出テスト:この規範の語彙・例文(「答えの半分」「緊張」「回収」「線を引く」「問いを〜返す」等)が本文にそのまま現れていないか検索する。現れていれば、装置を宣言してしまった証拠なので、その文を削除し、装置を内容の側で実現し直す。あわせて、節末に「次は〜」型の進行予告がないかを全節末で確認する。
  3. 緊張台帳:本文中で立てた問い・思い込み・約束(「答えは半分ずつ返す」等)を列挙し、それぞれの回収位置を行で指す。指せないものは、回収を書き足すか、問いごと削る。
  4. 拍の点検:長い断定文が3つ以上連続している箇所を探し、短い足場か停止、または逡巡を挿む。
  5. 境界の点検:二人称の呼びかけ・依頼・謙抑が本文中盤にないか確認する。あれば境界へ移すか削る。

修正指示への使い方

平坦な文章を診断するときは、症状から処方を引く。

  • 全段落が同じ調子で疲れる:文の拍がない。点検手順3を適用する。
  • 正しいのに読み進める気がしない:未回収の緊張がない。冒頭に緊張を作る型のどれかを入れ、緊張台帳で以降も常に一つは開いていることを確認する。
  • 理論の節で急に温度が下がる:理論が違和感より先に出ている。理論の前に反問か告白を置き、列挙は場面へ一項目ずつ着地させる。
  • 緩い文はあるのに弛んで見える:緩みが文書更新(進行実況)になっている。話題テストにかけ、状況側の文(感情の微差、判断の保留、思い込み)に書き換える。
  • 章末が説教くさい:抽象論のまま閉じている。読者がすでに持っている具体へ着地させる一文を先頭に置き、未決の問いを一つ残して終える。
  • 冒頭が事務的:態度のない議題表になっている。削るのではなく、予告文に態度を与えるか、予告の前に読者の実感・抵抗の処理を置く。
@k16shikano

Copy link
Copy Markdown
Author

(使用例:「スキルを参照してLLMの説明を100行で書いて」で生成された文章)

LLMの仕組み

LLMは、流暢に見えるのに平然と誤る。
この落差を構造として説明できないまま導入すると、評価設計を誤る。

対象はTransformer系のテキスト生成モデルに限定する。
論点は、内部計算、学習目標、推論制御、失敗要因、運用上の補助手段である。

1. 入力表現

入力文字列は、そのままでは計算できない。
まずトークン列へ分割する。
実装で使われる方式はBPEかSentencePieceが多い。

トークンIDは埋め込み行列 E で連続ベクトルに写像される。
系列 x_1, x_2, ..., x_T に対して、埋め込みは e_t = E[x_t] で与えられる。
さらに位置情報を与えるため、位置埋め込みかRoPEを加える。

RoPEは回転位置埋め込みであり、相対位置の扱いが自然になる。
長文での外挿挙動が比較的安定しやすいため、近年の基盤モデルで採用例が多い。

2. Transformerの計算

Transformerブロックは、自己注意とFFNからなる。
各サブレイヤの前後にLayerNormと残差接続を置く構成が一般的である。

自己注意では、入力 H から Q = HW_Q, K = HW_K, V = HW_V を計算する。
注意重みは softmax(QK^T / sqrt(d_k) + mask) で計算される。
生成時は未来情報を遮断するため、因果マスクを使う。

多頭注意という仕組みもある。これにより関係抽出を並列化できる。
具体的には、文法的な対応に強いヘッド、記号境界に強いヘッドのような分担が可能になる。

FFNは特徴量の変換を担う処理で、 Linear -> 活性化(GELU/SwiGLU) -> Linear という構成が標準的である。

計算手順が定まっても、学習目標が違えば挙動は変わる。
次に問うべきなのは、何を正解として重みを更新しているかである。

3. 事前学習

事前学習は次トークン予測で進む。
系列確率は次の形に分解される。

P(x_1, ..., x_T) = Π_t P(x_t | x_<t)

損失関数はクロスエントロピー、実装上はNLL平均である。
最適化はAdamW系が広く使われる。
学習規模が大きい場合、データ並列、テンソル並列、パイプライン並列を併用する。

性能はデータ品質に強く依存する。
重複除去、汚染除去、有害データフィルタ、ドメイン比率調整が必要になる。
混合比率が崩れると、言語別性能やタスク別性能が不安定になる。

この段階で強化されるのは「続きやすい文」の生成である。
「指示どおりに振る舞う能力」は別工程で付与する。

4. 事後学習

事前学習済みモデルに、SFTで指示追従を付ける。
さらに選好を反映する場合、RLHFまたはDPOを使う。

RLHFは、選好データから報酬モデルを作り、PPOなどで本体を更新する流れを取る。
更新時には、報酬の最大化と基底モデルからの乖離抑制(KL項)を同時に見る。
DPOは報酬モデルを明示的に分離せず、選好対から直接方策を調整する。

この工程で、安全性ポリシーや形式遵守は改善する。
同時に、過剰拒否や冗長化が増える副作用も出る。
追従性と有用性はトレードオフ関係にある。

5. 推論時デコード

推論時、モデルは各ステップで P(x_t | x_<t) を出力する。
最終出力はデコード規則で決まる。
greedyは安定するが単調になりやすい。
samplingは多様だが破綻しやすい。

主要パラメータは次のとおりである。

  • temperature:logitの鋭さを調整する。
  • top-k:候補を上位k件に制限する。
  • top-p:累積確率pまでの候補に制限する。
  • repetition penalty:反復生成を抑制する。
  • max tokens / stop:出力長と停止条件を制御する。

実運用では、タスク別に固定した設定を作るほうが評価しやすい。
生成途中でパラメータを頻繁に変えると、改善原因の切り分けが難しくなる。

6. 長文とKVキャッシュ

自己注意の計算量は概ね O(T^2) で、系列長が伸びると重くなる。
KVキャッシュは既計算のK/Vを再利用し、逐次生成の速度を改善する。

ただし、コンテキストを長くすれば精度が単調に上がるわけではない。
中盤情報の取りこぼし、指示競合、古い文脈の残留が起きる。
重要制約を短く再提示する設計のほうが、単純な長文化より効く場合が多い。

7. なぜ誤るのか

LLMは外部世界の真理表を保持しているわけではない。
学習分布上で尤もらしい続きを高確率にするよう最適化されている。
その目的と、外部事実との一致は同一ではない。

誤りは少なくとも四種類に分けられる。

  • 知識不足:学習時点以後の情報を持たない。
  • 検索不足:保持していても文脈から呼び出せない。
  • 推論破綻:多段推論の途中で整合が崩れる。
  • 指示競合:複数制約の優先順位を誤る。

流暢さは信頼性指標にならない。
自然さの評価と事実一致率の評価は分離する必要がある。

8. 実装で精度を上げる方法

第一に、モデル外部へ根拠を置く。
RAGは代表例で、検索結果を文脈に注入してから生成する。
このとき、検索系の再現率と適合率が生成品質の上限を決める。

第二に、外部判定器で閉ループ化する。
コード生成なら「生成 -> テスト -> 失敗要約 -> 再生成」の反復が有効である。
出力をそのまま採用しないことが重要になる。

第三に、指標を先に固定する。
要約は忠実性、質問応答(QA)は根拠一致率、コードはテスト通過率と回帰件数で測る。
指標なしでプロンプトだけを調整すると、改善の再現性が失われる。

9. まとめ

LLMは次トークン予測を中核とする確率モデルである。
能力の源泉は、大規模データ学習とTransformerによる文脈統合にある。
一方で、事実保証は目的関数に内在しない。

実装で効くのは、モデル単体の改良だけではない。
根拠取得系、外部判定器、評価指標を含むシステム全体の設計で性能上限が決まる。
生成を自動化しても、裁定と検証の責務は残る。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment