MGeoによるAI活用:某市の交通局が予算を大幅に節約

技術背景と課題

都市のデジタル化において、データ統合は重要な一歩です。某市の交通局は、複数の部門から提供される道路施設データの重複や誤り、命名の不一致などの問題に直面していました。例えば、「中山南路」と「中山南路段」、「解放路(鼓楼区)」と「南京市解放路」など、異なる表記であっても同一の場所を指すことがあります。従来の手動でのデータ整合には大量の時間と労力が必要で、10万以上の道路施設レコードの洗浄と統合には3名の専任スタッフが6ヶ月以上かかり、費用は100万元以上に上る予定でした。

MGeo: 中国語アドレス向けのセマンティックマッチングエンジン

この問題を解決するために、同交通局は阿里云のオープンソースMGeoアドレス類似度マッチングモデルを導入しました。これにより、データ統合期間は7日に短縮され、人件費は0.5人月に削減され、直接的な財政支出は120万元以上節約されました。

技術的背景と主要な課題

住所データは非構造化かつ地域性が高い特徴を持っています。特に中国語の住所は複雑で、省市区町村五級行政区画、道路レベル(街/路/巷/弄)、方位詞(東/西/南/北段)、括弧内の補足説明など、様々な形式が含まれます。さらに、略語(「南京东路」 vs 「沪东宁路」)、別名(「新街口广场」 vs 「中山路1号」)、誤字脱字などの問題も存在します。

動作原理の詳細解説

MGeoはSentence-BERTアーキテクチャを使用し、2つの入力住所を固定次元のベクトル表現にエンコードし、それらのセマンティックな近さを余弦類似度で測定します。

モデルアーキテクチャ設計


import torch
import torch.nn as nn
from transformers import AutoModel, AutoTokenizer

class AddressMatcher(nn.Module):
    def __init__(self, model_name='hfl/chinese-roberta-wwm-ext'):
        super().__init__()
        self.bert = AutoModel.from_pretrained(model_name)
        self.dropout = nn.Dropout(0.1)
        self.classifier = nn.Linear(768, 1)

    def encode(self, texts):
        inputs = tokenizer(texts, padding=True, truncation=True, 
                          max_length=64, return_tensors="pt").to(device)
        outputs = self.bert(**inputs)
        embeddings = outputs.last_hidden_state[:, 0, :]
        embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)
        return embeddings

    def forward(self, text1, text2):
        vec1 = self.encode(text1)
        vec2 = self.encode(text2)
        similarity = torch.cosine_similarity(vec1, vec2)
        return similarity

実装と運用

以下の手順でMGeoモデルを展開し、実際のデータクリーニングプロセスを実行しました。

環境準備とイメージのデプロイ


docker pull registry.aliyun.com/mgeo/v1.0-cuda11.7
docker run -it --gpus '"device=0"' \
  -v /data/traffic:/root/workspace \
  -p 8888:8888 \
  --name mgeo-infer \
  registry.aliyun.com/mgeo/v1.0-cuda11.7

コンテナ内での設定と実行


docker exec -it mgeo-infer bash
conda activate py37testmaas
cp /root/推理.py /root/workspace/inference_road.py

推論スクリプトの実行


import pandas as pd
from mgeo import MGeoModel, MGeoTokenizer

tokenizer = MGeoTokenizer.from_pretrained("mgeo-base")
model = MGeoModel.from_pretrained("mgeo-base")
model.eval().cuda()

def load_address_pairs(csv_path):
    df = pd.read_csv(csv_path)
    pairs = [(row['addr1'], row['addr2']) for _, row in df.iterrows()]
    return pairs

def batch_inference(pairs, batch_size=128):
    results = []
    for i in range(0, len(pairs), batch_size):
        batch = pairs[i:i+batch_size]
        addrs1 = [p[0] for p in batch]
        addrs2 = [p[1] for p in batch]

        inputs = tokenizer(addrs1, addrs2, padding=True, 
                          truncation=True, max_length=64, 
                          return_tensors="pt")
        inputs = {k: v.cuda() for k, v in inputs.items()}

        with torch.no_grad():
            similarity = model(**inputs).cpu().numpy()

        results.extend(similarity.flatten().tolist())
    return results

pairs = load_address_pairs("/root/workspace/road_facilities_pairs.csv")
scores = batch_inference(pairs)

result_df = pd.DataFrame({
    "address1": [p[0] for p in pairs],
    "address2": [p[1] for p in pairs],
    "similarity_score": scores,
    "is_match": ["是" if s > 0.85 else "否" for s in scores]
})
result_df.to_csv("/root/workspace/match_results.csv", index=False)

コスト効果分析と経験のまとめ

プロジェクトの経済効果は以下の通りです:

項目従来の手法MGeo AI手法節約額
人件費108万3万105万
時間180日7日173日前倒し
修正コスト20万<2万18万
合計128万5万123万

結論と展望

MGeoの成功は、オープンソースAI技術が政府のデジタル化に大きな価値をもたらすことを示しています。短期的には交通施設データの資産管理を支援し、中期的には他の部門への展開、長期的にはスマートシティの実現に向けた取り組みが期待されます。

タグ: MGeo 地址匹配 深度学习 Sentence-BERT 交通数据清洗

7月9日 21:35 投稿