データロボットとAWS Hackathon 2023でGenAI CVスクリーナーを構築する

「データロボットとAWS Hackathon 2023でGenAI CVスクリーナーの構築に挑戦!」

出典:https://blog.talview.com/hubfs/shutterstock_740171605.jpg

この記事は、私たちがDataRobot & AWS Hackathon 2023で第3位を獲得したジェネレーティブAI履歴書スクリーナーの解決策について説明しています。

DataRobot & AWS Hackathon

コンテンツへスキップ 2023年10月25日 13:00 EST ブリーフィング セッションから DataRobot と AWS はあなたとあなたのチームをショーケースに招待します…

www.datarobot.com

テックスタック

  • DataRobot Workbench
  • AWS Bedrock
  • Streamlit

ソリューションアーキテクチャ

出典:著者の図

DataRobotとAWS Bedrockは、ソリューションの設計の一部として必要です。 DataRobotは、Jupyter Notebookを介してデータサイエンスのプロトタイプを構築するためのワークベンチを提供しています。ノートブックインスタンス上の環境変数(AWSアクセスキーなど)も設定できます。

出典:著者のDataRobotスクリーンショット

AWS Bedrockは、AWS上の基礎モデルの管理サービスプラットフォームです。これは、Anthropic Claude、Stable Diffusionなどの基礎モデルのオーケストレーションです。基礎モデルの微調整や独自のモデルエンドポイントの作成により、カスタムモデルも作成できます。

出典:著者のAWSスクリーンショット

私たちは解決策でAnthropic Claude 2を使用しました。このモデルを呼び出す方法は非常にシンプルです。AWS BedrockはPython SDKであるBoto3を提供しています。

Boto3リファレンス — Boto3 1.28.75 ドキュメント

このウェブサイトまたはboto3を改善する提案はありますか? フィードバックをお寄せください。

boto3.amazonaws.com

import boto3, json, os# AWSアクセスキーIDとキーを環境変数に保存しておく必要がありますos.environ["AWS_ACCESS_KEY_ID"] = AWS_ACCESS_KEY_IDos.environ["AWS_SECRET_ACCESS_KEY"] = AWS_SECRET_ACCESS_KEY# ベッドロッククライアント/ランタイムを初期化するtry:     bedrock_runtime = boto3.client('bedrock-runtime','us-east-1',endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')except Exception as e:     print({"error": f"{e.__class__.__name__}: {str(e)}"})llm_prompt = """ここにLLMのプロンプトを入力"""# AWS BedrockにREST APIリクエストを送信するtry:  body = json.dumps({"prompt": llm_prompt, "max_tokens_to_sample": 100000,"temperature":0})  modelId = "anthropic.claude-v2"  accept = 'application/json'  contentType = 'application/json'  response = bedrock_runtime.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)  rv = response.get('body').read()except Exception as e:  rv = {"error": f"{e.__class__.__name__}: {str(e)}"}

DataRobotはLLMOpsプラットフォームのようにいくつかの追加の利点を提供しています。

  • デプロイ後のモデルのモニタリング
  • 予測環境(製品スクリプトに基づいて自動的にDockerイメージを作成)
  • モデルレジストリ
Source: author’s screenshot on DataRobot

モデルをデプロイするためには、Jupyter Notebookでload_model()とscore_unstructured()の2つの関数を指定する必要があります。DataRobotのドキュメンテーションで指定されている形式を厳密に従う必要があります。

デプロイ – drx v0.1.19

ML Opsへの任意のモデルのデプロイ DataRobot以外で構築された任意のモデルは「カスタムモデル」と見なされます。モデルが構築された場合…

drx.datarobot.com

import osAWS_ACCESS_KEY_ID = os.environ["AWS_ACCESS_KEY_ID"]AWS_SECRET_ACCESS_KEY = os.environ["AWS_SECRET_ACCESS_KEY"]def load_model():    """知識ベースを読み込むためのカスタムモデルフック。"""    import boto3, json, os, sys, io    os.environ["AWS_ACCESS_KEY_ID"] = AWS_ACCESS_KEY_ID    os.environ["AWS_SECRET_ACCESS_KEY"] = AWS_SECRET_ACCESS_KEY    try:         rv = boto3.client('bedrock-runtime','us-east-1',endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')    except Exception as e:         rv = {"error": f"{e.__class__.__name__}: {str(e)}"}    return rvdef score_unstructured(model, data, query, **kwargs):    import boto3, json, os, sys, io    """llmで履歴書をスクリーニングするためのカスタムモデルフック。    次のヘッダを持つデータディクショナリを渡す:        job_descript: 求人の職務要件。具体的な職務特有の要件を含める必要があります        resume: pdfからテキスト形式で解析された履歴書(文字列)    model: bedrock clientオブジェクト    Returns:    --------    rv : str        Json形式のディクショナリで、キーは次のとおりです:            - 'completion' :Cloud2モデルからの主なレスポンス            - 'stop sequence' :モデルが作成を停止するシーケンス    """    bedrock_runtime = model    generation_prompt_template = """    \n\nHuman: あなたは会社の仮想採用担当者です。候補者の履歴書を求人の職務要件と照らし合わせてレビューすることがあなたのタスクです。応募者の履歴書から関連する経験を見つけ、関連性のスケール(0から1の範囲)を割り当てる必要があります。関連する経験が見つからない場合は、該当する経験がないとだけ言ってください、答えを作り上げようとしないでください。求人の職務要件をすべて含める必要があります。応答は、要件、関連する経験、および関連性スケールをヘッダ行とするhtmlテーブルの形式でなければなりません。    <job-description>    {job_descript}    </job-description>        <candidate-resume>    {resume}    </candidate-resume>        \n\nAssistant:    """    data_dict = json.loads(data)    llm_prompt = generation_prompt_template.format(    job_descript=data_dict["job_descript"],    resume=data_dict["resume"],    )        try:        body = json.dumps({"prompt": llm_prompt, "max_tokens_to_sample": 100000,"temperature":0})        modelId = "anthropic.claude-v2"        accept = 'application/json'        contentType = 'application/json'        response = bedrock_runtime.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)        rv = response.get('body').read()    except Exception as e:        rv = {"error": f"{e.__class__.__name__}: {str(e)}"}    return rv

最後に、デプロイ関数を実行してモデルをエンドポイントとしてデプロイできます。この場合、AWS Bedrockクライアントを使用するラッパー関数です。

import datarobotx as drxdeployment = drx.deploy(    "storage/deploy/",    name="CV Screener Powered by LLM",    hooks={"score_unstructured": score_unstructured, "load_model": load_model},    extra_requirements=["boto3", "botocore", "datarobotx[llm]", "pypdf","unstructured", "awscli>=1.29.57", "datarobot-drum"],    # フックコードではなく、要件を変更する場合は既存の環境を再利用します    environment_id="653fbe55f1c59b93ae7b4a85", )# データのエクスポートに必要なデータ予測の保存を有効にするための設定deployment.dr_deployment.update_predictions_data_collection_settings(enabled=True)

私たちはStreamlitでプロトタイプを作成しました。

Source: author’s screenshot on his Streamlit app

例の求人の説明:

エンジニアリングスキルと機械学習の深い知識を持つ才能ある人々を探しています。問題を分析し、前例のない解決策を設計し、プラットフォーム上で実世界で使用するために実装できる人々です。私たちのエンジニアは、周りの全員を引き上げ、組織内のすべてのエンジニアの優れた貢献に寄与することにも頼られています。Deep Learning&Gen AIから価値を引き出すための最高のプラットフォームを目指している私たちの旅にご協力ください。

業務内容:

保守性の高い、テスト可能な、本番用のPythonコードの作成および設計機械学習と生成AIを活用したエンドユーザ向け製品の設計と構築他のアプリケーションとサービスとの機械学習アルゴリズムの統合機械学習プロセスの自動化

主な要件:

推奨される背景:Deep Learningに焦点を当てた6〜8年のPythonエンジニアリングと機械学習の経験深層学習ライブラリとフレームワークの経験(TensorFlow、Keras、PyTorchなど)保守可能でテスト可能で本番用のPythonコードの記述異なる機械学習アプローチとそのトレードオフの理解科学的Pythonツールキット(numpy、scipy、pandas、scikit-learn)の適切な操作時間、RAM、およびI/Oのスケーラビリティの側面を理解するデータサイエンスアプリケーションのソフトウェア設計およびピアのコードレビュースキルPythonでの自動テストとテスト駆動開発の経験Git + GitHubの使用Linuxベースのオペレーティングシステムに慣れていること

希望するスキル:

大規模な機械学習(100GB以上のデータセット)の経験競争的な機械学習の経験(Kaggleなど)本番環境での機械学習モデルのデプロイとメンテナンスの前の経験

DataRobotの旅における従業員の才能と献身は、DataRobotが象徴的な企業になるための核です。私たちは、競争力のある給与と福利厚生を提供し、従業員の福祉を最優先に考えることで、最高の人材を引きつけ、確保することを目指しています。以下に、位置と現地の法的要件に応じて含まれる場合の給与パッケージの内容を示します:医療保険、歯科保険、視力保険、柔軟な休暇プログラム、有給休暇、育児休暇、グローバル従業員支援プログラム(EAP)などです。

Source: author’s model output

解決策をお読みいただきありがとうございます。以下に2分間のショーケースビデオがあります。お楽しみください。ご質問があれば、お気軽にお問い合わせください。

https://www.canva.com/design/DAFyyWGMgmo/IOwVRtSfwpGGzhkMJpVltw/watch?utm_content=DAFyyWGMgmo&utm_campaign=designshare&utm_VoAGI=link&utm_source=editor

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more