2403_text_embeds_thum.webp

2024.03.13

読了時間:5分

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

A2B_102 (2).png

國田圭佑

お久しぶりです!!
sodaエンジニアの國田です。

突然ですが、皆さま、最近運動していますか?
私たちのようなプログラマーエンジニア職は運動不足になりがちですので、毎日しっかりトレーニングをする必要があります。
私の方はどうかと言われますと、週5でジムに通い、己の筋肉の研鑽に励んでいます。(今まで秘密にしていましたので、意外に思われるかも知れませんね!)
筋トレは、エンジニアという職業とすこぶる相性が良く、特に肩凝りなどとは無縁になれますので、仲間のエンジニア全員にお勧めしています。

ところで、ベンチプレスでご自身の体重以上の重量を挙げることができる、筋トレ大好きなエンジニアの方、いらっしゃいましたら是非、ご一報ください。一緒にsodaのエンジニアとして働きませんか?

・・・すみません。話が逸れました。
実は先日、"Gym Exercise Dataset"*1というものを見つけました。このデータセットは、ジムで行うトレーニング種目のデータで、2500以上の種目が収録されているようです。

皆さんもジムに行った時によく気づくと思いますが、実に多種多様な選択肢の中から、最適なトレーニングを選ばなくてはなりません。あまりに多くの種目があるため、「自身にとって最適なトレーニングはどれだろう?」と悩むことがあります。

このデータセットは、そのような課題解決に貢献できるのではないでしょうか?データセットの中から最適なトレーニングを抽出することができれば、ジムでマンネリ化したトレーニングを行う必要もありません!
ただし、データセットの中から単純にキーワードで筋トレ種目を検索&ピックアップするだけでは、筋肉系エンジニア的には面白くないですよね?どうせなら、AIエンジニアっぽいアプローチをかけてみたいと思います。

名付けて、「潜在変数を利用したトレーニングレコメンド」!!
特定の文章を投げることで、それに対応したトレーニングメニューを引っ張ることができたら楽しくないですか?

潜在変数を利用したトレーニングレコメンド

いきなりやりたいことを言っちゃいます!
「プログラマーエンジニアのような内勤者に最適なエクササイズ」という言葉で検索をかけ、それに対応するエクササイズを引っ張りだす・・といったことを行いたいです。

先ほどの"Gym Exercise Dataset"はほぼ全てが文字列データで構成されています。中身は、「筋トレ種目名」「種目の説明」「部位」などで、上記の目的を達成したいとなると、「質問のテキスト」と「回答のテキスト」を何かしらの方法で比較して、結びつけてあげる必要が出てきます。

このような比較・結びつけの際に用いられるのが、文字列を数値に置き換えてしまうことです。以前の記事で、画像とテキストをベクトルに置き換えて互いに比較するという内容を取り扱いましたが、それを文字列同士で行えば良いですね。

ベクトルへの変換には、ChatGPTで有名なOpenAIが最近公開したモデル「text-embedding-3-small」を用いることにします。このモデルはテキストを1536個の数値が格納されたベクトル(埋め込み表現、潜在変数)に変換することができます。

2403_text_embeds_0.gif

実際にこのベクトルは、どのような内容を示しているのでしょうか?
少し難しい内容にはなりますが、ベクトルは言葉の示す意味を数値に置き換えたものになります。
この置き換えの際に、「意味的に似ている単語やフレーズを近い位置にマッピングする」ようにできており、例えば「柴犬」と「秋田犬」のような似ている言葉を互いに近い数値に変換することができます。

この性質を上手く利用すると、テキスト同士の類似性の計算が可能になります。たとえば、ベクトル同士の類似度を計算することで、関連した意味を持つテキストを見つけることができるようになるのです。

具体的な例を交えて、実験をしてみましょう。

みなさんは、「"大胸筋"に最も効くエクササイズは?」と聞かれた時になんて答えますか?トレーニーによって様々な回答があると思いますが、多くは「ベンチプレス」と答えると思います。(ちなみに私の推しは「ペックフライ」です。)
いくつかの種目の「大胸筋」という言葉に対する類似度を求めてみました。以下がその結果です*2。

順位 単語 「大胸筋」との類似度
1 ペックフライ 0.672
2 ベンチプレス 0.418
3 デッドリフト 0.354
4 スクワット 0.254

ペックフライ、ベンチプレスが上位に出ていますね。
興味深いのは、デッドリフトの方がスクワットよりも若干類似度が高い点です。デッドリフトは、大臀筋・脊柱起立筋〜広背筋周りのエクササイズですが、バーベルを最上部に挙上する際、胸を張り、肩を落とすようにします。つまり、スクワットと比較し、胸筋に多少なりとも刺激が加わっていることになります。

単語の持つ意味がベクトルに変換した際に、きちんと反映されていることがお分かりになったと思います。

さぁ、やってみよう

事前に、データセットに含まれる筋トレ種目の名前と説明を全てベクトルに置き換えました。
自身が検索したい言葉を再びベクトルに置き換え、それと最も類似度が高いトレーニングをピックアップしてもらいます。まず、最初の検索ワードはこちらです。

"Useful workouts for programmers, engineers, and other internal workers, especially exercises for stiff shoulders"
(プログラマーエンジニアをはじめとした内勤に役立つトレーニング、特に肩こりに効くエクササイズ)

これに対し、高い類似度を示したのは、

1. dumbbell external shoulder rotation
The dumbbell external shoulder rotation is a lightweight dumbbell exercise intended 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 with lots of pressing.
(ダンベル肩外旋は、ローテーター・カフを含む肩関節の健康維持を目的とした軽量ダンベル・エクササイズである。多くの場合、肩や胸に重点を置いたトレーニングのウォームアップとして使用される。)

こちらのトレーニングは、ダンベルを持った状態で、力こぶを強調するようなフォームで両腕を挙げ、そのまま前方に前腕を倒していくようなトレーニングです(以下、参考画像/Stbale Diffusionにて作成)。

2403_text_embeds_1.gif

2. active hang from bar
The active hang from bar is a static exercise that involves isometrically squeezing the shoulders into the sockets and activating the muscles of the upper back and core. It can be used to improve pull-up form or to do more pull-ups, but also has postural and shoulder health benefits.
(アクティブ・ハング・フロム・バーは、肩をアイソメトリックに肩甲骨に押し込み、背中上部と体幹の筋肉を活性化させる静的エクササイズである。懸垂のフォームを改善したり、懸垂の回数を増やしたりするだけでなく、姿勢や肩の健康にも効果がある。)

こちらはいわゆる「ぶら下がりトレーニング」ですね。単にぶら下がる(dead hang)のではなく、胸を張るように、背筋を伸ばしながらぶら下がるため、肩周りの緊張をほぐすには確かにもってこいのトレーニングとも言えそうです。

なかなか良い回答が得られているのではないでしょうか?
肩周りをほぐすトレーニングが紹介されているだけでなく、「内勤」「エンジニア」といった、一般的には運動習慣が無い人向けの強度の低いトレーニングが拾えているのは非常に良い点だと思います。

さて、他の文章でも試してみましょう。

"Exercises recommended for women to lose weight"
(女性のダイエットにお勧めのエクササイズ)

The decline oblique crunch"
The decline oblique crunch is a popular bodyweight exercise targeting the obliques and the rectus abdominis or "six-pack" muscles. It is usually performed for high reps, such as 10-15 reps per set or more, as part of the ab-focused portion of a workout."
(デクライン・オブリーク・クランチは、腹斜筋と腹直筋(シックスパック)をターゲットにした人気の自重エクササイズである。通常、ワークアウトの腹筋に重点を置いた部分の一部として、1セット10~15レップ以上など、高レップで行わる。)

こちらは、デクラインベンチと呼ばれる斜めに傾いたベンチ台で脚を上側に向けた状態で行う、腹筋です。上体を起こすと同時に腰を横にツイストする動作も加えるため、腹直筋だけでなく、腹斜筋にも刺激が入り、脇腹の引き締めに効果的な種目です。

他には、レッグレイズ(腹直筋下部)やリバースクランチなど、お腹周りのエクササイズが高い類似度を示していました。「ダイエット」というワードに反応したことが推察できますね。

次の検索ワードに移ります。

"Training that gives your back wings called muscles."
(背中に翼という名の筋肉を与えるトレーニング)

1. machine low row
The machine low row is an exercise targeting the back muscles.
(マシン・ローローは背中の筋肉をターゲットにしたエクササイズだ。)

2. machine seated row
The machine seated row is an exercise targeting the back muscles, emphasizing the mid- to upper-back.
(マシン・シーテッド・ローは、背中の筋肉をターゲットにしたエクササイズで、背中の中部から上部を重点的に鍛える。)

3. behind-the-neck pull-down
The behind-the-neck pull-down is a cable exercise intended to target the muscles of the upper and middle back. If you have the requisite shoulder mobility, it can help you target the upper back muscles, including the trapezius and rhomboids, as well as the lats (latissimus dorsi). It is popular among elite bodybuilders and physique athletes, but some coaches consider it unsafe to the shoulder joint, particularly for people with existing shoulder problems.
(ビハインド・ザ・ネック・プルダウンは、背中の上部と中部の筋肉をターゲットにしたケーブル・エクササイズです。必要な肩の可動性があれば、僧帽筋や菱形筋、広背筋などの背中の上部の筋肉をターゲットにすることができる。エリート・ボディビルダーやフィジーク・アスリートの間で人気があるが、肩関節に安全でないと考えるコーチもいる。)

類似度が非常に僅差でしたので、3つ紹介させていただくことにしました。
翼と広背筋の関係で「?」となる方もいるかも知れませんが、よくボディビルでは発達した背中は翼に例えられます。その関係を知ってか知らずか、背中のトレーニングが列挙されていました。1.や2.は前から後ろに向かって、ウェイトを引っぱるトレーニングですね。

こちらも、非常に良いトレーニングが列挙されている印象を受けます。
鍛えたい場所に応じて、キチンとその部位のトレーニングが提案されている点は、素晴らしいですね!

まとめ

以上、テキストの潜在変数を利用した筋力トレーニングのリコメンドでした。
単純な潜在変数の類似度の比較だけでも、リコメンドとしての機能が果たせているのは非常に面白い点かな、と思います。

今回使用したデータセットは各種目の詳細が比較的簡潔に書かれているものでしたが、よりリッチなテキストを持ったデータを利用することで、さらに細かい内容も拾うことができるようになります。

テキストを数値に置き換えるということは、あらゆる計算を可能にし、多くのAIモデルと連携させることができるようになります。以前紹介したCLIPのように画像と比較させ、画像の説明文を生成させる・・ことも容易です。
ChatGPTの登場以降、生のテキストに注目が行きがちですが、背景にある潜在変数を考えると、本当に面白い製品が作れそうだな・・と妄想が捗りますよね!
私も一流のエンジニアを目指し、商品と筋肉の開発に今後も力を入れていきたいです。
ではまた!

*1 https://www.kaggle.com/datasets/niharika41298/gym-exercise-data
*2 表記は日本語にしていますが、実際には英語で処理しています。

RELATED POST

2404_embeds_chat.webp
  • Tech Blog
  • 技術説明

2024.04.15

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

どうも!sodaエンジニアの國田です。 前回、「AIにおすすめの筋力トレーニングを聞いてみる」というテーマをブログにしました。ブログの内容をChatGPTに要約させてみたところ、以下のような回答が返ってきました。 これは、筋力トレーニングのエクササイズの推奨における潜在変数の利用について論じています...

GAN_thum14.png
  • Tech Blog
  • 技術説明

2023.11.17

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

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

SentimentSLDA_thum1.png
  • Tech Blog
  • 技術説明

2023.09.25

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

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