Kỹ thuật máy học để phân tích chuỗi?


30

Tôi có rất nhiều chuỗi địa chỉ:

1600 Pennsylvania Ave, Washington, DC 20500 USA

Tôi muốn phân tích chúng thành các thành phần của chúng:

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

Nhưng tất nhiên dữ liệu là bẩn: nó đến từ nhiều quốc gia bằng nhiều ngôn ngữ, được viết theo nhiều cách khác nhau, chứa lỗi chính tả, thiếu các mảnh, có thêm rác, v.v.

Ngay bây giờ cách tiếp cận của chúng tôi là sử dụng các quy tắc kết hợp với công cụ tìm kiếm mờ, nhưng chúng tôi muốn khám phá các kỹ thuật học máy. Chúng tôi đã dán nhãn dữ liệu đào tạo cho việc học có giám sát. Câu hỏi là, loại vấn đề máy học này là gì? Nó không thực sự có vẻ là phân cụm, hoặc phân loại hoặc hồi quy ....

Cách gần nhất tôi có thể đưa ra là phân loại từng mã thông báo, nhưng sau đó bạn thực sự muốn phân loại tất cả chúng đồng thời, thỏa mãn các ràng buộc như "nên có nhiều nhất một quốc gia;" và thực sự có nhiều cách để token hóa một chuỗi, và bạn muốn thử từng chuỗi và chọn thứ tốt nhất .... Tôi biết có tồn tại một thứ gọi là phân tích thống kê, nhưng không biết gì về nó.

Vậy: tôi có thể khám phá những kỹ thuật máy học nào để phân tích địa chỉ?


Tôi không phải là một chuyên gia về vấn đề cấp cao của bạn khi đăng câu trả lời, nhưng tôi nghĩ bước đầu tiên để học máy là xây dựng các tính năng thông tin, sau đó chọn phương pháp phù hợp với cấu trúc của chúng. Bạn có rất nhiều cấu trúc; alnum vs các ký tự không phải alnum, mã thông báo số vs alpha, số lượng mã thông báo giữa các phần tách ',', độ dài mã thông báo số. ví dụ: chia trên ',' và đếm số lượng mã thông báo trong mỗi lần phân chia (địa chỉ đường phố so với thành phố / tiểu bang so với thông tin cụ thể về địa lý); calc strlen của mã thông báo số (địa chỉ đường phố so với mã zip). Chúng cung cấp cho bạn các tính năng bạn có thể nhóm trên.
muratoa

Có một cái nhìn vào văn bản chunking .
alto

2
Đồng thời nhìn vào nhận dạng thực thể được đặt tên và nhiệm vụ tổng quát hơn về Khai thác thông tin
Yuval F

@YuvalF Tôi đề nghị làm cho câu trả lời này. Bạn có thể xây dựng một chút, có thể là một bài báo mẫu trong đó phương pháp ML đã được sử dụng không?
steffen

Tôi cũng rất quan tâm đến vấn đề cụ thể này - đó là cấu trúc một địa chỉ gửi thư thành các bộ phận cấu thành của nó. Chúng tôi đang cố gắng thực hiện điều này trong một thiết bị di động không có giả định về khả năng kết nối với dịch vụ mã hóa địa lý ngược như googles. Bạn có thể giả định rằng chúng tôi có một nguồn dữ liệu được liên kết trên thành phố, tiểu bang, quốc gia và zip. Bất kỳ trợ giúp - hoặc con trỏ - hoặc sẵn sàng tham gia với một nhóm khởi nghiệp điên rồ về vấn đề này đều được chào đón nồng nhiệt và công khai.

Câu trả lời:


10

Đây có thể được xem là một vấn đề ghi nhãn trình tự , trong đó bạn có một chuỗi các mã thông báo và muốn phân loại cho từng loại. Bạn có thể sử dụng các mô hình Markov ẩn (HMM) hoặc các trường ngẫu nhiên có điều kiện (CRF) để giải quyết vấn đề. Có các triển khai tốt HMM và CRF trong gói nguồn mở có tên Mallet .

Trong ví dụ của bạn, bạn nên chuyển đổi đầu vào sang định dạng bên dưới. Hơn nữa, bạn nên tạo ra các tính năng bổ sung.

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

1
Tôi không nghĩ rằng một trình ghi thẻ trình tự tiêu chuẩn (như HMM của CRF) sẽ tạo ra kết quả rất tốt trong tình huống này. Điều này là do các hạn chế mà các nhóm thẻ tiếp giáp nhau và mỗi thẻ chỉ xảy ra một lần trên mỗi chuỗi. Tôi không nghĩ rằng bạn có thể dễ dàng sửa đổi tìm kiếm để kết hợp thông tin này do sự phụ thuộc vào các thẻ quá khứ / tương lai của khoảng cách tùy ý (mặc dù tôi có thể sai về điều này).
alto

@alto Tôi tin rằng CRF sẽ xem xét bối cảnh lân cận. HMM không thể nhìn thấy trạng thái trong quá khứ, bạn đã đúng rằng nó có thể sẽ không hoạt động tốt.
JT

1

Tôi đã phải giải quyết một vấn đề rất giống nhau để xác thực xem một địa chỉ hợp lệ hay không hợp lệ.

Địa chỉ điển hình có cấu trúc "1600 Pennsylvania Ave, Washington DC, 20500"

Một chuỗi như

"Tôi đã đi xuống 2000 bước và đến Pennsylvania Ave ở Washington DC."

không phải là một địa chỉ hợp lệ.

Điều này có thể được giải quyết bằng các kỹ thuật phân loại như SVM, Mạng nơ-ron, v.v.

Ý tưởng là xác định một bộ tính năng chính. Một số trong số này có thể là:

1) Tên đường phố có bắt đầu bằng số khối hợp lệ không. Hầu hết các số khối ở Hoa Kỳ là số (ví dụ 1200) hoặc số được theo sau bởi một chữ cái (120A) hoặc một số theo sau một chữ cái (ví dụ S200).

2) Nếu địa chỉ được định dạng tốt, tên đường phố kết thúc bằng các hậu tố như Ave for avenue, Dr for Drive, Blvd for Boulevard. Có thể lấy danh sách hậu tố đường phố Hoa Kỳ từ trang USPS.

3) Số lượng từ trong trường địa chỉ đường phố cũng có thể là một tính năng thú vị. Nếu có quá nhiều từ, nó có thể không phải là một địa chỉ hợp lệ. Ví dụ xem ví dụ trên.

4) Có bao nhiêu từ xuất hiện giữa số khối và hậu tố đường phố trong trường địa chỉ?

Chúng có thể được sử dụng để huấn luyện một thuật toán học tập và mô hình kết quả có thể được sử dụng để xác nhận nếu một địa chỉ nhất định có hợp lệ hay không.


1

Đây là một chút hack không yêu cầu giải pháp của riêng bạn: mã hóa địa lý ngược. Điều này có thể cung cấp cho bạn dữ liệu sạch hơn hoặc thực sự làm tất cả công việc cho bạn.

Ví dụ: đây là một số mã Stata với geocode3từ SSC, sử dụng Google. Tôi đoán điều này tương tự như Fuzzy Gazetteer . Địa chỉ đầu tiên khá lộn xộn, địa chỉ thứ hai sạch sẽ và địa chỉ thứ ba là nước ngoài. Phần mềm khác có thể xử lý này là tốt.

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)

Điều này hoạt động hợp lý tốt:

. 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  

Kremlin có một định dạng khá khác nhau.


0

Điều này nghe có vẻ như là một vấn đề cần giải quyết với phân loại LSTM hai chiều. Bạn gắn thẻ cho mỗi ký tự của mẫu làm một danh mục chẳng hạn

đường: 1 thành phố: 2 tỉnh: 3 mã bưu điện: 4 quốc gia: 5

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

Bây giờ, đào tạo phân loại của bạn dựa trên các nhãn này. Bùng nổ!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.