解析字符串的机器学习技术?

机器算法验证 机器学习 文本挖掘
2022-01-28 01:11:27

我有很多地址字符串:

1600 Pennsylvania Ave, Washington, DC 20500 USA

我想将它们解析为它们的组件:

street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA

但当然数据是脏的:它来自许多国家,使用多种语言,以不同的方式编写,包含拼写错误,缺少部分,有额外的垃圾等等。

目前我们的方法是使用结合模糊地名词典匹配的规则,但我们想探索机器学习技术。我们为监督学习标记了训练数据。问题是,这是一个什么样的机器学习问题?它似乎并不是聚类、分类或回归……

我能想到的最接近的方法是对每个令牌进行分类,但你真的想同时对它们进行分类,满足“最多应该有一个国家”之类的限制;确实有很多方法可以对字符串进行标记,并且您想尝试每种方法并选择最好的……我知道存在一种称为统计解析的东西,但对此一无所知。

那么:我可以探索哪些机器学习技术来解析地址?

4个回答

这可以看作是一个序列标记问题,其中你有一个标记序列,并希望为每个标记给出一个分类。您可以使用隐马尔可夫模型 (HMM) 或条件随机场 (CRF) 来解决问题。在名为Mallet的开源包中有很好的 HMM 和 CRF 实现

在您的示例中,您应该将输入转换为以下格式。此外,您应该生成额外的功能。

1600 STREET
Pennsylvania STREET
Ave STREET
, OUT
Washington CITY
, OUT
DC PROVINCE
20500 POSTCODE
USA COUNTRY

我必须解决一个非常相似的问题来验证地址是有效还是无效。

通常地址的结构为“1600 Pennsylvania Ave, Washington DC, 20500”

一个字符串,例如

“我走了 2000 级台阶,来到了华盛顿特区的宾夕法尼亚大道。”

不是有效地址。

这可以通过SVM、神经网络等分类技术来解决。

这个想法是识别一组关键特征。其中一些可能是:

1) 街道名称是否以有效的街区号开头。大多数美国块编号要么是数字(例如 1200),要么是数字后跟单个字母(120A)或数字后跟单个字母(例如 S200)。

2) 如果地址格式正确,则街道名称以后缀结尾,例如 Ave 代表大道,Dr 代表 Drive,Blvd 代表林荫大道。可以从 USPS 站点获取美国街道后缀列表。

3)街道地址字段中的单词数也是一个有趣的特征。如果单词太多,则可能不是有效地址。例如,参见上面的示例。

4)地址字段中的街区号和街道后缀之间出现了多少个单词?

这些可用于训练学习算法,生成的模型可用于验证给定地址是否有效。

这是一个不需要您自己的解决方案的 hack:反向地理编码。这可以为您提供更清晰的数据或实际为您完成所有工作。

例如,这里有一些geocode3来自 SSC 的 Stata 代码,它使用 Google。我想这类似于Fuzzy Gazetteer第一个地址很乱,第二个是干净的,第三个是外国的。其他软件也可以处理这个问题。

clear
set obs 3
gen address =""
replace address = "Big Foot Museum in Felton CA" in 1
replace address = "1600 Pennsylvania Ave, Washington, DC 20500 USA" in 2 
replace address = "ул. Ильинка, д. 23 103132, Москва, Россия" in 3
geocode3, address(address)
gen coord = string(g_lat) + "," + string(g_lon)
geocode3, reverse coord(coord)

这工作得相当好:

. list r_addr , clean noobs

                                                                             r_addr  
                                      121 San Lorenzo Avenue, Felton, CA 95018, USA  
    1600 Pennsylvania Avenue Northwest, President's Park, Washington, DC 20500, USA  
                                         ulitsa Ilyinka, 23, Moscow, Russia, 101000  

克里姆林宫确实有一个完全不同的格式。

这听起来像是一个需要通过双向 LSTM 分类来解决的问题。例如,您将样本的每个字符标记为一个类别

街道:1 城市:2 省:3 邮编:4 国家:5

1600 Pennsylvania Ave, Washington, DC 20500 USA
111111111111111111111, 2222222222, 33 44444 555

现在,根据这些标签训练您的分类器。繁荣!