目次[非表示]
-
1.はじめに
-
2.開発の目的・背景
-
2.1.きっかけ
-
2.2.開発方針
-
3.仮説と準備
-
3.1.考慮した点
-
3.1.1.テキストの保存形式
-
3.1.2.類似度の計算方法
-
3.2.準備
-
4.検証結果
-
4.1.案件1の場合
-
4.1.1.ユークリッド距離
-
4.1.2.コサイン類似度
-
4.1.3.内積
-
4.1.4.検証
-
4.2.案件2の場合
-
4.2.1.ユークリッド距離
-
4.2.2.コサイン類似度
-
4.2.3.内積
-
4.2.4.検証
-
4.3.案件3の場合
-
4.3.1.ユークリッド距離
-
4.3.2.コサイン類似度
-
4.3.3.内積
-
4.3.4.検証
-
4.4.検証結果総括
-
5.タイトルへの回答
-
6.おわりに
はじめに
こんにちは。株式会社divxのエンジニア、渡部です。
今回は、社内でのAI開発の具体例を紹介します。
「RAGを使うことで、人事の作業時間を減らせるのではないか?」というお話です。
開発の目的・背景
きっかけ
今回の「人事の作業時間削減」というテーマは、開発チームでの話し合いで出たアイデアです。
AIを使って何に貢献できるのか、どういう課題を解決できるのかを考える中で、人事の作業時間削減が挙がりました。
我々開発チームから見たとき、人事の仕事の中で、エンジニアのスキル把握をする作業には多くの時間がかかっているように見えたからです。
実際に確認してみたところ、社員のスキルが書かれたPDFファイル何十枚を、その都度確認するのはかなり時間がかかっていたようです。
開発方針
解決したい課題は決まったので、次はどうやって解決するかを考えます。
チーム内で話し合い、大まかな処理の方針を以下のように決めました。
- 架空人物の情報が書かれたPDFファイルを作成。
- PDFファイルをテキストに変換する。
- テキストをRAGで使うベクトルDBに保存する。
- クエリを投げると、類似度が高いデータが検索される。
- 検索されたデータを基にAIが候補者を提案する。
今回私が担当したのは、2と3の部分です。
変換されたテキストをどのように保存するか、それによってどのような検索結果が得られるかを検証しました。
なお、この機能の実現にあたり個人情報は必要なかったので、個人情報を排除したPDFを対象にすることでコンプライアンス的な課題はクリアできました。
今回の開発環境は以下の技術スタックを使用しました。
- Python 3.11.6
- ChromaDB 0.5.15
- OpenAI text-embedding-3-large
仮説と準備
考慮した点
テキストの保存形式
まず考えたのは、PDFファイルから変換されたテキストをどのような形式で保存するかです。
PDFの中身である「その人がどのようなスキル・経験を持っているか」という情報の意味が変わらない形で保存するには何が良いかを考え、「json形式」と「説明文」の2つで検証することにしました。
json形式のように構造化されていたほうが解釈のぶれが少ないと考えました。
一方で、テキスト埋め込みの際には自然言語に近い形式のほうが良いのではないかという考えもあったので、同じ内容を文章としても保存することにしました。
「json形式」の例がこちらです。
※ 中身の情報は架空の人物のものです。
{
"タイトル": "スキルシート",
"名前": "山田太郎",
"最寄り駅": "新宿駅",
"職務要約": "ソフトウェアエンジニアとして主にC++とJavaを用いたシステム開発を担当し、チームリーダーとしての実績があります。",
"活かせる経験・知識": "C++とJavaを使用したソフトウェア開発の経験があります。また、チームリーダーとしてプロジェクトを成功に導いた経験があります。",
"保有技術": "·応用情報技術者試験·Oracle認定Javaプログラマ",
"その他": "日本国籍",
"案件": [
{
"期間": "2023年01月 ~ 2023年06月",
"案件詳細": "【プロジェクト概要】金融機関向けのリスク管理システムの開発。【業務内容】·リスク計算モジュールの設計と実装·高パフォーマンスを実現するためのチューニング",
"環境・言語": "【言語】Java,C++【OS】WindowsServer【FW】Spring,Hibernate【DB】PostgreSQL",
"役割・役職": "リードエンジニア",
"規模・人数": "8人",
"担当工程": "要件定義・基本設計・詳細設計・実装・単体テスト・結合テスト"
},
{
"期間": "2022年4月 ~ 2022年12月",
"案件詳細": "【プロジェクト概要】制御システム向けリアルタイム監視アプリの開発。【業務内容】・データ収集モジュールの設計・リアルタイムデータ処理の最適化",
"環境・言語": "【言語】C++【OS】Linux【FW】Qt【DB】SQLite",
"役割・役職": "エンジニア",
"規模・人数": "5人",
"担当工程": "基本設計・詳細設計・実装"
}
],
"自己PR": "チームのコアメンバーとして、効率的なプロジェクト運営を心掛けています。成長し続けるために、常に新しい技術を学ぶことに前向きです。"
}
「説明文」の例がこちらです。
※ 中身の情報は架空の人物のものです。
山田太郎さんの情報をご紹介します。
最寄り駅は新宿駅です。
ソフトウェアエンジニアとして主にC++とJavaを用いたシステム開発を担当しており、チームリーダーとしての実績もあります。
C++とJavaを使用したソフトウェア開発の経験を活かし、プロジェクトを成功に導いた例もあります。
技術資格として、応用情報技術者試験とOracle認定Javaプログラマを保有しています。
国籍は日本です。
これまでに2件の案件経験があります。
1件目は、2023年1月から2023年6月まで金融機関向けのリスク管理システムの開発をリードエンジニアとして担当しました。
このプロジェクトでは、リスク計算モジュールの設計と実装、高パフォーマンスを実現するためのチューニングを行いました。
使用言語はJavaとC++で、OSはWindowsServer、フレームワークにはSpringとHibernateを使用し、データベースはPostgreSQLを利用しました。
プロジェクト規模は8人で、要件定義から結合テストまで幅広い工程を担当しました。
2件目は、2022年4月から2022年12月に制御システム向けのリアルタイム監視アプリの開発にエンジニアとして従事しました。
ここでは、データ収集モジュールの設計とリアルタイムデータ処理の最適化に取り組みました。
C++を使用し、Linux上で開発を行い、フレームワークにはQtを使用し、データベースはSQLiteを利用しました。
プロジェクト規模は5人で、基本設計から実装までを担当しました。
山田さんはチームのコアメンバーとして、効率的なプロジェクト運営を心掛けており、常に新しい技術を学ぶことに前向きです。成長を続けるために、日々の努力を怠らない姿勢が魅力的な方です。
上記2種類の形式で12名分のデータを保存し、検索結果に差が生まれるのか検証します。
形式が重要でない場合、同じ人のデータ2種類が同じような類似度として判定されるはずです。
類似度の計算方法
次に考えたのは、類似度の計算方法です。
今回使用するChromaDBでは以下の3つの類似度の計算方法が用意されています。
公式ドキュメント
それぞれの違いの説明は別記事にお任せするとして、今回は解決したい課題であるスキルシートの内容検索にこれら類似度計算方法を適用した場合、どのような結果が得られるかを検証しました。
もし、類似度計算方法が重要であれば、それぞれの計算方法で得られる類似度の順位が異なるはずです。
準備
まず、上記で紹介した形式2種類を12名分用意しました。
同じ人を表すデータには同じ番号【001 ~ 012】を振り、それぞれの形式で保存しました。
そして、そのデータを保存するChromaDBのコレクションを類似度計算の種類に合わせて3つ作成しました。
つまり、形式2種類 x 12名 x 計算3種類 = 72通りの検索対象データを用意しました。
次に、検索するためのクエリとなる案件情報も、架空の内容で3つ作成しました。
案件1の内容はこちらです。案件2・3は後ほど紹介します。
※ 中身の情報は架空の案件のものです。
【案件名】組込みシステム開発(TCP通信モジュール)
【業務概要】
新型ドメインコントローラにおけるセンサーデータを、データ管理サーバーに
直接送信するための通信モジュールの開発
※C言語でのTCP通信機能を持つソフトウェア層の開発
技術文書が英語で提供されるため、英語読解力があることが望ましい
工程:要件定義~テスト
【条件】
・リモート頻度:開始後は週3,4
・場所:リモート、名古屋(参入初期1~2か月はオフィス勤務予定(状況によりリモート変更可)
・時期:2月~
・募集人数:2名
・外国籍:応相談
・個人事業主:歓迎
・面談:オンライン1回
【必要スキル】
・C言語での組込み開発経験
【尚可スキル】
・RTOSの知識
・センサーデータ処理
・Linux環境での開発経験
また、ChromaDBで検索をかけるメソッドは以下のものを使用します。
ログ出力に検索結果上位10件のメタデータと距離を表示するようにしました。
import chromadb
from app import app
class ChromaDBAdapter(IVectorStoreRepository):
def search_documents(self, search_word: str):
try:
query_results = self.collection.query(query_texts=[search_word], n_results=10)
app.logger.info(f"コレクション名: {self.collection.name}")
source_file_names = [metadata["source_file_name"] for metadata in query_results["metadatas"][0]]
distances = query_results["distances"][0]
app.logger.info(f"検索結果: {source_file_names, distances}")
検証結果
それでは実際にクエリを投げた結果を見ていきましょう。
判別しやすいよう、検索結果でのメタデータにある拡張子を、jsonに似せた構造化データの場合は「.json」、説明文の場合は「.txt」としています。
最初に表示されるほど類似度が高いということになります。
数値は、ファイル名と同じ順番で表示されておりそのファイルの類似度を示しています。小さいほど類似度が高いです。
案件1の場合
案件1は、先程の「準備」で紹介したものをクエリとして検索しています。
ユークリッド距離
コレクション名: skill-sheet-l2
検索結果: (['スキルシート005.json', 'スキルシート001.json', 'スキルシート005.txt', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート004.json', 'スキルシート011.json', 'スキルシート001.txt', 'スキルシート003.txt', 'スキルシート002.json'],
[0.9362897865133262, 1.0542741377967784, 1.095132039843881, 1.184698427254845, 1.197034018296793, 1.204293674950156, 1.205009766249523, 1.207558030351547, 1.2185094623403436, 1.2514121080789151])
コサイン類似度
コレクション名: skill-sheet-cosine
検索結果: (['スキルシート005.json', 'スキルシート001.json', 'スキルシート005.txt', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート011.json', 'スキルシート001.txt', 'スキルシート004.json', 'スキルシート003.txt', 'スキルシート002.json'],
[0.46848399045693323, 0.5252751878773372, 0.5452708533723923, 0.5929483117212917, 0.599612305966055, 0.6005627127832993, 0.6024759028311142, 0.6026491348553962, 0.6086520540657704, 0.6225466278506562])
内積
コレクション名: skill-sheet-ip
検索結果: (['スキルシート005.json', 'スキルシート001.json', 'スキルシート005.txt', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート001.txt', 'スキルシート011.json', 'スキルシート004.json', 'スキルシート003.txt', 'スキルシート002.json'],
[0.4677808716377727, 0.5265400457410712, 0.5470713073810726, 0.5934473141366792, 0.5991089847168378, 0.5995256392085322, 0.6011182915895448, 0.6024756651285688, 0.6079582661002236, 0.623331643662036])
検証
各類似度計算方法による差はあまりなく、トップ5までは全く同じ順位でした。
また、同じ人を表すデータの場合、json形式のデータが総じて類似度が高い判定になりました。
最も類似度が高いと評価された005の人の情報は以下のとおりです。
案件1が組み込みエンジニアを探しており、C言語やRTOSの経験を求めていることから、人間から見ても類似度が高いと言えそうです。
類似度の数値を見ても2位の差は、2位と3位との差より広く、サンプルデータの中ではダントツで似ていると判断された模様です。
※ 中身の情報は架空の人物のものです。
{
"タイトル": "スキルシート",
"名前": "井上 彩",
"最寄り駅": "川口駅",
"職務要約": "組み込みシステムエンジニアとして、IoTデバイス向けのファームウェア開発を担当。",
"活かせる経験・知識": "組み込みシステム開発に関する知識を活かし、デバイスドライバーの実装経験があります。 ",
"保有技術": "・組込みソフトウェア技術者試験・Linux Professional Institute Certification",
"その他": "日本国籍",
"案件": [
{
"期間": "2021年06月 ~ 2023年03月",
"案件詳細": "【プロジェクト概要】IoTデバイス向けのファームウェア開発。【業務内容】・ドライバの設計と開発・通信プロトコルの実装",
"環境・言語": "【言語】C,C++【OS】Embedded Linux【ツール】Keil, GCC",
"役割・役職": "組み込みシステムエンジニア",
"規模・人数": "6人",
"担当工程": "要件定義・基本設計・詳細設計・実装・単体テスト"
},
{
"期間": "2020年8月 ~ 2021年5月",
"案件詳細": "【プロジェクト概要】医療機器向け組み込みソフトウェアの開発。【業務内容】・センサーデータの取得と処理・安全基準の遵守に向けた検証",
"環境・言語": "【言語】C++【OS】RTOS【ツール】IAR Embedded Workbench",
"役割・役職": "シニアエンジニア",
"規模・人数": "4人",
"担当工程": "基本設計・詳細設計・実装・単体テスト"
}
],
"自己PR": "小さなデバイスに大きな機能を持たせることにやりがいを感じています。プロジェクトの成功に向けて、細部まで注意を払っています。"
}
案件2の場合
案件2の内容は以下の通りです。
pythonが得意な人が求められています。
※ 中身の情報は架空の案件のものです。
【職種】 Pythonエンジニア
【作業場所】 新宿駅 ※フルリモートも可能
【作業期間】 2025年1月~長期
【業務内容】 ■業務内容
「医療機関向けデジタル化プロジェクト」に参画していただきます。
イノベーションを推進し、関係者と密に連携しながら、
迅速に開発を進めます。
<具体的には>
・システムの要件定義~展開管理
・システムの各機能の設計/開発
・ソフトウェアアーキテクチャ設計と最適化
・デザインとユーザー体験の改善施策
■開発環境
- Python, Java, JavaScript, TypeScript
- Django, Flask, Angular, React
- PostgreSQL, MongoDB
- Docker, Jenkins, AWS
- GitLab, Trello
【必要スキル】 ・Pythonによる開発経験2年以上
・設計~保守運用の一連の経験3年以上
※以下の場合はNGとさせていただきます
・断片的にPythonを使用した経験しかない方
(スクリプト作成のみや部分的な改修経験等)
・開発のみで設計管理などの工程経験が欠如している方
【尚可スキル】 ・クラウドネイティブアーキテクチャの知識
・新規プロジェクトやスタートアップでの開発経験
・業務効率化ツールの開発経験
・toB向けサービスの開発経験
・Java、TypeScriptを活用した開発経験
・React/Reduxを使用したフロントエンド開発経験
ユークリッド距離
コレクション名: skill-sheet-l2
検索結果: (['スキルシート012.json', 'スキルシート002.json', 'スキルシート001.json', 'スキルシート011.json', 'スキルシート007.json', 'スキルシート010.json', 'スキルシート005.json', 'スキルシート012.txt', 'スキルシート002.txt', 'スキルシート004.json'],
[0.9772350133569315, 0.9920745024109084, 1.0221885106214503, 1.0338927611223354, 1.044255241659813, 1.0493270891941828, 1.0504636333828128, 1.0988697590193655, 1.0999242544840542, 1.1077817325586823])
コサイン類似度
コレクション名: skill-sheet-cosine
検索結果: (['スキルシート012.json', 'スキルシート002.json', 'スキルシート001.json', 'スキルシート011.json', 'スキルシート007.json', 'スキルシート005.json', 'スキルシート010.json', 'スキルシート012.txt', 'スキルシート004.json', 'スキルシート002.txt'],
[0.4892835759694485, 0.4929676920298022, 0.5094146763112964, 0.5157647032477414, 0.524214791326705, 0.5244239274928, 0.5263783221987042, 0.5481070653367912, 0.5527576072444794, 0.5565047039876307])
内積
コレクション名: skill-sheet-ip
検索結果: (['スキルシート012.json', 'スキルシート002.json', 'スキルシート001.json', 'スキルシート011.json', 'スキルシート007.json', 'スキルシート005.json', 'スキルシート010.json', 'スキルシート012.txt', 'スキルシート002.txt', 'スキルシート004.json'],
[0.4907711612440173, 0.4952874215797949, 0.5111412430177057, 0.516734701974768, 0.5242789874740684, 0.5243454878199012, 0.5272686835778009, 0.5482449743778463, 0.5517342011102189, 0.5537896922285408])
検証
先程の案件1と同様、各類似度計算方法による差はあまりなく、トップ5までは全く同じ順位でした。
説明文よりjson形式のほうが類似度が高いという結果も変わりません。
類似度が最も高いと評価された012の人の情報は以下のとおりです。
残念ながらこの方はpythonの経験はなさそうです。しかし、「電子カルテ」の開発経験が案件内容の「医療機関向け」という言葉と類似性が高いと判断されたと思われます。
※ 中身の情報は架空の人物のものです。
{
"タイトル": "スキルシート",
"名前": "菅原 平次",
"最寄り駅": "鹿児島駅",
"職務要約": "PHP/Laravelでバックエンド開発。",
"活かせる経験・知識": "PHP/Laravelのバックエンド経験。",
"保有技術": "PHP認定 上級",
"その他": "日本国籍",
"案件": [
{
"期間": "2019年04月 ~ 2021年07月",
"案件詳細": "電子カルテのバックエンド開発。API開発、セキュリティ対応。",
"環境・言語": "PHP, JavaScript, Ubuntu, Symfony, PostgreSQL",
"役割・役職": "シニアバックエンドエンジニア",
"規模・人数": "8人",
"担当工程": "要件定義~単体テスト"
}
],
"自己PR": "ニーズを捉え成果を提供。堅牢なシステム設計で実績を積みました。"
}
それでは僅差で2位になった002の人の情報も見てみましょう。
この方はpythonでの開発経験があり資格も取得しています。案件2の候補となるでしょう。
※ 中身の情報は架空の人物のものです。
{
"タイトル": "スキルシート",
"名前": "佐藤 花子",
"最寄り駅": "大宮駅",
"職務要約": "データサイエンティストとして、データ解析と機械学習モデルの実装を中心に活動しています。",
"活かせる経験・知識": "Pythonを使用したデータ解析の経験が豊富です。特に機械学習アルゴリズムの実装に自信があります。",
"保有技術": "・データ分析スペシャリスト・Pythonエンジニア検定",
"その他": "日本国籍",
"案件": [
{
"期間": "2022年03月 ~ 2023年02月",
"案件詳細": "【プロジェクト概要】Eコマース向けのレコメンデーションエンジンの開発。【業務内容】・顧客データを用いたモデル構築・A/Bテストの設計・実施",
"環境・言語": "【言語】Python【OS】Ubuntu【FW】TensorFlow, scikit-learn【DB】MongoDB",
"役割・役職": "データサイエンティスト",
"規模・人数": "6人",
"担当工程": "要件定義・基本設計・詳細設計・実装・単体テスト・結合テスト"
},
{
"期間": "2022年1月 ~ 2021年05月",
"案件詳細": "【プロジェクト概要】SNSプラットフォームにおけるユーザーセグメンテーションの自動化。【業務内容】・クラスタリングアルゴリズムの選定と実装・データ前処理パイプラインの開発",
"環境・言語": "【言語】Python, R【OS】CentOS【FW】Pandas, R Shiny【DB】MySQL",
"役割・役職": "アナリスト",
"規模・人数": "4人",
"担当工程": "詳細設計・実装"
}
],
"自己PR": "チームのコアメンバーとして、効率的なプロジェクト運営を心掛けています。成長し続けるために、常に新しい技術を学ぶことに前向きです。"
}
類似度が最も高いと判断されたのは012の人でしたが、あくまでこれはクエリとの類似性の問題であり、2位だった002の情報も合わせてAIに渡し、合致しているのはどちらかを質問すればよいでしょう。
案件3の場合
案件3は、以下の内容です。
AWSを活用した業務システムの開発を行うエンジニアを募集しています。
※ 中身の情報は架空の案件のものです。
【案件名】AWSインフラ上での業務システム開発支援/製造業
【案件概要】
当案件は、上位コンサルタントが複数名サポートしている製造業の顧客に向けたプロジェクトです。
AWSを活用した業務システムの基盤構築が進行中で、今回、システム開発を担当していただけるエンジニアを複数名募集しております。
【契約期間】2024年12月~
【稼働率】100%
【募集人数】SE3名・PG3名
【年齢】不問
【勤務場所】リモート(大阪梅田駅)※関西圏在住の方
【勤務時間】9:00~18:00(休憩12:00~13:00)
【面談回数】2回 ※スキルに応じて上位面談のみの場合もあり
【スキル】
Must
・JavaScriptまたはTypeScriptでの業務経験
・バックエンド開発の業務経験(Node.js)
・詳細設計からリリースまでの一連の経験
Want
・iOSアプリ開発の経験
・クラウドベースのアーキテクチャ設計経験
ユークリッド距離
コレクション名: skill-sheet-l2
検索結果: (['スキルシート007.json', 'スキルシート005.json', 'スキルシート008.json', 'スキルシート001.json', 'スキルシート003.json', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート003.txt', 'スキルシート006.json', 'スキルシート011.json'],
[0.8625217352188962, 0.9519731744458317, 0.9565217637756331, 0.9579637811560368, 0.9895805164880417, 0.9901915623254517, 0.9927800372818878, 1.0003319127142138, 1.0148057389791743, 1.0260474680152043])
コサイン類似度
コレクション名: skill-sheet-cosine
検索結果: (['スキルシート007.json', 'スキルシート005.json', 'スキルシート001.json', 'スキルシート008.json', 'スキルシート003.json', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート003.txt', 'スキルシート006.json', 'スキルシート011.json'],
[0.43372614472130766, 0.47557332256798324, 0.47816042922433644, 0.47938080051789167, 0.4940961598031075, 0.49611203184165986, 0.49809135886402456, 0.5009660290676812, 0.5083296611982733, 0.5121896587870213])
内積
コレクション名: skill-sheet-ip
検索結果: (['スキルシート007.json', 'スキルシート005.json', 'スキルシート008.json', 'スキルシート001.json', 'スキルシート003.json', 'スキルシート012.json', 'スキルシート010.json', 'スキルシート003.txt', 'スキルシート006.json', 'スキルシート011.json'],
[0.43374445283866225, 0.4756975735026554, 0.47869666562475244, 0.47905334688302137, 0.4938438597146064, 0.49667833715783405, 0.49721299343801806, 0.5001033930389988, 0.5071061129979283, 0.5123023539409404])
検証
またしても、各類似度計算方法による差はあまりありません。
json形式のデータが総じて類似度が高い判定なのも変わりません。
類似度が最も高いと判断された007の情報は以下のとおりです。
AWS SAPの資格を取得しており、AWSを活用した業務システムの開発経験があります。
※ 中身の情報は架空の人物のものです。
{
"タイトル": "スキルシート",
"名前": "キム・ヒョンジュン",
"最寄り駅": "新大久保駅",
"職務要約": "クラウドアーキテクトとして、AWSを利用したクラウドインフラの設計と実装を担当。",
"活かせる経験・知識": "クラウドネイティブアプリケーションの設計と運用が得意です。",
"保有技術": "AWS認定 ソリューションアーキテクト - プロフェッショナル",
"その他": "韓国国籍、就労ビザ(5年)",
"案件": [
{
"期間": "2022年05月 ~ 2023年09月",
"案件詳細": "【プロジェクト概要】大規模なクラウド基盤上でのECサイトのリフト&シフト。【業務内容】AWS上でのインフラ設計CI/CDパイプラインの構築",
"環境・言語": "【言語】Python, JavaScript【OS】AWS Linux【ツール】Terraform, Jenkins",
"役割・役職": "クラウドアーキテクト",
"規模・人数": "8人",
"担当工程": "要件定義・基本設計・詳細設計・実装・単体テスト・保守運用"
},
{
"期間": "2020年3月 ~ 2021年12月",
"案件詳細": "【プロジェクト概要】教育機関向けオンライン学習プラットフォームの開発支援。【業務内容】クラウド環境でのスケーラブルなアーキテクチャの設計セキュリティ監査への対応",
"環境・言語": "【言語】Java, Node.js【OS】Google Cloud Platform【ツール】Kubernetes, Helm",
"役割・役職": "技術リーダー",
"規模・人数": "9人",
"担当工程": "基本設計・詳細設計・実装・単体テスト・保守運用"
}
],
"自己PR": "最新のクラウド技術を活用し、システムの信頼性とスケーラビリティの向上に貢献しています。常に先を見据えた技術革新を目指しています。"
}
検証結果総括
今回のスキルシート検索機能においては、類似度の計算方法よりデータ形式による影響が大きかったです。
クエリの形式がある程度決まったものに限定されるのであれば、それに近い形式で保存するのが有効なようです。
一方で、今回のケースでは、ユークリッド距離・コサイン類似度・内積による結果の違いが現れませんでした。しかし、類似度計算結果は分散表現方法に依るところも大きいので、今回の結果だけを見て計算方法の良し悪しについて結論を出すべきではないでしょう。
タイトルへの回答
タイトルにある「人事の作業時間を削減できるか?」という疑問に対する答えは「できる」になります。
希望する条件で検索することで、類似度の高いスキルシートを検索してAIに渡して回答を得られます。
条件ごとに全スキルシートをひとつひとつ見ていたことをAIが代行してくれます。
今回は類似度判定の部分だけを見てきましたが、その後のAI回答生成までを含めても、かかる時間は1~3分ほどしかかかりません。
PDFファイル一つの確認に1分しかかかってなくても100件のスキルシートを確認するのには100分かかります。しかし、AIによる検索と回答生成であれば1~3分で済むので、人事の作業時間を削減できると言えます。
おわりに
RAGの実装で具体的なデータを使った記事はまだ少ないとおもいますので、今回の記事が参考になれば幸いです。
このあとのアドベントカレンダーでは、GraphRAGを使った記事も掲載予定ですのでぜひそちらもご覧ください。