Skip to content

swei412/address-matching

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

地址分词

网络的发展使得地址数量指数级增长,海量的数据对多个行业都提出了挑战。此项目旨在提供一个基于深度学习的地址分词器,使用监督学习的方式、BERT+BiLSTM+CRF技术,从语义角度对地址进行分词。


下载与安装

Windows & Ubuntu:

python               3.7
tensorflow           1.15.0
numpy                1.17.3(最新版跟tensorflow有兼容性问题)
pandas               1.3.5
protobuf             3.20.1

DEMO

使用48320条标注的地址数据训练后,训练数据标注的标签与本工程定义有些差别,标签如下:

prov:省份
city:城市
district:区县
town:乡镇、街道
road:道路
subroad:子道路
roadno:道路号
subroadno:子道路号
poi:POI
subpoi:子POI
houseno:楼号
cellno:单元号
roomno:房间号
redundant:冗余数据
direction:方向
assist:连接词,如:与、和等
floorno:楼层
community:社区
village:村
group:村组
intersection:关系词:交叉口等
devzone:开发区
distance:距离,如100米等
traffic_facility:交通设施,红绿灯

标注好的地址数据地址在dataset_v2/data.7z,解压后使用。

项目结构

└── .               
    ├── bert_base                           
        ├── bert                                # Google发布的BERT源码
        └── chinese_L-12_H-768_A-12             # BERT模型
    ├── data
        └── dataset                             # 用于训练的最终数据集
            ├── dev.txt
            ├── test.txt
            └── train.txt
    ├── sample_files                            # 示例代码中用到的文件
    ├── other
        ├── pictures                            # README中用到的图片
        ├── predict_base.py                     # 分词的基础代码
        └── preprocessing.py                    # 预处理的代码,主要用于生成用于训练的最终训练集
    ├── output                                  # 存放训练的模型、log以及中间文件
    ├── train                                   # 网络结构、计算准确率、超参数指定         
    ├── predict.py                              # 示例分词文件
    └── train.py                                # 示例训练文件

如何运行代码,对地址分词

目前版本支持对单条地址、excel系列文件(xlsx、csv等)进行分词。根目录下的predict.py主方法中有两段代码,可以根据注释提示运行

  • 单条地址分词
    • 直接运行根目录下的predict.py,就可以得到结果,结果如下 单条地址分词效果
  • 对文件中的所有地址进行分词
    • 注释掉根目录下的predict.py中 预测单个文件代码块 ,打开 预测整个文件代码块 ,运行predict.py

如何使用自己的数据训练模型

概述

目前项目版本使用监督学习方法,为了保证标签的准确性,我们挑选了不同省份、不同特色的1000多条手工标注的地址进行模型训练。我们将地址分为如下11个地址要素: 地址要素说明

其次按照规定的层级对地址进行打标签操作,如下图: 打标签示例

有了带标签的数据,结合Google发布的BERT预训练语言模型,就可以构建自己的网络,从而训练自己的模型。

制作数据集

深度学习中数据的质量对最终的效果有非常大的影响。除了概述中提到的纯手动打标签的方式。

目前比较推荐的方式是:先使用训练好的模型对要训练的数据进行一次分词,人工对得到的结果进行部分检查以及修正,再进行训练。 原始数据标签文件参考 data/sample_files/手工标记好的示例地址.xlsx

最后使用other/preprocessing.py中的主方法,生成最终的数据集。作为示例,已经使用data/sample_files/手工标记好的示例地址.xlsx生成了最终要使用的数据集,位于data/dataset下的dev.txt、test.txt、train.txt。 该示例中,将所有地址切分成三部分,训练集、测试集以及验证集,占比分别为:60%、20%以及20%

超参数调整

训练用到的所有超参数都在 train/helper.py 文件中指定,请留意有中文注释的代码,我们挑选了10个常用超参数,可以对其进行修改。

训练

准备好了数据集、调好了超参数,直接运行train.py,模型就会在train/helper.py中指定的output_dir中生成。

到此,训练结束。


后记

  • 后期代码维护以及升级后,可以直接在github上拉代码。

引用

https://github.com/macanv/BERT-BiLSTM-CRF-NER

About

address participles, parsing, error recovery by named entity recognition.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy