知財のあれこれをPythonで何とかする

### AIチャットで特許を分類する
AIチャットの知財業務活用の例として特許明細書の分類について考えてみました。

### クリアランス対象特許の仕分け
他社特許のクリアランスを行うため、社内の製品開発部門に明細書を送付して分析してもらう場合があります。その時に送り先部門の開発分野と一致する分野となるように明細書を分類する必要が出てきます。
従来の分類方法として機械的な分類＝IPCや特定のキーワードで分類する方法がありますが、IPCやキーワードでうまく分類できないような場合があり知財担当者が1件ずつ目視して手作業で分類する必要がありました。今回は知財担当者に代ってAIチャットが自動で分類を行うよう、下図のように処理させます。

![自動分類サンプル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831931/f5e7a7e7-fb41-4874-8a7e-7e418c0b695d.png)


### AIチャットへの指示準備
AIチャットへの指示=プロンプトを作成します。プロンプトに「特許リストを渡すとリスト上の要約を元に分類表に記載した分類ルールを参照し、明細書の要約にマッチする分類科目を分類表から引用して付与し特許番号と分類科目が対応する表を作成する」よう、指示文を作ります。

### 分類表の作成
まず分類科目とそれに対応した分類ルールを記載した分類表を作成します。特許の要約が分類ルールに沿った内容であれば分類科目を付与するようAIチャットが処理します。
分類表のサンプルデータをtxt形式で以下に貼りました。メモ帳にコピペしてエンコード「UTF-8」、ファイル名「bunrui.txt」で保存し、拡張子(txt)をcsvに変更してください。

```bunrui.txt
分類科目,ルール
音響技術,オーディオ機器の構造や制御に特徴がある
搬送・物流技術,無人搬送車の構造や制御に特徴がある
防水技術,内部への異物侵入を防止する構造に特徴がある
材料技術,材料の物性に特徴がある
生産技術,工場や製造工程に用いられる技術に特徴がある
```

### 特許明細書リストの作成
特許明細書リストのサンプルデータ（ヤマハ株式会社さんの公報を利用させていただきました)をtxt形式で以下に貼りました。メモ帳にコピペしてエンコード「UTF-8」、ファイル名「meisai_list.txt」で保存し、拡張子(txt)をcsvに変更してください。
注：エンコード「UTF-8」なのでcsvファイルをExcelで開くと文字化けします。（ANSIですとExcelの文字化けはありませんが要約に含まれる文字によって後のpython実行でエラーが出る場合があります）

<details><summary><font color=#50a050>特許明細書リスト（折り畳み表示）</summary>

```meisai_list.txt
特許番号,要約
特許7662734,"【課題】無人搬送車を設備に対して良好に位置決めできるとともに、設備の手前の床面が摩耗しにくい無人搬送車の位置決め装置を提供する。
【解決手段】位置決め装置１０は、設備１００に設けられた第１位置決めピン１１Ａおよび第１アクチュエータ１３Ａと、無人搬送車１に設けられた第１ピン穴部材１２Ａと、を備えている。第１ピン穴部材１２Ａには、下方に向かって開いた開口が形成されている。第１ピン穴部材１２Ａは、上方に向かうほど内径が小さくなるテーパ状の内周面を有している。第１アクチュエータ１３Ａは、第１位置決めピン１１Ａを上昇させることにより、無人搬送車１に上向きの力が加わるように第１位置決めピン１１Ａを第１ピン穴部材１２Ａに嵌め込む。
【選択図】図１０

"
特許7659910,"【課題】第１接合部材または第２接合部材の損傷を抑えつつ、第１接合部材及び第２接合部材の接合を的確に行うことができるプラズマ処理方法及び接合システムを提供する。
【解決手段】
  真空雰囲気において第１プラズマ処理が行なわれた第１接合部材及び第２接合部材を準備し、第１プラズマ処理よりも真空度の低い雰囲気において第２プラズマ処理を第１接合部材または第２接合部材に行う工程と、第１接合部材と第２接合部材とを接合する工程とを含む。
【選択図】図３
"
特許7666692,"【課題】磁気誘導型センサを用いる操作装置の製造工程を容易化すること。
【解決手段】鍵盤装置は、それぞれ導電体が配置された第１基板および第２基板を含み、前記第１基板と前記第２基板との距離を測定するための距離センサと、操作者によって操作可能な鍵と、前記鍵と前記第２基板との間において前記第１基板を保持する保持部であって、弾性変形可能な部分を有し、前記弾性変形可能な部分が変形することに応じて前記第１基板が変位する保持部と、を備える。
【選択図】図２７
"
特許7658879,"【課題】認識エラーが生じたときに部品の位置や角度のずれを補正して部品を再認識することで部品の廃棄を低減することが可能な部品実装装置を提供する。
【解決手段】部品Ｅを吸着するノズル３４が軸線Ｌ上に装着された実装ヘッド３２と実装ヘッドを軸線Ｌと直交する方向に搬送する搬送部とノズルを軸線Ｌの回りに回転させる回転機構とノズルに吸着された部品を撮像する撮像部と部品データを記憶する記憶部と制御部とを備え、撮像部により取得された撮像画像の撮像範囲内に部品の全体が収まっていないことで部品Ｅを認識できなかった場合、制御部は、撮像画像に基づいて部品の位置及び角度を算出する算出処理と算出処理の結果から撮像範囲に対する部品の位置ずれ及び角度ずれの少なくとも一方を補正することで部品が撮像範囲内に収まるようにする補正処理と補正処理後に撮像部により部品を撮像し部品を再認識する再認識処理とを実行する。
【選択図】図２
"
特許7651835,"【課題】動画データが表す動画に対する影響を抑制しながら、当該動画と音との間に統一感があるコンテンツを生成する。
【解決手段】編集システム２０は、複数の動画区間を含む動画データＸ1と複数の音区間を含む音データＹ1とを処理するシステムであり、複数の動画区間のうち第１動画区間と当該第１動画区間に後続する第２動画区間との境界点において、複数の音区間のうちの第１音区間から当該第１音区間以外の第２音区間に切替わるように、音データＹ1を処理する音データ処理部５３を具備する。
【選択図】図３
"
```
</details>

### プロンプト作成（パート1）
#### （分類表をプロンプト組み込み用に変換）
csv形式の分類表をプロンプトに組み込むよう、データ構造（表形式)を明示するためエスケープシーケンス（改行コード「\n」を意味する特殊文字）と項目(「分類科目」、「ルール」)を埋め込んだ少し特殊なテキスト形式に変換します。以下のpythonプログラムを用いて「CSVデータ」→「エスケープシーケンスと項目を含むテキストデータ」に変換します。
以下のようなプログラムとなります。

```python:Program1.py
import csv

## 分類表の作成
# CSVファイルの読み込み
input_file = "bunrui.csv"  # CSVファイルのパスを指定
output_list = []

output_list.append(r"\n\n[分類表]")

with open(input_file, newline='', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')  # カンマ区切り
    next(reader)  # ヘッダーをスキップ

    for row in reader:
        classification, rule = row
        output_list.append(r"\n[分類科目]\n" + classification + r"\n[ルール]\n" + rule)

# 変換後の文字列を出力
output_string1 = "\n".join(output_list)
with open("prompt1.txt", 'w', encoding='utf-8') as f:
    f.write(output_string1)
```
(プログラムの解説)
part1　分類表の作成
前述のbunrui.csvを読み込み、先頭に\n\n[分類表]の文字列を付け、各行の分類科目とルールを示す項に対しそれぞれ\n[分類科目]\nと\n[ルール]\nの文字列を付けてファイル名prompt1.txtとして保存する。

### プロンプト作成（パート2）
#### （特許明細書リストをプロンプト組み込み用に変換）
特許明細書リストも以下のpythonプログラムを用いて「CSVデータ」→「エスケープシーケンスを含むテキストデータ」に変換します。
以下のようなプログラムとなります。(処理自体はprogram1と同じ)

<details><summary><font color=#50a050>特許明細書リストの作成（折り畳み表示）</summary>

```python:Program2.py
import csv

##　特許明細書リストの作成
# CSVファイルの読み込み
input_file2 = "meisai_list.csv"  # CSVファイルのパスを指定
output_list2 = []

output_list2.append(r"\n\n[特許明細書リスト]")

with open(input_file2, newline='', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')  # カンマ区切り
    next(reader)  # ヘッダーをスキップ

    for row in reader:
        classification, rule = row
        output_list2.append(r"\n[特許番号]\n" + classification + r"\n[要約]\n" + rule)

# 変換後の文字列を出力
output_string2 = "\n".join(output_list2)
with open("prompt2.txt", 'w', encoding='utf-8') as f:
    f.write(output_string2)
```
</details>

(プログラムの解説)
part2　特許明細書リストの作成
同じくmeisai_list.csvを読み込み分類表と同じように特許番号と要約を示す項に対しそれぞれ\n[特許番号]\nと\n[要約]\nの文字列を付けてファイルprompt2.txtに追加、保存する。

### プロンプト作成（パート3）
#### 指示文字列の作成

パート1のプログラムで「エスケープシーケンスを含むテキストデータ」として作成しファイル名prompt1.txt,prompt2.txtで保存したテキストデータの先頭に以下の指示文字列を付けたしてAIチャットのプロンプト(指示文字列1＋prompt1の文字列＋prompt2の文字列)を作成し、AIチャットに入力します。

#### 指示文字列１：
「特許明細書の分類を行います。[特許明細書]記載の[要約]と対応する[分類表]記載の[ルール]を検索し、[ルール]に対応する[分類科目]を[特許番号]に付与し、CSVファイルとして出力してください。」
Excelで扱いやすいようCSV形式で出力するよう指示します。

「指示文字列1」＋「prompt1の文字列」＋「prompt2の文字列」を以下のサンプルプロンプトとして示します。コピペしてAIチャットに貼りつけて入力してください。

<details><summary><font color=#50a050>サンプルプロンプト（折り畳み表示）</summary>

```Sample_prompt.txt
特許明細書の分類を行います。[特許明細書]記載の[要約]と対応する[分類表]記載の[ルール]を検索し、[ルール]に対応する[分類科目]を[特許番号]に付与し、CSVファイルとして出力してください。

\n\n[分類表]
\n[分類科目]\n音響技術\n[ルール]\nオーディオ機器の構造や制御に特徴がある
\n[分類科目]\n搬送・物流技術\n[ルール]\n無人搬送車の構造や制御に特徴がある
\n[分類科目]\n防水技術\n[ルール]\n内部への異物侵入を防止する構造に特徴がある
\n[分類科目]\n材料技術\n[ルール]\n材料の物性に特徴がある
\n[分類科目]\n生産技術\n[ルール]\n工場や製造工程に用いられる技術に特徴がある\n\n[特許明細書リスト]
\n[特許番号]\n特許7662734\n[要約]\n【課題】無人搬送車を設備に対して良好に位置決めできるとともに、設備の手前の床面が摩耗しにくい無人搬送車の位置決め装置を提供する。
【解決手段】位置決め装置１０は、設備１００に設けられた第１位置決めピン１１Ａおよび第１アクチュエータ１３Ａと、無人搬送車１に設けられた第１ピン穴部材１２Ａと、を備えている。第１ピン穴部材１２Ａには、下方に向かって開いた開口が形成されている。第１ピン穴部材１２Ａは、上方に向かうほど内径が小さくなるテーパ状の内周面を有している。第１アクチュエータ１３Ａは、第１位置決めピン１１Ａを上昇させることにより、無人搬送車１に上向きの力が加わるように第１位置決めピン１１Ａを第１ピン穴部材１２Ａに嵌め込む。
【選択図】図１０


\n[特許番号]\n特許7659910\n[要約]\n【課題】第１接合部材または第２接合部材の損傷を抑えつつ、第１接合部材及び第２接合部材の接合を的確に行うことができるプラズマ処理方法及び接合システムを提供する。
【解決手段】
  真空雰囲気において第１プラズマ処理が行なわれた第１接合部材及び第２接合部材を準備し、第１プラズマ処理よりも真空度の低い雰囲気において第２プラズマ処理を第１接合部材または第２接合部材に行う工程と、第１接合部材と第２接合部材とを接合する工程とを含む。
【選択図】図３

\n[特許番号]\n特許7666692\n[要約]\n【課題】磁気誘導型センサを用いる操作装置の製造工程を容易化すること。
【解決手段】鍵盤装置は、それぞれ導電体が配置された第１基板および第２基板を含み、前記第１基板と前記第２基板との距離を測定するための距離センサと、操作者によって操作可能な鍵と、前記鍵と前記第２基板との間において前記第１基板を保持する保持部であって、弾性変形可能な部分を有し、前記弾性変形可能な部分が変形することに応じて前記第１基板が変位する保持部と、を備える。
【選択図】図２７

\n[特許番号]\n特許7658879\n[要約]\n【課題】認識エラーが生じたときに部品の位置や角度のずれを補正して部品を再認識することで部品の廃棄を低減することが可能な部品実装装置を提供する。
【解決手段】部品Ｅを吸着するノズル３４が軸線Ｌ上に装着された実装ヘッド３２と実装ヘッドを軸線Ｌと直交する方向に搬送する搬送部とノズルを軸線Ｌの回りに回転させる回転機構とノズルに吸着された部品を撮像する撮像部と部品データを記憶する記憶部と制御部とを備え、撮像部により取得された撮像画像の撮像範囲内に部品の全体が収まっていないことで部品Ｅを認識できなかった場合、制御部は、撮像画像に基づいて部品の位置及び角度を算出する算出処理と算出処理の結果から撮像範囲に対する部品の位置ずれ及び角度ずれの少なくとも一方を補正することで部品が撮像範囲内に収まるようにする補正処理と補正処理後に撮像部により部品を撮像し部品を再認識する再認識処理とを実行する。
【選択図】図２

\n[特許番号]\n特許7651835\n[要約]\n【課題】動画データが表す動画に対する影響を抑制しながら、当該動画と音との間に統一感があるコンテンツを生成する。
【解決手段】編集システム２０は、複数の動画区間を含む動画データＸ1と複数の音区間を含む音データＹ1とを処理するシステムであり、複数の動画区間のうち第１動画区間と当該第１動画区間に後続する第２動画区間との境界点において、複数の音区間のうちの第１音区間から当該第１音区間以外の第２音区間に切替わるように、音データＹ1を処理する音データ処理部５３を具備する。
【選択図】図３
```
</details>

### AIで分類してみた結果
サンプルプロンプトをAIチャット(今回Geminiを使ってます)に入力すると、AIチャットから以下のように出力されました。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831931/cabb57a9-a4b6-42b6-aada-37c4dae1b8de.png)
AIチャットからの回答として分類済み特許番号リストである以下のCSVデータ＊を得ることができました。
（＊「～CSVファイルの内容を示します」の下のリストをメモ帳にコピペして拡張子をcsvに変更。）

```patent_classification.csv
特許番号,分類科目
特許7662734,搬送・物流技術
特許7659910,材料技術
特許7666692,音響技術
特許7658879,生産技術
特許7651835,音響技術
```

### 実際に使ってみて
#### （プロンプト1回当たりに判定できる件数）
入力できるプロンプトの文字数に制限があるようで、Geminiでは明細書80件分ぐらいが1回の処理の限界でした。

#### （判定の揺れ）
要約に記載された限られた情報で判定しているからか同じ明細書リストでも毎回異なる判定がされることがあります。
判定の揺れを低減するには分類ルールを改善するほか、従来のIPCやキーワードなど他の分類方法と組み合わせたり、複数の分類表を用いる、たとえば分類表Aで大まかに分類した後、特定の分類項目に対し分類表Bでさらに細分化するなど工夫する必要があります。
あと比較的当てはまりやすい緩いルールを設けるとそちらに判定が流れがちですので、緩いルールにマッチした案件に対しては再判定するなどが必要です。

#### （AIでの判定が困難な案件は判定から除外する）
AI処理はあまりルールとマッチしなくとも無理やりでも判定しようとしますので、担当者の基準で見るとおかしな判定も散見されます
気になるようであればAIにルールとの一致度を数値で示すように指示して、一致度が低いものについては未分類にしてもらったり、判定後に担当者が目視で確認するようにするのも一つの手段かと思います。
指示文字列の例を以下に示します。

#### 指示文字列２
「特許明細書の分類を行います。[特許明細書]記載の[要約]と対応する[分類表]記載の[ルール]を検索し、[ルール]に対応する[分類科目]を[特許番号]に付与し、CSVファイルとして出力してください。検索した[ルール]と[要約]との一致度を数値で示し、前述のCSVファイルに追加してください。一致度が低い場合は、[分類科目]として未分類を付与してください。」

AIチャットからは以下のように出力されました。
![スクリーンショット 2025-05-06 112623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831931/81a1d59d-11fa-46a4-8582-4bce70f613eb.png)
![スクリーンショット 2025-05-06 112708.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831931/26d4cd80-31ae-4c21-8ea6-e684abd7d695.png)

以上の様に一致度が数値化されますので、大半をAIに作業してもらった後で一致度の低いものだけ担当者が作業する、例えば一致度の偏差値をとってその閾値以下の案件だけを担当者が作業するようにすればかなり担当者の負担は軽減できます。

あと、1度のプロンプト入力で大量の文字を入力すると的外れな回答がされる場合がありますので、そのような場合はプロンプトの文字数を減らす、指示文字列を前半と後半に分けるなどして複数回に分けてプロンプト入力することをおすすめします。

今回の記事が何らかの助けになれば幸いです。