Cách thông thường để khởi tạo một mô hình Word2Vec
trong gensim
là [1]
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
Câu hỏi đặt ra là, là những gì sentences
? sentences
được coi là một iterator của iterables của từ/thẻ. Nó cũng giống như ma trận cục u mà bạn có, nhưng mỗi hàng có thể có độ dài khác nhau.
Nếu bạn xem tài liệu cho gensim.models.word2vec.LineSentence
, nó cung cấp cho bạn cách tải một tệp văn bản dưới dạng câu trực tiếp. Như một gợi ý, theo tài liệu, phải mất
một câu = một dòng; các từ đã được xử lý trước và phân tách bằng khoảng trắng.
Khi nó nói words already preprocessed
, nó đề cập đến bộ lọc thấp hơn, bắt nguồn, từ dừng và tất cả các quy trình làm sạch văn bản khác. Trong trường hợp của bạn, bạn sẽ không muốn 5
và 6
nằm trong danh sách câu, vì vậy bạn cần phải lọc chúng ra.
Giả sử bạn đã có ma trận gọn gàng, giả sử mỗi hàng là một câu, tốt hơn là sau đó truyền nó thành một mảng 2d và lọc ra tất cả 5
và 6
. Mảng 2d kết quả có thể được sử dụng trực tiếp làm đối số sentences
để khởi tạo mô hình. Điểm duy nhất là khi bạn muốn truy vấn mô hình sau khi đào tạo, bạn cần phải nhập các chỉ mục thay vì các mã thông báo.
Bây giờ, một câu hỏi bạn có là nếu mô hình lấy số nguyên trực tiếp. Trong phiên bản Python
, nó không kiểm tra loại và chỉ chuyển các mã thông báo duy nhất xung quanh. Các chỉ số duy nhất của bạn trong trường hợp đó sẽ hoạt động tốt. Nhưng hầu hết thời gian bạn sẽ muốn sử dụng thường xuyên C-Extended để đào tạo mô hình của bạn, đó là một vấn đề lớn bởi vì nó có thể cung cấp hiệu suất 70x. [2] Tôi tưởng tượng trong trường hợp đó mã C có thể kiểm tra kiểu chuỗi, có nghĩa là có một ánh xạ chuỗi-tới-chỉ mục được lưu trữ.
Điều này có hiệu quả không?Tôi nghĩ không, bởi vì các chuỗi bạn có là số, thường ngắn hơn nhiều so với mã thông báo thực mà chúng đại diện (giả sử chúng là các chỉ số nhỏ gọn từ 0
). Do đó các mô hình sẽ có kích thước nhỏ hơn, sẽ tiết kiệm một số nỗ lực trong tuần tự hóa và deserialization của mô hình ở cuối. Về cơ bản, bạn đã mã hóa các mã thông báo đầu vào ở định dạng chuỗi ngắn hơn và tách nó ra khỏi đào tạo word2vec
và mô hình word2vec
không cần và không biết mã hóa này xảy ra trước khi đào tạo.
Triết lý của tôi là try the simplest way first
. Tôi sẽ chỉ cần ném một mẫu thử nghiệm đầu vào của các số nguyên cho mô hình và xem những gì có thể đi sai. Hy vọng nó giúp.
[1] https://radimrehurek.com/gensim/models/word2vec.html
[2] http://rare-technologies.com/word2vec-in-python-part-two-optimizing/
Tôi có thể xác nhận rằng tôi không thể đơn giản nhập số nguyên vào mô hình. Như đã nêu trong bài gốc (có lẽ không đủ rõ ràng), nó hoạt động đơn giản bằng cách ánh xạ các số nguyên thành chuỗi. – pir
Vì tò mò, bạn sẽ lọc ra '5' và' 6' từ mảng 2D như thế nào? Mỗi hàng phải luôn có cùng kích thước. Nó có thể được thực hiện khi lặp qua ma trận để cung cấp nó cho word2vec, nhưng điều đó có vẻ rất không hiệu quả. – pir