MeCab vs ChatGPT 個人名・代表者名抽出
シンプルフォームの中仙道(@hinata17100) です。本記事は SimpleForm Advent Calendar 2023 の20日目の記事となっています。
当社では法人調査の情報基盤を作るため、法人に関する様々な情報を日々収集しています。
データソースが多岐に渡り、統一された規格に基づいているわけではないため、データの整形に手間がかかることがあります。特に、個人名・代表者名の抽出は厄介な問題です。
そこで今回は個人名を抽出する技術の選定のため、形態素解析のライブラリであるMeCabと大規模言語モデルのChatGPTの個人名抽出の性能を比較してみました。
方法は具体的には述べません。今回は性能の比較について述べていきます。
サンプル数は100件です。(少なくてすみません)
入力データ
今回利用したデータは結構汚いデータです。
(データイメージ)
代表者名 |
---|
山田 太郎 |
代表取締役 社長 山田 太郎 |
代表取締役社長執行役員兼COO 山田 太郎 |
一般財団法人 ◯◯医療団 理事長 山田 太郎 |
医療法人社団 ◯◯会 ◯◯病院 理事長 山田 太郎 |
シンプルフォーム株式会社 シンプルフォーム株式会社 |
山田 太郎(院長) ヤマダ タロウ |
上記を見るとわかりますが、フォーマットが統一されておらず、代表者名の前に役職名が入っていたり、代表者名の後ろに会社名が入っていたりします。代表者名すら入っていないものもあります(笑)。
検証に利用した技術
今回MeCabでは、mecab-ipadic-NEologdの辞書を利用しました。
また、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