2012-04-18 30 views
5

Tôi đang cố gắng phân loại tài liệu bằng cách sử dụng API java của Weka.Giải thích đầu ra của StringToWordVector() - Weka

Đây là cấu trúc thư mục của tôi trong các tệp dữ liệu.

+- text_example 
| 
+- class1 
| | 
| 3 html files 
| 
+- class2 
| | 
| 1 html file 
| 
+- class3 
    | 
    3 html files 

Tôi có tệp 'arff' được tạo bằng 'TextDirectoryLoader'. Sau đó, tôi sử dụng bộ lọc StringToWordVector trên tệp arff đã tạo, với filter.setOutputWordCounts(true).

Dưới đây là mẫu của đầu ra khi bộ lọc được áp dụng. Tôi cần làm rõ vài điều.

@attribute </form> numeric 
@attribute </h1> numeric 
. 
. 
@attribute earth numeric 
@attribute easy numeric 

Danh sách lớn này phải là mã thông báo nội dung của tệp html ban đầu. đúng?

Sau đó, tôi có,

@data 
{1 2,3 2,4 1,11 1,12 7,..............} 
{10 4,34 1,37 5,.......} 
{2 1,5 6,6 16,...} 
{0 class2,34 11,40 15,.....,4900 3,... 
{0 class3,1 2,37 3,40 5.... 
{0 class3,1 2,31 20,32 17...... 
{0 class3,32 5,42 1,43 10......... 

tại sao không có thuộc tính lớp cho 3 mục đầu tiên? (cần có class1). 0 hàng đầu có nghĩa là gì trong {0 class2, ..}, {0 class3 ..}. Ví dụ: Ví dụ: trong tệp html thứ 3 trong thư mục class3, từ được xác định bằng số nguyên 32 xuất hiện 5 lần. Chỉ để xem làm thế nào để tôi nhận được từ (token) được giới thiệu bởi 32?

Làm cách nào để giảm thứ nguyên của vectơ nổi bật? chúng ta không cần phải làm cho tất cả các vectơ đặc trưng có cùng kích thước không? (giống như chỉ xem xét 100 từ thường xuyên nhất từ ​​tập huấn luyện và sau này khi nói đến thử nghiệm, hãy xem xét sự xuất hiện của chỉ 100 từ trong tài liệu kiểm tra. Bởi vì, theo cách này, điều gì sẽ xảy ra nếu chúng ta tìm ra một từ hoàn toàn mới trong giai đoạn thử nghiệm, trình phân loại có bỏ qua nó không?).

Tôi có thiếu gì đó ở đây không? Tôi mới đến Weka.

Ngoài ra tôi thực sự đánh giá cao sự trợ giúp nếu ai đó có thể giải thích cho tôi cách trình phân loại sử dụng vectơ này được tạo bằng bộ lọc StringToWordVector. (như tạo từ vựng với dữ liệu đào tạo, giảm kích thước, là những từ đang xảy ra bên trong mã Weka?)

Trả lời

8
  1. Danh sách lớn gồm @attribute chứa tất cả mã thông báo bắt nguồn từ đầu vào của bạn.
  2. Phần @data của bạn ở định dạng thưa thớt, đó là cho mỗi thuộc tính, giá trị chỉ được nêu nếu giá trị khác với 0. Đối với ba dòng đầu tiên, thuộc tính lớp là class1, bạn chỉ không thể nhìn thấy nó (nếu nó chưa được biết, bạn sẽ thấy 0 ? ở đầu của ba dòng đầu tiên). Tại sao vậy? Weka nội bộ đại diện cho các thuộc tính danh nghĩa (bao gồm các lớp) như tăng gấp đôi và bắt đầu đếm ở số không. Vì vậy, ba lớp của bạn là nội bộ: class1 = 0.0, class2 = 1.0, class3 = 2.0. Vì không có giá trị bằng 0 ở định dạng thưa thớt, bạn không thể thấy lớp trong ba dòng đầu tiên. (Cũng xem phần "Tệp ARFF thưa thớt" trên http://www.cs.waikato.ac.nz/ml/weka/arff.html)
  3. Để nhận được từ/mã thông báo được biểu thị bằng chỉ mục n, bạn có thể đếm hoặc, nếu bạn có đối tượng Instances, hãy gọi attribute(n).name() trên đó. Để làm điều đó, n bắt đầu đếm tại 0.
  4. Để giảm kích thước của vectơ nổi bật, có rất nhiều tùy chọn. Nếu bạn chỉ muốn có 100 cụm từ thường xuyên nhất, bạn stringToWordVector.setWordsToKeep(100). Lưu ý rằng điều này sẽ cố gắng giữ 100 từ của mỗi lớp. Nếu bạn không muốn giữ 100 từ cho mỗi lớp, stringToWordVector.setDoNotOperateOnPerClassBasis(true).Bạn sẽ nhận được một chút trên 100 nếu có một số từ với cùng một tần số, do đó, 100 chỉ là một loại giá trị đích.
  5. Đối với các từ mới xảy ra trong giai đoạn thử nghiệm, tôi nghĩ rằng điều đó không thể xảy ra vì bạn phải giao cho tất cả các trường hợp trước khi phân loại stringToWordVector. Tôi không chắc chắn 100% về điều đó mặc dù, như tôi đang sử dụng một thiết lập hai lớp và tôi để cho StringToWordVector chuyển đổi tất cả các trường hợp của tôi trước khi nói với bất kỳ thứ gì về nó.

Tôi thường có thể recomment cho bạn, để thử nghiệm với công cụ Weka KnowledgeFlow để tìm hiểu cách sử dụng các lớp khác nhau. Nếu bạn biết cách làm việc ở đó, bạn có thể sử dụng kiến ​​thức đó cho mã Java của bạn khá dễ dàng. Hy vọng tôi đã có thể giúp bạn, mặc dù câu trả lời là hơi muộn.

+0

Có ans là hơi muộn, nơi tôi đã học được câu trả lời của bản thân mình. Nhưng cảm ơn câu trả lời của bạn và tôi chấp nhận nó. Hey bạn có bất kỳ kinh nghiệm với một lớp phân loại với libsvm (wrapper) trong weka? Tôi bị kẹt với nó – KillBill

+0

@ user601 Không, xin lỗi. Tôi đã không bao giờ sử dụng libsvm trong Weka. Chỉ cần ra khỏi tò mò: là bạn viết một luận án về một số máy học/khai thác dữ liệu chủ đề của bất kỳ cơ hội? – Malhelo

+0

vâng tôi đang làm luận án năm cuối của tôi liên quan đến phân loại văn bản. Bạn đang làm một cái gì đó tương tự? – KillBill

Các vấn đề liên quan