Tên mờ và tên trùng khớp


8

Tôi có một bộ dữ liệu với cấu trúc sau:

full_name,nickname,match Christian Douglas,Chris,1, Jhon Stevens,Charlie,0, David Jr Simpson,Junior,1 Anastasia Williams,Stacie,1 Lara Williams,Ana,0 John Williams,Willy,1

trong đó mỗi hàng dự đoán là một cặp tên đầy đủ, biệt danh và biến mục tiêu trùng khớp, là 1 khi biệt hiệu tương ứng với người có tên đó và 0 khác. Như bạn có thể thấy, cách lấy tên hiệu từ tên đầy đủ không theo một mẫu cụ thể.

Tôi muốn đào tạo một thuật toán ML, đưa ra tên đầy đủ của cặp, biệt danh, dự đoán xác suất khớp.

Cơ sở của tôi chỉ là cố gắng để xem số lượng carachters phù hợp, và các tính năng như thế. Tuy nhiên, tôi đang suy nghĩ về cách tiếp cận NLP bằng cách học sâu. Câu hỏi của tôi là có những kiến ​​trúc mạng thần kinh đặc trưng cho vấn đề này.


1
Làm thế nào mẫu người đàn ông có để đào tạo?
Shamit Verma

Khoảng 100 nghìn, nhưng chỉ 17% có trận đấu = 0
David Masip

Đây có phải là một bộ dữ liệu mở mà bạn có thể chia sẻ một liên kết đến?
Adarsh ​​Chavakula

Làm thế nào để tìm mối quan hệ giữa một tên và một biệt danh khi không có ví dụ "Anastasia Williams | Stacie" .. bạn cần nhiều tính năng hơn để làm cho công việc này tôi nghĩ.
iamklaus

Câu trả lời:


3

Tôi đã có một vấn đề tương tự trong công việc cuối cùng của tôi. Giải pháp của tôi là xây dựng các tính năng thông qua (biến đổi (s) + so sánh) * nhiều combo và cung cấp cho các mô hình, sau đó tổng hợp và mô hình, tức là mô hình 2 lớp. Điều quan trọng là mã hóa và điểm tương tự như các tính năng.

Biến đổi: loại bỏ nguyên âm (tuyệt vời cho một số gốc nhất định), loại bỏ nguyên âm cuối, loại bỏ các ký tự kép, chuyển đổi thành chuỗi ngữ âm (IPA, soundex, https://pypi.org/project/Fuzzy/ ), thay thế các ký tự có âm thanh tương tự hoặc có các âm thanh khác nhau trong các ngôn ngữ khác ( ở Đông Âu nghe giống như ở Mỹ, có thể phát ra âm thanh như , v.v.), ... Chiến lược là xử lý nhiều sự kỳ lạ / bất thường trong tên của mọi người .JYCK,D T,T~TH

So sánh (độ tương tự và khác biệt): thử [mức độ ký tự, khối / gốc / [pre / suf], mức độ từ (có thể không áp dụng cho bạn)] điểm tương đồng và điểm khác biệt. Hãy thử hệ số của Dice, Levenshtein, NeedmanTHER Wunsch, chuỗi con chung liền kề (không) dài nhất, độ tương tự biểu đồ ký tự, khớp # ký tự, không khớp (mỗi bên trái và phải), v.v. Bạn có thể thử sử dụng RNN / LSTM cho mỗi biến đổi. Sử dụng đầu ra của (các) mô hình được đào tạo như một tính năng khác.

Thử nghiệm với các combo khác nhau ở trên và chọn một số dường như có giá trị. Bạn chỉ có thể lấy tất cả các điểm số và phù hợp với Hồi quy logistic (hoặc Mạng thần kinh) hoặc bạn có thể xây dựng các mô hình thống kê và xếp hạng phần trăm đầu ra dựa trên một tập huấn luyện nhỏ để bình thường hóa nó. Một cách khác để xử lý điểm số thô là sử dụng mã hóa hiệu chuẩn thông qua chức năng logistic. Sau đó thêm số liệu thống kê tóm tắt từ điểm số được chuẩn hóa dưới dạng các tính năng bổ sung. Đẩy tất cả điều này vào mô hình cuối cùng.

Bạn sẽ xử lý các tên có nguồn gốc từ tên Ả Rập, Tây Ban Nha, Pháp, vv? Đây chỉ là bổ sung, nhưng hãy xem xét tải xuống dữ liệu thống kê tên Điều tra dân số và An sinh xã hội của Hoa Kỳ để cải thiện dự án của bạn với nhiều biến thể tên hơn. Tôi sẽ để lại cách cho bạn, nhưng nó giúp biết về các khả năng có thể. Xin lưu ý rằng chỉ cần sử dụng Levenshtein không hiệu quả lắm với William-> Bill, Dianne-> Di, Larry-> Lawrence, Mohammed-> Muhamed và Hamed, Danielle-> Daniela, Thomas-> Tom và Jimmy-> James . Chiến lược tôi đã đề cập sẽ giúp bạn với tất cả các biến thể.

Tài nguyên bổ sung để khám phá: https://github.com/jamesturk/jellyfish https://nameberry.com/list/276/ If-You-Like-Danielle-You-Music-Love https://pypi.org/project / ngữ âm /


2

Tôi không thể tìm thấy bất kỳ tài liệu hữu ích nào ngoài kia để sử dụng học sâu cho vấn đề cụ thể này. Hầu hết các phương pháp dường như dựa vào các phương pháp học phi máy như độ tương tự chuỗi và khoảng cách Levenstein. Một cách tiếp cận dựa trên học tập sâu hợp lý cho vấn đề này sẽ là Mạng thần kinh tái phát . Một LSTM (Bộ nhớ ngắn hạn) hoặc GRU (Đơn vị lặp lại có kiểm soát) sẽ là lý tưởng. Ý tưởng là có một RNN có trạng thái bên trong và tôn trọng thứ tự đầu vào được cung cấp.

Không giống như phân loại văn bản, phân tích tình cảm hoặc tạo chuỗi, mã hóa ưa thích cho văn bản ở đây sẽ ở cấp độ ký tự thay vì cấp từ .

Ví dụ

Christian Douglas,Chris,1
Jhon Stevens,Charlie,0

sẽ trở thành

[C,h,r,i,s,t,i,a,n, ,D,o,u,g,l,a,s, ,C,h,r,i,s] --> [1]
[J,h,o,n, ,S,t,e,v,e,n,s, ,C,h,a,r,l,i,e]       --> [0]

Hai chuỗi được khớp được nối thành một chuỗi duy nhất. Trực giác ở đây là RNN sẽ xử lý ký tự chuỗi theo ký tự và tìm hiểu (đọc trọng số cập nhật) rằng các ký tự ở cuối có mô hình tương tự như những gì nó thấy trước đó trong cùng một chuỗi để suy ra rằng nó phải là 1 thay vì 0.

Vectơ của [1/0] là biến mục tiêu.

Các bước xử lý trước RNN tiêu chuẩn được áp dụng như bình thường - chúng ta sẽ sắp xếp các chuỗi ngay từ đầu để chúng có cùng độ dài (giả sử 50), các ký tự sẽ được mã hóa dưới dạng số thay vì chuỗi, v.v.

Vì từ điển ở đây khá nhỏ (26 bảng chữ cái + dấu cách + pad), nên kiến ​​trúc mạng có thể khá đơn giản. Một lớp nhúng duy nhất + lớp tái phát nên đủ.

Đóng khung vấn đề theo cách này cho phép chúng tôi sử dụng RNN vanilla hoặc LSTM / GRU ngoài luồng thay vì tạo một kiến ​​trúc tùy chỉnh lấy hai chuỗi riêng biệt làm đầu vào cho mỗi điểm dữ liệu và ném ra một số.

Bạn có thể đưa ra cách tiếp cận này và xem liệu có thể đánh bại các mô hình cơ bản một cách thỏa đáng hay không.

Một cách đọc tốt cho các RNN cấp nhân vật là blogcủa Andrej Karpath . Vấn đề mà anh ta đang cố gắng giải quyết là khác nhau và mã này hoàn toàn khó hiểu nhưng nó vẫn nắm bắt được ý tưởng khá tốt.


1

Tôi sẽ sử dụng một số chuẩn hóa như tiền xử lý, chẳng hạn như:

  • Jrchuyển đổi thành Junior.
  • Chuyển đổi tên thành Soundex như ldmtwo đã nói

Và sau đó sử dụng thuật toán chuỗi thay vì ML cho điều này, chẳng hạn như thuật toán Z, thuật toán KMP hoặc khoảng cách Levenshtein, sau đó sử dụng ngưỡng cho điểm.

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.