1.はじめに
こんにちは、大阪大学大学院情報科学研究科修士1年生の永田泰誠です。
私は2026年8月17日から2週間、ディップ株式会社CTO室 AI Embeddedユニットのインターンシップに参加しました。
大学の研究室では主に機械学習を扱ってきましたが、実際のサービスで機械学習がどのように開発・運用されているのかは、インターンに参加するまで具体的にイメージできていませんでした。
本記事では、モデルの学習効率化や特徴量追加による精度改善、レコメンドの多様性を高めるためのパイプライン改修を通して学んだことを紹介します。
2.インターンで設定した目標
今回のインターンでは、バイトルのレコメンドシステムに用いられている機械学習モデルとパイプラインを改善し、ユーザーが効率的に理想の企業と出会える状態を目指しました。
具体的には、次の3点を中心に取り組みました。
- FlashAttentionの導入による学習時のGPUメモリ使用量の削減
- 求人に関する特徴量の追加と、追加前後のレコメンド精度の比較
- 同一企業の求人がレコメンド枠を占有しないようにするためのパイプライン改修
また、中長期的には既存の外注モデルと自社モデルを実験環境で比較し、本番導入を判断するための指標を整備することで、精度を維持しながらコストを削減するという目的があります。今回の取り組みは、そのためのモデル・パイプライン改善と検証基盤づくりの一部に当たります。
私自身は、「昨日の自分より成長し、ただ実装するだけでなく、その実装が誰に影響を与え、どうすればユーザー体験が向上するかを考えられるエンジニアになる」という目標を立てました。研究室で、自分で考えた改良を実装して精度改善につながったときに感じた喜びを、実サービスの価値にも結び付けたいと考えたためです。
3.取り組んだこと
1. 小さなパイプラインから開発の全体像を理解する
最初に、レコメンドモデルで使われるパイプラインの構造を理解するため、簡単なパイプラインを実装しました。小さな処理を自分で動かすことで、各コンポーネントの接続や実行の流れを段階的に把握できました。
実装と併せて、Issueの作成、ブランチでの開発、コミット、Pull Request、レビューまでの流れも経験しました。研究では一人でコードを書くことが多かったため、Issueを他者へ意図を伝えるための文書として書く点が新鮮でした。実務では作成者以外が担当することもあり、AIへ開発を支援してもらう際にも、Issueに書かれた背景が重要なコンテキストになります。
そのため、「何を作るか」だけでなく、「誰のどのような課題を解決するのか」「現状では何が足りないのか」「どの状態になれば完了か」を明確にする必要があります。Gitの操作には苦戦しましたが、一連の開発フローを経験したことで、チームで変更を安全に積み重ねる方法を学べました。
2. FlashAttentionで学習処理を効率化する
レコメンドモデルの改善では、特徴量や学習条件を変えながら何度も実験します。しかし、現在の学習ではGPUのメモリ使用量が大きく、特徴量を追加する余地がありませんでした。
そこで、学習処理へFlashAttentionを導入しました。FlashAttentionは、深層学習モデルのAttention計算を効率化する手法です。計算結果をGPUメモリへ読み書きする回数を減らすことで、通常のAttentionと同等の結果を保ちながら、メモリ使用量の削減や計算の高速化を実現します。
GPUメモリ使用率の監視方法を確認し、変更前後を比較できる状態を整えたうえで実装と学習を行った結果、GPUメモリ使用量が削減されることを確認できました。
3. 特徴量を追加してレコメンド精度を改善する
次に、ユーザーが仕事を選ぶ際の判断材料になる求人情報を学習へ追加すれば、レコメンド精度が改善するという仮説を立てました。
特徴量を追加する前に、BigQueryでSQLを実行し、対象ラベルの欠損数などを調査しました。大規模なデータをすぐに集計できる一方、クエリの処理量は費用へ直結します。実行前に処理量を確認し、必要なデータへ絞るという、研究ではあまり意識していなかったコストの視点も学びました。
今回は、既存の特徴量に加えて、「職場の雰囲気」、「接客量」、「仕事内容」などを追加したモデルを学習し、結果を比較しました。検証の結果、「仕事内容」を追加したデータセットでレコメンド精度の向上を確認できました。ユーザーが求人を選ぶ際に重視する情報を適切に表現することが品質改善につながると分かりました。
4. 掲載元企業の偏りを抑えるための基盤実装
実際にユーザーとしてバイトルのレコメンド機能を利用し、改善すべき課題を調査しました。その結果、同一企業が複数店舗で掲載している求人によって、レコメンド枠の上位が占有されるケースを確認しました。
現在は、MMR(Maximal Marginal Relevance)を用いて、関連性と多様性を考慮した求人の並べ替えが行われています。そこで、MMRの計算に同一企業であることへのペナルティを加え、より多様な企業の求人を表示する方針を立てました。また、チームで並行して開発できるよう、必要な実装を複数のIssueに分解しました。
この実現には、レコメンド候補へ掲載元企業IDを追加する必要があります。しかし、新しいデータを安全に追加し、問題が発生した際には既存の状態へ切り戻せる仕組みの構築に時間を要したため、インターン期間中にすべての実装を完了することはできませんでした。
今回の取り組みを通して、技術的な方針を立てるだけでなく、既存機能への影響を抑えながら段階的に導入し、問題発生時に安全に切り戻せる状態まで設計することが、実サービスの開発では重要だと学びました。
また、課題を探す際、当初はコードを読み、システム上の問題点を中心に考えていました。しかし、社員の方々から「実際にユーザーが直面する問題を起点に考えた方がよい」と助言をいただきました。
そこで、ユーザーとして実際にバイトルを利用した結果、レコメンドに関する課題を発見し、その改善に向けた実装方針まで提案できました。この経験から、技術を起点にするのではなく、ユーザー体験から課題を捉え、技術的な解決策へ落とし込むことの重要性を学びました。
4.目標を踏まえてよかった点・改善したい点
よかった点
FlashAttentionによる学習効率の改善と、特徴量追加によるレコメンド精度の向上を確認できました。仮説を立て、データを調査し、実装して比較する一連の流れを実務環境で経験できたことは大きな成果です。
また、コード上の問題ではなく、ユーザーが実際に直面する課題として同一企業によるレコメンド上位の占有という課題を発見できました。実装コストと事業価値の両方を考えて課題を選ぶ経験を通して、インターン開始時に掲げた理想のエンジニア像へ近づけたと感じます。
改善したい点
自分の理解が十分でないまま作業を進め、後から認識差に気付く場面がありました。今後は手戻りが大きくなる判断の前に、目的、前提、実装方針を整理してチームと認識を合わせます。質問するときも、分かっていること、試したこと、分からない点を先にまとめることで、効率と理解度が上がると実感しました。
また、 AIを活用して効率的に開発するには、目的、変更範囲、完了条件を明確にした、質の高いSBIを作成することが重要であることを実感しました。SBIの粒度が大きすぎたり、最小限の実装に分解できていなかったりすると、AIが扱う変更量も増え、意図しない修正や手戻りが発生しやすくなります。今後は、各SBIを独立して実装・検証できる単位まで細分化し、AIが迷わず実装できる具体的な指示を作成したいです。
5.まとめ
今回のインターンでは、求人レコメンドを題材に、機械学習パイプラインの理解、FlashAttentionによる学習効率化、特徴量追加による精度改善、掲載元企業の偏りを抑えるための基盤実装に取り組みました。
参加前は、機械学習エンジニアの仕事をモデル開発中心に捉えていました。しかし実際には、ユーザーと事業の課題を定義し、PBIを安全に実装できるSBIへ分解し、テストとレビューを経て段階的にリリースするところまでが、サービスへ価値を届けるための仕事でした。
今後は、今回得た機械学習とSoftware Engineeringの両方の学びを生かし、専門領域や部署を越えて意見を交換しながら、ユーザー体験の向上につながる提案と実装ができるエンジニアを目指します。

