岡田テクノ特許事務所

決定木を用いて特許仕分けを行ってみる



 ベイズ分類と同様に、決定木を用いて、特許に含まれる複数のタームから特許の仕分けを試みます。ここで言う仕分けとは、母集団の特許集合の中から着目している技術に関する特許集合を抽出することです。

 具体的にはR言語環境において決定木に基づいたプログラムを作成します(コアの部分は既存のプログラム)。

 そのプログラムにより、あらかじめ人間が仕分けした調査結果を学習してモデルを作り、その調査とは異なる特許集合に対して前記モデルを用いて機械に特許を仕分けさせます。

 例として、歯間清掃ツールの特許集合を用いて、当該集合の中から特定の技術である「フロス」に関する特許の仕分けを行いました。

特許仕分け結果


1)歯間清掃ツールについて

 歯間清掃ツールには、主にフロスと歯間ブラシとがあるようだ。フロスは糸状繊維の束で、歯の接触面から歯間に挿入して使用するのに対して、歯間ブラシは楊枝のような棒状部材の先端にブラシが付いたもので、歯の側面から歯間に挿入して使用します。

 両者は形状が異なるので、図面を参照すれば分類するのは比較的容易ですが、今回は請求項等のテキストデータから、「フロス」に関連するものを抽出してみます。


2)決定木のアルゴリズムについて

 決定木のアルゴリズムは複数存在するようです。
 今回使用するCARTというアルゴリズムに関しては易しく説明している参考書があります1),2)

 CARTで決定木を作成する手順を、特許仕分け(例えば該当と非該当の文献に分ける)に適用する場合に限定して、私が理解している範囲で簡単に説明すれば次のようになります。

特許仕分けでのCART

 実際の検討には、CARTに関連するr言語のパッケージrpartを利用します。


3)利用した特許データについて

 母集合の特許情報データは、単純ベイズ分類法と同じデータを用いました。具体的には、

プロットの根拠となる例えば特許検索データベースの1つであるSRPARTNER(日立システムズ)から入手します。

 下表にSRPARTNERから入手した特許情報データ構造の一部を示します。今回はテキストデータからのタームを抽出するので、各特許文献ごとに「発明等の名称」「要約」「請求の範囲」が含まれるデータを取得します。

 尚、今回は、トレーニング用特許集合として102件、テスト用特許集合として101件用意しました。

 その全てについて事前に内容を人間(私)が確認して、下記表の右端列のようにマニュアル評価のデータを付加しています。下記例では、「フロス」に関する特許とそれ以外という観点で「●×」が付記している。

SRPARTNERのダウンロードデータ


4)ドキュメントvsタームマトリックスの作成

 単純ベイズ分類法とまったく同様に、各特許文献(ドキュメント)ごとにタームの有無を表したドキュメントvsタームマトリックスを作成します。上記のように、「発明等の名称」「要約」「請求の範囲」の項目に分けられているが、文献ごとにこの3つをマージした上で、各特許文献のテキストにタームが含まれるか否かを1,0で記したものです。

 実際には、各特許文献に含まれる全てのタームについてのマトリックスを作るのでなく、適当なタームを選択して作成します。今回の例では、数千wordの中から30~40個のタームを選択しました。

 尚、一般には、ドキュメントvsタームマトリックスは各タームの頻度(ドキュメントに含まれる個数)で作成するようですが、特許分類に用いる場合は頻度に必ずしも重点を置いてません。つまり、頻度が低くても注目すべきタームが存在するので、頻度を重要視しすぎる方が危険と思うからです。このため、単に1,0のマトリックスとしています。

 マトリックスの右端列には、上記で求めたマニュアル評価のデータをマージしています。このデータがいわゆる機械学習でいうところの「目的変数」であり、他のマトリックスの要素が「説明変数」となります。

DocumentvsTermMatrix


5)モデルのトレーニング


5-0)利用パッケージ

 決定木のR言語における実装プログラムとしては、パッケージrpartを利用しました。


    #rpartとそのplotのpackageのインストール
    #ただし、rpartは標準で入っています
     install.packages("rpart")
     install.packages("rpart.plot")
    
    #packageのロード
     library(rpart)
     library(rpart.plot)
    

5-1)トレーニング用のドキュメントvsタームマトリックスを読み込む

 4)のドキュメントvsタームマトリックスはあらかじめcsv形式でShift-JISで作成しておけば、以下のようにR環境に読み込むことができます。 尚、データフレームとして読み込んだマトリックスデータの中で、評価列の型はFactorとしています。


    #training用Document-Term Matrixの読み込み
    dat_train<-read.csv("DocTermMrxdat_train.csv",stringsAsFactors=TRUE,
                            fileEncoding = "Shift-JIS")

    #1列目の公報番号を削除
    dat_train<-dat_train[,-1]

    #評価列をfacterに変換
    dat_train$Evaluation=as.factor(dat_train$Evaluation)
    

5-2)決定木モデルを作成する

上記データをトレーニングデータとして、決定木モデルを作成します。


    tree_model <- rpart(Evaluation ~ ., data=dat_train, minsplit = 5, cp=0.075)
    

ここで、

 第1引数:目的変数と説明変数の指定
      (今回はEvaluation列以外は説明変数と指定)
 第2引数:トレーニングデータを含むデータフレーム名
      (今回の場合はドキュメントvsタームマトリックス名)
 第3引数:各枝における最小個体数1)
 第4引数:複雑度1)


 生成したモデルを以下に示します。


    #結果をプロット
     rpart.plot(tree_model, extra=1, type=1, under=TRUE)
    

決定木プロット

 上図で、例えば、ルートでは「デンタルフロス」というタームの有無で判断し、タームがあれば(デンタルフロス=0が”NO”)、右の枝に進み「●」(デンタルフロスに関連する特許)と判断します。

ブラックボックスではなく、人間にも理解できるモデルが生成されるのが、決定木の大きな特徴です。
ただ、「フロス」の例では、「フロス」という単語の有無でほぼ判定できるということで、あまり面白みのないモデルとなってしまいました。

尚、複雑度のパラメータcpが小さいほど、枝が多くなり、トレーニングデータに対しての正解度は上がっていきますが、トレーニングデータ以外のデータに対しての汎用性は必ずしも向上しません。したがって、 今回は以下のようcpを調整して枝を剪定しました。

 文献1)の著者、金明哲先生のHP(Mingzhe Jin's Home Page)に詳しい解説がありますが、plotcp()を用いて、CPと交差確認法による誤分類率 xerrorとの関係をプロットして、xerrorが最小値付近の値を取るうちでなるべく大きなCPを選択するようにしました。
 今回のケースでは下記グラフより、cp=0.075としました。


    #CPが0になるまでの挙動を見るためにcp=0としてplotする
      tree_model <- rpart(Evaluation ~ ., data=dat_train, minsplit = 5, cp =0)
    
    #プロット
      plotcp(tree_model)
    

CP検討

 ちなみに、cpが小さくなれば、以下のように枝が伸びてモデルの複雑度が増加して、一般にトレーニングデータへの正解度(マッチング度)は上がります。
 ただし、トレーニングデータに合わせ込まれることを意味するので、トレーニングデータ以外のデータでも性能が良いとは限りません。

決定木プロット


6)特許仕分け及びその評価

 テスト用データのドキュメントvsタームマトリックスに対して、上記で作成した決定木モデルを用いて、特許仕分け(予測)を行いました。
 テスト用データのドキュメントvsタームマトリックスは、上記トレーニング用のドキュメントvsタームマトリックスの特許集合とは異なる集合です。


6-1)ドキュメントvsタームマトリックスの読み込み

テスト用のデータセットであるドキュメントvsタームマトリックスを読み込みます


    test_dataset<-read.csv("DocTermMrxdat_test.csv",stringsAsFactors=TRUE,
                              fileEncoding = "Shift-JIS")
    

6-2)予測関数predictの呼び出し

予測関数predictにモデルとテストデータセットを渡して、特許仕分けに相当する分類予測を行います。


    predict_result <- predict(tree_model, test_dataset)
    

6-3)予測結果の評価

マニュアルの評価と予測した評価を比較します。

本来、機械による特許仕分けでは、事前に人間が仕分けすることはナンセンスですが、今回は機械による特許仕分けの評価が目的なので、テスト用データもマニュアル評価しています。そこで、あらかじめマニュアル評価していた結果と比較しました。

具体的には、tableを用いてマニュアルの評価と予測した評価との比較表を作成します。また、比較表のデータから正答率を計算しました。


    #比較テーブル作成
    result_table<-table(test_dpat$Evaluation,predict_data)
    

    #予測結果と正解率を出力
    cat("----------------------- \n")
    print(result_table)
    cat("----------------------- \n")
    print(sum(diag(prediction_result))/sum(prediction_result))
    cat("----------------------- \n")


フロスについての特許分類予測は以下のような結果となりました。

特許仕分けの機械予測結果

また、具体的な特許データとマニュアル評価、機械評価を整理した表(抜粋)を示します。

特許仕分け結果

本来、該当でなければならないのに非該当としたケース、非該当であるべきものを該当としたケースがあることがわかります。

上記では、正解率88%となり、単純ベイズ分類よりは悪い結果となりました。

良い点として、判断ルールが人間も容易に理解可能なので、どんな予測がなされるのか、どこが課題かをつかみやすいです。

また、CPをあまり低くしないことで、比較的人間のレビューにおいても納得しやすいモデルができます。
ちょうど検索式をORで組み合わせるように、複数のモデルを組み合わせることで良好な結果が得られるかもしれません。事実、アンサンブル学習と呼ばれる方法で、複数のモデルの予測結果の多数決を取る方法もあるようです。


7)総括

 ・ドキュメントvsタームマトリックスと評価データを作成しておけば、労せず決定木モデルを作成することができる。
 ・トレーニングモデルに合わせすぎると、汎用性が著しく失われるので、チューニング作業(枝の剪定)が必要となる。
 ・生成されたモデルの判断ルールの内容は人間も容易に理解可能なので、どんな予測がなされるのか、どこが課題かをつかみやすい。
 ・アンサンブル学習等、複数のモデルを組み合わせることで性能向上が望める可能性がある。



参考文献

1)金 明哲 テキストアナリティクス

2)小林雄一郎 Rによるやさしいテキストマイニング

特許情報プローブへ戻る