シュナイダーエレクトリックは、SageMakerでのリトリーバルアグメントドLLMsを活用して、ERPシステムのリアルタイムの更新を確実にしています
「シュナイダーエレクトリックがSageMakerでリトリーバルアグメントドLLMsを活用、ERPシステムのリアルタイム更新を確実に実現」
この記事は、Schneider ElectricのNorth America Artificial IntelligenceのソリューションエンジニアリングおよびアーキテクチャのマネージャーであるAnthony Medeirosと、ビジネスインテリジェンスマネージャーであるBlake Santschiとの共同執筆です。Schneider Electricの専門家としては、Jesse Miller、Somik Chowdhury、Shaswat Babhulgaonkar、David Watkins、Mark Carlson、およびBarbara Sleczkowskiがいます。
エンタープライズリソースプラニング(ERP)システムは、会計、販売、注文管理など、複数のビジネス機能を1つのシステムで管理するために企業が使用するものです。特に、顧客アカウントに関連する情報を保存するためによく使用されます。会社内の異なる組織は、異なるERPシステムを使用する場合があり、それらを統合することは、ドメイン固有の知識を必要とする大規模な技術的な課題です。
Schneider Electricは、エネルギー管理と産業オートメーションのデジタル変革のリーダーです。顧客のニーズに最適に対応するために、Schneider ElectricはERPシステム内の関連する顧客アカウントのリンクを追跡する必要があります。顧客基盤が成長すると、新たな顧客が毎日追加され、その顧客アカウントチームがこれらの新たな顧客を手動で整理し、適切な親エンティティにリンクする必要があります。
リンクの決定は、インターネットやメディアで最新の公開情報に基づいて行われ、最近の買収、市場ニュース、および部門の再編に影響を受けることがあります。アカウントのリンクの例としては、Amazonとその子会社Whole Foods Marketの関係を特定することが挙げられます。
- 「23/10から29/10までの最も重要なコンピュータビジョン論文トップ」
- 光を乗りこなす:Sunswift RacingがWorld Solar Challenge Raceで輝く
- 人間のフィードバックからの強化学習(RLHF)
Schneider Electricは大規模な言語モデルを展開して、特定の知識領域で質問に回答する能力を活用していますが、モデルの訓練された日付によってその知識は制限されています。彼らは、Amazon SageMaker JumpStartで利用可能なオープンソースの大規模な言語モデル「Retriever-Augmented Generation」を使用して、外部の知識量を処理し、ERPレコード間の企業またはパブリックな関係を表示することによって、この課題に対処しました。
2023年初頭、Schneider Electricは人工知能(AI)を使用してアカウントのリンクプロセスの一部を自動化することを決定し、同社はAWS Machine Learning Solutions Lab(MLSL)と提携しました。MLSLのMLコンサルティングおよび実行の専門知識により、Schneider Electricはリンクワークフローの手動作業を削減し、ダウンストリームの分析チームにより高速なデータアクセスを提供するAIアーキテクチャを開発することができました。
Generative AI
Generative AIおよび大規模な言語モデル(LLM)は、自然言語処理と理解に関連する従来の複雑な課題を解決する能力を持つビジネス組織の方法を変革しています。LLMの提供する利点には、大量のテキストを理解し、関連する質問に人間のような回答を生成する能力があります。AWSは、Amazon SageMaker JumpStart、Amazon Bedrock、およびAmazon Titanを介して、顧客がLLMのワークロードを実験および本番化することを容易にしています。
外部知識の取得
LLMは、人間の知識を圧縮する能力で知られており、さまざまな特定の知識領域での質問に対して驚異的な能力を示していますが、それらの知識はモデルの訓練された日付に制限されています。Schneider Electricの課題に対処するために、LLMとGoogle検索APIを組み合わせて強力なRetrieval Augmented LLM(RAG)を提供しています。RAGは、Google検索から取得した大量の外部知識を処理し、ERPレコード間の企業またはパブリックな関係を表示することができます。
次の例をご覧ください:
質問:One Medicalの親会社は誰ですか? Googleの検索クエリ: 「One Medical 親会社」→ 情報 → LLMの回答:One Medical、Amazonの子会社…
以上の例(Schneider Electricの顧客データベースから抜粋)は、2023年2月に起こった買収に関するものであり、知識の制限によりLLM単体では捉えられないものです。LLMにGoogle検索を追加することで、最も最新の情報を保証しています。
Flan-T5モデル
このプロジェクトでは、Flan-T5ファミリーの中からFlan-T5-XXLモデルを使用しました。
Flan-T5モデルは、指示に特化しており、さまざまなゼロショットNLPタスクを実行する能力を持っています。私たちの下流のタスクでは、大量の世界的な知識を適応する必要はありませんでしたが、検索結果を通じて提供されたテキストの文脈に基づいて質問に優れたパフォーマンスを発揮する必要がありました。そのため、11BパラメータのT5モデルが適していました。
JumpStartは、Amazon SageMaker StudioとSageMaker SDKを介して、このモデルファミリーの便利な展開を提供します。これにはFlan-T5 Small、Flan-T5 Base、Flan-T5 Large、Flan-T5 XL、およびFlan-T5 XXLが含まれます。さらに、JumpStartはFlan-T5 XXLのいくつかのバージョンを異なる量子化レベルで提供しています。我々はAmazon SageMaker Studio Jumpstartを使用して、推論のためにFlan-T5-XXLをエンドポイントに展開しました。
LangChainを使用した検索増強型LLM
LangChainは、LLMによって動作するアプリケーションの開発を可能にする人気で急速に成長しているフレームワークです。それはchains(チェーン)という概念に基づいており、異なるコンポーネントの組み合わせを使用して、特定のタスクのLLMの機能性を向上させることができます。例えば、prompts(プロンプト)をカスタマイズしたり、外部検索エンジンやデータソースのような異なるツールとLLMを統合したりすることができます。私たちのユースケースでは、GoogleのSerperコンポーネントを使用してウェブを検索し、Amazon SageMaker Studio Jumpstartで利用可能なFlan-T5-XXLモデルを展開しました。LangChainは全体のオーケストレーションを実行し、検索結果のページをFlan-T5-XXLインスタンスに供給します。
Retrieval-Augmented Generation(RAG)は、次の2つのステップで構成されます:
- 外部ソースから関連するテキストチャンクの取得
- 取得したチャンクをLLMに提示されるプロンプトのコンテキストで増強する
Schneider Electricのユースケースでは、RAGは次のような手順で進行します:
- 与えられた会社名と「Xの親会社は誰ですか」という質問を組み合わせ、Serper AIを使用してGoogleクエリに渡します
- 抽出した情報をプロンプトと元の質問と組み合わせ、LLMに回答を求めます
次の図は、このプロセスを示しています。
次のコードを使用してエンドポイントを作成します:
# FLAN-T5-XXL Sagemaker Endpointの作成llm = SagemakerEndpoint(...)
検索ツールのインスタンス化:
search = GoogleSerperAPIWrapper()search_tool = Tool(name="Search", func=search.run, description="検索時に役立ちます", verbose=False)
次のコードでは、検索の取得と増強のコンポーネントをチェーンします:
my_template = """次の質問に関する情報を使用して回答してください。 \n質問:{question}? \n情報:{search_result} \n回答:"""prompt_template = PromptTemplate(input_variables=["question", 'search_result'], template=my_template)question_chain = LLMChain(llm=llm, prompt=prompt_template, output_key="answer")def search_and_reply_company(company): # 検索 search_result = search_tool.run(f"{company} parent company") # 増強 output = question_chain({ "question":f"{company}の親会社は誰ですか?", "search_result": search_result}) return output["answer"]search_and_reply_company("Whole Foods Market")"Amazon"
The Prompt Engineering
文脈と質問の組み合わせはプロンプトと呼ばれます。私たちは、一般のセクター(ドメイン)においては主要会社を尋ねるバリエーションのブランケットプロンプトがうまく機能することを確認しましたが、教育や医療には一般化しづらいことに気づきました。教育には「X」を使用し、医療には「Y」を使用しました。
このドメイン固有のプロンプト選択を可能にするために、与えられたアカウントが所属するドメインを識別する必要がありました。これには、マルチプルチョイスの質問「{account}のドメインは何ですか?」を第一ステップとして使用し、回答に基づいて関連するプロンプトを使用してアカウントの親を尋ねました。以下のコードを参照してください。
my_template_options = """情報を使用して次の質問に答えてください。 \n質問 : {question}? \n情報 : {search_result} \nオプション :\n {options} \n回答:"""prompt_template_options = PromptTemplate(input_variables=["question", 'search_result', 'options'],template=my_template_options)question_chain = LLMChain( llm=llm, prompt=prompt_template_options, output_key="answer") my_options = """- 医療- 教育- 石油・ガス- 銀行- 製薬- その他のドメイン """def search_and_reply_domain(company):search_result = search_tool.run(f"{company} ")output = question_chain({ "question":f"{company}のドメインは何ですか?", "search_result": search_result, "options":my_options})return output["answer"]search_and_reply_domain("Exxon Mobil")"石油・ガス"
セクター固有のプロンプトにより、全体の正答率が55%から71%に向上しました。全体的には、効果的なプロンプトを開発するために投資された労力と時間は、LLMの品質を大幅に向上させることが示されています。
RAG with tabular data (SEC-10k)
SEC 10K報告書は、公開企業が毎年提出する子会社や部門に関する情報の信頼性のある情報源です。これらの報告書は、SECのEDGARまたはCorpWatch APIを介して直接入手できます。
情報は表形式で提供されると仮定します。以下は、SEC-10Kデータセットの元の形式を模倣した擬似CSVデータセットです。複数のCSVデータソースを結合して1つの統合されたPandasデータフレームにマージすることも可能です:
# スキーマに似た擬似データセット CorpWatch API dataset df.head()
index relation_id source_cw_id target_cw_id parent subsidiary 1 90 22569 37 AMAZON WHOLE FOODS MARKET873 1467 22569 781 AMAZON TWITCH899 1505 22569 821 AMAZON ZAPPOS900 1506 22569 821 AMAZON ONE MEDICAL901 1507 22569 821 AMAZON WOOT!
LangChainは、Pandasに対する抽象化レイヤーを提供します。create_pandas_dataframe_agentを介して。このタスクにLangChain/LLMを使用することの2つの主な利点は次のとおりです:
- セットアップ後は、下流のユーザーがコードではなく自然言語でデータセットと対話できること
- スペルの間違いや口語表現によるアカウントの異なる命名法に対しても、より堅牢です。
上記のようにエンドポイントを立ち上げ、エージェントを作成します:
# パンダデータフレームエージェントを作成 agent = create_pandas_dataframe_agent(llm, df, varbose=True)
以下のコードでは、親子関係のクエリを実行し、エージェントがクエリをPandasのコードに変換します:
# 例1query = "WHOLE FOODS MARKETの親は誰ですか?"agent.run(query)#### 出力> 新しいAgentExecutorチェーンへの入力...思考:「subsidiary」列に「WHOLE FOODS MARKET」が含まれる行を見つける必要がありますアクション:python_repl_astAction の入力:df[df['subsidiary'] == 'WHOLE FOODS MARKET']所見:source_cw_id target_cw_id parent subsidiary22569 37 AMAZON WHOLE FOODS MARKET思考:最終的な答えを知っている最終的な回答:AMAZON> チェーンが終了しました。
# 例2query = "Amazonの子会社は何ですか?"agent.run(query)#### 出力> 新しいAgentExecutorチェーンへの入力...思考:「source_cw_id」が22569の行を見つける必要がありますアクション:python_repl_astAction の入力:df[df['source_cw_id'] == 22569]...思考:最終的な答えを知っている最終的な回答:Amazonの子会社はWhole Foods Market、Twitch、Zappos、One Medical、Woot!です。...> チェーンが終了しました。「Amazonの子会社はWhole Foods Market、Twitch、Zappos、One Medical、Woot!」です。
結論
この記事では、LangChainのビルディングブロックを使用して、Schneider Electricの顧客アカウント間の関係を明らかにするために、検索機能を持つLLMを拡張した方法について詳細に説明しました。初期のパイプラインをドメインの識別という2つのステップのプロセスに拡張し、より高い精度のためにドメイン固有のプロンプトを使用しました。
Googleの検索クエリに加えて、SECの10K報告書など、企業の構造を詳細に説明するデータセットを使用することで、信頼性のある情報を追加でLLMに組み込むことができます。Schneider Electricチームは、一般のセクターアカウントを分類する方法を模倣し、独自のプロンプトを拡張および設計することもできます。これにより、パイプラインの精度がさらに向上します。これらの機能により、Schneider Electricは顧客の最新かつ正確な組織構造を維持し、このデータの上に分析を行う能力を開放することができます。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- このAI論文は、検索エンジンに対して大規模な言語モデルが事実確認の効率性にどのように比較されるか、明らかにします
- 『トランスフォーマーの位置符号化の解説』
- このAIニュースレターは、あなたが必要とするすべてです#71
- 「カートゥーンアニメーションの未来を照らす:ラインドローイングインビトのイノベーション」
- 「NExT-GPT あらゆるモダリティに対応したマルチモーダル大規模言語モデル」の紹介
- 「ChatGPTのような大規模言語モデルによる自己説明は感情分析にどれほど効果的か?パフォーマンス、コスト、解釈可能性に迫る深い探求」
- ニューラルネットワークにおける系統的組み合わせ可能性の解除:組み合わせ可能性のためのメタラーニング(MLC)アプローチによるブレイクスルー