ハードウェアからサーバ・アプリまでワンストップで開発

認知シャッフル睡眠法デバイスを作る(1)

実現方法の検討

認知シャッフル睡眠法という、考え事が止まらなくて寝付けない時に効果的な方法を最近知りました。

その方法はシンプルで、ランダムで関連性のない単語を順に思い浮かべていくだけです。

正式(?)には最初に思い浮かべた単語と同じ最初の文字から始まる別の単語を思い浮かべるらしいのですが、YouTubeで見かけるものはランダムな単語を何秒かごとに流すものが多い印象があります。

このようにYouTubeですでにいくつも専用の動画があるのですが、睡眠時に使うにはいくつか課題があります。

広告が途中に入るものがある
配信者が意図したものではないとは思うのですが、タイミング悪く広告が流れる動画も稀にあります。(上記の動画は途中に広告が流れるといったことはありません。)

スマートフォンの操作が必要
寝る直前にスマートフォンを操作する必要があり、これが睡眠を妨げる要因にもなります。

最初に解説がある
スキップ可能ですが、面倒であることと上記と同じ問題があります。

同じ動画を何度も再生すると次の単語が予測できる
記憶力には自信がない方ですが、何度か同じものを再生すると案外覚えているもので、いつしか脳内で次の単語クイズが始まってしまいます。これはYouTubeを使う以上仕方ない点ではあります。他の動画を試せばよいと思われそうですが、自分にちょうど良いものは多くありません。

というように、YouTubeを使うと、睡眠法なのに睡眠の邪魔が入ってしまいます。

同じことをしてくれるアプリなんかもあるらしいですが、これはまだ試していません。

認知シャッフル睡眠法デバイスを作る

認知シャッフル睡眠法で行っていることはシンプルです。

ランダムに関連性ない単語を何秒か置きに音声出力し続ける

これだけです。

また、ディスプレイは可能な限り見たくないので、実行するハードウェアはスマートフォンより、Alexaのようなスマートスピーカーに近いものにしたいです。

なので、今回はスマートフォンアプリではなく、小型のボードで動くものを作ろうと思います。ハードウェアには手元で実績のある「OrangePi 5 Plus」を使います。

SSDを取り付けて、Ubuntuをインストールして、スピーカーを繋ぎます。操作方法はあとで考えるつもりですが、Orange Pi 5 Plusにはマイクが搭載されているので音声コントロールもできそうです。

実際で使うまでには、ケースを用意しようと思います。

アプローチ

実装について考えます。

1.単語リストの生成
2.音声出力

この2つに分けて、どういうアプローチで作るか考えます。

1. 単語リストの生成

リストのもととなる単語の辞書を作って、そこから毎回ランダムに選択したリストを作れば終わりですが、実際使う時のことを考えるとこの辞書に含める単語はなんでもよいわけではなく、いくつかの制約があることに気づきます。

一般的な名詞
特殊すぎる単語はその単語を聞いてもわからないので、その単語から何か連想するのは難しくなります。もしかすると、想像を膨らませることで思考を散らすことができるのかもしれないですが、無難に避けた方が良いかなと思いました。

ある特定の分野ばかりの単語にしない
単語の分野に偏りがあると、似た意味の単語が続く恐れがあります。同じ単語が連続すると効果が薄れるらしいので、単語の類似性は下げたいところです。

日本語
母国語以外の単語では、その単語の意味がわからないことは普通にありえます。これだと、その単語を聞いても連想できるものがないので意味がないのではないかと思います。

このような条件の辞書を作ってもよいのですが、今の生成AIだと上手く依頼すれば、良い感じに作ってくれそうです。簡単に身近な生成AIで試してみます。

ChatGPT

「ランダムな一般名詞を50個生成して、それをjsonのリストにして」と依頼したらすぐに作ってくれました。

完ぺきです。APIの利用は有料ですが、それでも魅力的ですね。

RWKV

OrangePi5でも動いた実績のある言語モデルです。

Orange Pi 5でRWKV-5-World-v2を試す

RWKV.cppのサンプルコードを変更して簡単にどれくらいできそうか試してみました。結果的には、良い感じにリストアップしてくれそうなときもあるし、そうでないときもあるといった感じです。ChatGPTと同じようにJSONで出すよう依頼すると、同じプロンプトでも、たまにJSONではなく、JSONを出力するプログラムを作ります。

今回は雑に試しただけですので、実際に使う時にはもう少し丁寧に検証する必要があります。

--- Generation 0 ---

 関連性のない一般名詞名詞を50個あげてください
[2つの単語が一緒に出てくる場合は、それ��れの単語の名前を出してください。例えば、「猫」と「犬」が一緒に出てくる場合は、「猫と犬」と出してください。

User: 猫と犬は一緒に出てくる場合は、それ��れの名前を出してください。
猫と犬は]

Took 31.541 sec, 315 ms per token

--- Generation 1 ---

 関連性のない一般名詞名詞を50個あげてください
[a) 生活
b) 国
c) 文化
d) 食
e) 宗教
f) 経済
g) 政治
h) 教育
i) 社会
j) 技術
k) 科学
l) 法律
m) 医療
n) スポーツ
o) 人種
p) 人権
q) 性]

Took 31.566 sec, 315 ms per token

--- Generation 2 ---

 関連性のない一般名詞名詞を50個あげてください
[A:
(1) スーパーマーケット、(2) ベビーカー、(3) パソコン、(4) ビール、(5) コーヒー、(6) ワイン、(7) 食料品、(8) 衣服、(9) 雑貨、(10) 電化製品、(11) 家具、(12) 自転車、]

モデル:RWKV-5-World-3B-v2-20231113-ctx4096.pth

ELYZA-japanese-Llama-2-7b-instruct

こちらも過去にOrangePi5で動かしたものです。

Orange Pi 5でELYZAを試す

手元で簡単に試しました。

「ELYZA-japanese-Llama-2-7b」と「ELYZA-japanese-Llama-2-7b-instruct」の2つのモデルで実行しましたが、「ELYZA-japanese-Llama-2-7b-instruct」の方が想定した答えに近い回答をしてくれました。モデルの説明でもタスクを解くことを目的としているとあったので、今回の用途に向いていたのだと思います。

ユーザーからの指示に従い様々なタスクを解くことを目的として、ELYZA-japanese-Llama-2-7bに対して事後学習を行ったモデルです。

Metaの「Llama 2」をベースとした商用利用可能な日本語LLM「ELYZA-japanese-Llama-2-7b」を公開しました

途中から同じ単語がでたり、50個以上になったり、いろいろありますが、良い感じです。

  [INST]関連性のない一般名詞名詞を50個あげてください 。[/INST]  関連性がない一般名詞を50個あげます:

1. 車
2. 本
3. 家
4. 会社
5. 電化製品
6. 食べ物
7. 洋服
8. 家電脱 sierpnz
9. スポーツ
10. 旅行
11. ペット
12. 住んでいる場所
13. 楽器
14. おもちゃ
15. アクセサリー
16. 家庭用品
17. ゲーム
18. 教科書
19. 買い物
20. ドライバー
21. 服
22. スプレッドシート
23. ペンcil
24. 髪の� ine
25. 化粧品
26. テーブル
27. カバン
28. 机
29. ハッピーメディア
30. 時計
31. 財布
32. 床
33. 絨毯
34. テント
35. 植物
36. スペルミス
37. 転んだらこわごわ
38. 電波
39. メガネ
40. サイズ
41. 病院
42. シューズ
43. 靴 Unterscheidung
44. 服のサイズ
45. ハンディークロード
46. スニーカー
47. 調理道具
48. 食品
49. バッグ
50. トレーナー
51. 救済
52. コマンド
53. スリップ

JSONでも依頼してみました。

 [INST]関連性のない一般名詞名詞を50個を日本語で出力してください。出力形式はJSONにしてください。[/INST]  ["カメラ", "写真", "料理", "食器", "音楽", "旅行", "ドライブ"] [end of text]

fastText

生成AIではないですが、fastTextを使って、シャッフル睡眠法実装した方がいらっしゃいます。
単語をランダムにいくつか選んで、関連性が低いものを次の単語としているようです。

#37 認知シャッフル睡眠法用音声をAIで作ってみた

2. 音声出力

「1.単語リストの生成」ができれば、あとは音声出力です。
これは以前利用した音声合成ソフトウェア「VOICEVOX」で実現できそうです。

VOICEVOX COREをOrange Pi 5(Ubuntu)で動かす

今回のデバイスでも音声合成には「VOICEVOX」を使うつもりです。

おわり

この方針どう思う?みたいなことをChatGPTと雑談していたら、頼んでもいないのに、ChatGPTのAPIを使ったサンプルプログラムまで作ってくれました。ちゃっかりしていますね。

 

最近のエントリー

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル