研究開発部Architectグループの堤(@shu223)と申します。新任マネージャーとして自身のキャッチアップも兼ねて、研究開発部の技術や成果物について紹介する記事を書いています。
第5弾となる今回は、Sansan/Eightのニュース配信システムがどのように実現されているか、またその中で研究開発部のどのような技術が利用されているかについて紹介したいと思います。
ニュースの種類
現在、SansanやEightでは以下のようなニュースを配信しています。
- 人事異動情報
- 社内の共通人脈の通知
- 企業の最新ニュース
- 同業他社の最新動向
ニュース配信のための自然言語処理技術
質の高いビジネスニュースを配信するために、以下のような研究開発部の自然言語処理技術が利用されています。
- 固有表現抽出
- ジャンル判定
- プレスリリース判定
- 重複記事判定
- 記事言語判定
- etc...
それぞれ紹介していきます。
固有表現抽出
テキスト中に含まれている組織名や人名、日付等、定義に従ったチャンクを「固有表現」 (Named Entity) と呼びます。
これら固有表現を抽出することを、「固有表現抽出」 (NER: Named Entity Recognition) と呼びます。
特定の企業に関するニュースかどうかを判定するために、この固有表現抽出技術を使って記事から組織名を抽出しています。
SansanではOneNERと呼ばれる固有表現抽出器を独自開発しています。こちらについては現在も絶賛改善し続けており、また別記事で詳しく書きたいと思います。
ジャンル判定
ビジネスに深く関係するジャンルのニュースを選別するために、ジャンル分類モデルを用いて、どのようなジャンルの記事なのかを判別し、ラベルを付与しています。
下図のように、特定のジャンルについては2段階での分類モデルを構築しています。
サブジャンルに分けることで、記事の配信の要不要を細かく判定することが可能となります。
プレスリリース判定
プレスリリース記事に対し、プレスリリース分類モデルを用いてプレスリリースの種類を予測しています。
判別する種類は以下の通り。
- 営業日情報,年頭挨拶,受賞系
- セミナー,主催イベント,交流会
- キャンペーン情報
- 製品,商品情報,認定資格取得(特にメーカー)
- サービスリリース情報
- 組織変更,異動情報,拠点追加
- IR系(事業提携,合併,決算公告)
- 企業活動,出展,CSR,重要なお知らせ
プレスリリース種類に応じて、配信の要・不要を判定します。
重複記事判定
ほぼ同じ内容の記事はいずれか一つを選んで配信したいので、各ニュースの文章に対する類似度を計算し、似た記事かどうかを判定しています。
ニュースの類似度を測る指標として、Jaccard係数を使用しています。Jaccard係数とは文書の類似度を測る指標で、文書ABに対する類似度は下記式で表現されます。
これを、ある日に配信対象となるニュース記事の組み合わせについて計算します。
高速な類似度計算
高速なJaccard係数の計算のため、b-Bit Minwise Hashing algorithmを用いています。b-Bit Minwise Hashing algorithmとは、二つの文書に対するハッシュ値の最小値が一致する確率が Jaccard係数に等しいことを利用し、高速に類似検索を行う方法です。
さらに論文より実験から計算を簡略化し、C++とPyBind11で超高速かつPythonからも呼び出せるようにしています。
float bBitMinHash::estimate(uint64_t x, uint64_t y) const { return this->calc_hamming_distance(x, y) / float(this->k); }
記事言語判定
3種類の言語判定の結果から、ルールにより言語を判定しています。
まとめ
Sansan/Eightのニュース配信システムがどのように実現されているか、またその中で研究開発部のどのような技術が利用されているかについて紹介しました。個別の技術についてまた別記事で深堀りしていきたいと思います。1
なお、私自身は研究開発部のArchitectグループという、研究開発成果をプロダクトとして外に出していくための諸々を担当しているエンジニアチームのマネージャーをやっています。多くのR&D成果に関わることができ、MLOps/DevOpsやデータ基盤構築など、エンジニアリングとしても非常におもしろいことを経験できるチームかと思います。今年になって求人内容を大きく更新したので、興味のある方はぜひ以下からご応募ください。
R&D MLOps/DevOpsエンジニア | Sansan株式会社
R&D MLOps/DevOpsエンジニア(中部) | Sansan株式会社
DMなどいただければカジュアル面談も受け付けております。
- 本記事は次の2つのスライドをベースに、最新の状況を反映しつつ構成しています。 「Eightにおけるニュース配信の取り組み」「ニュース配信における自然言語処理の取り組み」↩