見出し画像

ChatGPTなら、日本の住所を正しくパースできるのか

河野太郎デジタル相が「AIが解決してくれるかもしれない!」と発言し、一部で話題となっている、いわゆる「住所正規化問題」

この住所正規化問題は、次のような様々な問題を孕んでいます。

  • 地域によって住所表記のフォーマットがまちまちすぎる問題

  • 人によって住所表記の方法がまちまちすぎる問題

  • OCR(光学的文字認識)で住所の文字が誤認識される問題

しかし、AI、とりわけLLM(大規模言語モデル)であれば、これらの問題に対処できそうです。

  • 日本全国の様々な住所を学習しているのであれば、住所をコンテキストとした「その地域で通常使用されている正しいフォーマット」の解釈が期待できる

  • 表記揺れや誤字脱字・曖昧さに関して柔軟である

というわけで、今回はChatGPT (GPT-4)に、住所表記のパースに挑戦してもらいました。

第1戦

まずは河野大臣が例示している「港区赤坂一丁目2の3」「港区赤坂1-2-3」について、パースしてもらいましょう。

使用したフォーマットは以下です。

次の住所を以下の項目に沿ってJSON形式で正確にパースし、JSONのみを出力すること:
港区赤坂一丁目23

### 項目:
- 都道府県
- 郡名
- 市区町村
- 町域
- 丁目
- 番地
- 号
- 建物名・部屋番号

### 規則:
- 都道府県が省略されている場合は適切に補うこと
- ハイフンを残さないこと
- 固有名詞に含まれない漢数字は半角数字に置換すること
- ない場合は空欄にすること

パースしたい住所は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",
  "号": "",
  "建物名・部屋番号": ""
}


この記事が気に入ったらサポートをしてみませんか?