Phân loại văn bản: kết hợp các loại tính năng khác nhau


19

Vấn đề tôi đang giải quyết là phân loại các văn bản ngắn thành nhiều lớp. Cách tiếp cận hiện tại của tôi là sử dụng tần số có trọng số tf-idf và tìm hiểu một trình phân loại tuyến tính đơn giản (hồi quy logistic). Điều này hoạt động khá tốt (khoảng 90% macro F-1 trên bộ thử nghiệm, gần 100% trên bộ huấn luyện). Một vấn đề lớn là những từ chưa thấy / n-gram.

Tôi đang cố gắng cải thiện trình phân loại bằng cách thêm các tính năng khác, ví dụ: một vectơ có kích thước cố định được tính bằng cách sử dụng các điểm tương đồng phân phối (như được tính bởi word2vec) hoặc các tính năng phân loại khác của các ví dụ. Ý tưởng của tôi là chỉ cần thêm các tính năng cho các tính năng đầu vào thưa thớt từ túi từ. Tuy nhiên, điều này dẫn đến hiệu suất kém hơn trong bài kiểm tra và đào tạo. Các tính năng bổ sung tự cung cấp khoảng 80% F-1 trên bộ thử nghiệm, vì vậy chúng không phải là rác. Mở rộng các tính năng cũng không giúp được gì. Suy nghĩ hiện tại của tôi là các loại tính năng này không kết hợp tốt với các tính năng từ (thưa thớt).

Vì vậy, câu hỏi là: giả sử các tính năng bổ sung cung cấp thông tin bổ sung, cách tốt nhất để kết hợp chúng là gì? Có thể đào tạo các trình phân loại riêng biệt và kết hợp chúng trong một số loại công việc chung (điều này có thể có nhược điểm là không thể có sự tương tác giữa các tính năng của các phân loại khác nhau)? Có những mô hình phức tạp hơn tôi nên xem xét?


3
Một số cập nhật: Tôi đã có thể đạt được kết quả chấp nhận được bằng cách chuẩn hóa l2 các vectơ dày đặc bổ sung. Tôi đã sai khi cho rằng sklearn StandardScaler sẽ làm điều đó. Tuy nhiên, tôi vẫn đang tìm kiếm các phương thức phức tạp hơn, điều đó sẽ cho phép tôi mô hình hóa các phụ thuộc nhãn hoặc kết hợp sự tự tin của các phân loại phụ.
elmille

Tôi đã làm một thí nghiệm cơ bản vào năm ngoái và gặp chính xác vấn đề mà bạn gặp phải. Vectơ word2vec của bạn sau quá trình chuẩn hóa l2 có thể đánh bại BOW không? Tôi đã không thực hiện chuẩn hóa l2, nhưng ngay cả sau khi thử nghiệm nhiều vectơ ngữ nghĩa của phương thức xử lý bài đăng vẫn là 2-4 phần trăm tuyệt đối sau các tính năng BOW tf / idf, tôi tự hỏi là hướng đó là một thời hạn. Tìm kiếm ban đầu của tôi là kết hợp một vectơ ngữ nghĩa dày đặc với BOW truyền thống và xem liệu nó có thể nâng cao hiệu suất phân loại / mô hình hóa chủ đề hay không. BTW: bộ dữ liệu nào bạn đã làm việc, của tôi là 20newsgroup.

Tôi đã làm việc với một bộ dữ liệu cho cuộc thi CIKM 2014. Đối với tôi, các biểu diễn vectơ không bao giờ có thể đánh bại BOW với trọng số tf-idf. Kế hoạch của tôi là sử dụng chúng ngoài việc cải thiện chất lượng. Theo kinh nghiệm của tôi (để phân loại văn bản) một số dạng tf-idf + một mô hình tuyến tính với n-gram là một cách tiếp cận cực kỳ mạnh mẽ. Tôi hiện đang thử nghiệm các mạng nơ ron tích chập và thậm chí với các mô hình phức tạp (ít nhiều) này khó tiếp cận.
elmille

To Mod: Xin lỗi vì tôi không có 50 danh tiếng, vì vậy tôi không thể viết trong khu vực bình luận. Xin chào elmille: Vâng, đó là những gì tôi trải nghiệm trong tất cả các bài kiểm tra. Tuy nhiên, bạn có thấy từ đó vec + BOW giúp không? Theo kinh nghiệm của tôi, khi tôi ghép từ vec với BOW tf-idf (trong trường hợp của tôi, vec này thực sự là một vectơ tổng thể trong toàn bộ bài viết, nó không phải là từ-vec nhưng rất giống nhau), hiệu suất thậm chí còn thấp hơn. Ban đầu tôi nghĩ nó nên là BOW + vec> BOW> vec. Vì chúng chứa thông tin trợ lý lẫn nhau. Kết quả thực tế là BOW> vec> BOW + vec. Sau đó, tôi thực hiện chia tỷ lệ chuẩn và chuẩn hóa thành cung và vec trong

Câu trả lời:


13

Nếu tôi hiểu chính xác, về cơ bản bạn có hai dạng tính năng cho các mô hình của bạn. (1) Dữ liệu văn bản mà bạn đã trình bày dưới dạng một túi từ ngữ thưa thớt và (2) các tính năng dày đặc truyền thống hơn. Nếu đó là trường hợp thì có 3 cách tiếp cận phổ biến:

  1. Thực hiện giảm kích thước (chẳng hạn như LSA thông qua TruncatedSVD) trên dữ liệu thưa thớt của bạn để làm cho nó dày đặc và kết hợp các tính năng thành một ma trận dày đặc duy nhất để huấn luyện (các) mô hình của bạn.
  2. Thêm một vài tính năng dày đặc của bạn vào ma trận thưa thớt của bạn bằng cách sử dụng một cái gì đó như scipy hstackvào một ma trận thưa thớt duy nhất để huấn luyện (các) mô hình của bạn.
  3. Tạo một mô hình chỉ sử dụng dữ liệu văn bản thưa thớt của bạn và sau đó kết hợp các dự đoán của nó (xác suất nếu đó là phân loại) như một tính năng dày đặc với các tính năng dày đặc khác của bạn để tạo một mô hình (nghĩa là: kết hợp thông qua xếp chồng). Nếu bạn đi theo con đường này, hãy nhớ chỉ sử dụng các dự đoán CV làm các tính năng để huấn luyện mô hình của bạn nếu không bạn sẽ có khả năng quá cao (bạn có thể tạo một lớp khá để thực hiện tất cả trong một Pipelinenếu muốn).

Tất cả ba phương pháp đều hợp lệ và có ưu và nhược điểm riêng. Cá nhân, tôi thấy (1) thường là tồi tệ nhất bởi vì, nói một cách tương đối, cực kỳ chậm. Tôi cũng thấy (3) thường là tốt nhất, vừa đủ nhanh và dẫn đến dự đoán rất tốt. Rõ ràng bạn cũng có thể thực hiện kết hợp cả hai nếu bạn sẵn sàng thực hiện một số hoạt động rộng rãi hơn.

Đối với các thuật toán bạn sử dụng, về cơ bản chúng có thể phù hợp với khung đó. Hồi quy logistic thực hiện tốt đáng ngạc nhiên hầu hết thời gian, nhưng những người khác có thể làm tốt hơn tùy thuộc vào vấn đề trong tay và mức độ bạn điều chỉnh chúng. Bản thân tôi là một phần của GBM, nhưng điểm mấu chốt là bạn có thể thử bao nhiêu thuật toán tùy thích và thậm chí thực hiện các dự đoán đơn giản có trọng số đơn giản sẽ luôn dẫn đến một giải pháp tổng thể tốt hơn.


10

Mô hình tuyến tính chỉ cần thêm các tính năng của chúng nhân với trọng lượng tương ứng. Ví dụ: nếu bạn có 1000 tính năng thưa thớt chỉ có 3 hoặc 4 trong số đó hoạt động trong mỗi trường hợp (và các tính năng khác là số không) và 20 tính năng dày đặc không phải là số không, thì rất có thể các tính năng dày đặc sẽ tạo ra hầu hết tác động trong khi các tính năng thưa thớt sẽ chỉ thêm một chút giá trị. Bạn có thể kiểm tra điều này bằng cách xem xét các trọng số tính năng trong một vài trường hợp và cách chúng ảnh hưởng đến tổng kết quả.

Một cách để khắc phục nó là loại bỏ mô hình phụ gia. Đây là một vài mô hình ứng cử viên.

SVM dựa trên việc tách hyperplanes. Mặc dù siêu phẳng là mô hình tuyến tính, SVM không tổng hợp các tham số của nó, mà thay vào đó cố gắng phân chia không gian tính năng theo cách tối ưu. Với số lượng tính năng, tôi muốn nói rằng SVM tuyến tính sẽ hoạt động tốt trong khi các nhân phức tạp hơn có thể có xu hướng phù hợp với dữ liệu.

Mặc dù tên của nó, Naive Bayes là mô hình thống kê khá mạnh mẽ cho thấy kết quả tốt để phân loại văn bản. Nó cũng đủ linh hoạt để nắm bắt sự mất cân bằng về tần suất của các tính năng thưa thớt và dày đặc, vì vậy bạn chắc chắn nên thử.

Cuối cùng, các khu rừng ngẫu nhiên có thể hoạt động như một phương pháp tập hợp tốt trong trường hợp này. Ngẫu nhiên sẽ đảm bảo rằng các loại tính năng khác nhau (thưa thớt / dày đặc) sẽ được sử dụng làm nút quyết định chính trong các cây khác nhau. Cây quyết định / RF cũng tốt cho việc tự kiểm tra các tính năng, vì vậy dù sao cũng đáng để lưu ý cấu trúc của chúng.

Lưu ý rằng tất cả các phương pháp này đều có nhược điểm có thể biến chúng thành rác trong trường hợp của bạn. Kết hợp các tính năng thưa thớt và dày đặc không phải là nhiệm vụ được nghiên cứu kỹ lưỡng, vì vậy hãy cho chúng tôi biết cách tiếp cận nào phù hợp nhất với trường hợp của bạn.


Cảm ơn bạn vì câu trả lời! Tôi có hai câu hỏi tiếp theo :) 1) SVM (với nhân tuyến tính) và Naive Bayes khác nhau như thế nào ở chỗ chúng không tổng hợp các tính năng và trọng số tương ứng (tức là cái mà bạn gọi là "mô hình phụ gia")? Cả hai đều tạo ra một siêu phẳng tách biệt một cách hiệu quả để không phải kết quả luôn luôn là một loại tính năng thêm nhân với trọng số tương ứng? 2) Tôi muốn thử các khu rừng ngẫu nhiên, nhưng tiếc là không gian tính năng quá lớn để thể hiện nó ở định dạng dày đặc (tôi đang sử dụng sklearn). Có một thực hiện có thể xử lý đó?
elmille

1) Trong hồi quy tuyến tính, bạn quan tâm đến các điểm trên siêu phẳng, do đó bạn cộng các tính năng có trọng số để có được điểm dự đoán. Trong SVM, mặt khác, bạn đang tìm kiếm các điểm trên các mặt của siêu phẳng. Bạn thực hiện phân loại bằng cách kiểm tra đơn giản về phía nào là ví dụ của bạn, không có tổng kết liên quan trong quá trình dự đoán. Naive Bayes có thể kết hợp các loại mô hình khác nhau (ví dụ nhị thức hoặc đa thức), nhưng về cơ bản, bạn nhân các xác suất, không thêm chúng.

2) Tôi đã thấy một số nghiên cứu trong chủ đề này, nhưng chưa bao giờ gặp phải việc thực hiện (có lẽ việc googling sẽ đưa ra một số liên kết ở đây). Tuy nhiên, bạn luôn có thể đi theo một cách khác - giảm tính chiều với PCA và sau đó chạy rừng ngẫu nhiên dựa trên tập dữ liệu giả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.