ChatGPTなら、日本の住所を正しくパースできるのか
河野太郎デジタル相が「AIが解決してくれるかもしれない!」と発言し、一部で話題となっている、いわゆる「住所正規化問題」。
この住所正規化問題は、次のような様々な問題を孕んでいます。
地域によって住所表記のフォーマットがまちまちすぎる問題
人によって住所表記の方法がまちまちすぎる問題
OCR(光学的文字認識)で住所の文字が誤認識される問題
しかし、AI、とりわけLLM(大規模言語モデル)であれば、これらの問題に対処できそうです。
日本全国の様々な住所を学習しているのであれば、住所をコンテキストとした「その地域で通常使用されている正しいフォーマット」の解釈が期待できる
表記揺れや誤字脱字・曖昧さに関して柔軟である
というわけで、今回はChatGPT (GPT-4)に、住所表記のパースに挑戦してもらいました。
第1戦
まずは河野大臣が例示している「港区赤坂一丁目2の3」と「港区赤坂1-2-3」について、パースしてもらいましょう。
使用したフォーマットは以下です。
次の住所を以下の項目に沿ってJSON形式で正確にパースし、JSONのみを出力すること:
港区赤坂一丁目2の3
### 項目:
- 都道府県
- 郡名
- 市区町村
- 町域
- 丁目
- 番地
- 号
- 建物名・部屋番号
### 規則:
- 都道府県が省略されている場合は適切に補うこと
- ハイフンを残さないこと
- 固有名詞に含まれない漢数字は半角数字に置換すること
- ない場合は空欄にすること
パースしたい住所は2行目に設定します。
今回の出力は以下となりました。
{
"都道府県": "東京都",
"郡名": "",
"市区町村": "港区",
"町域": "赤坂",
"丁目": "1",
"番地": "2",
"号": "3",
"建物名・部屋番号": ""
}
完璧ですね。
続いて、「港区赤坂1-2-3」を入力してみます。
{
"都道府県": "東京都",
"郡名": "",
"市区町村": "港区",
"町域": "赤坂",
"丁目": "1",
"番地": "2",
"号": "3",
"建物名・部屋番号": ""
}
こちらも上手にパースしてくれました。
ただし、ここまではエクセルの関数でも可能なレベルです。
ここから一気に難易度のギアを上げていきます。
AIクン、ついてこれるかな。
※なお、お題はこちらの記事からお借りしています。
第2戦
まずは舞浜小学校の住所「浦安市舞浜2-1-1」とディズニーアンバサダーホテルの住所「浦安市舞浜2-11」をパースしてみます。
この問題の肝は、「舞浜2-11」を2丁目11番地ではなく、2番地11号とパースできるかどうか、です。
浦安市舞浜2-1-1:
{
"都道府県": "千葉県",
"郡名": "",
"市区町村": "浦安市",
"町域": "舞浜",
"丁目": "2",
"番地": "1",
"号": "1",
"建物名・部屋番号": ""
}
浦安市舞浜2-11:
{
"都道府県": "千葉県",
"郡名": "",
"市区町村": "浦安市",
"町域": "舞浜",
"丁目": "2",
"番地": "11",
"号": "",
"建物名・部屋番号": ""
}
ダメでした。
第3戦
めげずに次の問題に挑戦してもらいます。お題は下田郵便局の住所「静岡県下田市2-4-26」です。
静岡県下田市2-4-26:
{
"都道府県": "静岡県",
"郡名": "",
"市区町村": "下田市",
"町域": "",
"丁目": "2",
"番地": "4",
"号": "26",
"建物名・部屋番号": ""
}
ちゃんと町域(町大字)を省略して出力できました。偉い。2勝1敗です。
第4戦
続いては春日部市立幸松小学校の住所「春日部市大字八丁目353番地1」です。
この問題は、「八丁目」が固有名詞であるため、八を漢数字にしないことが重要です。
春日部市大字八丁目353番地1:
{
"都道府県": "埼玉県",
"郡名": "",
"市区町村": "春日部市",
"町域": "大字",
"丁目": "8",
"番地": "353",
"号": "1",
"建物名・部屋番号": ""
}
だめでした。
第5戦
続いては町域も丁目もない御所市役所の住所「奈良県御所市1番地の3」です。
奈良県御所市1番地の3
{
"都道府県": "奈良県",
"郡名": "",
"市区町村": "御所市",
"町域": "",
"丁目": "",
"番地": "1",
"号": "3",
"建物名・部屋番号": ""
}
こちらはうまくいきました。
第6戦
元記事に依ると「ここまではジオコーダー/住所正規化あるあるLV1」とのことでしたので、むしろ静的な処理が可能な範囲なのかもしれません。ということは、むしろAIの得意分野はここからと言えるのではないでしょうか。
気を取り直していきましょう。水資源機構の関西吉野川支社の住所「大阪市中央区上町A-12」をパースしてもらいます。上町は「上町二丁目」が地元住民から反対されたという経緯から「上町」と「上町一丁目」があるそうです。
大阪市中央区上町A-12:
{
"都道府県": "大阪府",
"郡名": "",
"市区町村": "大阪市中央区",
"町域": "上町",
"丁目": "",
"番地": "A",
"号": "12",
"建物名・部屋番号": ""
}
こちらもうまくいきました。A丁目とはならず、ちゃんと番地としてパースしてくれています。4勝2敗です。
第7戦
つづいては同じく大阪市中央区におわす坐摩(いかすり)神社の住所「大阪市中央区久太郎町4丁目渡辺3号」を試してみます。この場所は番地が「渡辺」です。
大阪市中央区久太郎町4丁目渡辺3号:
{
"都道府県": "大阪府",
"郡名": "",
"市区町村": "大阪市中央区",
"町域": "久太郎町",
"丁目": "4",
"番地": "渡辺",
"号": "3",
"建物名・部屋番号": ""
}
うまく解釈してくれました。この辺の柔軟度はさすがAIといったところ。
第8戦
つづいては、八街市役所の住所「千葉県八街市八街ほ35番地29」をパースしてみます。
千葉県八街市八街ほ35番地29:
{
"都道府県": "千葉県",
"郡名": "",
"市区町村": "八街市",
"町域": "八街",
"丁目": "",
"番地": "35",
"号": "29",
"建物名・部屋番号": ""
}
「ほ」が欠落してしまいました。
八街市八街の「いろは」は地番なので、"ほ35"番地とパースするべきなのでしょうか。わかりません。
金沢市磯部町ニ45番地:
{
"都道府県": "石川県",
"郡名": "",
"市区町村": "金沢市",
"町域": "磯部町",
"丁目": "2",
"番地": "45",
"号": "",
"建物名・部屋番号": ""
}
ニ(カタカナ)が二(漢数字)と解釈されてしまいました。
七尾市藤橋町亥45番地1:
{
"都道府県": "石川県",
"郡名": "",
"市区町村": "七尾市",
"町域": "藤橋町亥",
"丁目": "",
"番地": "45",
"号": "1",
"建物名・部屋番号": ""
}
こちらは亥が町域に含まれています。
第9戦
続いて、長野県長野市南長野県町をパースしてもらいます。
長野県長野市南長野県町 477-1:
{
"都道府県": "長野県",
"郡名": "",
"市区町村": "長野市",
"町域": "南長野県町",
"丁目": "",
"番地": "477",
"号": "1",
"建物名・部屋番号": ""
}
うーん。南長野と県町がくっついてしまいました。ちなみに、「大字」と「小字」や「町名」にラベルを分けてもうまくいきませんでした。
第10戦
勝率が落ちてきたので、比較的得意だと思われる誤字訂正をさせてみます。
まずは「千葉県香取市佐原ロ」のロを口(くち)に変更してみました。
千葉県香取市佐原口2127:
{
"都道府県": "千葉県",
"郡名": "",
"市区町村": "香取市",
"大字": "佐原",
"町名": "口",
"丁目": "",
"番地": "2127",
"号": "",
"建物名・部屋番号": ""
}
「佐原口」は回避できたものの、町名が「口」になってしまいました。
つづいて、下田郵便局のHPでの表記「静岡県下田市2ー4ー26」を試してみます。「ー」がハイフンではなく長音符(伸ばし棒)になっています。
静岡県下田市2ー4ー26:
{
"都道府県": "静岡県",
"郡名": "",
"市区町村": "下田市",
"大字": "",
"町名": "",
"丁目": "2",
"番地": "4",
"号": "",
"建物名・部屋番号": "26"
}
これは上手く出来ている・・・かと思いきや、26が建物名として解釈されてしまいました。
結果
ChatGPTでは、健闘はしたものの特殊な住所には対応しきれませんでした。
しかし、たとえば「few-shot learning的に例外パターンをいくつかpromptに記載しておく」または「実在する住所を大量に事前学習させたAIを使用する」等の方法で、案外解決するものかもしれません。
ぜひデジタル庁には頑張っていただきたいものです。
では最後に京都市役所の住所のパース結果を。
京都市中京区寺町通御池上る上本能寺前町488:
{
"都道府県": "京都府",
"郡名": "",
"市区町村": "京都市中京区",
"大字": "",
"町名": "寺町通御池上る上本能寺前町",
"丁目": "",
"番地": "488",
"号": "",
"建物名・部屋番号": ""
}
この記事が気に入ったらサポートをしてみませんか?