Câu trả lời:
Có một số cách khác nhau để giải quyết vấn đề này tùy thuộc vào chính xác lượng thông tin ngữ nghĩa bạn muốn giữ lại và mức độ dễ dàng của tài liệu của bạn (tài liệu html có thể rất khó để token hóa, nhưng bạn có thể hình dung được điều gì đó bằng thẻ và ngữ cảnh .)
Một số trong số chúng đã được đề cập bởi ffriend, và các vectơ đoạn của user1133029 là một phần thực sự vững chắc, nhưng tôi chỉ hình dung rằng tôi sẽ đi sâu hơn về kìm và các cách tiếp cận khác nhau.
edit distance
, điều này thường chỉ được sử dụng ở cấp độ mã thông báo riêng lẻ (từ, bigrams, v.v ...). Nói chung, tôi không đề xuất số liệu này vì nó không chỉ loại bỏ bất kỳ thông tin ngữ nghĩa nào, mà còn có xu hướng xử lý các thay đổi từ rất khác nhau rất giống nhau, nhưng nó là một số liệu cực kỳ phổ biến cho loại điều nàytopic modeling
. LSA gần đây đã lỗi thời và theo kinh nghiệm của tôi, nó không hoàn toàn là cách tiếp cận mô hình chủ đề mạnh nhất, nhưng nó tương đối đơn giản để thực hiện và có một vài triển khai nguồn mởtopic modeling
, nhưng nó khác với LSA
việc nó thực sự học các biểu diễn bên trong có xu hướng trơn tru và trực quan hơn. Nói chung, kết quả bạn nhận được LDA
là tốt hơn cho mô hình tương tự tài liệu hơn LSA
, nhưng không hoàn toàn tốt cho việc học cách phân biệt mạnh mẽ giữa các chủ đề.LDA
, với nhược điểm duy nhất là phải mất một chút thời gian để đào tạo và việc triển khai nguồn mở khó hơn một chútCount Vectorizers
và TF-IDF
. Word2vec là tuyệt vời vì nó có một số triển khai nguồn mở. Khi bạn có vectơ, bất kỳ số liệu tương tự nào khác (như khoảng cách cosine) có thể được sử dụng trên đầu trang với hiệu quả cao hơn đáng kể.paragraph vectors
, đây là tài liệu mới nhất và lớn nhất trong một loạt các bài báo của Google, xem xét các biểu diễn vector dày đặc của các tài liệu. Các gensim
thư viện trong python có một thực hiện word2vec
đó là đủ đơn giản rằng nó khá hợp lý có thể được thừa hưởng để xây dựng doc2vec
, nhưng hãy chắc chắn để giữ cho giấy phép ghi nhớ nếu bạn muốn đi xuống con đường nàyHy vọng rằng sẽ giúp, cho tôi biết nếu bạn có bất kỳ câu hỏi.
Có một số biện pháp khoảng cách ngữ nghĩa, mỗi biện pháp đều có ưu và nhược điểm. Đây chỉ là một vài trong số họ:
Bắt đầu với một cách tiếp cận đơn giản nhất và sau đó di chuyển xa hơn dựa trên các vấn đề cho trường hợp cụ thể của bạn.
Theo kinh nghiệm, tôi đã tìm thấy LSA vượt trội hơn rất nhiều so với LDA mỗi lần và trên mỗi tập dữ liệu tôi đã thử. Tôi đã nói chuyện với những người khác đã nói điều tương tự. Nó cũng được sử dụng để chiến thắng một số cuộc thi SemEval để đo lường sự tương đồng về ngữ nghĩa giữa các tài liệu, thường được kết hợp với một biện pháp dựa trên wordnet, vì vậy tôi sẽ không nói rằng nó lỗi thời, hoặc chắc chắn là kém hơn LDA, tốt hơn cho mô hình chủ đề và không giống nhau về ngữ nghĩa trong kinh nghiệm của tôi, trái với những gì một số người trả lời đã nêu.
Nếu bạn sử dụng gensim (một thư viện python), nó có LSA, LDA và word2vec, vì vậy bạn có thể dễ dàng so sánh 3. doc2vec là một ý tưởng hay, nhưng không có quy mô tốt và bạn có thể sẽ phải tự thực hiện nó như tôi không biết về bất kỳ triển khai nguồn mở nào. Nó không mở rộng tốt như đối với mỗi tài liệu, một mô hình mới và riêng biệt phải được xây dựng bằng SGD, một thuật toán học máy chậm. Nhưng nó có thể sẽ cung cấp cho bạn kết quả chính xác nhất. LSA và LDA cũng không có quy mô tốt (tuy nhiên word2vec), nói chung quy mô LDA tệ hơn. Tuy nhiên, việc triển khai của Gensim rất nhanh, vì nó sử dụng SVD lặp.
Một lưu ý khác, nếu bạn sử dụng word2vec, bạn vẫn sẽ phải xác định một cách để tạo các vectơ từ các tài liệu, vì nó cung cấp cho bạn một vectơ khác nhau cho mỗi từ. Cách đơn giản nhất để làm điều này là bình thường hóa mỗi vectơ và lấy giá trị trung bình trên tất cả các vectơ từ trong tài liệu hoặc lấy một giá trị trung bình bằng trọng số idf của mỗi từ. Vì vậy, nó không đơn giản như 'sử dụng word2vec', bạn sẽ cần phải làm gì đó hơn nữa để tính toán độ tương tự của tài liệu.
Cá nhân tôi sẽ đi với LSA, vì tôi đã thấy nó hoạt động tốt theo kinh nghiệm và thư viện của Gensim có quy mô rất tốt. Tuy nhiên, không có bữa trưa miễn phí, vì vậy tốt nhất nên thử từng phương pháp và xem phương pháp nào phù hợp hơn với dữ liệu của bạn.
Trạng thái của nghệ thuật dường như là "vectơ đoạn" được giới thiệu trong một bài báo gần đây: http://cs.stanford.edu/~quocle/par Đoạn_vector.pdf . Khoảng cách Cosine / Euclide giữa các vectơ đoạn có thể sẽ hoạt động tốt hơn bất kỳ cách tiếp cận nào khác. Điều này có lẽ không khả thi nhưng do thiếu các triển khai nguồn mở.
Điều tốt nhất tiếp theo là khoảng cách cosin giữa các vectơ LSA hoặc khoảng cách cosin giữa các vectơ BOW thô. Đôi khi nó hoạt động tốt hơn để chọn các chương trình trọng số khác nhau, như TF-IDF.
Nó rất hữu ích khi có trong túi của bạn các công cụ gia đình của các thuật toán băm nhạy cảm cục bộ . Gia đình này không phải là ngữ nghĩa gì cả. Trên thực tế là coi văn bản là một chuỗi các bit. Tôi thấy nó hữu ích trong các tập dữ liệu bẩn khi cùng một văn bản xuất hiện nhiều lần với sự khác biệt nhỏ.
Bạn có thể sử dụng ssdeep (dựa trên hàm băm Nilsimsa ) để xác định các tài liệu đó. Ssdeep ban đầu được lên kế hoạch cho lĩnh vực thư rác. Kẻ gửi thư rác thường thực hiện các thay đổi nhỏ trong tin nhắn (thêm khoảng trắng) để ngăn phát hiện bằng chữ ký chính xác (ví dụ: md5 ).
Vì nhiều phiên bản của gần như cùng một tài liệu trong cùng một bộ dữ liệu sẽ gây ra sự tàn phá cho các phương pháp thống kê sẽ được áp dụng trên nó, nên việc dọn dẹp như vậy có thể rất có lợi.