2013-05-29 31 views
5

Vì vậy, tôi đã làm việc trong một dự án xử lý ngôn ngữ tự nhiên mà tôi cần phân loại các kiểu viết khác nhau. Giả sử các tính năng ngữ nghĩa từ các văn bản đã được trích xuất cho tôi, tôi dự định sử dụng Weka trong Java để đào tạo các trình phân loại SVM bằng các tính năng này có thể được sử dụng để phân loại các văn bản khác nhau.Xử lý ngôn ngữ tự nhiên - Chuyển đổi các tính năng văn bản thành đặc tính Vectors

Phần tôi gặp sự cố là để huấn luyện SVM, các đối tượng địa lý phải được chuyển đổi thành vectơ đặc trưng. Tôi không chắc chắn làm thế nào bạn sẽ có thể đại diện cho các tính năng như sự giàu có từ vựng, n-gram, dấu chấm câu, số đoạn văn, và chiều dài đoạn như số trong một vector. Nếu ai đó có thể chỉ đúng hướng, điều đó sẽ được đánh giá cao.

+0

Không chắc chắn bạn đang tìm kiếm chính xác điều gì, nhưng hy vọng ví dụ nhỏ của tôi sẽ giúp bạn. Chúc may mắn. –

Trả lời

5

Tôi không chắc chắn những giá trị thuộc tính của bạn có thể đảm nhận, nhưng có lẽ ví dụ này sẽ giúp bạn:

Giả sử chúng ta đang tiến hành một thí nghiệm học có giám sát để cố gắng xác định xem một thời gian đánh dấu sự kết thúc của một câu hoặc không, EOSNEOS tương ứng. Dữ liệu huấn luyện đến từ câu bình thường trong một định dạng kiểu đoạn, nhưng đã chuyển thành mô hình sau vector:

  • Cột 1: Class: End-of-Câu or Not-End-of-Câu
  • Cột 2-8: +/- 3 từ xung quanh dấu chấm câu hỏi
  • Cột 9,10: Số từ bên trái/phải, tương ứng của dấu chấm trước dấu phân cách câu đáng tin cậy tiếp theo (ví dụ?,! Hoặc một đoạn đánh dấu).
  • Cột 11: Số khoảng trắng sau dấu chấm.

Tất nhiên, đây không phải là vấn đề rất phức tạp để giải quyết, nhưng đó là một chút giới thiệu thú vị về Weka. Chúng tôi không thể chỉ sử dụng các từ như các tính năng (không gian chiều thực sự cao), nhưng chúng tôi có thể lấy thẻ POS (một phần của bài phát biểu) của họ. Chúng tôi cũng có thể trích xuất độ dài của các từ, cho dù từ đó có được viết hoa hay không, v.v.

Vì vậy, bạn có thể cung cấp dữ liệu thử nghiệm miễn là bạn có thể chuyển đổi nó thành mô hình vectơ ở trên và trích xuất các tính năng được sử dụng trong .arff.

Sau đây (phần rất nhỏ của) .arff tập tin được sử dụng để xác định liệu một khoảng thời gian trong một câu đánh dấu sự kết thúc hay không:

@relation period 

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_three_length real 
@attribute minus_three_case {'UC','LC','NA'} 
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_two_length real 
@attribute minus_two_case {'UC','LC','NA'} 
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_one_length real 
@attribute minus_one_case {'UC','LC','NA'} 
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_one_length real 
@attribute plus_one_case {'UC','LC','NA'} 
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_two_length real 
@attribute plus_two_case {'UC','LC','NA'} 
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_three_length real 
@attribute plus_three_case {'UC','LC','NA'} 
@attribute left_before_reliable real 
@attribute right_before_reliable real 
@attribute spaces_follow_period real 
@attribute class {'EOS','NEOS'} 

@data 

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS 
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS 
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS 

Như bạn có thể thấy, mỗi thuộc tính có thể mất bất cứ điều gì trên bạn muốn nó:

  • real biểu thị một số thực
  • tôi đã quyết LCUC để biểu thị chữ hoa và chữ thường, tương ứng
  • Hầu hết các giá trị khác là POS thẻ

Bạn cần phải tìm ra chính xác những gì các tính năng của bạn, và những giá trị bạn sẽ sử dụng để đại diện cho/phân loại chúng. Sau đó, bạn cần phải chuyển đổi dữ liệu của bạn thành định dạng được định nghĩa bởi .arff của bạn.

Để chạm vào câu hỏi dấu chấm câu của bạn, giả sử rằng chúng tôi có các câu kết thúc bằng . hoặc ?.Bạn có thể có một thuộc tính gọi là punc, trong đó có hai giá trị:

@attribute punc {'p','q'} 

Tôi không sử dụng ? bởi vì đó là những gì (thông thường) được gán khi một điểm dữ liệu bị thiếu. Bạn của chúng tôi có thể có các thuộc tính boolean cho biết liệu một nhân vật hoặc những gì bạn có mặt (với 0, 1 hoặc sai, đúng). Một ví dụ khác, nhưng đối với chất lượng:

@attribute quality {'great','good', 'poor'} 

Cách bạn xác định phân loại cho bạn tùy thuộc vào bạn, nhưng ở trên sẽ giúp bạn bắt đầu. Chúc may mắn.

+0

Tôi đã cố gắng càng chi tiết càng tốt, nhưng tôi đang sử dụng máy tính bảng - rất khó khăn. –

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