문자열 파싱을위한 머신 러닝 기술?


30

많은 주소 문자열이 있습니다.

1600 Pennsylvania Ave, Washington, DC 20500 USA

구성 요소로 구문 분석하고 싶습니다.

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

그러나 물론 데이터는 더러워집니다. 여러 언어로 작성된 많은 국가에서 다른 방식으로 작성되었으며 철자가 틀리거나 조각이 없거나 여분의 정크가 있습니다.

현재 우리의 접근 방식은 퍼지 가제트 매칭과 결합 된 규칙을 사용하는 것이지만, 머신 러닝 기술을 탐구하고 싶습니다. 우리는지도 학습을위한 훈련 데이터에 라벨을 붙였습니다. 문제는 어떤 종류의 기계 학습 문제입니까? 실제로 클러스터링, 분류 또는 회귀가 아닌 것 같습니다 ....

내가 알아낼 수있는 가장 가까운 것은 각 토큰을 분류하는 것이지만 "최대 한 국가가 있어야합니다"와 같은 제약 조건을 만족시키면서 동시에 모든 토큰을 분류하려고합니다. 실제로 문자열을 토큰 화하는 방법에는 여러 가지가 있으며, 각각을 시도하고 최선을 선택하고 싶습니다 ... 통계적 구문 분석이라는 것이 있다는 것을 알고 있지만 그것에 대해 아무것도 모릅니다.

따라서 주소를 구문 분석하기 위해 어떤 기계 학습 기술을 탐색 할 수 있습니까?


나는 대답을 게시하는 것에 대한 귀하의 높은 수준의 문제에 대한 전문가는 아니지만 기계 학습의 첫 번째 단계는 정보 기능을 구축 한 다음 해당 구조에 맞는 방법을 선택하는 것입니다. 당신은 많은 구조를 가지고 있습니다. alnum 대 non-alnum 문자, 숫자 대 alpha 토큰, ','split 사이의 토큰 수, 숫자 토큰 길이. 예를 들어, ','으로 분할하고 각 분할에서 토큰 수를 계산합니다 (거리 주소 대 도시 / 주 / 지구별 정보). 숫자 토큰 계산 (거리 주소와 우편 번호). 이를 통해 클러스터 할 수있는 기능을 제공합니다.
muratoa

텍스트 청크를 살펴보십시오 .
alto

2
또한 볼 개체 명 인식 , 그리고 더 일반적인 작업 정보 추출
Yuval 교수 F에게

@YuvalF 나는 이것이 답이 될 것을 제안합니다. ML 방법을 사용한 예제 논문을 조금 더 자세히 설명해 주시겠습니까?
steffen

메일 주소를 구성 요소 부분으로 구성하는이 특정 문제에도 관심이 있습니다. Google과 같은 역 지오 코딩 서비스와의 연결에 대한 가정이없는 모바일 기기에서이 작업을 시도하고 있습니다. 도시, 주, 국가 및 우편과 관련된 링크 된 데이터 소스가 있다고 가정해도됩니다. 이 문제에 대한 도움이나 조언 또는 기발한 스타트 업 팀과의 관계를 기꺼이 환영합니다.

답변:


10

이것은 시퀀스 레이블링 문제 로 볼 수 있는데, 여기에는 일련의 토큰이 있고 각 토큰에 분류를 제공하려고합니다. 숨겨진 Markov 모델 (HMM) 또는 조건부 임의 필드 (CRF)를 사용하여 문제를 해결할 수 있습니다. Mallet 이라는 오픈 소스 패키지에는 HMM 및 CRF가 잘 구현되어 있습니다.

귀하의 예에서 입력을 아래 형식으로 변환해야합니다. 또한 추가 기능을 생성해야합니다.

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

1
표준 시퀀서 태그 (예 : CRF의 HMM)가이 상황에서 매우 좋은 결과를 낼 것이라고는 생각하지 않습니다. 이는 태그 그룹이 연속적이고 각 태그가 시퀀스 당 한 번만 발생해야한다는 제한 때문입니다. 임의의 거리의 과거 / 미래 태그에 의존하기 때문에이 정보를 통합하도록 검색을 쉽게 수정할 수 있다고 생각하지 않습니다.
alto

@alto 저는 CRF가 주변 상황을 고려한다고 생각합니다. HMM은 과거 상태를 볼 수 없습니다. 아마도 잘 작동하지 않을 것입니다.
JT

1

주소가 유효한지 유효성을 검사하기 위해 매우 비슷한 문제를 해결해야했습니다.

일반적으로 주소는 "1600 Pennsylvania Ave, Washington DC, 20500"입니다.

다음과 같은 문자열

"저는 2000 단계를 내려 워싱턴 DC의 Pennsylvania Ave에 도착했습니다."

유효한 주소가 아닙니다.

이것은 SVM, Neural Networks 등과 같은 분류 기술로 해결할 수 있습니다.

아이디어는 주요 기능 세트를 식별하는 것입니다. 이들 중 일부는 다음과 같습니다.

1) 도로명이 유효한 블록 번호로 시작합니까? 대부분의 미국 블록 번호는 숫자 (예 : 1200) 또는 단일 문자 (120A) 뒤에 오는 숫자 또는 단일 문자 뒤에 오는 숫자 (예 : S200)입니다.

2) 주소 형식이 올바른 경우 거리 이름은 Ave, Avenue는 Dr, Drive는 Blvd, Boulevard는 접미사로 끝납니다. USPS 사이트에서 미국 거리 접미사 목록을 얻을 수 있습니다.

3) 거리 주소 필드의 단어 수는 흥미로운 기능이 될 수 있습니다. 단어가 너무 많으면 올바른 주소가 아닐 수 있습니다. 예를 들어 위의 예를 참조하십시오.

4) 주소 필드의 블록 번호와 거리 접미사 사이에 몇 개의 단어가 발생합니까?

이것들은 학습 알고리즘을 훈련시키는 데 사용될 수 있으며 결과 모델은 주어진 주소가 유효한지 여부를 검증하는 데 사용될 수 있습니다.


1

이것은 자신의 솔루션이 필요없는 약간의 해킹입니다 : 역 지오 코딩. 이를 통해보다 깨끗한 데이터를 제공하거나 실제로 모든 작업을 수행 할 수 있습니다.

예를 들어 geocode3Google을 사용하는 SSC의 Stata 코드가 있습니다. 나는 이것이 퍼지 가제트 와 유사하다고 생각합니다 . 첫 번째 주소는 지저분하고 두 번째 주소는 깨끗하며 세 번째 주소는 외국 주소입니다. 다른 소프트웨어도이를 처리 할 수 ​​있습니다.

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  

크렘린은 형식이 매우 다릅니다.


0

이것은 양방향 LSTM 분류로 해결해야 할 문제처럼 들립니다. 예를 들어 샘플의 각 문자를 하나의 범주로 태그 지정

거리 : 1 도시 : 2 주 : 3 우편 번호 : 4 국가 : 5

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

이제이 라벨을 기준으로 분류기를 훈련 시키십시오. 팔!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.