⚔️

MeCab vs ChatGPT 個人名・代表者名抽出

2023/12/21に公開

シンプルフォームの中仙道(@hinata17100) です。本記事は SimpleForm Advent Calendar 2023 の20日目の記事となっています。

当社では法人調査の情報基盤を作るため、法人に関する様々な情報を日々収集しています。
データソースが多岐に渡り、統一された規格に基づいているわけではないため、データの整形に手間がかかることがあります。特に、個人名・代表者名の抽出は厄介な問題です。

そこで今回は個人名を抽出する技術の選定のため、形態素解析のライブラリであるMeCabと大規模言語モデルのChatGPTの個人名抽出の性能を比較してみました。
方法は具体的には述べません。今回は性能の比較について述べていきます。

サンプル数は100件です。(少なくてすみません)

入力データ

今回利用したデータは結構汚いデータです。

(データイメージ)

代表者名
山田 太郎
代表取締役 社長  山田 太郎
代表取締役社長執行役員兼COO 山田 太郎
一般財団法人 ◯◯医療団 理事長 山田 太郎
医療法人社団 ◯◯会 ◯◯病院 理事長 山田 太郎
シンプルフォーム株式会社 シンプルフォーム株式会社
山田 太郎(院長) ヤマダ タロウ

上記を見るとわかりますが、フォーマットが統一されておらず、代表者名の前に役職名が入っていたり、代表者名の後ろに会社名が入っていたりします。代表者名すら入っていないものもあります(笑)。

検証に利用した技術

今回MeCabでは、mecab-ipadic-NEologdの辞書を利用しました。
https://github.com/neologd/mecab-ipadic-neologd/tree/master

また、ChatGPTでは、個人で作成した下記のようなプロンプトを利用しました。

以下の文字列から、フォーマットに従って姓と名を抽出せよ。

## 文字列
代表取締役社長執行役員兼COO 山田 太郎

## フォーマット
{
    "error": 姓と名が共に抽出できた場合はfalse、できなかった場合はtrue,
    "姓": 抽出した姓,
    "名": 抽出した名,
}

正解の定義

早速検証を行なっていきます。
今回は、姓を姓として、名を名として抽出することができれば正解とします。

MeCabの結果

MeCabのprecisionは0.95でした。

MeCabの失敗の具体例

MeCabは、姓が地名でも存在する場合、地名として認識してしまうことがありました。

# 入力: 一ノ宮 太郎

# 出力:
{
    "surface": "一ノ宮",
    "pos": "名詞",
    "pos_desc1": "固有名詞",
    "pos_desc2": "地域",
    "pos_desc3": "一般",
    "katsuyou1": "*",
    "katsuyou2": "*",
    "base": "一ノ宮",
    "reading": "イチノミヤ",
    "pronounce": "イチノミヤ"
},
{
    "surface": " ",
    "pos": "記号",
    "pos_desc1": "空白",
    "pos_desc2": "*",
    "pos_desc3": "*",
    "katsuyou1": "*",
    "katsuyou2": "*",
    "base": " ",
    "reading": " ",
    "pronounce": " "
},
{
    "surface": "太郎",
    "pos": "名詞",
    "pos_desc1": "固有名詞",
    "pos_desc2": "人名",
    "pos_desc3": "名",
    "katsuyou1": "*",
    "katsuyou2": "*",
    "base": "太郎",
    "reading": "タロウ",
    "pronounce": "タロー"
}

ChatGPTの結果

ChatGPTのprecisionはなんと1.00でした。

ChatGPTの回答の具体例

MeCabで失敗した例でも、ChatGPTは正しく回答できていました。

# 入力: 一ノ宮 太郎

# 出力:
{
  "error": false,
  "姓": "一ノ宮",
  "名": "太郎"
}

おわりに

今回は、MeCabとChatGPTの個人名・代表者名抽出の性能を比較してみました。
MeCabは、姓が地名でも存在する場合、地名として認識してしまうことがありましたが、ChatGPTは正しく回答できていました。
ただ、MeCabに対してChatGPTの利用にはコストがかかるため、すぐに導入とはいきません。
今後は、実用化に向けて低コストで行えるようにローカルで再現できるか試してみたいと思います。

Discussion