R Shinyで機械学習とAI（Embedding）による人事採用サポートの検証


## 前書き

先日、RAG付きのLocal LLMのR Shiny App, **rLocal-LLM-Pomelo** の開発を紹介させていただきました。

[👉元の記事はこちら（Qiita）](https://qiita.com/yin_4dev/items/290b8fbd6c43be7895ca)

記事の最初の公開の後、アプリをさらに進化させ、マルチ会話機能やSQLiteを活用したチャット履歴の自動復元機能を追加しました。現在は[GitHub](https://github.com/yin4dev/rLocal-LLM-Pomelo.git) にて公開しています。  ([Portable版](https://github.com/yin4dev/rLocal-LLM-Pomelo_Portable.git)と[lite](https://github.com/yin4dev/rLocal-LLM-Papeda.git)版もあります。機械学習と融合した[rMLai-Mikan](https://github.com/yin4dev/rMLai-Mikan.git)もあります。興味のある方はぜひ私のGitHub、[yin4dev](https://github.com/yin4dev?tab=repositories)を見にいってください。）
 R-Portablを使うとノーコード＆ワンクリックで、誰でも簡単に利用できるようにしています。

---

## 「MI×AI×DX」

そもそも、RでLocal LLMを利用しようというのは、「機密性の高い研究データを、安心・安全にローカル環境で機械学習・AI解析したい！」という願いからです。

ですが、**機密性の高いデータ**の扱いと**機械学習・AI**の需要があるのは、研究だけではありません。企業全体の話になると思います。これこそが**DX**ですね。

まぁ、 **化学反応**、**材料設計**などの分野の**機械学習**、**MI**、**AI**について、この記事を見てくださっている皆様にとっては普通すぎて面白いものではないと思います。(笑)


---

## 「人事×AI」の可能性を探ってみた

「全社的なDXに、何か貢献できないかな？」 

良くも悪くも、**人事採用**というテーマがあちこちで話題になっています。

人事採用って、求人票から履歴書、面接、適性検査なとプロセスが多くて大変ですよね（応募する方も…）。
大手企業はデータドリブン人事とか言いますが、中小企業にとってはなかなか敷居が高いものです。

そこで出番なのが、まさに**機械学習×AI** です。

---

##  一つ目：Embedding技術で履歴書を分析してみた

前回、Local LLMアプリを作った際にものすごく勉強になった技術の一つが、**Embedding**です。

Embeddingとは、簡単にいうと文章の意味や特徴を数値ベクトル化する技術です。LLMで用いられるRAG（検索拡張生成）機能では、質問をベクトル化して文書データのベクトルと比較し、類似性をコサイン類似度でランク付けしてから最適な回答を返します。


「履歴書をベクトル化し、求める人材像のベクトルと類似度比較をすれば、人材マッチングに応用できるのでは？」

調査したところ、このアイデア自体は研究論文や記事があり、実際にトレンドとして注目されていました。

- [論文ベースの記事](https://tech-blog.lapras.com/techBlogs/history-of-cv-parsing)
- [人事AI活用に関する記事](https://www.divx.co.jp/media/251)

せっかくなので、自作したRのLocal LLM　Appに、このアイデアを実装して試してみることにしました。このAppは、当初RAG機能の実装に当たって、Embeddingのチェックのため、LLMに送信する全データが見えるように作りました。

（APPの微調整としては、HRという人事用プロファイルパラメータを設定しました。LLMのパラメータは画像に示しています。）

#### ①事前準備
- ChatGPTを使い、ダミーの履歴書を複数作成。
- これらの履歴書データ（txt形式、PDFでもいいですけど）を、事前のベクトル化処理無しで同じフォルダに保存。(Embedding未経験でも使えるように、ファイルをフォルダに入れるだけで自動でEmbeddingします)

#### ②検証開始

「研究部が明るく社会性がある学生を募集している。主な業務：化学合成、測定分析。[Relevant Context]の候補者を分析して。」

というpromptで聞くと、Latest combined promptのreleveant contextが出てきます。
（AIの分析はとりあえず無視(笑)）
上位三位（Top K retrieval)の候補者が選定されました。
（結構いい感じに出しました！）

#### ③検証結果

「やるじゃん、うちの子！」

思ったよりかなり良い精度でした。これなら実務で活用できそうです。
（AIによる人事判断は賛否両論ですが、個人的には否定寄りの中立ですかね。完全にAIに任せるのは人間の社会要素を否定している気がします。今回の履歴書マッチングはあくまで数値化のサポート程度になると思います。）

この検証結果を見て、論文や特許文献などの**文書管理＆検索専用**のEmbeddingのみを用いたシンプルな個人向け管理アプリも作りたいと思いました（Mendeley無料版の制限が悩ましいため…）。

![AI.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4024369/f0cbd005-8db7-4b5d-8318-a4c9f3c69b25.jpeg)

---

## 二つ目：適性検査データを「見える化」してみた

採用面接で**適性検査**を利用する企業は多いですよね。  
採用面接の際、適性検査のデータから候補者のイメージを掴むのは意外と難しいです。

そこで、適性検査のデータを活用する計算実験（コサイン類似度）を行いました。
使ったAppは自作の機械学習App、[rMLai-Mikan](https://github.com/yin4dev/rMLai-Mikan.git)の日本語バージョンです。

#### ①事前準備
- ダミーの社員適性検査データセットを用意。

#### ②検証開始
- 採用候補者の適性検査データを手動入力または既存社員から選択。
- コサイン類似度を使って、既存社員との類似性を数値化。
（選択されていない変数も出ているのはバッグではなく、全体像を見るための仕様です）
- 上位数名の類似度の高い社員がグラフ表示（折れ線グラフ）

#### ③検証結果
「この候補者は○○さんに似ているから、こんな感じな人材かも？」といった採用後の配属先や異動先の参考情報として利用出来ます。

これを応用すれば、採用段階だけではなく、入社後の配属先検討やキャリアプラン策定時にも活用できそうです。

![機械学習類似度.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4024369/84ca2e19-f8d5-41a7-8a3f-81588d3a0072.jpeg)


---

## 結論：人事におけるAIのポテンシャルは高い！

今回、**機械学習**と**AI**を**人事採用**に活用してみて、以下のことが分かりました：

- 履歴書と人材像のマッチングにはEmbedding技術がかなり有効。
- 適性検査データを活用した類似度計算により、人物像や配属適性を直感的に掴める。

最終的にはこの2つのアプリの機能を統合して **「人事専用AIアプリ」** も作成可能だと思いますが（どっちもコサイン類似度だしね）。まあ、実際、需要がないのでやりませんけどね(笑)。

ただ、技術検証としては非常に面白く有益な結果が出ました。機械学習やAI（Local LLM）の応用可能性は広く、ぜひ今後も様々な場面で活かしていきたいと思います。
(実はタイトル詐欺です、類似度計算は機械学習でもなく、Embedding はAIでもありません（笑）)

---