製造業向け作業安全管理システムのPOCプロジェクト
お客様の情報
- •業界: 製造業
- •企業規模: 従業員数 200-500名
- •事業内容: 自動車部品の製造および組立
プロジェクト概要
- •期間: 4ヶ月
- •弊社側の体制: PM 1名、エンジニア 1名
- •開発スタイル: アジャイル開発(スクラム)
- •予算: 600万円
- •範囲: 製造現場向け安全支援システムのPOC開発(生成AIとRAGの統合ソリューション)
ご相談の背景
-
検索精度の課題
- 初期段階ではベクトル検索のみを用いたRAGシステムを構築していた
- 検索結果のtop10には関連する安全情報が含まれるものの、top3の精度が低く、作業者が複数の文書を確認する必要があった
- 「最も関連性の高い安全情報をすぐに表示してほしい」という現場からの要望が強かった
-
作業効率と安全性のジレンマ
- 作業者は限られた時間内に安全情報を確認する必要があるため、検索結果の上位3件が重要
- 複数の文書を確認する手間が作業効率を下げ、結果として安全確認をスキップするリスクが生じていた
- 特に緊急時や複雑な作業状況では、即座に最適な安全情報にアクセスできることが重要だった
- ただし、検索結果の表示に数秒程度の遅延は許容される環境であり、精度を優先できる状況だった
取り組みの結果
-
安全情報抽出の精度向上
- ハイブリッド検索(ベクトル+キーワード)による全体精度の向上
- クロスエンコーダーの導入により、top3の精度が顕著に改善
- さらにLLMリランキングを追加することで、最終的にtop3の精度が大きく向上
- 作業者が最初の3件を見るだけで必要な情報が得られるようになり、情報探索時間が大幅に短縮
-
生成AIによる現場最適化
- 多段階生成プロセスで、具体的な安全対策を提案
- ユーザーからのフィードバックをもとに高い満足度を実現
-
現場での実用性向上
- 多くの作業者がシステムを「実用的」と評価
- 短時間で必要な安全情報が得られることで、現場の安心感が向上
プロジェクトの進行
1. 事前準備:ドキュメント整備フェーズ
RAG(Retrieval Augmented Generation)の精度を最大限に引き出すため、事前に社内ドキュメントの整備を実施:
- ▪️生成AIを活用し、既存の安全マニュアルや作業手順書を検索しやすい形式に再構成
- ▪️各ドキュメントに対して、メタデータ(作業種別、リスクレベル、対象工程など)を付与
- ▪️類似内容の統合や、最新情報の反映による重複排除と鮮度維持
2. 要求分析と現状評価フェーズ
- ▪️現場作業者および管理者へのヒアリングを実施し、情報断絶および安全リスクの現状を定量的に評価
- ▪️過去のヒヤリハット事例や安全ドキュメントを選定し、各データに対してタグ付けを実施
3. 検索システムの設計と実装
高精度な情報検索を実現するため、3段階の検索パイプラインを構築:
段階 | 手法 | 入出力件数 | 主な効果 | 特徴・制約 |
---|---|---|---|---|
1. 初期検索 | ハイブリッド検索 (ベクトル検索とBM25の組み合わせ) | 全件 → 30件 | - 意味的類似性の検出 - キーワード完全一致の保証 - 専門用語・型番への対応 | - 高速な処理が可能 - 個別文書の詳細な意味理解は限定的 |
2. 精密リランキング | クロスエンコーダー | 30件 → 10件 | - より正確な類似度判定 - 文脈を考慮した順位付け - 同義語や言い換えの理解 | - 計算コストが高い - バッチ処理が必要 - 1対1の比較に限定 |
3. 最終調整 | LLMによるリランキング | 10件 → 6件 (順序変更) | - 複数文書の相対評価 - 業務要件の動的反映 - 暗黙知の活用 | - 処理時間が長い - コストが高い - プロンプト設計が重要 |
a) ハイブリッド検索の実装
当初、単純なベクトル検索のみを検討していましたが、以下の課題に直面:
- ▪️ベクトル検索は意味的な類似性を捉えるものの、キーワードの完全一致に弱い
- ▪️作業者が使用する専門用語や型番の正確な検索に支障
そこで、以下の2つの検索手法を組み合わせたハイブリッド方式を採用しました:
- ▪️
ベクトル検索(意味的類似性)
- ▪️文章をベクトル(数百次元の数値配列)に変換し、コサイン類似度で類似度を計算
- ▪️例えば「作業員の安全確保」と「従業員の危険防止」のような、表現は異なるが意味的に近い文書を発見可能
- ▪️文脈を考慮した検索が可能だが、重要なキーワードの完全一致を保証できない
- ▪️
BM25(キーワード重要度)
- ▪️文書内の単語の出現頻度と重要度を考慮したスコアリング
- ▪️例えば「プレス機A-123の緊急停止手順」のような、具体的な型番や専門用語を含む検索に強い
- ▪️キーワードの完全一致に基づく検索が可能だが、同義語や言い換えを考慮できない
これら2つの手法の特徴を活かし、以下のようなハイブリッド方式を実装:
def hybrid_search(query):
# ベクトル検索とBM25の重み付けスコアを算出
vector_scores = vector_search(query) # コサイン類似度
bm25_scores = bm25_search(query) # BM25スコア
# スコアの正規化と重み付け
final_scores = normalize(vector_scores) + normalize(bm25_scores)
return get_top_k(final_scores, k=30) # 上位30件を抽出
# 注: このコードは実装イメージを示すサンプルです。実際のプロジェクトでは、
# より詳細なエラーハンドリングやパラメータ最適化、ベクトルストアの具体的な実装等が含まれます。
この重み付けは、現場での試行錯誤を経て最適化した値です。これにより、意味的な類似性を重視しながらも、重要なキーワードの一致も確実に考慮した検索を実現しています。
b) クロスエンコーダーによるリランキング
ハイブリッド検索で抽出した上位30件に対し、より精緻な類似度判定を実施:
def rerank_with_cross_encoder(query, candidates):
model = CrossEncoder('model/cross-encoder-v1')
pairs = [[query, doc] for doc in candidates]
scores = model.predict(pairs)
return get_top_k(scores, k=10) # 最終的に上位10件を抽出
# 注: このコードは実装イメージを示すサンプルです。実際のプロジェクトでは、
# バッチ処理、キャッシング、モデルの具体的な設定、スコアの正規化処理等が実装されています。
プロジェクト初期段階では、ベクトル検索のみを使用したRAGシステムを構築していましたが、以下のような課題が明らかになりました:
- ▪️
top10とtop3の精度差
- ▪️ベクトル検索では関連文書がtop10には含まれるものの、最も関連性の高い文書がtop3に入らないケースが多発
- ▪️例えば「高温環境での保護具の選択」というクエリに対して、最適な回答が4位や5位に表示され、上位には部分的に関連する文書が表示される状況
- ▪️
ベクトル検索の技術的限界
- ▪️ベクトル検索(Bi-Encoder)は、クエリとドキュメントを別々にエンコードし、その後コサイン類似度で比較
- ▪️この方式では、クエリと文書の相互作用を考慮できず、文脈の微妙なニュアンスを捉えきれない
- ▪️特に複雑な安全指示や状況依存的な注意事項の検索で精度が低下
- ▪️
クロスエンコーダーの優位性
- ▪️クロスエンコーダーは、クエリとドキュメントを同時にエンコードして類似度を算出
- ▪️例えば「溶接作業における火災対策」というクエリに対して:
- ▪️「金属加工時の防火措置」(意味的に関連)
- ▪️「溶接作業の基本手順」(キーワード一致) という2つの文書があった場合、文脈を考慮して前者を適切に高順位に評価可能
- ▪️
現場からのフィードバック
- ▪️「最初の3件を見るだけで必要な情報が得られるようにしてほしい」という要望が多数
- ▪️作業者は時間的制約から、通常は検索結果の最初の数件しか確認しない傾向があった
- ▪️特に緊急時には、即座に最適な安全情報にアクセスできることが重要
これらの課題を解決するため、クロスエンコーダーによるリランキングを導入しました。クロスエンコーダーは計算コストが高いため、全文書に対して適用するのは現実的ではありません。そのため、ハイブリッド検索で絞り込んだ上位30件に対してのみ適用する2段階アプローチを採用しました。
クロスエンコーダーの導入により、検索結果のtop3の精度が大幅に向上しましたが、特定の複雑なケースでは依然として最適な文書が上位3件に含まれないことがありました。特に、複数の安全要素が絡み合う状況(例:「高所での溶接作業時の防火・落下防止対策」など)では、文書間の相対的な重要度の判断が難しく、クロスエンコーダーだけでは十分な精度が得られませんでした。
c) LLMによる最終ランキング調整
クロスエンコーダーで抽出された10件のドキュメントを、作業現場の状況に応じて最適な順序に並び替えるため、最終段階としてLLMによるリランキングを導入しました:
def llm_sort(query, documents):
# 以下は実装のイメージです。実際のプロンプトでは、
# - 作業安全性の評価基準(人命に関わるリスク、設備リスク等)
# - 現場特有の考慮要素(季節性、時間帯、法規制等)
# - 過去の事故事例との関連性
# などを構造化して指示します
prompt = f"""
作業内容: {query}
以下の安全マニュアルを重要度順に並び替え、上位6件を選択してください。
各マニュアルの選定理由と注意すべきポイントを付記してください。
{documents}
"""
return llm.generate(prompt)
# 注: このコードとプロンプトは実装イメージを示すサンプルです。
# 実際のプロジェクトでは、より詳細な評価基準や
# 業界特有の安全管理要件を考慮した本格的なプロンプトを使用しています。
この最終段階でLLMによるリランキングを採用した理由は、以下の技術的な利点に基づいています:
- ▪️
コンテキストウィンドウの活用
- ▪️クロスエンコーダーが検索クエリと個々のドキュメントを1対1で評価するのに対し、LLMは検索クエリと10件のドキュメント全体を同時に処理
- ▪️より広い文脈での関連性評価が可能となり、ドキュメント間の相対的な重要度も考慮した順序付けを実現
- ▪️
柔軟なランキング基準の設定
- ▪️プロンプトエンジニアリングにより、現場特有の要件(例:作業の危険度、実施頻度、季節性など)を動的に反映
- ▪️評価基準の微調整が容易で、現場からのフィードバックを即座にランキングロジックに反映可能
- ▪️
暗黙知の活用
- ▪️LLMの持つ一般的な知識を活用し、明示的なルールだけでは捉えきれない安全管理のニュアンスを考慮
- ▪️例えば、「重機を使用する作業」と「化学物質を扱う作業」が同時に該当する場合の優先順位付けなど
- ▪️
処理時間の許容
- ▪️本プロジェクトでは、検索結果の表示に数秒程度の遅延は許容される環境だった
- ▪️作業計画段階での安全確認など、即時性よりも精度が重視される場面が多かった
- ▪️LLMによる処理時間増加は、精度向上の効果と比較して十分に許容範囲内だった
LLMによるリランキングの導入により、検索結果のtop3の精度がさらに向上し、作業者が最初の3件を見るだけで必要な情報を得られるという当初の目標を達成することができました。
4. 生成AIによるカスタマイズアドバイス
- ▪️検索結果を基に、具体的な安全対策や注意事項を多段階生成
- ▪️フィードバックループを組み込み、現場に最適化したアドバイスを提供
5. 評価と改善
各改善段階におけるRAGシステムの性能評価には、以下の指標を使用しました:
- ▪️
top-k精度:検索結果の上位k件に正解文書が含まれる確率を示す指標です。作業者が最初の数件しか確認しない傾向があるため、特にtop3の精度が重要でした。
- ▪️
Mean Reciprocal Rank (MRR):各クエリに対する最初の正解文書のランク位置の逆数の平均値です。この値が1に近いほど、正解が上位に表示されていることを意味します。
- ▪️
Recall@k:関連する全文書のうち、検索結果の上位k件に含まれる割合を示します。
- ▪️
Precision@k:検索結果の上位k件のうち、関連文書の割合を示します。作業者が確認する文書数が限られているため、この指標は特に重要でした。
各改善段階における評価では、以下のような改善が確認されました:
- ▪️ベクトル検索のみの段階からクロスエンコーダー導入後にかけて、各指標が大幅に向上
- ▪️さらにLLMリランキング導入後では、すべての指標において顕著な改善が見られました
- ▪️特にtop3精度とMRRの改善が著しく、初期段階と比較して大幅な向上を実現
これらの指標の向上により、以下のユーザー体験の改善が実現しました:
- ▪️作業者の情報探索時間の大幅な短縮
- ▪️安全確認の実施率の向上(作業前の安全確認をスキップするケースが減少)
本プロジェクトでは高い実用性を確認しました。さらに以下の改善も実現できました:
- ▪️短時間で必要な安全情報が得られることによる現場の安心感向上
- ▪️継続的なフィードバックループによる検索精度と生成内容の最適化
このプロジェクトを通じ、弊社はお客様に対して、現場作業の安全性向上を実現する革新的なソリューションを提供しました。これにより、製造現場での事故防止および効率的な安全管理の実現に大きく寄与することができました。