Xác định các mẫu với các tham số trong các đoạn văn bản


7

Tôi có một tập dữ liệu với các đoạn văn bản có cấu trúc cố định có thể chứa các tham số. Ví dụ là:

 Temperature today is 20 centigrades
 Temperature today is 28 centigrades

hoặc là

 Her eyes are blue and hair black.
 Her eyes are green and hair brown.

Ví dụ đầu tiên hiển thị một mẫu với một tham số số. Cái thứ hai là một mẫu có hai tham số.

Số lượng mẫu và số lượng tham số không biết.

Vấn đề là xác định các mẫu và gán từng đoạn văn bản cho mẫu tương ứng.

Ý tưởng đầu tiên rõ ràng là sử dụng phân cụm. Thước đo khoảng cách được định nghĩa là một số từ không khớp. Tức là các bản ghi trong ví dụ một có khoảng cách 1, ví dụ hai khoảng cách là 2. Khoảng cách giữa bản ghi trong ví dụ một và hai là 7. Cách tiếp cận này hoạt động tốt, cung cấp số lượng cụm được biết, không phải là trường hợp, vì vậy nó không hữu ích

Tôi có thể tưởng tượng một cách tiếp cận theo chương trình quét ma trận khoảng cách tìm kiếm các bản ghi với nhiều hàng xóm ở khoảng cách 1 (hoặc 2,3, ..), nhưng tôi tò mò liệu tôi có thể áp dụng một số thuật toán học máy không giám sát để giải quyết vấn đề không. R được ưa thích, nhưng không bắt buộc.


1
Tôi không phải là chuyên gia NLP bởi tại sao bạn không xem xét thực hiện LSA trên toàn bộ kho và sau đó sử dụng điểm số tương ứng trong thuật toán phân cụm? Điều đó sẽ dễ dàng quan tâm đến thực tế là các mẫu khác nhau có các tham số số khác nhau. Tìm số cụm sau đó sẽ tuân theo một quy trình phương pháp chuẩn (ví dụ: -means / AIC). kk
usεr11852

@ usεr11852 Tôi đánh giá cao đề xuất của bạn, nhưng thú vị là tôi nhận được kết quả tốt hơn khi sử dụng khoảng cách đơn giản trên TermDocumentMatrix (tm) sau đó với LSA. Tôi cho rằng điều này là do cấu trúc cố định của các mẫu của tôi, ví dụ: thứ tự của các điều khoản có liên quan đến khoảng cách. Tôi trực giác đoán phải có một giải pháp cơ bản đơn giản cho vấn đề của tôi, có thể dựa trên ma trận khoảng cách, nhưng hãy thoải mái đưa ra đề xuất của bạn làm câu trả lời, để tôi có thể tôn trọng nó.
Máy bay ném bom Marmite

@ usεr11852 Những khó khăn với LSA được đặt ra bởi: 1) các vấn đề với việc bỏ qua các điều khoản ngắn - tham số wordL wavels 2) ứng dụng IDF không được chuyển đổi. Tôi đã thêm một câu trả lời tiếp cận cả hai vấn đề.
Máy bay ném bom Marmite

Câu trả lời:


3

Lý do cơ bản đằng sau gợi ý sau đây là liên kết "người bản địa" và "mẫu".

Cụ thể, người ta có thể sử dụng LSA trên toàn bộ văn bản dựa trên aa bag-of-words. Các eigenvector kết quả sẽ phục vụ như các mẫu thay thế; những từ này không bị ảnh hưởng trực tiếp bởi số lượng từ trong mỗi mẫu. Sau đó, điểm số có thể được sử dụng để phân cụm các tài liệu lại với nhau theo một quy trình chuẩn (ví dụ: -means kết hợp với AIC). Để thay thế cho LSA, người ta có thể sử dụng NNMF. Hãy để tôi chỉ ra rằng LSA (hoặc NNMF) có thể cần phải được thực hiện cho TF-IDF được chuyển đổi thay vì ma trận đếm từ thô.k


Tôi đã thêm một câu trả lời dựa trên IDF được chuyển đổi để phân biệt giữa các tham số và các điều khoản mẫu. Vì đây là lần đầu tiên tôi sử dụng IDF được chuyển đổi, tôi đánh giá cao nhận xét về phương pháp này.
Máy bay ném bom Marmite

1
Tôi vui vì tôi có thể giúp.
usεr11852

3

Bạn có thể cân nhắc sử dụng word2vec để xác định các cụm từ trong kho văn bản. Sự hiện diện của một cụm từ (thay vì các mã thông báo duy nhất) có khả năng chỉ ra một 'mẫu'.

Từ đây, các mã thông báo tương tự nhất với cụm từ mẫu của bạn có thể là các giá trị cho các tham số của bạn.


cám ơn vì sự gợi ý. Điều này sẽ hoạt động tốt trong trường hợp phần sửa lỗi (mẫu) đang dẫn đầu, theo sau là các tham số. Tôi sẽ nhận ra "Nhiệt độ hôm nay là" như một cụm từ, nhưng tôi có thể sẽ gặp vấn đề để phân biệt nếu 20centigrade là tham số hoặc một phần của mẫu trong ví dụ của tôi.
Máy bay ném bom Marmite

Đúng - nhưng nếu sau đó bạn liệt kê ra các từ tương tự như "Nhiệt độ ngày nay", thì bạn mong đợi rằng "centrigrade" về cơ bản là giống hệt nhau (và do đó là một phần của mẫu), trong khi "20" (hoặc các temps khác) sẽ khá giống nhau, nhưng ít hơn nhiều như vậy.
jamesmf

1

Kịch bản dưới đây sử dụng LSA với IDF được chuyển đổi để cắt các tham số khỏi các mẫu. Ý tưởng là, tất cả các điều khoản với IDF cao hơn mà một số ngưỡng được coi là tham số và tần số của chúng được đặt lại về 0. Ngưỡng có thể được xấp xỉ với sự xuất hiện của mẫu trung bình trong kho văn bản. Loại bỏ các tham số, khoảng cách của các bản ghi với cùng một mẫu bằng không.

 library(tm)
 library(lsa)
 df <- data.frame(TEMPLATE = c(rep("A",3),rep("B",3),rep("C",3)),
 TEXT = c(
 paste("Temperature today is",c(28,24,20),"centigrades"),
 paste("Temperature today is",c(82,75,68),"Fahrenheit"),
 paste("Her eyes are ",c("blue","black","green"), "and hair",c("grey","brown","white"))) , stringsAsFactors=FALSE)
> df     
   TEMPLATE                                TEXT
 1        A Temperature today is 28 centigrades
 2        A Temperature today is 24 centigrades
 3        A Temperature today is 20 centigrades
 4        B  Temperature today is 82 Fahrenheit
 5        B  Temperature today is 75 Fahrenheit
 6        B  Temperature today is 68 Fahrenheit
 7        C    Her eyes are  blue and hair grey
 8        C  Her eyes are  black and hair brown
 9        C  Her eyes are  green and hair white

 corpus <- Corpus(VectorSource(df$TEXT))
 td <- as.matrix(TermDocumentMatrix(corpus,control=list(wordLengths = c(1, Inf)) ))

 > td             Docs
 Terms         1 2 3 4 5 6 7 8 9
   20          0 0 1 0 0 0 0 0 0
   24          0 1 0 0 0 0 0 0 0
   28          1 0 0 0 0 0 0 0 0
   68          0 0 0 0 0 1 0 0 0
   75          0 0 0 0 1 0 0 0 0
   82          0 0 0 1 0 0 0 0 0
   and         0 0 0 0 0 0 1 1 1
   are         0 0 0 0 0 0 1 1 1
   black       0 0 0 0 0 0 0 1 0
   blue        0 0 0 0 0 0 1 0 0
   brown       0 0 0 0 0 0 0 1 0
   centigrades 1 1 1 0 0 0 0 0 0
   eyes        0 0 0 0 0 0 1 1 1
   fahrenheit  0 0 0 1 1 1 0 0 0
   green       0 0 0 0 0 0 0 0 1
   grey        0 0 0 0 0 0 1 0 0
   hair        0 0 0 0 0 0 1 1 1
   her         0 0 0 0 0 0 1 1 1
   is          1 1 1 1 1 1 0 0 0
   temperature 1 1 1 1 1 1 0 0 0
   today       1 1 1 1 1 1 0 0 0
   white       0 0 0 0 0 0 0 0 1

 ## supress terms with idf higher than template frequency
 ## those terms are considered as parameters
 template_freq <- 3
 tdw <- lw_bintf(td) * ifelse(gw_idf(td)> template_freq,0, gw_idf(td))
 dist <- dist(t(as.matrix(tdw)))

 > dist
          1        2        3        4        5        6        7        8
 2 0.000000                                                               
 3 0.000000 0.000000                                                      
 4 3.655689 3.655689 3.655689                                             
 5 3.655689 3.655689 3.655689 0.000000                                    
 6 3.655689 3.655689 3.655689 0.000000 0.000000                           
 7 6.901341 6.901341 6.901341 6.901341 6.901341 6.901341                  
 8 6.901341 6.901341 6.901341 6.901341 6.901341 6.901341 0.000000         
 9 6.901341 6.901341 6.901341 6.901341 6.901341 6.901341 0.000000 0.000000

Ma trận khoảng cách cho thấy rõ ràng rằng các bản ghi 1,2,3 là từ cùng một khuôn mẫu (distance = 0, với dữ liệu tổng hợp; trong trường hợp thực tế, nên sử dụng một ngưỡng nhỏ). Tương tự là hợp lệ cho hồ sơ 4,5,6 và 7,8,9.

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.