Slide 1

Slide 1 text

ROSCAFE Rust を学ぶ会 Rust を他の⾔語と同じように 活⽤して感じた採⽤効果 2024.02.07 hajime watanabe

Slide 2

Slide 2 text

もくじ Rust の活⽤事例 2 : 採⽤⾯での良さ 3 : 会社紹介 4 : 終わりに 5 : Copyright © LabBase,Inc. All Rights Reserved.  ⾃⼰紹介 1 :

Slide 3

Slide 3 text

渡辺 創 ⼤学院で⾃然⾔語処理を研究後、⼤⼿通信会社にてAIコンサルタン トを経験。事業会社で事業を深く理解しながら機械学習やデータを 活⽤した価値を創りたいという思いからLabBaseに⼊社。⼊社後 は、新規開発やLabBaseの機能開発を経験。現在リサーチチームの リーダーとして、機械学習やLLMを活⽤した機能のプロトタイプ作 成や検証を⾏っています。 株式会社LabBase Researchチーム リーダー https://github.com/HHajimeW ⾃⼰紹介 Copyright © LabBase,Inc. All Rights Reserved. 

Slide 4

Slide 4 text

話すこと‧離さないこと Copyright © LabBase,Inc. All Rights Reserved.  ● 弊チームでの Rust 使い⽅の具体例 ● 採⽤のメインにRustを掲げて、感じた効果 話すこと ● Rustならではの開発における⾔語的なメリット 話さないこと

Slide 5

Slide 5 text

Research チームとは Copyright © LabBase,Inc. All Rights Reserved. 

Slide 6

Slide 6 text

Research チームのミッション Copyright © LabBase,Inc. All Rights Reserved.  ● 検索キーワードの推薦 ● 募集の⾃動⽣成 ● RAGを使った社内の問い合わせ ● マーケティングの部分的な⾃動化 最新技術を利用したプロトタイプ開発。 直近は費やす時間に対してインパクトが大きそうな GPTをつかった機能に注力。

Slide 7

Slide 7 text

Copyright © LabBase,Inc. All Rights Reserved.  Rust の活⽤事例

Slide 8

Slide 8 text

サービス紹介 Copyright © LabBase,Inc. All Rights Reserved.  学⽣が⾃らの研究情報を登録 企業の⽅が検索し、学⽣をスカウト 研究が忙しい学⽣が時間を節約しながら、 専⾨性を⽣かして就職活動ができるように。

Slide 9

Slide 9 text

検索例と学⽣情報 Copyright © LabBase,Inc. All Rights Reserved. 

Slide 10

Slide 10 text

検索に使う技術的なキーワードは表記がゆれやすい。 学生側と企業側でキーワードの選択が異なる。 今回、着⽬した課題 Copyright © LabBase,Inc. All Rights Reserved.  AND検索 や OR検索に も不向きがある。 検索クエリ:機械学習 or ⾃然⾔語処理 機械学習 NLP 深層学習 ⾃然⾔語処理

Slide 11

Slide 11 text

ベクトル検索で曖昧な検索を行う。         解決策 Copyright © LabBase,Inc. All Rights Reserved.  検索クエリをベクトル化 学生のキーワード列をベクトル化 機械学習 ⾃然⾔語処理 [1.5, ... , 0.4] [0.8, ... , -0.2] 機械学習 分⼦化学 NLP 深層学習 [0.7, ... , 0.1] [-0.3, ... , 1.2] ユークリッド距離で ランキング

Slide 12

Slide 12 text

主なユーザが人事のかたであるということもあり、 どこがヒットしたのかわかりにくいという声がある。 新たな課題 Copyright © LabBase,Inc. All Rights Reserved.  AND検索 や OR検索 ベクトル検索 検索クエリ:機械学習 or ⾃然⾔語処理 機械学習 ⾃然⾔語処理 NLP 深層学習 解決策として、 学生のキーワード列をまとめてベクトル検索した後、 個々のキーワードとの距離を計算し、近い順に並べる。

Slide 13

Slide 13 text

データベース Copyright © LabBase,Inc. All Rights Reserved.  keyword_id keyword_text embedding student_id student_name keyword_list_embedding student_id keyword_id keywords students student_keyword_relations NLP 深層学習 1 1 2 1 1 1 2 NLP 深層学習 [0.9, …, -0.2] [-0.3, …, 1.2] 山田花子 [0.6, …, -0.7] NLP 深層学習 [0.9, …, -0.2] [-0.3, …, 1.2] [0.6, …, -0.7] NLP 深層学習 keywords の embedding カラム students の keyword_list_embedding カラム

Slide 14

Slide 14 text

処理フロー Copyright © LabBase,Inc. All Rights Reserved.  事前準備 ● 各種データを csv からデータベースにデータを⼊れる。 ● OpenAI の Embeddingを使って、 ○ keywords の embedding を取得し保存。(この時、pgvectorというPostgreSQLの拡張機能を使う) ○ students の keyword_list_embedding を取得し保存。(この時、pgvectorというPostgreSQLの拡張機能を使う) 検索の実施 クエリ:機械学習 [0.1, …, -0.8] keyword_list_embedding を検索し、 ベクトルの距離が近い学⽣ Top n を取得 画像認識 学⽣の順序は変えずに個別の キーワードを検索クエリに 近い順に並べ替え 分⼦化学 バイオ 構造解析 BERT 遺伝⼦⼯学 DNA ⾃動運転 物体検出 画像処理 ⼈⼯知能 AI ⾳声認識 深層学習 機械学習 機械学習 構造解析 バイオ 分⼦化学 BERT 遺伝⼦⼯学 DNA 画像処理 物体検出 ⾃動運転 ⼈⼯知能 ⾳声認識 AI 深層学習 画像認識

Slide 15

Slide 15 text

実装のポイント(https://github.com/HHajimeW/pgvector) Copyright © LabBase,Inc. All Rights Reserved.  CREATE OR REPLACE FUNCTION get_similar_student_list( query_vector vector(1536) ) RETURNS SETOF type_student_list_output AS $FUNCTION$ DECLARE hit_keywords type_hit_keyword[]; begin RETURN QUERY SELECT stu.student_id, stu.student_name, ARRAY_AGG( ROW( key.keyword_id, key.keyword_text, key.embedding <-> query_vector )::type_hit_keyword ) AS hit_keywords FROM students stu LEFT JOIN student_keywords_relations skr ON stu.student_id = skr.student_id LEFT JOIN keywords key ON skr.keyword_id = key.keyword_id GROUP BY stu.student_id ORDER BY stu.keyword_list_embedding <-> query_vector limit 10; END; $FUNCTION$ LANGUAGE plpgsql; ストアドプロシージャでかいてvector を渡せば、 ⼀発で返ってくるものをかけて、Rust の Struct で受け取れる。 [{ student_id: 1, student_name: ⼭⽥花⼦, keyword_list: [ { keyword_id: 1, keyword_text: "NLP", distance: 0.1 }, { keyword_id: 2, keyword_text: "深層学習", distance: 0.8 }, ] }, …, {...} ] ユニークビジョンさん の CTO の方のブログ参考にしました https://qiita.com/aoyagikouhei/items/9e52ae732d0f795f4dfc

Slide 16

Slide 16 text

実装のデータ Copyright © LabBase,Inc. All Rights Reserved. 

Slide 17

Slide 17 text

リサーチチームでの活用の仕方に 他の言語と大きく違いがあるわけではない。 Rustの活⽤の仕⽅ Copyright © LabBase,Inc. All Rights Reserved.  ● 今回のような実験のコード ● プロトタイプのWebアプリケーション ■ Axum とか、SQLx とか ■ React ✖ Rust

Slide 18

Slide 18 text

Copyright © LabBase,Inc. All Rights Reserved.  開発⾯以外の良さ 実際に導入して感じた

Slide 19

Slide 19 text

Rust のよく聞く特徴 Copyright © LabBase,Inc. All Rights Reserved.  ● メモリ安全性 ● ⾼パフォーマンス ● スレッド安全性 ● リッチな型システム ● エラー処理が分かりやすい メリット デメリット ● ⽇本語のドキュメントが少ない ● ライブラリなどが未成熟 ● 低レイヤの意識が必要 ● 学習コストが⾼い

Slide 20

Slide 20 text

最近、⼊社する⼈の特徴 Copyright © LabBase,Inc. All Rights Reserved.  Rustが好きな⼈ 低レイヤーへの 興味が強い プロダクトで Rustを使いたい⼈ クレート読む プログラムをかくのが好き

Slide 21

Slide 21 text

Copyright © LabBase,Inc. All Rights Reserved. 

Slide 22

Slide 22 text

考えられる因果 Copyright © LabBase,Inc. All Rights Reserved.  ⼤変なこともあるけど、 プロダクトでRustを使いたい Rust のデメリット 好奇⼼ 深く理解 する 意識せず 挑戦 学習コスト 気にしない つくるのが 好き Rust のメリット

Slide 23

Slide 23 text

Copyright © LabBase,Inc. All Rights Reserved.  採⽤において、Rust 使⽤を掲げたら 弊社の⽬指すカルチャーにマッチした⼈が ⼊社した CTOはもしかしたら、また違う感覚をもっているかもしれない 是⾮カジュアル⾯談してみてください

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

25 Copyright © LabBase,Inc. All Rights Reserved.  研究を頑張る理系学⽣と企業をつなぐスカウト サービス「LabBase就職」、研究開発者‧技術 者と企業をつなぐスカウトサービス 「LabBase転職」、研究室とあなたをつなぐ 研究室検索サービス「LabBase研究室サーチ」 などを運営中。 The Research Empowerment Platform 株式会社LabBaseは、 【研究の⼒を、⼈類の⼒に。】という パーパスを掲げ、研究エンパワープラット フォームの創造を⽬指しています。

Slide 26

Slide 26 text

終わりに Copyright © LabBase,Inc. All Rights Reserved.  では ⼀緒に働く仲間を募集しています カジュアル⾯談してみませんか?