「リフレーミングを習慣づけたい」
「AIを活用してリフレーミングの練習を行いたい」
このような場合には、Positive Reframingがオススメです。
この記事では、Positive Reframingについて解説しています。
本記事の内容
- Positive Reframingとは?
- Positive Reframingのシステム要件
- Positive Reframingのインストール
- Positive Reframingの動作確認
- hatesonarを無視する対応
それでは、上記に沿って解説していきます。
Positive Reframingとは?
この記事で言うPositive Reframingとは、次のWebアプリのことです。
Positive Reframing
https://huggingface.co/spaces/Ella2323/Positive-Reframing
簡単に言うと、リフレーミングのアプリになります。
リフレーミングとは物事を見る枠組み(フレーム)を変えることです。
例えば、次のようなメッセージについて考えてみましょう。
明日は、雨が降るらしい。
普通は、ネガティブな意味で発言されます。
このメッセージを各フレームで捉えた場合、次のように変更されます。
フレーム | 変更後のメッセージ |
感謝 | 明日は雨が降るそうです。屋根があるのはありがたいことです。 |
楽観主義 | 明日は雨のようですが、きっと晴れるでしょう |
成長マインド | 明日は雨が降るようです。覚悟を決めないといけませんね |
諸行無常 | 明日は雨が降るそうです。早く雨があがってほしいです。 |
自己肯定 | 明日は雨のようです。なんとかなりそうです。 |
見ればわかるように、単純にポジティブシンキングというわけではありません。
別の思考で物事を捉え直していると言えます。
ただ、これを自分だけでやるのは限界があります。
そこで、Positive Reframingの出番となります。
使い方は、簡単です。
「明日は、雨が降るらしい」を英語で入力します。

次に、思考の方向性(Strategy)を選択します。

その状態で「Reframe」ボタンをクリックすると、次の結果が表示されます。
入力したテキストと変換後のテキストをdiffした結果になっています。

あと、3つの結果をまとめて表示する機能もあります。

このようなシステムを用いれば、自分独りでは難しい考え方を知ることが可能になります。
個人的には、すごく面白いシステムだと思います。
ただ、一つ残念なことがあります。
その残念なこととは、Positive Reframingがが英語のみ対応ということです。
しかし、Positive Reframingはローカル環境にインストールできます。
そのため、自由にプログラムを修正することが可能です。

そうすれば、日本語で入力して日本語で結果を得ることが可能になります。

日本語の場合だと、diffの結果がより詳細に表示されています。
このようなカスタマイズも自由にできます。
以上、Positive Reframingについて説明しました。
次は、Positive Reframingのシステム要件を説明します。
Positive Reframingのシステム要件
システム要件は、PyTorchが動くことです。
PyTorchのインストールに関しては、次の記事で説明しています。
GPUを備えたマシンが用意できるなら、是非ともGPU版PyTorchを利用しましょう。
CPUだけの処理と比べると、GPU版の処理速度は圧倒的に高速です。
あと、Pythonのバージョンに関しては少し事情が複雑になります。
hatesonarというライブラリにPositive Reframingは依存しています。
このライブラリが、2020年7月を最後に更新されていません。
そのこともあり、対応しているPythonバージョンが以下となります。

Python 3.6で動くなら、上位互換が大抵の場合で存在します。
しかし、hatesonarに関してはそれが無理です。
hatesonarが依存しているscikit-learn 0.23.1が、無理な原因になります。
scikit-learn 0.23.1が、Python 3.6までにしか対応していないのです。
scikit-learn 0.23.1じゃないとダメな理由まで説明すると、キリがありません。
とにかく、hatesonar経由で次のエラーが出てしまいます。
ModuleNotFoundError: No module named 'sklearn.linear_model.logistic'
では、Python 3.6を利用すればよいのでしょうか?
いや、それはアウトです。
以下のPython公式開発サイクルをご覧ください。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
もう、Python 3.6はサポート対象外です。
公には、利用してはいけないバージョンになっています。
詰んだような状態ですが、ここは開き直ります。
hatesonarに関する処理は、正直言って無視できる処理です。
無視する対応方法は、後ほど説明します。
したがって、hatesonarはインストールだけして、利用しないようにします。
そうすれば、Positive Reframingは機能できます。
hatesonarを無視すれば、Python 3.7以降でも問題ありません。
以上、Positive Reframingのシステム要件を説明しました。
次は、Positive Reframingのインストールを説明します。
Positive Reframingのインストール
Positive Reframingのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
そして、システム要件としてはGPU版PyTorchをインストール済という状況です。
このような状況において、次の手順でPositive Reframingのインストールを進めます。
- Positive Reframingの取得(Hugging Faceから)
- requirements.txtを使った一括インストール
それぞれを下記で説明します。
Positive Reframingの取得(Hugging Faceから)
Positive Reframing – a Hugging Face Space by Ella2323
https://huggingface.co/spaces/Ella2323/Positive-Reframing/tree/main
プログラム一式は、上記ページで確認できます。

これらを1ファイルづつダウンロードすることは、不可能ではありません。
しかし、さすがにそれは効率が悪すぎます。
このような場合には、huggingface_hubを利用しましょう。
huggingface_hubを利用すれば、一括でプログラム一式を取得可能です。
huggingface_hubをインストールできたら、次のコードを実行します。
from huggingface_hub import snapshot_download snapshot_download( repo_id="Ella2323/Positive-Reframing", repo_type="space", revision="main", cache_dir="./")
上記コードを実行すると、ダウンロード処理が始まります。
ダウンロード終了まで、しばらく時間がかかります。
処理が完了すると、ディレクトリ上に「spaces–Ella2323–Positive-Reframing」を確認できます。

そして、「snapshots」以下にあるファイル・ディレクトリをコピーします。

「f8b5b5320a1e7baefc5907dcfa3606bb9c4239cd」は、リポジトリのバージョンです。
正確には、この長たらしいディレクトリより下のモノをコピーします。
コピーしたファイルは、コンテンツルートに保存します。
requirements.txtを使った一括インストール
コンテンツルートには、コピーしたrequirements.txtが存在しています。
requirements.txt
gradio==3.3.1 hatesonar==0.0.7 torch==1.8.0 transformers==4.10.0 scikit_learn==0.23.1 textblob==0.15.0
このファイルを次のように変更します。
gradio hatesonar transformers scikit_learn textblob
PyTorch関連を削除して、バージョン指定をやめています。
requirements.txtを変更できたら、次のコマンドを実行します。
pip install -r requirements.txt
処理完了までは、しばらく時間がかかります。
以上、Positive Reframingのインストールを説明しました。
次は、Positive Reframingの設定を説明します。
Positive Reframingの動作確認
Positive Reframingの起動は、app.pyを実行します。
正常に起動できると、コンソールには以下のように表示されます。
Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`.
では、ブラウザで「http://127.0.0.1:7860」にアクセスします。
Hugging Face上のデモと同じ画面を確認できます。

Exampleから、適当に何か選びましょう。
I have a lot of homework to do today.
上記のテキストが入力された状態で、「Reframe」ボタンをクリック。

なんと、エラーが出てしまいます。
このとき、コンソールには次のエラーが表示されています。
ModuleNotFoundError: No module named 'sklearn.linear_model.logistic'
これは、hatesonarが原因で発生しているエラーです。
後ほど、対応します。
「Show Best Results」ボタンの方は、問題なく動いています。

とりあえず、Positive Reframingが動作することは確認できました。
ただし、完全には機能していない状態です。
以上、Positive Reframingの動作確認を説明しました。
最後は、hatesonarを無視する対応を説明します。
hatesonarを無視する対応
hatesonarが利用されているのは、app.pyファイル上です。

入力したテキストにヘイトがあるかどうかをチェックしています。
個人的には、あまり意味を感じません。
そのため、この部分をすべてコメントアウトします。

ファイル修正後に、再度Positive Reframingを起動させましょう。
同じようにExampleから適当に選択して、「Reframe」ボタンをクリック。

今度は、正常に機能しています。
コンソール上でも、エラーは表示されていません。
これで解決と言ってよいでしょう。
ただ、どうしてもヘイトチェックを実施したい人がいるかもしれません。
その場合は、別のヘイトチェック用の仕組みを導入してもよいでしょう。
Hugging Faceで検索すれば、何個かそのようなモノが存在しています。

以上、hatesonarを無視する対応を説明しました。