Phân loại văn bản phi cấu trúc


12

Tôi sẽ phân loại các tài liệu văn bản phi cấu trúc, cụ thể là các trang web có cấu trúc không xác định. Số lượng các lớp học mà tôi đang phân loại bị hạn chế (tại thời điểm này, tôi tin rằng không có quá ba). Có ai có một đề nghị cho làm thế nào tôi có thể bắt đầu?

Cách tiếp cận "túi từ" có khả thi ở đây không? Sau đó, tôi có thể thêm một giai đoạn phân loại khác dựa trên cấu trúc tài liệu (có lẽ là cây quyết định).

Tôi có phần quen thuộc với Mahout và Hadoop, vì vậy tôi thích các giải pháp dựa trên Java. Nếu cần, tôi có thể chuyển sang Scala và / hoặc Spark engine (thư viện ML).

Câu trả lời:


13

Hãy làm việc đó từ dưới lên. Phân loại (còn được gọi là phân loại) là một ví dụ về học tập có giám sát . Trong học tập có giám sát, bạn có:

  • mô hình - một cái gì đó gần đúng cấu trúc bên trong dữ liệu của bạn, cho phép bạn suy luận về nó và đưa ra các dự đoán hữu ích (ví dụ: lớp dự đoán của một đối tượng); mô hình thông thường có các tham số mà bạn muốn "học"
  • đào tạokiểm tra bộ dữ liệu - bộ đối tượng bạn sử dụng để đào tạo mô hình của mình (tìm giá trị tốt cho tham số) và đánh giá thêm
  • thuật toán đào tạophân loại - đầu tiên mô tả cách học mô hình từ tập dữ liệu huấn luyện, lần thứ hai cho thấy cách lấy lớp của một đối tượng mới được đưa ra mô hình được đào tạo

Bây giờ hãy lấy một trường hợp đơn giản về phân loại thư rác. Tập dữ liệu đào tạo của bạn là một tập hợp các email + nhãn tương ứng - "spam" hoặc "không phải spam". Tập dữ liệu kiểm tra có cùng cấu trúc, nhưng được tạo từ một số email độc lập (thông thường người ta chỉ chia nhỏ tập dữ liệu của mình và giả sử, 9/10 trong số đó sẽ được sử dụng cho đào tạo và 1/10 - để kiểm tra). Một cách để mô hình hóa các email là đại diện cho mỗi email dưới dạng một tập hợp (túi) từ. Nếu chúng ta giả sử rằng các từ độc lập với nhau, chúng ta có thể sử dụng trình phân loại Naive Bayes , nghĩa là tính xác suất trước cho từng từ và từng lớp (thuật toán đào tạo) và sau đó áp dụng định lý Bayes để tìm xác suất sau của tài liệu mới thuộc về lớp học cụ thể.

Vì vậy, về cơ bản chúng ta có:

raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label

Bây giờ lưu ý rằng chúng tôi đại diện cho các đối tượng của chúng tôi (tài liệu) như một túi từ. Nhưng là cách duy nhất? Trong thực tế, chúng ta có thể trích xuất nhiều hơn từ văn bản thô. Ví dụ, thay vì các từ như chúng ta có thể sử dụng thân hoặc bổ đề của chúng , loại bỏ các từ dừng ồn ào , thêm thẻ POS của các từ, trích xuất các thực thể có tên hoặc thậm chí khám phá cấu trúc HTML của tài liệu. Trong thực tế, đại diện tổng quát hơn của một tài liệu (và, nói chung, bất kỳ đối tượng nào) là một vectơ đặc trưng . Ví dụ cho văn bản:

actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
    0,        0,   1,    1, ...,    5,    7,   2, ...,       2, ... | not spam
    0,        1,   0,    0, ...,    3,   12,  10, ...,       0, ... | spam

Ở đây hàng đầu tiên là danh sách các tính năng có thể và các hàng tiếp theo hiển thị số lần tính năng đó xảy ra trong tài liệu. Ví dụ, trong tài liệu đầu tiên không có sự xuất hiện của từ "diễn viên", 1 lần xuất hiện của từ "burn", 5 danh từ, 2 tính từ và 2 đoạn văn bản in đậm. Cột cuối cùng tương ứng với nhãn lớp kết quả.

Sử dụng tính năng vector bạn có thể kết hợp bất kỳ thuộc tính nào của văn bản của bạn. Mặc dù việc tìm kiếm các tính năng tốt có thể mất một thời gian.

Và những gì về mô hình và thuật toán? Có phải chúng ta bị ràng buộc với Naive Bayes. Không có gì. hồi quy logistic , SVM , cây quyết định - chỉ đề cập đến một vài phân loại phổ biến. (Lưu ý, chúng tôi nói "phân loại" trong hầu hết các trường hợp, chúng tôi muốn nói đến mô hình + thuật toán tương ứng để đào tạo và phân loại).

Để thực hiện, bạn có thể chia nhiệm vụ thành 2 phần:

  1. Tính năng trích xuất - chuyển đổi các văn bản thô thành các vectơ đặc trưng.
  2. Phân loại đối tượng - xây dựng và áp dụng mô hình.

Điểm đầu tiên được thực hiện tốt trong nhiều thư viện NLP . Thứ hai là về học máy, vì vậy, tùy thuộc vào tập dữ liệu của bạn, bạn có thể sử dụng Weka hoặc MLlib .


Poster gốc đã sử dụng từ "phân loại" nhưng "cụm" là một mô tả chính xác hơn về vấn đề của anh ta vì anh ta không có định nghĩa về các loại. Do đó, đây không nhất thiết là một vấn đề học tập có giám sát.
MrMeritology

@MrMeritology: hmm, từ ngữ cảnh tôi sẽ nói rằng tác giả chỉ không chắc chắn về các lớp cụ thể mà anh ta sẽ sử dụng, nhưng vẫn muốn phân loại, không phân cụm. Dù sao, anh ấy là người duy nhất biết sự thật :)
ffriend

Có lẽ tôi đã không rõ ràng tại điểm. Các danh mục sẽ được lựa chọn trong lời khuyên, vì vậy nó là phân loại hơn là vấn đề phân cụm. Ý tưởng tạo ra một vectơ các tính năng phức tạp dường như khá hợp lý - đặc biệt, có một số thẻ cụ thể, rất có thể có khả năng nhanh chóng phân loại một số mẫu. Tôi không chắc liệu SVM có phù hợp với vấn đề không, vì tôi dự đoán tính phi tuyến cao, nhưng cây quyết định và Bayes dường như có thể áp dụng được. Tôi cũng bắt đầu nghĩ về việc áp dụng thuật toán lai (cây quyết định dựa trên SVM).
Grzegorz E.

@GrzegorzE. - Nếu danh mục của bạn được xác định trước, thì vui lòng liệt kê ba danh mục này trong câu hỏi của bạn. Theo tôi, bạn quá tập trung vào các thuật toán ML và không đủ về bản chất của vấn đề và bản chất của dữ liệu của bạn. Ví dụ: bạn dự đoán "phi tuyến" trong các tính năng cho các trang web có cấu trúc không xác định. Tại sao? Ngoài ra, bạn đang trộn các thẻ với văn bản trang web với những người biết điều gì khác và chúng có ý nghĩa ngữ nghĩa khác nhau.
MrMeritology

@GrzegorzE. - Tôi thực sự khuyên rằng phương pháp phân loại của bạn nên chủ yếu được điều khiển bởi bản chất của các danh mục tiên nghiệm và bản chất của dữ liệu. Có vô số cách để phân loại các trang web tùy ý thành 3 loại. Mỗi cách phân loại sẽ đề xuất các tính năng nổi bật trong dữ liệu hoặc các mẫu nổi bật. Không có sự thay thế nào cho việc phân tích thủ công các yếu tố dữ liệu riêng lẻ (các trang web) và bối cảnh của chúng.
MrMeritology

5

Mô hình chủ đề sẽ là một phương pháp rất thích hợp cho vấn đề của bạn. Mô hình chủ đề là một hình thức học tập / khám phá không giám sát, trong đó số lượng chủ đề được chỉ định (hoặc được khám phá) được xác định bởi một danh sách các từ có xác suất cao xuất hiện cùng nhau. Trong một bước riêng biệt, bạn có thể gắn nhãn cho từng chủ đề bằng cách sử dụng các chuyên gia về chủ đề, nhưng với mục đích của bạn, điều này không cần thiết vì bạn chỉ quan tâm đến việc đi đến ba cụm.

Bạn coi mỗi tài liệu là một túi từ và xử lý trước để loại bỏ các từ dừng, v.v ... Với các phương pháp đơn giản nhất, bạn chỉ định trước số lượng chủ đề. Trong trường hợp của bạn, bạn có thể chỉ định "3", là giới hạn cố định của bạn cho các danh mục hoặc chọn số lượng chủ đề lớn hơn (từ 10 đến 100), sau đó trong một bước riêng biệt, tạo thành ba cụm cho các tài liệu tập trung vào chủ đề. Phương tiện K hoặc các phương pháp phân cụm khác có thể được sử dụng. (Tôi muốn giới thiệu cách tiếp cận sau)

Bạn không cần phải viết mã phần mềm mô hình chủ đề từ đầu. Đây là một trang web có nhiều tài nguyên, bao gồm các thư viện / gói phần mềm .

Không có gì trong Java, nhưng có nhiều cách để chạy C ++ và Python trong Java.


4

Dưới đây là một số gói phần mềm nguồn mở thực sự tuyệt vời để phân loại văn bản sẽ giúp bạn bắt đầu:

  • MALLET là bộ công cụ học máy dựa trên Java được cấp phép CPL do UMass xây dựng để làm việc với dữ liệu văn bản. Nó bao gồm triển khai một số thuật toán phân loại (ví dụ Bayes ngây thơ, entropy tối đa, cây quyết định).
  • Trình phân loại Stanford từ Nhóm Stanford NLP là một triển khai Java được cấp phép GPL của một trình phân loại entropy tối đa được thiết kế để làm việc với dữ liệu văn bả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.