Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Build a Cognitive Distortion Detector in 60 Lines of Python

2026年10月01日に「Dev.to」が公開したITニュース「Build a Cognitive Distortion Detector in 60 Lines of Python」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonで60行未満のコードを使い、認知の歪みを検出するプログラム構築法を紹介。機械学習やAPI不要で、文章中の特定の言葉をパターンマッチングで分析し、10種類の認知の歪みを特定する。SE初心者にも分かりやすく、身近な課題解決に役立つ技術を学べる。

ITニュース解説

この記事では、わずか60行程度のPythonコードを使って「認知の歪み」を検出するプログラムを開発する方法が解説されている。認知の歪みとは、人が陥りやすい思考の偏りや、現実を誤って解釈してしまう心理的な癖のことだ。例えば、「一度失敗したから、いつも失敗するだろう」とか、「誰もが自分を批判しているに違いない」といった考え方がこれにあたる。これらの歪みは、1960年代に心理学者のアーロン・ベックによって特定され、認知行動療法(CBT)と呼ばれる心理療法の主要なターゲットとなっている。驚くべきことに、これらの認知の歪みは、特定の言葉のパターン、つまり「言語的な署名」を持つため、コードを使って検出できるのだ。

この記事の目的は、機械学習モデルや外部APIの利用なしに、テキスト入力から10種類の認知の歪みを特定する検出器をPythonで構築する方法を示すことにある。これは、心理療法士が患者の会話の中から探し出すような言語的マーカーに基づいて、パターンマッチングを行うシンプルなアプローチである。

検出対象となる10種類の認知の歪みと、それぞれの特徴的な言葉のパターンは以下の通りだ。

  1. 全か無か思考(All-or-Nothing Thinking): 物事を「すべて」か「全くない」かの極端な二択で捉える思考パターン。「いつも」「決して~ない」「完全に」「全く」といった言葉が特徴的で、「私はいつも失敗する」といった発言に現れる。
  2. 過度な一般化(Overgeneralization): 一つの出来事を、無限に繰り返されるパターンと見なす傾向。「いつも」「決して~ない」「毎回」といった言葉が使われ、「毎回挑戦しても失敗する」といった考え方になる。
  3. 心のフィルター(Mental Filter): 否定的な側面にばかり焦点を当て、肯定的な側面を無視する思考。「~だけ」「~に過ぎない」「~以外何も~ない」といった言葉が手がかりとなり、「悪い部分しかなかった」というように表現される。
  4. 陽性の否定(Disqualifying Positive): 肯定的な経験や評価を、それが重要でないかのように退けてしまう。「しかし」「~は数に入らない」「~は関係ない」といった言葉や、「ただ親切にしているだけ」といった表現が特徴だ。
  5. 読心術(Mind Reading): 他人が何を考えているか、勝手に決めつけてしまう。「彼らは~と考えている」「誰もが知っている」「人々は~している」といった表現が見られる。「彼らは私が馬鹿だと思っている」といった発言が典型だ。
  6. 未来予測(Fortune Telling): 将来の否定的な結果を、まるで事実であるかのように予測する。「決して~ないだろう」「失敗するだろう」「~にはなれないだろう」といった未来に関する否定的な表現が特徴。「この仕事は決して手に入らないだろう」というように用いられる。
  7. 拡大解釈(Magnification): 悪い出来事や自分の欠点を過度に誇張して捉える思考。「ひどい」「最悪な」「悲惨な」「大災害」「最悪の事態」といった言葉が使われる。「これは全くの悲劇だ」といった表現がこれにあたる。
  8. 感情的決めつけ(Emotional Reasoning): 自分の感情が客観的な現実を反映していると信じ込む。「~と感じる、だから~に違いない」という形で、「私は罪悪感を感じる、だから私は有罪に違いない」といった考え方になる。
  9. すべき思考(Should Statements): 物事が「こうあるべきだ」という硬直したルールを自分や他人に課す。「~すべき」「~に違いない」「~しなければならない」「~するべきだ」といった表現が特徴。「私はもっと上手にやるべきだ」といった発言に見られる。
  10. レッテル貼り(Labeling): 自分や他人を一つの出来事や特徴だけで定義し、固定的なレッテルを貼ってしまう。「私は~だ」「彼は~だ」「彼女は~だ」というように、「私は落ちこぼれだ」といった表現が用いられる。

コードの実装では、Pythonの標準ライブラリであるre(正規表現モジュール)とdataclassesが活用されている。dataclassesは、データを保持するためのシンプルなクラスを簡単に作成するのに役立つ。ここではDistortionというクラスが定義されており、各認知の歪みの「名前」「説明」「検出パターン」「介入策」といった情報を構造化して保持する。これらのDistortionオブジェクトはDISTORTIONSというリストに格納され、プログラムが検出対象とする全ての認知の歪みに関する情報を一覧できるようにしている。

検出の核となるのはdetect_distortionsという関数だ。この関数は、入力されたテキストを小文字に変換し、DISTORTIONSリストに含まれる各歪みのパターン(正規表現)と照合する。もしテキストの中にパターンに一致する部分が見つかれば、その歪みの情報(名前、説明、一致した言葉、介入策)を結果リストに追加する。一つの認知の歪みに対して複数のパターンが見つかる可能性もあるが、このプログラムでは、ある歪みについて一つでもパターンが検出されれば、それ以上同じ歪みのパターンを検索しないようにbreak文が使われている。これにより、効率的な検出が可能となっている。

実際に「私はいつも失敗する。彼らは私が落ちこぼれだと思っている。私はただ諦めるべきだ。」という文章でテストすると、この検出器は「全か無か思考」(いつも)、「読心術」(彼らは~と思っている)、「すべき思考」(~すべき)、「レッテル貼り」(私は落ちこぼれだ)という四つの認知の歪みを正確に検出した。そして、それぞれの歪みに対して、「本当に100%そうなのか?中間地点を探そう。」や「証拠は何だ?彼らはそう言ったのか、それともあなたが決めつけているのか?」といった、CBTにおける具体的な介入策(リフレーミング)を提示する。このように、認知の歪みは言語の中に明確な痕跡を残すため、パターンマッチングが非常に有効に機能することが示されている。

このアプローチが機能する理由は、認知行動療法の専門家が実際に患者の言葉の中からこれらの言語的マーカーを聞き取ろうと訓練されているからだ。この記事で示されているパターンは、アーロン・ベックの最初の分類法や数十年にわたる臨床文献に裏打ちされたものだ。例えば、「私はいつも失敗する」という発言の「いつも」という言葉は、全か無か思考の明確な言語的マーカーである。「彼らは私が馬鹿だと思っている」という発言の「彼らは~と思っている」というフレーズは、読心術のマーカーとなる。

このように、認知の歪みは定義上ルールベースで検出できるため、複雑な機械学習モデルを用いる必要はない。もしそれらが曖昧な機械学習の予測でしか捉えられないものであれば、CBTのような構造化された体系的な治療法として機能することはなかっただろう。

この記事で紹介された検出器は、著者が構築したより大きなオープンソースツールキットの中核をなすものだ。このツールキットには、認知の歪みの検出以外にも、先延ばしパターン、愛着スタイル、安全行動、中核信念などをカバーする36以上の無料CBTツールが含まれている。これらは、ホストされたAPI、ブラウザベースのツール、PDFワークブック、Pythonパッケージとして利用可能である。

このツールは、プログラミング初心者でも認知の歪みという心理的な概念をコードでどのように表現し、解決策を導き出すかという具体的な例として、非常に分かりやすく、実践的な学びを提供するだろう。システムエンジニアを目指す上で、このような実世界の課題をシンプルなコードで解決する思考プロセスは、大きな示唆に富んでいる。

関連コンテンツ

関連IT用語