astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

BERTの事前学習済みモデルを使って特許検索に挑戦してみる

f:id:astamuse:20200108191002p:plain

ご挨拶

新年、明けましておめでとうございます
本年もよろしくお願いいたします

データエンジニアのaranです
昨年の6月以来、2回目の登場になります

去年の1月に入社して、ちょうど1年経ち
月日の流れの早さを感じています

いきなりですが、皆様は年末年始をどのように過ごされましたでしょうか?
私は、家族の1人が、1月2日誕生日なこともあり
年始は、家族全員が本家に集まります

月日の経過と共に、甥っ子・姪っ子も増え、彼らも歳を重ねて行くので
年始の出費が、年々厳しくなっています
(財布から諭吉がいっぱい消えてゆく・・・涙)

年始の出費が気にならないぐらい稼ぎたいって心に誓い、新年を過ごしました

前書き

前回はコレスポンデンス分析についてお話しさせて頂きましたが
今回は、BERTを使った文章検索についてお話しさせて頂きます

何でまた?

弊社では、特許情報を取り扱っていて
ある特定の業界・分野の特許群を検索することがあります

目的の特許を検索するには
J-PlatPatと同じように単語マッチングで検索することが多いのですが
見つけたい特許を検索するには
どの単語を選択し、どのような組み合わせ条件にするかが重要で
これには、高度なスキルと経験を必要とします

このスキルに依存する状況を、少しでも改善させるベく
ある分野に関する1つ特許の要約・請求項・詳細説明等の文章から
その分野に関連する特許一覧を検索できれば
検索品質の平準化と作業工数の削減が期待できます

そこで、文章分類・質問応答・固有表現抽出等で
公開当時の最高性能(SOTA: State of the Art)を達成した
BERTに目をつけ、特許検索に使えるかどうか遊んで検証してみました
BERTを触っていると言えると、カッコつけられるとかでは・・

BERTとは

BERT(Bidirectional Encoder Representations from Transformers)は
2018年10月にGoogleの研究チームが公開した言語表現モデルです

論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

今回、BERTを利用するに辺り、こちらのサイトで勉強させて頂きました www.ogis-ri.co.jp

BERTの特徴を1つあげるとすれば
事前学習(ラベルが不要)、ファインチューニング(ラベルが必要)と
2段階の学習ができる構成になります

事前学習は、大量データが必要のため、学習時間もリソース(お金)も必要としますが
事前学習済みモデルがGitにて公開されています
お試し段階では、これは非常に助かります!!
今回は、こちらの学習済みモデルを利用しました

何のデータを使うの?

弊社は国内特許のみならず、海外特許も取り扱います
検索対象にする特許情報は、EPO(欧州特許庁)のPATSTAT データベースを利用しました

PATSTATは、100ヶ国以上の特許庁において公開された特許が
収録されている特許データベースになります

どんな事をやるの?

PATSTATは英語の特許が多いので
特許の要約(英文)で検索できるようにして、類似した順に表示することを目的とし
複数の事前学習済みモデルで精度を比較してみました

やってみる

  1. 制約
    まず、BERTのREADME を読みますと、検索する文章を512トークン以下にする制約がありました
    (トークンについては、リンクを参照願います)

  2. 前提条件
    PATSATにある特許の要約(英文のみ)で
    512トークン以下になるだろう割合は99.5%以上を占めるため
    今回は、上記制約を考慮していません

  3. 評価データを用意
    1分野につき約20件、9分野で約180件データを用意してもらいました
    (お忙しい中、他部署の方にご協力頂きました!ありがとうございます)

  4. 評価データの妥当性チェック
    評価データ約180件を、プログラム上で9つに分類できないと
    特徴がない(同じような)文章になり、評価が難しくなります
    今回用意した評価データだけ、正しく分類できるかどうかを確認しました

  5. 非評価データの作成
    評価データ20件とは違う分野の特許を1,000件を作成しました
    非評価データの抽出方法は、 評価データに付与されている国際特許分類のクラスが違う特許を
    ランダムサンプリングしました

  6. 特許の要約をベクトル化
    評価データ20件、非評価データ1,000件の要約を
    BERTを使い、768次元のベクトルに変換しました

  7. 変換したベクトルデータを近傍探索
    評価データ20件+非評価データ1,000件を対象として
    全評価データで検索しました

  8. 検索結果を評価
    検索結果TOP20に、評価データが何件含まれるかでモデルを評価しました
    全評価データ20件を検索しているので、精度はアベレージになります

どうやって?

特許の要約をベクトル化するには bert-as-serviceを使いました

import os
import csv
from bert_serving.client import BertClient

# CSVファイル(アブスト一覧)を読み込む
with open('./abstracts.csv', encoding="utf_8") as f:
    abstracts = list(csv.reader(f, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True))

# 要約をベクトル化する
with BertClient() as bc:
    vectors = bc.encode(abstracts)

評価データの妥当性チェックには
K-Meansでクラスタ分析しました

import pandas as pd
from sklearn.cluster import KMeans

# TSVファイル(ベクトル化データ+正解ラベル付)を読み込む
vec = pd.read_csv('./vec.tsv', sep='\t', header=None)

# クラスタ分析
km = KMeans(n_clusters=9, init='k-means++', n_init=10, max_iter=10000, tol=1e-06, n_jobs=-1)
pred = km.fit_predict(vec.iloc[:, :-1])

尚、評価データ(要約)に対してデータクレンジングすると
F1スコアが0.75から0.93まで上がりました

これにより、評価データを十分な精度でクラスタリングできるため
有効なデータと判断しました

文章の類似度判定には
単純に検索する文章ベクトルとのユーグリッド距離で
類似度をスコアリングしました

import pandas as pd

# 評価データ20件+非評価データ1,000件のベクトルデータを読み込む
vectors = pd.read_csv('./vectors.tsv', sep='\t', header=None)

# 評価データ各20件を文章検索する
# ※search_keyは、検索するINDEXを任意に設定しています
search_abstracts = vectors.iloc[search_key, :768].values
target_abstracts = vectors.iloc[:, :768].values
# 類似度スコアはユーグリッド距離とする
result ={i:np.linalg.norm(search_abstracts - target_abstracts[i]) for i in range(len(target_abstracts))}

まとめ

最終的に3つの学習済モデルで、精度検証しました
学習済みモデル別の各9分野の精度結果は、こちらになります

f:id:astamuse:20200109012715p:plain

具体的な分野名を明示できず、申し訳ないのですが
各分野で精度にバラツキがあり、類似する特許を検索しやすい分野と
しにくい分野があることがわかりました

また、本来なら 要約だけではなく タイトル、本文、請求項、出願者等の要素も考慮した上で
類似度スコアリングをしますが
要約だけでも、ある程度類似する特許を検索できたことで
BERTのポテンシャルの高さを感じました
(今回は評価データが少ないため、偏った結果になっているかもしれませんが)

最後に

今回のお話で
俺・私・ミーの方がもっとできるよって思う人はたくさんいると思います
そんな方は是非、弊社で一緒に働きませんか?

ここにジョインするまで、自然言語処理は未経験でしたが
手を挙げればチャレンジさせてもらえる弊社は
エンジニアライフを楽しめる会社だと、勝手に自負しています!!

アスタミューゼでは、エンジニア・デザイナーを募集中です
ご興味のある方は遠慮なく採用サイトからご応募ください。お待ちしています

Copyright © astamuse company, ltd. all rights reserved.