Cách khắc phục độ dài khác nhau của ví dụ đào tạo khi làm việc với Word Embeddings (word2vec)


10

Tôi đang làm việc trên Phân tích tình cảm qua các tweet sử dụng word2vec làm từ đại diện.

Tôi đã đào tạo mô hình word2vec của tôi. Nhưng khi tôi sẽ đào tạo trình phân loại của mình, tôi phải đối mặt với vấn đề là mỗi tweet có độ dài khác nhau và trình phân loại (RandomForest) cần tất cả các ví dụ có cùng kích thước.

Hiện tại, đối với mỗi tweet tôi đang tính trung bình các vectơ của tất cả các từ của nó, để kết thúc bằng một đại diện vectơ của tweet.

Ví dụ: Mô hình word2vec của tôi đại diện cho mỗi từ dưới dạng vectơ có kích thước 300.

Tôi đã Tweet1hình thành bởi 10 từ, và Tweet2hình thành bởi 5 từ.

Vì vậy, những gì tôi làm là, cho Tweet1

(v1_Tweet1 + v2_Tweet1 + ... +v10_Tweet1)/10 = v_Tweet1 #avg vector of 300 elements.

Dành cho Tweet2:

(v1_Tweet2 + v2_Tweet2 + ... +v5_Tweet1)/5 = v_Tweet2 #avg vector of 300 elements.

* Là v1_TweetX là vectơ của từ đầu tiên của TweetX, v.v.

Điều này hoạt động 'tốt' nhưng tôi muốn biết những cách tiếp cận khác mà bạn thực hiện để vượt qua các kích cỡ khác nhau trên các ví dụ về tàu và văn bản cho trình phân loại.

Cảm ơn.

Câu trả lời:


6

Hãy để tôi đề xuất ba tùy chọn đơn giản:

  1. tính trung bình các vectơ (thành phần khôn ngoan), nghĩa là tính toán vectơ nhúng từ cho mỗi từ trong văn bản và tính trung bình của chúng. (theo đề xuất của người khác).

  2. lấy tối đa (thành phần khôn ngoan) của các vectơ. (tối đa, thay vì trung bình)

  3. lấy tối thiểu (thành phần khôn ngoan) của các vectơ. (tối thiểu, thay vì trung bình)

Mỗi trong số này mang lại một vectơ đặc trưng độc lập với độ dài của văn bản.

Có một số nghiên cứu cho thấy rằng việc kết hợp max và min mang lại một không gian tính năng khá hiệu quả: nó không phải là tối ưu tuyệt đối, nhưng nó gần với tối ưu, và đơn giản và dễ thực hiện. Xem câu hỏi này trên Statistics.SE để biết chi tiết.


Đây là một ý tưởng khác, lấy cảm hứng từ câu trả lời của cubone , theo như tôi biết chưa từng được thử nghiệm trước đây. Ý tưởng là gắn thẻ văn bản bằng cách sử dụng thẻ tag-of-speech và sau đó sử dụng các thẻ đó để thông báo cho quá trình xử lý.

Cụ thể, hãy viết ra một danh sách tất cả các thẻ POS có thể được phát ra bởi trình gắn thẻ POS. Giả sử có 20 thẻ có thể (CC, DT, JJS, MD, NNP, ...). Sau đó, vectơ đặc trưng sẽ dài 20 * 300 = 6000 phần tử: nó sẽ có một vectơ 300 cho mỗi thẻ POS, được nối theo một số thứ tự chính tắc. 300 vectơ cho mỗi thẻ có thể được tính bằng cách lấy trung bình các vectơ nhúng từ của tất cả các từ được gắn thẻ bởi POS-tagger với thẻ đó. Hoặc, bạn có thể nhận được một vectơ 600 cho mỗi thẻ POS, thu được bằng cách tính toán tối thiểu và tối đa trên tất cả các vectơ từ với thẻ đó.

Điều này có thể mang lại không gian tính năng phong phú hơn, tôi không biết liệu nó có mang lại sự cải thiện nào không, nhưng đó là thứ bạn có thể thử nếu muốn thử nghiệm các ý tưởng khác nhau.


3

Hai gợi ý rất khác nhau ở đây để tránh trung bình các vectơ:

  1. Sử dụng Khoảng cách của Word Mover ( https://github.com/mkusner/wmd ) để tính khoảng cách giữa các tweet (không chắc nó sẽ hoạt động tốt như thế nào trên các văn bản ngắn như tweet, tôi vẫn cần phải tự mình thử ...)
  2. Tự cụm các vectơ từ (sử dụng ví dụ kmeans), sau đó với mỗi tweet tạo một vectơ với k mục (một cho mỗi cụm) mã hóa xem nó có chứa các từ thuộc cụm đó không. Tôi nghĩ rằng tôi đã thấy điều này trong một hướng dẫn Kaggle trên word2vec, sẽ rất vui cho liên kết nếu bạn tìm thấy nó!

1

Thay vì lấy trung bình và nhận một vectơ duy nhất cho tweet, thay vào đó bạn có thể lấy vectơ cho mỗi từ và với các kích thước vectơ có độ dài khác nhau, việc đệm có thể được thực hiện bằng số không.


Xin chào, cảm ơn phản hồi của bạn. Tôi đã cập nhật câu hỏi với một ví dụ nhỏ. Bạn có cập nhật câu trả lời của mình để cho biết bạn sẽ áp dụng điều này như thế nào với ví dụ tôi cung cấp không? Cảm ơn.
antorqs

Tôi hiểu nó tốt hơn rất nhiều sau khi chỉnh sửa của bạn. Nhưng tại sao lại muốn một vector duy nhất? tại sao bạn không thể sử dụng tất cả các từ (vectơ) để phân loại?
Hima Varsha

Tôi sử dụng tất cả các vectơ từ. Nhưng tôi cần phải đại diện cho mỗi tweet theo cách tất cả chúng đều có cùng kích thước. Đối với trình phân loại, tất cả các ví dụ phải có cùng kích thước.
antorqs

Bạn đã thử sử dụng một vectorizer và thực hiện fit_transform cho các tweet chưa?
Hima Varsha

1

Trong công việc của tôi, tôi đã làm theo cách tương tự bằng cách lấy trung bình các vectơ từ. Nhưng có một ý tưởng khác tôi muốn thử. Đó là với sự trợ giúp của các thẻ POS.

Trước tiên, xây dựng một câu phức tạp nhất với tất cả các thẻ POS càng tốt và đặt các thẻ POS này làm mẫu. Đối với mỗi câu trong kho văn bản twitter, thẻ POS tất cả các từ trong đó và áp dụng các vectơ từ đó tương ứng với các thẻ POS trong mẫu. Vì vậy, các thẻ POS không nhìn thấy sẽ có số không.

Ví dụ: NNP PDT DT NNS VB MD JJS CC PRP RBSlà mẫu. Do đó, mỗi vị trí sẽ chứa vectơ 300 chiều hoàn toàn là vectơ 3000 chiều. Và nếu các thẻ POS của tweet đầu tiên là NNP VB JJS PRP, thì các vectơ từ được áp dụng cho các vị trí này và có các vectơ trên NNP VB JJS PRPcác vị trí và vectơ không 300 chiều trên các vị trí khác.

Phương pháp này không chỉ giải quyết vấn đề biểu diễn câu bằng một vectơ duy nhất mà còn bảo toàn cấu trúc cú pháp của câu bằng cách định vị trong POS bên phải.

Tất nhiên, sẽ có vấn đề khi có nhiều hơn một thẻ POS hoặc vị trí lộn xộn của các thẻ. Đây chỉ là một trong những khả năng.


Tôi không hiểu lắm về cách tiếp cận này. Bạn có thể chỉnh sửa để làm rõ / chi tiết về cách tiếp cận? Bạn dự định làm gì nếu các thẻ POS trên tweet của tôi không xuất hiện theo cùng thứ tự với mẫu của bạn? Bạn dự định làm gì nếu tweet của tôi chứa các thẻ POS không có trong mẫu của bạn? Điều này có vẻ khá mong manh.
DW

Lấy cảm hứng từ câu trả lời của bạn, tôi đã thêm một ý tưởng vào câu trả lời của tôi dựa trên ý tưởng của bạn nhưng cố gắng giải quyết sự mong manh được đề cập trong bình luận của tôi. Tôi thích những gì bạn đã đưa ra!
DW

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.