เทคนิคการเรียนรู้ของเครื่องสำหรับการวิเคราะห์สตริง?


30

ฉันมีสตริงที่อยู่จำนวนมาก:

1600 Pennsylvania Ave, Washington, DC 20500 USA

ฉันต้องการแยกพวกเขาเป็นส่วนประกอบของพวกเขา

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

แต่แน่นอนว่าข้อมูลสกปรก: มันมาจากหลายประเทศในหลาย ๆ ภาษาเขียนในรูปแบบที่แตกต่างกันมีการสะกดผิดชิ้นส่วนที่ขาดหายไปมีขยะพิเศษ ฯลฯ

ตอนนี้แนวทางของเราคือการใช้กฎรวมกับการจับคู่ gazetteer แต่เราต้องการสำรวจเทคนิคการเรียนรู้ของเครื่อง เราได้ระบุข้อมูลการฝึกอบรมเพื่อการเรียนรู้แบบมีผู้สอน คำถามคือปัญหาการเรียนรู้ของเครื่องเป็นแบบใด ดูเหมือนจะไม่ใช่การรวมกลุ่มหรือการจำแนกหรือการถดถอย ....

สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถทำได้คือจำแนกแต่ละโทเค็น แต่คุณต้องการจัดหมวดหมู่ทั้งหมดพร้อมกันข้อ จำกัด ที่น่าพอใจเช่น "ควรมีอย่างน้อยหนึ่งประเทศ และจริงๆมีหลายวิธีในการโทเค็นสตริงและคุณต้องการลองแต่ละอันและเลือกสิ่งที่ดีที่สุด .... ฉันรู้ว่ามีบางสิ่งที่เรียกว่าการแยกวิเคราะห์ทางสถิติ แต่ไม่รู้อะไรเกี่ยวกับมัน

ดังนั้น: เทคนิคการเรียนรู้ของเครื่องใดที่ฉันสามารถสำรวจเพื่อแยกที่อยู่ได้


ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับปัญหาระดับสูงของคุณในการโพสต์คำตอบ แต่ฉันคิดว่าขั้นตอนแรกในการเรียนรู้ของเครื่องคือการสร้างคุณสมบัติข้อมูลแล้วเลือกวิธีที่เหมาะสมกับโครงสร้างของพวกเขา คุณมีโครงสร้างจำนวนมาก alnum เทียบกับตัวอักษรที่ไม่ใช่ alnum, โทเค็นตัวเลข vs alpha, โทเค็นนับระหว่าง ',' splits, ความยาวโทเค็นตัวเลข เช่นแยกที่ ',' และนับจำนวนโทเค็นในแต่ละการแยก (ที่อยู่เทียบกับเมือง / รัฐ / ข้อมูลทางภูมิศาสตร์เฉพาะ) คำนวณ strlen ของโทเค็นที่เป็นตัวเลข (ที่อยู่และรหัสไปรษณีย์) สิ่งเหล่านี้ให้คุณสมบัติที่คุณสามารถจัดกลุ่มได้
muratoa

มีลักษณะที่Chunking ข้อความ
อัลโต

2
ดูการรับรู้เอนทิตีที่มีชื่อและงานทั่วไปของการสกัดข้อมูล
Yuval F

@YuvalF ฉันขอแนะนำให้ตอบคำถามนี้ คุณช่วยอธิบายเพิ่มเติมได้เล็กน้อยหรืออาจเป็นตัวอย่างกระดาษที่ใช้วิธีการ ML
steffen

ฉันสนใจปัญหานี้เป็นอย่างมากเช่นกัน - ซึ่งกำลังจัดโครงสร้างที่อยู่ทางไปรษณีย์ไว้ในส่วนประกอบต่างๆ เราพยายามทำสิ่งนี้ในอุปกรณ์มือถือโดยไม่มีข้อสันนิษฐานเกี่ยวกับการเชื่อมต่อกับบริการเข้ารหัสทางภูมิศาสตร์แบบย้อนกลับเช่น googles มันก็โอเคที่จะสมมติว่าเรามีแหล่งข้อมูลที่เชื่อมโยงกันเกี่ยวกับเมืองรัฐประเทศและรหัสไปรษณีย์ ความช่วยเหลือใด ๆ - ตัวชี้ - หรือยินดีที่จะมีส่วนร่วมกับทีมเริ่มต้นบ้าในปัญหานี้ยินดีอย่างจริงใจและเปิดเผย

คำตอบ:


10

สิ่งนี้สามารถมองเห็นได้ว่าเป็นปัญหาการติดฉลากลำดับซึ่งคุณมีลำดับโทเค็นและต้องการให้การจำแนกประเภทสำหรับแต่ละรายการ คุณสามารถใช้โมเดลมาร์คอฟที่ซ่อนอยู่ (HMM) หรือฟิลด์สุ่มแบบมีเงื่อนไข (CRF) เพื่อแก้ไขปัญหา มีการใช้งานที่ดีของ HMM และ CRF อยู่ในแพคเกจที่มาเปิดที่เรียกว่าตะลุมพุก

ในตัวอย่างของคุณคุณควรแปลงอินพุตให้เป็นรูปแบบด้านล่าง นอกจากนี้คุณควรสร้างคุณสมบัติพิเศษ

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

1
ฉันไม่คิดว่าเครื่องเรียงลำดับแบบมาตรฐาน (เช่น HMM ของ CRF) จะให้ผลลัพธ์ที่ดีมากในสถานการณ์นี้ นี่เป็นเพราะข้อ จำกัด ที่กลุ่มแท็กต่อเนื่องกันและแต่ละแท็กจะเกิดขึ้นเพียงครั้งเดียวต่อลำดับ ฉันไม่คิดว่าคุณสามารถแก้ไขการค้นหาเพื่อรวมข้อมูลนี้ได้อย่างง่ายดายเนื่องจากการพึ่งพาแท็กในอดีต / อนาคตของระยะทางโดยพลการ (ฉันอาจผิดเกี่ยวกับเรื่องนี้)
อัลโต

@ ถึงฉันเชื่อว่า CRF คำนึงถึงบริบทข้างเคียง อืมไม่สามารถมองเห็นสถานะที่ผ่านมาคุณคิดถูกว่าอาจไม่ได้ผลดีนัก
JT

1

ฉันต้องแก้ปัญหาที่คล้ายกันมากเพื่อตรวจสอบว่าที่อยู่นั้นถูกต้องหรือไม่ถูกต้อง

โดยทั่วไปที่อยู่มีโครงสร้าง "1600 Pennsylvania Ave, Washington DC, 20500"

สตริงเช่น

"ฉันลงไป 2,000 ขั้นและไปถึง Pennsylvania Ave ใน Washington DC"

ไม่ใช่ที่อยู่ที่ถูกต้อง

สามารถแก้ไขได้โดยใช้เทคนิคการจัดหมวดหมู่เช่น SVM, Neural Networks เป็นต้น

แนวคิดคือการระบุชุดของคุณสมบัติที่สำคัญ บางส่วนของเหล่านี้อาจเป็น:

1) ชื่อถนนเริ่มต้นด้วยหมายเลขบล็อกที่ถูกต้องหรือไม่ หมายเลขบล็อกของสหรัฐอเมริกาส่วนใหญ่เป็นตัวเลข (เช่น 1200) หรือตัวเลขตามด้วยตัวอักษรเดี่ยว (120A) หรือตัวเลขที่ตามด้วยตัวอักษรเดี่ยว (เช่น S200)

2) หากที่อยู่มีรูปแบบที่ดีชื่อถนนจะลงท้ายด้วยคำต่อท้ายเช่น Ave สำหรับ avenue, Dr for Drive, Blvd สำหรับ Boulevard เป็นไปได้ที่จะรับรายชื่อถนนต่อท้าย US จากไซต์ USPS

3) จำนวนคำในช่องที่อยู่สามารถเป็นคุณลักษณะที่น่าสนใจ หากมีคำมากเกินไปอาจเป็นที่อยู่ที่ไม่ถูกต้อง เช่นดูตัวอย่างด้านบน

4) มีกี่คำที่เกิดขึ้นระหว่างหมายเลขบล็อกและคำต่อท้ายถนนในช่องที่อยู่

สิ่งเหล่านี้สามารถใช้ในการฝึกอบรมอัลกอริทึมการเรียนรู้และแบบจำลองผลลัพธ์สามารถใช้ในการตรวจสอบความถูกต้องหากที่อยู่ที่ระบุนั้นถูกต้องหรือไม่


1

นี่เป็นบิตของแฮ็คที่ไม่ต้องการโซลูชันของคุณเอง: Reverse Geocoding สิ่งนี้สามารถให้ข้อมูลที่สะอาดกว่าแก่คุณหรือทำทุกอย่างให้คุณ

ตัวอย่างเช่นนี่คือรหัส Stata บางส่วนที่geocode3มาจาก SSC ซึ่งใช้ Google ผมคิดว่านี้จะคล้ายกับฝอยหนังสือพิมพ์ ที่อยู่แรกเป็นระเบียบสวยที่สองสะอาดและที่สามเป็นที่อยู่ต่างประเทศ ซอฟต์แวร์อื่น ๆ สามารถจัดการกับสิ่งนี้ได้เช่นกัน

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.