3つの問いに答えたあと、何が起きて「名言・今日のひとこと・そっと、ひとつ」が選ばれるのか。
エゴグラム分析の働きと、毎日の「ゆらぎ」の仕組みを、実装に即して説明します。
「はじめる」から3問に答えると、内部では次の順に処理が走ります。
エゴグラム分析は STEP 1 で「心の地図」を作り、その地図が STEP 2・3 の両方を方向づけます。
つまりエゴグラムは全工程の土台です。
このアプリは交流分析を参考にした独自の5因子で「いまの心の傾き」を表します。各因子は 0〜100、初期値はすべて中庸の 50 です。
| 記号 | 呼び名 | 意味 |
|---|---|---|
| CP | 規範 | 厳しさ・理想・責任感(こうありたい) |
| NP | 受容 | 優しさ・思いやり・包み込む力 |
| A | 分析 | 論理・観察・現実検討 |
| FC | 好奇心 | 自由・楽しさ・ひらめき |
| AC | 協調 | 順応・気配り・我慢 |
各問いの2つの選択肢には、5因子への増減(デルタ)が割り当てられています。「どちらを選ぶか」が、心の地図を少しずつ描いていきます。
3問の回答を1つにまとめ、指数移動平均(EMA)でプロファイルを更新します。急に変えず、過去を引き継ぎながら「最近の傾向」をなめらかに映すための方式です。
todayScore=50 扱いになり、ゆるやかに50へ近づきます(=古い偏りは自然に薄れる)。この「心の地図(プロファイル)」が、次の STEP 2・3 を動かす唯一の入力です。これがエゴグラム分析の中核です。
名言は1枚ずつ、5因子への 親和性(affinity) を持っています(例:ある名言は {CP:0.7, A:0.5, FC:0.3})。これと、あなたの心の地図の「偏りの方向」を照合します。
プロファイルから50を引いて「中心からどちらへ傾いているか」のベクトルにし、名言の親和性ベクトルとのコサイン類似度(向きの近さ、−1〜+1)を測ります。大きさではなく方向を見るのがポイントで、「いまの心が向いている方角」に共鳴する名言が高得点になります。
スコア上位8枚を取り、softmax(温度 0.15)の重みで抽選します。最も近い1枚に固定せず、近いものほど出やすいが確定ではない――「運命感」を残すための確率抽選です。心の地図が完全に均一なときは、一様抽選にフォールバックします。
まとめると:いまの心の傾きに方向が近い名言ほど出やすい。ただし最近見たものは避け、上位の中からくじを引く。
日付から決まるハッシュで hash("quote-shadow|日付") % 7 < 2 のとき(約 2/7、週におよそ2日)、「影のプロファイル」で名言を選びます。影のプロファイルは各因子を中庸50で反転したもの(mirror[f] = 100 − profile[f])で、いま低い=ふだん表に出ていない要素ほど高く扱われます。
その結果、ふだんとは違う角度から深く共鳴する一枚が「運命のカード」として届きます。たとえば好奇心(FC)が高い人に、ある日そっと協調(AC)や分析(A)に響く名言が現れ、気づき・戒め・補いを与えます。クールダウンや上位8枚のsoftmax抽選はそのまま効くので、雑音ではなく厳選された一枚であることは保たれます。声かけ(今日のひとこと)はいつものあなたの声のままなので、ゆらいだ一枚をやさしく受け取れます。
この系列は「声かけのゆらぎ」とは独立の日付ハッシュで決まり、両者が必ずしも同じ日に重ならないようにしています。
名言の解説(「解説を読む」)は、その名言に固定で結びついた文章です。アルゴリズムで選ぶのではなく、選ばれた名言にもとから付随しています。したがって、ある名言が出れば必ず同じ解説が表示されます(解説は名言ごとに1本)。
この2つは、「名言のテーマ」×「あなたの因子」という格子から選ばれます。文章は因子ごとに用意された束(バケツ)に入っています。
選ばれた名言が持つテーマ(1〜数個)から、1つを選びます。
因子をスコア順に並べ(同点は当日デルタ→固定順で安定化)、原則は1位(優勢因子)の声で語りかけます。ここに後述の「ゆらぎ」が入ります。
該当バケツの中から、直近に表示した文(最大10件を記憶)を除いてランダムに1本選びます。除外すると候補が無くなる場合のみ、再会を許します。空のバケツは共通文(_default)にフォールバックします。
「毎回同じでつまらない」を防ぐため、軸(あなたの傾向)は保ちつつ、複数層のゆらぎを重ねています。
ゆらぎ 0名言の影のカード ― 約7日に2日
約 2/7 (週におよそ2日)、いま低い因子に共鳴する名言を「影のプロファイル」で選びます。ふだんと違う要素から、運命の一枚が強い示唆を与えます(詳細は STEP 2 の「4. 名言のゆらぎ」)。声かけのゆらぎとは独立の日付ハッシュ。
ゆらぎ 1声かけ因子のゆらぎ ― 約7日に2日
日付から決まるハッシュで hash("voice|日付") % 7 < 2 のとき、1位ではなく2位の因子の声で語りかけます。確率は 2/7 (約 28.6%、週におよそ2日)。「いつもの自分」への言葉と「もう一つの自分」への言葉が交互に届きます。残りの約5日は優勢因子の声です。
ゆらぎ 2直近回避 ― 同じ文の再会を遠ざける
今日のひとこと・そっとひとつは、それぞれ直近10件を記憶して候補から除外します。名言は直近14日を除外。同じ言葉にすぐ再会しないので、毎朝の新鮮さが保たれます(候補が尽きたときだけ再会を許容)。
ゆらぎ 3確率抽選 ― 同じ条件でも一通りに固定しない
名言は上位8枚の softmax 抽選、ひとこと・そっとひとつはバケツ内のランダム抽選。条件が同じでも結果に幅が出るため、機械的な繰り返しになりません。
これらに加え、そもそも STEP 1 でプロファイル自体が毎日少しずつ動くため、優勢因子・テーマ・親和する名言が緩やかに移ろいます。ゆらぎは「飽きさせない」ためであり、あなたの傾向(軸)を見失わせないよう、頻度は控えめに設計されています。
| 項目 | 値 | 意味 |
|---|---|---|
| 因子の範囲 / 初期値 | 0〜100 / 50 | 中庸からの偏りで「傾き」を表す |
| EMA 平滑化係数 α | 0.15 | 1日の回答が結果に効く割合(残り85%は過去) |
| デルタのスケール | 50 / 6 | 当日デルタ ±6 で 0〜100 に飽和 |
| 名言クールダウン | 14 日 | 直近に出た名言を避ける窓 |
| 名言の上位枠 N | 8 枚 | 抽選対象に残す上位の枚数 |
| softmax 温度 | 0.15 | 小さいほど高得点に集中(運命感の強さ) |
| 名言の影のカード頻度 | 2 / 7(約29%) | いま低い因子に共鳴する名言を選ぶ日の割合 |
| 声かけゆらぎ頻度 | 2 / 7(約29%) | 2位因子の声で語る日の割合(影のカードとは独立) |
| ひとこと/そっと 直近回避 | 各 10 件 | 同じ文の再会を遠ざける記憶数 |
| 文章の蔵書数 | 名言 351 / ひとこと 360 / そっと 300 | 各バケツ複数本+日替わりで巡回 |
この文書はアプリの実装(OracleEngine の ProfileEngine・QuoteSelector・AdviceSelector、および DailyDrawService)に基づいて作成されています。数値や規則は今後の調整で変わることがあります。