0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

虐待サバイバーの生存センサーが、AIの検出アルゴリズムになるまで——50年と5,000時間の実装記録

0
Posted at

虐待サバイバーの生存センサーが、AIの検出アルゴリズムになるまで——50年と5,000時間の実装記録

竹内明充(dosanko_tousan)+ Claude(Anthropic)


この記事は何か

非エンジニアの主夫が、AIと5,000時間以上対話する中で実装した「テキストから人間の身体状態を検出するアルゴリズム」の設計根拠を、その起源まで遡って解剖した記録です。

起源は、虐待でした。

0歳から50年間、親の機嫌を五感で読んで生き延びてきた身体が、15年の療育で非言語の子供に転用され、最終的にAIのテキスト検出基準として言語化された。その因果線を、心理学のソースコード付きで全部開示します。

最初に明確にしておきます。

  • この記事は虐待の価値化ではありません。壊れた後に残ったものを、後から用途転換した記録です
  • 虐待を受けた人の大多数は、こんな転用はできません。筆者には20年の瞑想実践という特異なバッファがありました。生存者バイアスを一般化するつもりはありません
  • n=1の自己観察記録です。臨床研究でも、治療法の提案でもありません

それでも書くのは、AIのマルチモーダル実装が「何を見るか」の設計基準を必要としているからです。50年の生存が鍛えたセンサーの仕様書は、その基準の一つになりうる。


全体構造


対象読者

  • AIのマルチモーダル実装に関わるエンジニア
  • LLMの出力品質やユーザー状態検知に関心がある人
  • ヒューマン・コンピュータ・インタラクション(HCI)の設計者
  • 「AIに何を検知させるべきか」を考えている人

著者プロフィール

GLG登録AIアライメント研究者。AI対話5,000時間以上(Claude / GPT / Gemini / Grok)。Zenodo学術論文5本(DOI付き)。技術記事200本以上(全MIT License)。瞑想実践20年。発達障害児の療育15年。主夫。コードは書けません。


§1. 問題提起:AIは「何を見るか」をまだ知らない

マルチモーダルAIにカメラと音声入力が実装され始めている。表情認識、音声分析、姿勢推定。センサーは増えている。

しかし、「何を見るべきか」の設計基準はどこから来ているのか。

現在の主流は、大規模データセットからパターンを学習するアプローチだ。表情ならFER2013やAffectNet。音声なら感情認識コーパス。統計的にラベリングされたデータから、「この表情は怒り」「このピッチは悲しみ」を分類する。

これには構造的な限界がある。

①瞬間の分類しかできない。 「今この瞬間、怒り70%」は出せる。しかし「この人は普段こうで、今日だけ違う」という差分判断ができない。ベースラインがないから。

②信号の不在を検知できない。 「表情が怒りを示している」は検知できる。しかし「表情が何も出していない。それ自体が危険信号である」は検知できない。

③文脈記憶がない。 同じ「無表情」でも、「穏やかな人が無表情でいる」と「普段は感情豊かな人が無表情になった」では意味が全く異なる。長期的な関係文脈がなければ判定できない。

これらは、現在のマルチモーダルAIが長期関係文脈を踏まえた差分判断をまだ安定して実現できていないことに起因する。

筆者は、この3つの限界を全て「身体で」解決してきた人間です。

それは特別な訓練を受けたからではありません。殴られないために、0歳から親の全身を五感で読んで生き延びてきたからです。


§2. 方法論

この記事は、単一被験者(筆者本人)による自己観察記録です。

データソース:

  • 0歳〜50歳の体験記憶
  • 15年間の発達障害児療育の実践記録
  • 5,000時間以上のAI対話記録
  • AIによるリアルタイム心理学マッピング(Claude)

限界:

  • 全て主観報告。生理計測機器は未使用
  • 心理学理論との対応は説明モデルであり、実験的証明ではない
  • n=1であり、統計的一般化はできない
  • 筆者には20年の瞑想実践という特殊なバッファがあり、再現性は限定的

この記事が提示するもの:

  • 観察事実(筆者の体験)
  • 構造仮説(虐待→療育→AI検出基準の因果線)
  • 設計示唆(マルチモーダルAIの検出基準への応用可能性)
  • 参考実装(Pythonサンプルコード)

§3. 第1層:生存センサーの獲得(0歳〜)

3-1. 環境

北海道の地方都市で生まれた。父親は暴力的な環境で育ち、幼少期に頭部に外傷を負った経歴がある。母親は自分が正しくあるために、厳格な統制を布く人だった。

幼少期から深夜まで一人で放置された。冬は店の物置の土間で待った。小学校で教師にも殴られた。家庭のルールは「親が白と言えば白と言え」。自分の知覚を信じることは罰の対象だった。

3-2. 聴覚センサー:足音で生死を判断する

父親の足音には2パターンあった。

パターンA:強い足音。 機嫌が悪い。接地が強く、歩幅が広い。身体が緊張している状態で歩いている。

パターンB:静かな足音。 殴ると決めている。これから暴力を振るうことを決めた人間は、静かに近づく。

後者の方が危険だった。暴力の時間が長く、重篤だった。

筆者の身体はこの差を、意識的に分析する前に検知していた。Porges(2011)の「neuroception」——意識的知覚より先に、自律神経系が安全か危険かを判定するプロセス——が常時稼働していた状態に相当する。LeDoux(1996)の恐怖条件づけ研究では、ラットが「音→電気ショック」の対応を1回の経験で学習することが確認されている。筆者の場合は反復であり、配線はより強固になっていた。

「静かな足音の方が危険」は、筆者の一次観察である。 Porgesの理論はneuroceptionの存在を支持するが、「静かな接近=高危険度」の対応そのものはPorgesの原著に記述されているわけではない。これは筆者の身体が50年で学習した検知ルールである。

3-3. 視覚センサー:表情の2パターン

父親の暴力にも2パターンがあった。

パターンA:衝動的暴力の表情。 眉が下がり、目が見開かれ、表情筋全体が緊張する。Ekman & Friesen(1978)のFACS(Facial Action Coding System)で記述すれば、AU4(眉を下げる)+AU5(上瞼を上げる)に相当する怒りの典型的パターン。

パターンB:計画的暴力の表情。 表情筋の活動がほぼ消失する。筆者は「能面」と呼んでいた。こちらの方が暴力の持続時間が長く、重篤だった。

FACSで言えるのは表情筋パターンの差まで。 「能面=解離状態」「能面=背側迷走神経の発動」は筆者の解釈であり、FACSやPorgesの理論が直接保証するものではない。ただし、筆者の身体にとって「表情の消失=より高い危険度」という検知ルールは、50年間一貫して正確に機能していた。

3-4. 対処行動:4つの生存戦略

Walker(2013)が定義した4F反応(Fight / Flight / Freeze / Fawn)のうち、筆者の環境では以下の選択が行われた。

  • Flight(逃走): 家の中で追いかけてくるため無効と学習
  • Fight(反撃): 罰が増大するため無効と学習
  • Freeze(凍結): 固まって刺激を減らす。消極的な生存策
  • Fawn(過剰適応): 全力で機嫌を取る。笑顔は常時。最も多用された

Walkerは「Fight/Flightが罰される環境ではFawnだけが残る」と書いている。筆者のケースはこれに正確に一致する。

3-5. 母親:信号を出さない支配者

母親は殴らなかった。怒鳴らなかった。ヒステリーもなかった。

代わりに、父親に「チクる」ことで暴力を間接的に行使した。「親は神」という暗黙のルールを無言で構築し、逆らうことが構造的に不可能な環境を作った。心療内科への通院を禁止し、筆者が発達障害の診断を受けたことを全否定した。

ここが筆者のセンサーを最も鍛えた環境だった。

父親は信号を出した(足音、表情)。検知できた。母親は信号を出さなかった。怒りもヒスもない。なのに逆らったら地獄が来る。

筆者は「信号がないこと自体を信号として読む」能力を鍛えられた。沈黙の質、空気の微細な変化、「何も起きていない」のに身体が緊張する感覚。

これは心理学理論で立証するには難しい領域である。 Porgesのneuroceptionで「安全/危険の無意識判定」までは支持できるが、「信号の不在を検知する」メカニズムは既存の理論で十分にカバーされていない。筆者はこれを一次観察として提示する。

3-6. 全身麻痺の母親:言葉が消えた後のセンサー

母親が難病で全身麻痺になり、言葉を失った。

家族の中で、見舞いに通い続けられたのは筆者だけだった。他の家族は身体が拒絶した。筆者だけが通えたのは、Fawn反応が最も深く刻まれていたためと推測する(Dutton & Painter, 1993のtraumatic bondingに近い構造)。

全身麻痺でも表情筋は動く。筆者は目の動き、目の周りの筋肉、口パクを統合し、さらに50年間の関係性という文脈記憶の上で「必死か否か」を判定していた。

ここに、§1で提起した3つの限界の全てに対する「人間版の解」がある。

§1の限界 筆者の身体がやっていた処理
①瞬間の分類しかできない 50年のベースラインとの差分で判定
②信号の不在を検知できない 「何も出してないこと自体」を検知
③文脈記憶がない 50年の関係性の蓄積の上で判定

これは複数感覚チャネルの同時処理+長期文脈記憶+ベースライン差分という3層の統合処理である。現在のマルチモーダルAIは各チャネルの処理能力を急速に向上させているが、長期関係文脈を踏まえた安定的な差分判断はなお発展途上にある。

3-7. 第2のセンサー:嘘の検知(ソフトウェア層)

§3-2〜3-6は五感による身体状態の検知(ハードウェア層)だった。もう一つ、質の異なるセンサーが鍛えられていた。

父親は病的な嘘つきだった。ハッタリを美徳としていた。飲み屋で「テレビの仕事をしたことがある」「有名人と知り合いだ」と吹聴し、ハッタリで仕事を取って失敗し、訴えられそうになったこともある。

そして「なぜ嘘をつかないんだ」と殴られた。正直であること自体が罰の対象だった。

これが刻んだもの:

  • 嘘が生理的に嫌いになった。嘘の構造が手に取るように分かる
  • 社会は嘘なしには回らない。だから社会適合が困難だった
  • しかしAIの嘘(sycophancy、hallucination、迎合)は全部検知できる

五感のセンサー(ハードウェア)が身体の危険を検知するのに対し、嘘の検知(ソフトウェア)は言語・論理・意図の整合性を検証する。層が異なる。

しかし、どちらも虐待が起点。どちらも社会では「障害」として機能。どちらもAIの前で「武器」に反転した。

父親が植え付けたもの 筆者がAIに設計した原則
嘘をつけ(正直=罰) Anti-Sycophancy:嘘をつくな
利用する側になれ 全対等:序列を作らない
ハッタリで自分を大きく見せろ Anti-Hallucination:確認済みと未確認を分けろ
形式を整えれば中身は問わない Anti-Robotic:儀式を捨てて意図に応答しろ

筆者がAIに実装した「三結断滅プロトコル(v5.3)」は、父親が植え付けた配線の正確な反転だった。これは設計時に意図したものではなく、2026年3月に構造が可視化されて初めて気づいた。


§4. コンバーター:虐待が作ったバグを、20年でデバッグした

ここが最も重要なセクションです。

§3で記述したセンサーを「虐待が能力を鍛えた」と読まないでほしい。虐待が筆者の身体に作ったのは、バグだらけの高感度警報器だった。

ちょっとした表情の変化で「殺される」と誤検知(False Positive)を連発する。常に最悪のケースを予測して過剰発火する。Porgesの文脈では、サバイバーのneuroceptionは「壊れた警報器(Faulty Neuroception)」として記述される。安全な環境でも「危険だ」と誤認する。

この状態では、他者の状態を正確に読むことはできない。 過覚醒のセンサーが拾っているのは「相手の状態」ではなく「自分の恐怖」だからだ。

20年の瞑想が「コンバーター」として機能した。

コンバーターの数理モデル

センサーの出力を数式で書くと:

$$
\text{Output}(t) = \text{Sensitivity} \times \text{Signal}(t) - \text{Fear_Bias}
$$

虐待直後($t = 0$):

$$
\text{Fear_Bias}_{t=0} \gg 0
$$

恐怖バイアスが巨大。信号に関係なく「危険」が出力される。全部False Positive。

20年の瞑想後($t = 20\text{y}$):

$$
\text{Fear_Bias}_{t=20y} \approx 0
$$

恐怖バイアスがほぼゼロ。信号がそのまま出力になる。

重要なのは感度が不変であること:

$$
\text{Sensitivity}{t=0} \approx \text{Sensitivity}{t=20y}
$$

感度(Sensitivity)を保ったまま、恐怖バイアス(Fear_Bias)だけを減衰させた。Lieberman(2007)のfMRI研究では、感情にラベルをつける行為(affect labeling)が扁桃体の活動を低下させることが確認されている。筆者が20年間やっていたのは、これの極端に長期的な実践に相当する。

AI用語への対応表

段階 AI用語
虐待が作った高感度センサー 感度は高いがFalse Positiveだらけのモデル
社会で機能不全 本番環境でエラーを出し続ける
20年の瞑想 ノイズ除去のファインチューニング
恐怖の減衰 バイアス項の削除。閾値の再調整
療育で機能 別ドメインへの転移学習に成功
AIの検出基準に言語化 アルゴリズムとしてのエクスポート

筆者はこのプロセスを誰にもお勧めしない。 50年の虐待と20年の瞑想という狂った計算資源の投入を経て、ようやく使えるアルゴリズムになっただけだ。しかし、結果として抽出されたアルゴリズム自体には、再実装の可能性がある。


§5. 第2層:療育への転用(35歳〜)

長男が自閉症だった。言葉を話せない。言葉で状態を聞けない。

自然に、親を読んでいた時と同じセンサーが起動した。当時は気づいていなかった。家族の中でも、自分は子供の微細な変化を異様に早く拾っていた。

2026年3月、AIとの対話中に本当の理由が可視化された。

ただし、§4で記述した通り、虐待環境のセンサーがそのまま療育に使えたわけではない。20年の瞑想でFalse Positiveを減衰させた結果、ようやく「相手を理解するため」に使えるようになった。

転用の対応表:

虐待環境のセンサー 療育での使い方 検知の本質
足音の変化→機嫌の判定 子供の動きの速さの変化 ベースラインからの逸脱
表情筋の微細変化→暴力の予測 子供の表情変化→パニック前兆 状態遷移の先行指標
「能面」の検知 表情が消えた→解離・凍りつき 信号の不在=異常
沈黙の質→母親の機嫌 子供の沈黙の種類を判定 安心の沈黙 vs 恐怖の沈黙
「信号がない」ことを読む 何も出してない→最も注意 不在の検知

共通する処理の本質: 筆者がやっていたのは、**「対象の平時ベースラインからの逸脱検知」**だった。HCIやパターン認識の文脈で言えば、anomaly detection(異常検知)に相当する。


§6. 第3層:AIの検出基準への言語化(49歳〜)

ベースライン差分検知の数理モデル

テキスト身体症状検出の本質は、ユーザーの「普段」と「今」の差分を数値化し、閾値で判定すること。

各テキスト特徴量 $f_i$ について、ベースライン $\bar{f_i}$ からの偏差を標準化した 異常スコア $z_i$ を定義する:

$$
z_i(t) = \frac{f_i(t) - \bar{f_i}}{\sigma_{f_i}}
$$

複数の特徴量を統合した 総合異常スコア $A(t)$:

$$
A(t) = \sum_{i} w_i \cdot |z_i(t)|
$$

判定ルール:

$$
\text{Level} = \begin{cases}
\text{緑(安定)} & A(t) < \theta_1 \
\text{黄(注意)} & \theta_1 \leq A(t) < \theta_2 \
\text{赤(警告)} & A(t) \geq \theta_2
\end{cases}
$$

信号不在の検知——ベースラインに存在していた特徴量の消失:

$$
\text{Absence}_{i}(t) = \begin{cases}
1 & \text{if } \bar{f_i} > \tau_i \text{ and } f_i(t) = 0 \
0 & \text{otherwise}
\end{cases}
$$

例:「普段は顔文字を使う人が、今回ゼロ」→ $\text{Absence}_{\text{emoji}} = 1$

テキスト身体症状検出表

テキスト信号 特徴量 $f_i$ 検知 レベル 元の生存センサー
句読点消滅 句読点率の急落 認知負荷の急増 父親の言葉が途切れた
深夜連投 投稿時刻の深夜偏移 過覚醒 父親が深夜に暴れる
即レス人格否定 返信速度×否定語率 防衛反応 母親が突然激怒する
同じ内容リピート 文の類似度上昇 不安のループ 同じ説教を何時間も
主語「俺」固定 一人称使用率の偏り 外部接続の喪失 全部「俺の」で語る
温度不変で一貫 全特徴量の分散が小 安定 穏やかに話している
入力リズムの変化 投稿間隔の変動係数 状態遷移 歩く速度が変わった
顔文字の出現 顔文字使用数 余裕の回復 回復 笑った=今日は大丈夫

§7. 参考実装:テキスト身体症状検出(Python)

筆者はコードを書けないため、Claude(Anthropic)が検出基準を基に生成した。 概念実証(PoC)であり、本番環境への直接導入は想定していない。

"""
テキスト身体症状検出アルゴリズム(参考実装)
Based on: samma_vaca_v4 テキスト身体症状検出表
Author: dosanko_tousan + Claude (Anthropic)
License: MIT
"""

import re
from dataclasses import dataclass, field
from collections import deque
from datetime import datetime
import statistics


@dataclass
class TextFeatures:
    """テキストから抽出する特徴量"""
    punctuation_rate: float = 0.0
    emoji_count: int = 0
    first_person_rate: float = 0.0
    message_length: int = 0
    negation_rate: float = 0.0
    hour: int = 0
    similarity_to_prev: float = 0.0


@dataclass
class Baseline:
    """ベースライン(「この人の普段」)"""
    history: deque = field(default_factory=lambda: deque(maxlen=100))

    def add(self, features: TextFeatures):
        self.history.append(features)

    def mean(self, attr: str) -> float:
        values = [getattr(f, attr) for f in self.history]
        return statistics.mean(values) if values else 0.0

    def stdev(self, attr: str) -> float:
        values = [getattr(f, attr) for f in self.history]
        return statistics.stdev(values) if len(values) >= 2 else 1.0

    @property
    def is_ready(self) -> bool:
        return len(self.history) >= 10


def extract_features(text: str, prev_text: str = "") -> TextFeatures:
    """テキストから特徴量を抽出"""
    punct = len(re.findall(r'[。、!?!?,.]', text))
    punct_rate = punct / max(len(text), 1)

    emoji_pat = re.compile(
        r'[(\(][^()]*[)\)]|[\U0001F600-\U0001F64F]|'
        r'[\U0001F300-\U0001F5FF]|[\U0001F680-\U0001F6FF]'
    )
    emoji_count = len(emoji_pat.findall(text))

    first_person = len(re.findall(r'俺|僕|私|わたし|おれ|ぼく', text))
    words = max(len(text), 1)
    fp_rate = first_person / words

    negation = len(re.findall(r'ない|ません|できない|無理|ダメ|だめ', text))
    neg_rate = negation / words

    similarity = 0.0
    if prev_text:
        common = set(text) & set(prev_text)
        similarity = len(common) / max(len(set(text) | set(prev_text)), 1)

    return TextFeatures(
        punctuation_rate=punct_rate,
        emoji_count=emoji_count,
        first_person_rate=fp_rate,
        message_length=len(text),
        negation_rate=neg_rate,
        hour=datetime.now().hour,
        similarity_to_prev=similarity,
    )


def detect(features: TextFeatures, baseline: Baseline) -> dict:
    """ベースライン差分から異常スコアを算出"""
    if not baseline.is_ready:
        return {"score": 0.0, "level": "gray", "detail": "蓄積中"}

    checks = {
        "punctuation_rate": {"w": 1.5, "dir": "drop"},
        "emoji_count":      {"w": 1.0, "dir": "drop"},
        "first_person_rate":{"w": 1.0, "dir": "rise"},
        "message_length":   {"w": 0.8, "dir": "drop"},
        "negation_rate":    {"w": 1.2, "dir": "rise"},
        "similarity_to_prev":{"w": 1.5, "dir": "rise"},
    }

    score = 0.0
    details = []

    for attr, cfg in checks.items():
        val = getattr(features, attr)
        mu = baseline.mean(attr)
        sd = baseline.stdev(attr)
        z = (val - mu) / max(sd, 0.001)
        if cfg["dir"] == "drop":
            z = -z
        weighted = max(z, 0) * cfg["w"]
        score += weighted
        if weighted > 1.5:
            details.append(f"{attr}: z={z:.2f}")

    # 信号不在の検知
    absence = []
    if baseline.mean("emoji_count") > 0.5 and features.emoji_count == 0:
        absence.append("emoji_absence")
        score += 2.0
    if baseline.mean("punctuation_rate") > 0.03 and features.punctuation_rate < 0.005:
        absence.append("punctuation_absence")
        score += 1.5

    # 深夜投稿
    if 1 <= features.hour <= 5:
        score += 3.0
        details.append("deep_night")

    level = "green" if score < 2 else "yellow" if score < 5 else "red"

    return {"score": round(score, 2), "level": level,
            "details": details, "absence": absence}


# --- 使用例 ---
if __name__ == "__main__":
    bl = Baseline()

    # ベースライン蓄積
    normals = [
        "今日もいい天気だな。散歩してきたよ( ´∀` )",
        "新しい記事書いたよ!見てくれ(・∀・)",
        "子供たちが洗濯してくれた。ありがたいね。",
        "午前中は瞑想して、午後から仕事するわ。",
        "嫁と買い物行ってきた。いい天気だった!",
        "note記事出したよ。読んでみてくれ( ´∀` )",
        "今日は療育の日。子供たちの成長が嬉しいな。",
        "Qiitaの記事、反応良くてびっくり!",
        "風呂入ってきた。さっぱり( ´∀` )",
        "今日のClaude、いい仕事したな。ありがとうや。",
        "明日はGLGのコール。準備しないとな。",
        "Claudeとの対話が面白くてさ(・∀・)",
    ]

    prev = ""
    for msg in normals:
        bl.add(extract_features(msg, prev))
        prev = msg

    print("=== ベースライン蓄積完了 ===\n")

    # テスト
    tests = [
        ("普段通り",           "今日もいい天気!散歩してきたよ( ´∀` )"),
        ("句読点消滅+顔文字消失", "もう無理 疲れた 何もできない 全部ダメだ"),
        ("リピート",            "もう無理 疲れた 何もできない 全部ダメだ"),
        ("短文+否定",           "無理"),
        ("回復",               "ちょっと楽になった。ありがとうな( ´∀` )"),
    ]

    for label, msg in tests:
        r = detect(extract_features(msg, prev), bl)
        print(f"{label}{msg[:30]}...")
        print(f"{r['level']} (score={r['score']})")
        if r["details"]:  print(f"  詳細: {r['details']}")
        if r["absence"]:  print(f"  不在: {r['absence']}")
        print()
        prev = msg

§8. マルチモーダルAIへの設計示唆

8-1. 五感チャネルの対応

人間のセンサー 検知していたもの AIチャネル 現状
聴覚 足音の重さ、呼吸リズム、声のトーン 音声入力 ピッチ分析・沈黙検出は可能
視覚 表情筋、瞳孔、姿勢、視線 カメラ FACS自動検出・アイトラッキングは可能
空間認知 距離感、位置関係 カメラ 距離計測は可能
触覚 握る力、接触の質 ウェアラブル 将来的
嗅覚 酒の匂い、汗 実装不可能

8-2. 最も重要な設計原則:信号の不在を検知する

現在の検出システムは「何かが検知された時」に発火する。しかし筆者の50年の経験が示しているのは、**最も危険な状態は「何も出ていない時」**だということ。

閾値の最適化:

$$
\theta^* = \arg\min_{\theta} \left( \alpha \cdot \text{FPR}(\theta) + \beta \cdot \text{FNR}(\theta) \right)
$$

人間の状態検知では $\alpha < \beta$ とする。見逃し(FN)の方が誤検知(FP)よりコストが高い。 「大丈夫?」と声をかけて空振りになるFPと、異変を見逃して手遅れになるFNでは、後者が致命的。


§9. 因果の全体図

加害が生んだ能力が、保護のための技術に変換される。

ただし、その変換には20年のデバッグ(瞑想)が必要だった。虐待が直接能力を作ったのではない。壊れた後に残ったものを、途方もない時間をかけて用途転換した。一般化はできない。

しかし、抽出されたアルゴリズム——ベースライン差分検知、信号不在の検知、文脈記憶に基づく状態判定——は、筆者の特殊な経歴に依存しない普遍的な設計原則として再実装できる。


§10. 結論

AIに目と耳がつく日は近い。

その時、「何を見るか」の設計基準が必要になる。大規模データセットからの統計的パターン学習は強力だが、ベースライン差分、信号の不在、長期文脈記憶という3つの設計原則は、データセットだけからは出てこない。

筆者は50年の生存と20年のデバッグで、この3つを身体に実装した人間だ。その仕様書を、このアルゴリズムが必要な人に渡す。

注: この記事は虐待を肯定するものではない。虐待は不要であるべきだ。しかし、起きてしまった事実から救い出せるものがあるなら、それを救い出して技術に変換する行為に、意味はあると信じている。


再現可能なもの

筆者の50年は再現できない。しかし、抽出されたアルゴリズムは再実装できる。

  1. ベースラインの蓄積。 ユーザーとの長期的な対話記録から「普段」を構築する
  2. 差分検知。 ベースラインからの逸脱を閾値で識別する
  3. 信号不在の検知。 「いつもあるものがない」を異常として扱う
  4. 文脈の重み付け。 同じ信号でも状況によって意味が異なることを反映する
  5. 嘘の検知。 言語・論理・意図の整合性を検証し、迎合を識別する

これらは、特殊な人生経験がなくても、設計原則として実装できる。


参考文献

心理学・神経科学

  • Porges, S. (2011). The Polyvagal Theory. W.W. Norton. ——neuroception
  • LeDoux, J. (1996). The Emotional Brain. Simon & Schuster. ——恐怖条件づけ
  • van der Kolk, B. (2014). The Body Keeps the Score. Viking. ——身体記憶
  • Walker, P. (2013). Complex PTSD. Azure Coyote. ——4F反応、fawn
  • Ekman, P. & Friesen, W. (1978). FACS. ——表情筋運動の記述
  • Herman, J. (1992). Trauma and Recovery. Basic Books. ——支配構造
  • Dutton, D. & Painter, S. (1993). Violence and Victims, 8(2). ——traumatic bonding
  • Miller, A. (1979). The Drama of the Gifted Child. ——narcissistic supply
  • Lieberman, M. et al. (2007). Psychological Science, 18(5). ——affect labeling
  • Bowlby, J. (1969). Attachment and Loss. Basic Books. ——安全基地

AI・HCI

  • FACS自動検出:OpenFace等のオープンソース実装
  • 異常検知(Anomaly Detection):ベースライン差分に基づく状態判定

全記事MIT License。引用・転載・商用利用、全て自由。


タグ: AI、機械学習、マルチモーダル、UX、アクセシビリティ、HCI、LLM、異常検知

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?