マガジンのカバー画像

Carat活動ストーリー

80
「AIジョブサーチ」「求人Hub」「GLIT」などを運営する株式会社Caratのnoteをまとめたマガジンです。 https://www.caratinc.jp
運営しているクリエイター

#テックブログ

外部との疎通がある処理での予算管理に苦労した話

こんにちは。求人Hubで主にバックエンドを担当しているトラツグミです。 今回は予算管理機能の実装にかなり苦労したので、この処理について書かせていただきます。 背景そもそも予算管理って? 求人Hubは求人広告を出す側(広告主)と求人広告を掲載する側(求人媒体)を繋ぐプロダクトです。 求人Hubで取り扱いしている求人では、1回の応募につき〇〇円という掲載料のようなものが応募時に発生しています。 この時、無限に支払い能力があるわけではなく、支払い能力の限界=予算が存在します。

プロセス並列で処理をさせれば必ず速くなるのだ!…というわけでもない話

はじめに こんにちは。株式会社Caratで 求人HUBのバックエンドエンジニアをしている小黒です。 今回はRailsのParallelを用いた並列処理について書いてみようと思います。 求人HUBでは広告主様から求人情報を受領し、それらを最適化した上で広告掲載先の企業様に連携します。求人HUBについてはこちらの記事をご覧ください。 背景求人Feedを最適化するバッチ処理中に、職種をキーワードとしてジョブIDを取得する処理があります。例えば「エンジニア」というキーワードを

求人検索APIで給与順の実装を行った話

はじめにこんにちは、株式会社Caratでバックエンドエンジニアをしているトラツグミです。 今回は弊社プロダクトである求人Hubで使用している検索APIについて説明させていただきます。 求人Hubでは求人のデリバリーのために、検索を用いたAPI連携も行っており、検索エンジンではOpenSearchを用いています。 このOpenSearchなどの検索エンジンで検索システムを構築する際には、クエリやマッピングの設計はかなり重要だと思います。 私自身もこの点に関する悩みは尽きず、試行

大量の画像を高速で取得してS3とDBに保存する

こんにちは、求人Hubでバックエンド兼インフラを担当している川口( @kawasystem )です。 今回は求人Hubで利用している大量の画像を高速で取得してS3に保存する仕組みを紹介したいと思います。 背景求人Hubでは、1日数十万件の求人データを取り扱います。当然、数十万件以上の画像URLを出稿企業様から頂戴するのですが、この画像URLから画像を取得し、掲載企業様に提供する時は求人HubのCDNにアクセスされるように画像URLを提供します。 どの様に処理するのか数十

Poetryのプロジェクトから未使用のパッケージを一括削除する🗑️

こんにちは、Caratの斎藤( @saitoxu )です。 今回は、Poetryで管理しているPythonのプロジェクトから「入れてるけど実際は未使用のパッケージ」をまとめて削除する方法について紹介します。 背景CaratではAIジョブサーチというLLMを使った対話型求人検索サービスを開発・運営しています。 AIジョブサーチはAPIをPythonで書いており、Poetryで必要なパッケージを管理しています。 会社としても自分自身としてもLLMを本格的に使った最初のプロダ

OpenAI gpt-4o でzero shotで異常検知(Anomaly Detection)を試してみる

はじめに こんにちは、Caratの脇山です。 先日 gpt-4o が発表リリースされました。 性能、速度、料金などがアップデートされましたね。 詳細は他の方の記事や公式のドキュメントにまとまっているので触れませんが、特にトークナイザの改善と音声モデルの処理が一つのニューラルネットで完結できる点に感動しました。 具体的にはトークナイザ改善でより高速、高性能、低価格を実現できる点や 音声が 音声 -> テキスト -> 音声 の3つのパイプラインを通って生成されるのではなく、

求人広告ネットワークサービス「求人Hub」のバッチ処理のしくみ

はじめまして、求人Hubでバックエンドエンジニアをしている高井です。 本記事ではCaratが運営する求人広告ネットワークサービス「求人Hub」のバッチ処理について解説します。 求人Hubとは「適切な求人を必要とする求職者に自然に届ける」をビジョンとし、複数の求人出稿企業の求人データを適切に変換し、それらを複数の求人掲載企業に届け、発生した応募データを出稿企業に移送するためのプロダクトです。 主な利用技術はRuby on Rails, AWS, Terraformになります。

OpenAI gpt-3.5-turboでFine-tuningを試す

こんにちは、Caratの斎藤( @saitoxu )です。 今日、OpenAIのGPT-3.5 Turboをファインチューニングできるアップデートがあったので、公式のドキュメントに沿って早速試してみました。 ファインチューニングのステップざっくり分けると以下の4ステップあります。今回はOpenAI公式のpythonライブラリを使いました。 データセットの準備 データセットのアップロード ファインチューニング ファインチューニングされたモデルを使う 1. データセ

事業別の技術スタック紹介!

こんにちは、Caratの斎藤( @saitoxu )です。 今年初のnoteになります。今年もよろしくお願いします。 今回は事業別で、現在Caratで使っている言語やフレームワーク、ツールなどの技術スタックを簡単に紹介していきます。 弊社では現在、「GLIT」「GLIT Ads」「GLIT Platform」の3事業を運営しているので、以下でそれぞれについて紹介していきます! まとめるとTypeScript (React), Ruby (Rails), Pythonの会社

Design Docはじめました

こんにちは,Caratの斎藤( @saitoxu )です. 少し前からバックエンドの開発チームでDesign Docを導入しました. 今回は導入の背景と,チームでの使い方やテンプレートの紹介,導入してみての良し悪しなんかについて書きたいと思います. Design Docとは?Software Design Documentのことで,実装前に書くソフトウェアデザインに関する文書です. 仕様書やPRD(Product Requirements Document)のようにしっかり

推薦の多様性向上のヒントになるかもしれないBundle Recommendationの紹介

こんにちは,Caratの斎藤( @saitoxu )です. 今回は推薦における「Bundle Recommendation」という少し変わった問題設定について紹介します. 推薦の多様性はじめに,タイトルにある「推薦の多様性とは?」についてです. 推薦は基本的には,ユーザの興味関心とアイテムとの類似度を計算して,高い順に提示するという手法が採られることが多いですが,これだと似たようなアイテムばかりが推薦される問題が発生したりします. たとえばNetflixのようなストリーミ

推薦システムを作るときに気をつけたいデータの「スパース性」

こんにちは,Caratの斎藤( @saitoxu )です. 今回は推薦システムを構築するときに,その手法を決定する判断材料の1つとなる,データの「スパース性」について取り上げます. 推薦システムを構築する際に, スパース性とは何か? スパース性がレコメンドに与える影響について あたりのことがステークホルダーで共有されていると議論を進めやすいと思ったので今回書いてみました. 参考になれば幸いです. スパース性とは?スパース性(sparsity)とは,平たくと言うとデ

GLITにおける求人検索の品質改善②(運用編)

こんにちは,Caratの斎藤( @saitoxu )です. 今回は「GLITにおける求人検索の品質改善①(準備編)」の続きになります. 前回の記事から約2ヶ月が経ち,検索ログが貯まるようになったので今回はそれを分析してみたという話です. 前回載せた検索改善の全体像(図1)でいうと,「オンライン評価」のステップに当たります. どんなデータか最初に検索ログの具体例を示します(図2). たとえば検索ID = 1のログは「ID = 1のユーザが検索条件Aで検索して,1番目に表示

GitHub Packagesのプライベートnpmパッケージを限定公開する方法

こんにちは,Caratの斎藤( @saitoxu )です. 今回は小ネタですが,最近調べたGitHub Packagesのプライベートnpmパッケージを限定公開する方法を紹介します. 背景GLITの開発で培ったノウハウを活かして,年始から求人メディア企業のアプリ開発・運営の支援を行うGLIT Platformというサービスを始めました. 詳しいサービス内容や立ち上げた理由については以下の記事をご覧ください. 現在,最初のプロジェクトの開発を行っているところですが,単な