LegalOn Technologies Engineering Blog

LegalOn Technologies 開発チームによるブログです。

社内勉強会で使用したSimCSEのチュートリアル資料を公開しました

こんにちは、LegalOn Technologies Researchで研究員をしている神田(@kampersanda)です。

弊社では、検索チーム主催でセマンティック検索とベクトル検索に関する社内勉強会を定期的に実施しています。この勉強会では、技術に関心のあるエンジニアが有志で議題を持ち寄り、知識共有を行っています。

その成果のひとつとして、文埋め込み技術であるSimCSEのチュートリアル資料を作成し、以下に公開しました。

github.com

この資料はNotebookとして作成されており、SimCSEの学習から評価までの一連の動作を簡単に試して頂くことができます。また、コードの各パートには詳細なコメントや引用を付与しています。

本記事では、資料作成の目的や方法などを簡単に紹介します。チュートリアルの内容については、Notebookをご参照ください。

SimCSEの概要

SimCSEは、対照学習を用いた文埋め込み技術です。

Tianyu Gao, Xingcheng Yao, and Danqi Chen. SimCSE: Simple Contrastive Learning of Sentence Embeddings. EMNLP 2021.

SimCSEは、簡単なアルゴリズムでラベルの無い文集合から文埋め込みモデルを獲得することができます。その文埋め込みは、Semantic Textual Similarity (STS) 評価タスクにおいて、教師ありのSentence-BERTと同程度の性能を示します。

また、正例ペアから成る訓練セットを用いて教師あり学習することで、更にその性能を向上することができます。 訓練セットの作り方次第では、それぞれの目的に応じた文埋め込みモデルを獲得することも可能です。

SimCSEは、実装の容易さ・応用の容易さ・高い性能などから、研究でも実用でも有用な文埋め込み技術のひとつです。その実装方法を習得することは、自然言語処理や情報検索エンジニアにとって有益だと考えます。

資料作成の動機と目的

SimCSEのアイデアはシンプルなので、そのアルゴリズムを理解することはあまり難しくないです。ありがたいことに良い教材もネットに揃っています。

しかし、SimCSEを実装し応用できるようになるには、深層学習フレームワーク自然言語処理について一定の知識と経験が必要になります。例えば、ある深層学習アルゴリズムの実装を眺めてみて、ライブラリの使用方法や、当たり前に記述されたヒューリスティックの意味が分からず、一行一行調べながらコードを読んだ経験のある方も多いと思います。

このハードルを効率的に解消したいと思い、資料を作成し勉強会で共有しました。組織として、以下の達成を目標としました。

  • 資料を参照すれば、誰もが必要に応じてSimCSEを実装し応用できる状態
  • 何か新たに知見があれば、資料を通じて共有できる状態 1

資料作成の方法

SimCSEのシンプルな再実装 hppRC/simple-simcse が存在します。

github.com

こちらのレポジトリは、SimCSEの学習と評価アルゴリズムの簡潔な実装を提供しており、コードの各パートにも丁寧な解説コメントを記述しています。深層学習の経験があり、論文を読んでその内容が理解できる方にとってはsimple-simcseが必要十分な資料だと思います。

今回作成したNotebookでは、更に基礎的な部分からの解説と簡単な利用を試み、私が解説コメントを追記しつつ、simple-simcseの内容をNotebookで再実装しました。また、教師あり学習のパートも追加しました。

おわりに

SimCSEのチュートリアル資料公開のお知らせと、簡単な概要紹介をしました。興味を持って頂けた方は、是非資料の中も見て頂けると幸いです。文埋め込みに関心のある方にとって有益な資料となることを願っております。

メンバー募集中!

株式会社LegalOn Technologies では、検索システムや研究開発に興味のあるエンジニアやインターンなど様々なポジションを募集しています。

ご興味がある方は以下の求人ページから求人要項をご確認いただけますので、お気軽にご応募ください。

herp.careers

謝辞

このNotebookは、hppRC/simple-simcseこちらの解説スライド無しでは作成できませんでした。これらの制作者である塚越駿さんに感謝致します。

同僚の小林さんと藤田さんにも資料作成にあたって有益なコメントを頂きました。感謝致します。


  1. 勉強会資料としての使いやすさを優先しNotebookで作成しましたが、この目的のためにはPythonスクリプトとしてGitHubなどで管理するのが良いでしょう。