2404_embeds_chat.webp

2024.04.15

読了時間:5分

続: おい、AI! おすすめの筋力トレーニングはあるのかい?~RAGを用いたAIチャット~

A2B_102 (2).png

國田圭佑

どうも!
sodaエンジニアの國田です。

前回、「AIにおすすめの筋力トレーニングを聞いてみる」というテーマをブログにしました。
ブログの内容をChatGPTに要約させてみたところ、以下のような回答が返ってきました。

これは、筋力トレーニングのエクササイズの推奨における潜在変数の利用について論じています。

著者の國田圭佑というジムトレーニングに熱心なエンジニアは、「ジムエクササイズデータセット」のテキストデータに基づいてエクササイズを推薦する方法を紹介していました。

OpenAIの「text-embedding-3-small」モデルを採用し、テキストを数値に変換して類似性を比較することで、例えばプログラマーの肩こりにいい運動や、女性のダイエットに効果的な運動などを提案しています。この方法は、AIを活用した興味深いレコメンデーションの作成における潜在変数の可能性を強調しています。

いい感じに要約してくれていますね。記事の内容を正確に捉えています。特に、「ジムトレーニングに熱心なエンジニア」と言われたのは嬉しい限りで、つい仕事中にダンベルカールをしそうになりました。
私も常日頃から「筋肉系AIエンジニアとして、名を馳せたい!」と思っていますので、ChatGPTに「トレーニングに熱心」との評価をいただけるのはこれ以上ない栄誉と言っても良いでしょう。
これからも、コードと筋肉、どちらも絶え間なく成長させていきたいですね!

・・・すみません。話が逸れました。
上記のブログ記事で書いた内容は、抽出したい内容に関する質問文とデータセットに格納されているレコードを順次比較し、最も質問文に近い(類似度の高い)レコードをピックアップする、というもので、「AIに聞いてる」とは言っても、ChatGPTのように対話形式で答えが返ってくるものではありませんでした。

どうせ作るなら、最後までしっかりと作り込まないと、AIエンジニアの名が廃るというものです。
今回は、上記をAIチャットとして作成し、「おすすめの筋力トレーニングを紹介するAIチャット」を構築した上で実験を行いたいと思います。

大規模言語モデルに情報を渡す

さて、最近、「社内文書などを分析し、ユーザーの質問に対してチャット形式で回答するAI」が続々と台頭してきています。実は、こちらも上述した"テキストに対する類似度"を使い、文書内の検索を行なっています*1

これは、RAG(Retrieval-Augmented Generation; 検索拡張生成)と呼ばれており、「大規模言語モデル(LLM)によるテキスト生成」に「外部情報の検索」を追加する技術です。

RAGを用いることで、LLMの回答の精度を向上させることができます。ChatGPTが初めて登場した2022年末、「最新のニュースについていけないから、生成AIは意味がない」とか「出力結果に根拠が結びつかないから、信用できない」など、非常にネガティブな意見が散見されました。
しかしながら、RAGの登場により、実際のデータを検索しながらAIが回答することが可能になりました。それらの問題はあらかた解決していると言って良いでしょう。

では、RAGのメカニズムについて詳しく見ていきましょう。通常のチャットボット形式のLLMと比較してみます。

2404_embeds_chat_1.webp

通常のチャットLLMは、非常にシンプルなプロセスです。「ユーザーからの質問(プロンプト)を受け取り、それに対する回答を生成する」だけです。
一方、RAGでは、まず、ユーザーの質問に基づいて、あらかじめ格納されたデータから、情報の検索が行われます。この検索結果とユーザーの質問を組み合わせたプロンプトをLLMに渡すことで回答が生成されます。
つまり、RAGは、「データベースからの追加情報を取得し、それをプロンプトに組み込んでからLLMへ送信」しているというわけです。

ちなみに、上の図では、データベースの検索の前にLLMに通していますが、これはチャットによる回答の生成ではなく、前回紹介しました潜在変数(数値化されたテキスト)への置き換えを行なっています。データベース内では、テキストと潜在変数が格納されているため、この潜在変数を元に、類似度の計算を行い、質問文に対して関連性の深い結果を何件か返す、ということを行なっています。

今回は、OpenAIの「text-embedding-3-small」を使い、"Gym Exercise Dataset"*2を格納しました。
実際のアーキテクチャは以下のようになります。

2404_embeds_chat_2.webp

さぁ、やってみよう

以下のスクリーンショットのように、実際にチャット形式で出力させて実行してみました。

2404_embeds_chat_3.webp

まず、プログラマーエンジニアをはじめとした内勤に役立つトレーニング、特に肩こりに効くエクササイズについて聞いてみました。

回答全文を和訳したものを以下に示します。

Based on the reference information, the following exercises could be beneficial for individuals such as programmer engineers who may suffer from stiff shoulders:

1. Dumbbell External Shoulder Rotation: This is a lightweight dumbbell exercise designed to maintain the health of the shoulder joints, including the rotator cuffs. It is often used as a warm-up or prehab for a shoulder or chest-focused workout.

2. Active hang from bar: This is definitely a good exercise for internal workers, especially those who spend a lot of time sitting or in front of a computer. This exercise engages isometrically by squeezing the shoulders into the sockets and activating the upper back and core muscles. It not only improves form for pull-ups but also has postural and shoulder health benefits. This static exercise is an intermediate-level exercise and requires no equipment other than a bar from which to hang. It could be a beneficial inclusion to a regular exercise routine to combat the strains of a sedentary work life.

Remember, these are intermediate level exercises and it's always best to consult with a fitness professional before starting a new exercise regimen.

参考情報をもとに、肩こりに悩むプログラマー・エンジニアなどには、次のようなエクササイズが有効です。:

1. ダンベル肩外旋: これは、ローテーターカフを含む肩関節の健康を維持するために考案された軽量ダンベルエクササイズです。肩や胸に重点を置いたトレーニングのウォームアップやプレハブとしてよく使われます。

2. アクティブ・ハング・フロム・バー: これは、内勤者、特に座っている時間が長い人、コンピューターの前にいる時間が長い人に適したエクササイズです。このエクササイズは、肩をソケットに押し込み、背中上部と体幹の筋肉を活性化させることで、アイソメトリックに作用する。懸垂のフォームを改善するだけでなく、姿勢や肩の健康にも効果があります。このスタティック・エクササイズは中級レベルのエクササイズで、ぶら下がるバー以外に道具は必要ありません。座りっぱなしの仕事の負担に対抗するために、定期的な運動習慣に取り入れると効果的です。

ただし、これらは中級レベルのエクササイズであり、新しいエクササイズを始める前には必ずフィットネスの専門家に相談することをお勧めします。

前回と同様の結果が出力されましたね。
(詳しいトレーニング内容については、上記文字リンクを参照してください。また、実際に筋トレをやってみたい方は、ぜひジムへ入会しましょう!筋肉を鍛える喜びを分かち合おうではありませんか!)
個々のトレーニングの名称や簡単な説明だけでなく、AIチャット側で、ある程度説明を補完してくれています、特に、 「座りっぱなしの仕事の負担に対抗するために、定期的な運動習慣に取り入れると効果的です。」などの文章は、筋トレだけでなく、運動の大切さもよく理解できて、親切さを感じますね。

では、続けて、女性のダイエットにおすすめのトレーニングについて聞いてみましょう。

2404_embeds_chat_4.webp

回答和訳

I'm sorry, but the provided reference information includes descriptions for specific exercises all focused on strengthening the abdominal muscles and not specifically for weight loss. However, these exercises include the decline oblique crunch, decline leg lift, decline leg lift with twist, decline plate sit-up twist, and decline plate sit-up.

To lose weight, it's important to incorporate both strength training and cardiovascular exercise into your routine. Strength training, like the exercises listed above, will help build muscle, and muscle burns more calories at rest than fat. Cardio workouts like running, walking, cycling, and swimming can help burn calories and fat.

Diet is also a crucial part of weight loss. It's important to eat a balanced diet rich in fruits, vegetables, lean proteins, and whole grains.

For personalized exercise and diet plans, you should consider consulting a fitness trainer or a nutritionist.

申し訳ありませんが、提供された参考情報には、腹筋の強化に重点を置いた特定のエクササイズの説明が含まれており、特に減量のためのものではありません。ただし、これらのエクササイズには、デクライン・オブリーク・クランチ、デクライン・レッグ・リフト、デクライン・レッグ・リフト・ウィズ・ツイスト、デクライン・プレート・シットアップ・ツイスト、デクライン・プレート・シットアップが含まれます。

体重を減らすには、筋力トレーニングと有酸素運動の両方を日課に取り入れることが大切です。上記のエクササイズのような筋力トレーニングは筋肉をつけるのに役立ち、筋肉は脂肪よりも安静時の消費カロリーが高い。ランニング、ウォーキング、サイクリング、水泳などの有酸素運動は、カロリーと脂肪の燃焼に役立ちます。

食事も減量には欠かせない要素です。果物、野菜、赤身のタンパク質、全粒穀物などをバランスよく摂ることが大切です。

個人個人に合った運動や食事のプランを立てるには、フィットネストレーナーや栄養士に相談することをお勧めします。

おや?具体的なトレーニング内容を示す前に謝罪から入りましたね。
確かに、Chatが指摘している通り、Gym Exercise Datasetには、「減量に有効なトレーニング」という項目や記述は存在していないです。そのあたりをAI Chat側が正確に汲み取った上で注釈を入れてくれたようですね。なんとありがたい・・・!

ただ、それでもやはり「ダイエット」というワードに関係が深いであろうお腹周りのエクササイズをいくつかピックアップしてくれています。類似度検索は有効に働いた上で、ユーザーが誤解しないように+αのアドバイスを入れてくれている、と。何とも気が利きますね。
しかも、減量や食事に関するアドバイスも追加で入れてくれています。これに関してもデータセットには無い内容ですので、ChatGPT側で適切なワードを組み合わせて生成してくれた、ということでしょう。

さて、チャットの良い点は、出てきたメッセージに対してさらに質問を続けて会話ができる点です。
「AIに列挙してもらったトレーニングじゃ負荷が低くて満足できない!」なんてケースは往々にしてありますよね?そこで、高負荷トレーニングについて、そのまま聞いてみましょう。

2404_embeds_chat_6.webp

質問:私は根性がありますので、もっとキツいトレーニングでも耐えられます。高負荷の腹筋トレーニングについて教えてください。
回答:

Yes, you can increase the intensity of your abdominal workout by adding weights. Two high-impact exercises from the provided reference information are: 1. Dumbbell Crunch - Gethin Variation: This is a more difficult version of the crunch exercise, made tougher by adding a dumbbell. This provides a different type of stimulus to the core during training. 2. Weighted Crunch - Gethin Variation: Similar to the previous exercise, this one also adds a weight to the traditional sit-up, making it more challenging and helping to build strong abs. Please remember to warm up thoroughly before starting, and cool down afterward. If at any point during the exercise you feel abnormal pain, stop immediately and consult with a fitness professional.

ウェイトを追加することで腹筋運動の強度を高めることができます。提供された参考情報の中から、負荷の高いエクササイズを2つ紹介します:

1. ダンベル・クランチ:ダンベルを加えることで、クランチ・エクササイズの難易度を高めたもの。トレーニング中に体幹に異なる刺激を与えることができます。

2. ウエイト・クランチ: 前のエクササイズと同様に、このエクササイズも従来のシットアップに重りを加えることで、よりチャレンジングになり、強い腹筋を作るのに役立ちます。

始める前に十分なウォーミングアップを行い、終了後はクールダウンすることを忘れずに。運動中に異常な痛みを感じた場合は、すぐに中止し、フィットネスの専門家に相談してください。

なるほど、ダンベルやウェイトなどを抱えての腹筋運動が提案されていますね。もう少し、意地悪な質問をしてみましょう。

2404_embeds_chat_7.webp

質問:ダンベルもウェイトも持っていません。自重だけでできる高負荷の腹筋トレーニングはありますか?
回答:

While the reference information focuses on exercises that involve equipment like dumbbells or a medicine ball, there are many effective high-intensity abdominal exercises you can perform using just your body weight. Here are few: 1. Standard Crunches: This exercise targets the abdominal muscles, and by performing higher repetitions or adding a twist motion, you can increase the intensity. 2. Plank Variations: Standard planks, side planks, or plank jacks are all great for working the core muscles. You can increase the duration or speed to add challenge. 3. Mountain Climbers: This is a high-intensity, full-body exercise that deeply engages your abdominal muscles. 4. Leg Raises: These target the lower abdominal muscles. You can make them harder by keeping your legs straight and adding a hip lift at the top of the movement. 5. Bicycle Crunches: By simulating a bicycle pedaling motion while in a crunch position, you work the entire abdominals and obliques. Always remember to maintain proper form to maximize effectiveness and prevent injury. It's also essential to pay attention to your diet for overall weight loss and fitness.

参考情報ではダンベルやメディシンボールのような器具を使うエクササイズが中心だが、自重だけでできる効果的な高強度の腹筋エクササイズはたくさんある。いくつか紹介しよう:

1. スタンダード・クランチ: このエクササイズは腹筋をターゲットにしており、反復回数を増やしたり、ひねる動作を加えたりすることで、強度を上げることができる。

2. プランクのバリエーション: スタンダード・プランク、サイド・プランク、プランク・ジャックなど、どれも体幹の筋肉を鍛えるのに最適です。継続時間を長くしたり、スピードを上げたりすることで、難易度を上げることができる。

3. マウンテンクライマー: 高強度の全身運動で、腹筋を深く鍛えます。

4. レッグレイズ: 腹筋下部を鍛える。脚をまっすぐ伸ばしたまま、動作の頂点でヒップリフトを加えると、よりハードになる。

5. バイシクルクランチ: クランチの姿勢で自転車をこぐような動きをすることで、腹筋と腹斜筋全体を鍛える。

効果を最大にし、ケガを防ぐために、正しいフォームを保つことを常に忘れないこと。また、全体的な減量とフィットネスのためには、食事に気を配ることも欠かせない。

良いですね!指定した通り、自重トレーニングで、元のデータセットに記載されている種目から抽出してくれており、そのままでは負荷がそれほど高くない「スタンダード・クランチ」のような種目も強度を上げるためのアドバイスが入ったものになっています。

このように、単純なデータセットへの検索だけでなく、AIチャットと組み合わせることで、疑問に思った点についても掘り下げながら、最適なトレーニングを提案してくれるようになります。本当に筋トレに関する相談ができるAIという感じで、適切なトレーニングをアドバイスしてくれますので、かなり実用性が上がったのではないでしょうか?身近に相談できる仲間やトレーナーがいない場合や、どのようなトレーニングをしようか決めかねている方には、ものすごく重宝しそうです。会話を楽しみながら必要な情報を入手できるのも良い点ですね。

まとめ

以上、RAGを用いることで、テキスト生成AIにさらなる知識を与え、それについて会話を続けることができました。これの面白い点は、あらゆるデータについて応用可能な点です。テキストを潜在変数に置き換えているため、CLIPのようなテキストと画像の潜在変数を一致させるモデルを導入すれば、自身の全身画像をアップして、「ボディビル大会に出るために、弱点部位を克服したいです。」という質問だけで、成長の足りない部位を補う筋トレを提案してくれる可能性もあります。

そのほかにも、データセット自体を入れ替えることで、例えば、ファッション業界では、顧客が自分の写真をアップロードし、AIがその人の体型、好み、流行とを考慮して、パーソナライズされたファッションアドバイスを提供するサービスを構築できるかもしれませんし、エンターテイメントの領域では、ユーザーが自分の好みや気分を説明するだけで、AIがカスタマイズされた音楽プレイリストや映画の推薦リストを生成するサービスなどが考えられるでしょう。

これらはすべて、AIが人間のテキストや画像に関する入力を数値として理解し、それに基づいて有益な情報や提案を提供することが可能になるためです。
AI技術の発展がもたらす革新は夢と希望に満ちており、想像するだけで大胸筋が膨らみますね!
私も、日々発展するAI技術にキャッチアップできるよう励んでいきたいです!
ではまた!

*1 正確には、類似度検索のみではなく、キーワードから一致する情報を取得するキーワード検索、セマンティックモデルを使用して、検索文の意味と一致する情報を取得するセマンティック検索などと組み合わせ、ハイブリッド検索を行うのが主流です。
*2
https://www.kaggle.com/datasets/niharika41298/gym-exercise-data

RELATED POST

2403_text_embeds_thum.webp
  • Tech Blog
  • 技術説明

2024.03.13

おい、AI! おすすめの筋力トレーニングはあるのかい? ~テキスト潜在変数を利用したレコメンド~

お久しぶりです!!sodaエンジニアの國田です。 突然ですが、皆さま、最近運動していますか?私たちのようなプログラマーエンジニア職は運動不足になりがちですので、毎日しっかりトレーニングをする必要があります。私の方はどうかと言われますと、週5でジムに通い、己の筋肉の研鑽に励んでいます。(今まで秘密にし...

GAN_thum14.png
  • Tech Blog
  • 技術説明

2023.11.17

Stable Diffusionでミロのヴィーナスを復元してみる

お久しぶりです!sodaエンジニアの國田です! 「ミロのヴィーナス」って不思議ですよね?両腕の無い像で、現在に至るまで、多くの芸術家や科学者が欠けた部分を補った姿を推定していますが、現在のところ、定説と呼べるようなものはありません。「どのようなポーズをとっていたのか?」想像は多岐に及びますが、これに...

SentimentSLDA_thum1.png
  • Tech Blog
  • 技術説明

2023.09.25

感情分析とSLDAで文章から感情係数付きトピックを抽出してみる

こんにちは! sodaの古橋です。 ブログ投稿の間隔が結構空いてしまいまして、気付けば世間では阪神タイガースが18年ぶりとなるリーグ優勝を決めていました。 久々の優勝ということで大いに盛り上がっていますが、我が敬愛する中日ドラゴンズは2年連続の最下位争いを繰り広げているという状態で、私は...