2010-10-27 27 views
5

Tôi đã làm việc trên một dự án về sự giống nhau về câu. Tôi biết nó đã được hỏi nhiều lần trong SO, nhưng tôi chỉ muốn biết nếu vấn đề của tôi có thể được thực hiện bằng phương pháp tôi sử dụng theo cách mà tôi đang làm, hoặc tôi nên thay đổi cách tiếp cận của tôi cho vấn đề. Nói một cách tổng thể, hệ thống được cho là phân chia tất cả các câu của một bài báo và tìm các câu tương tự trong số các bài báo khác được đưa vào hệ thống.n-gram câu tương tự với phép đo tương tự cosin

Tôi đang sử dụng độ tương tự cosin với trọng số tf-idf và đó là cách tôi đã làm.

1- Trước tiên, tôi chia tất cả các bài viết thành các câu, sau đó tôi tạo ra các trigram cho mỗi câu và sắp xếp chúng (phải không?).

2- Tôi tính toán trọng số tf-idf của trigram và tạo vectơ cho tất cả các câu.

3- Tôi tính điểm sản phẩm và độ lớn của câu gốc và câu được so sánh. Sau đó tính toán tương tự cosin.

Tuy nhiên, hệ thống không hoạt động như tôi mong đợi. Ở đây, tôi có một số câu hỏi trong tâm trí của tôi.

Theo như tôi đã đọc về trọng số tf-idf, tôi đoán chúng hữu ích hơn khi tìm "tài liệu" tương tự. Kể từ khi tôi làm việc trên câu, tôi đã sửa đổi thuật toán một chút bằng cách thay đổi một số biến của công thức định nghĩa tf và idf (thay vì tài liệu tôi đã cố gắng để đưa ra định nghĩa dựa trên câu).

tf = số lần xuất hiện của trigram trong câu/số tất cả các quái trong câu

idf = số của tất cả các câu trong tất cả các bài viết/số câu nơi trigram xuất hiện

Bạn có nghĩ rằng đó là ok sử dụng định nghĩa như vậy cho vấn đề này?

Một số khác là tôi thấy việc chuẩn hóa được đề cập nhiều lần khi tính toán độ tương tự của cosin. Tôi đoán rằng điều này là quan trọng bởi vì các vectơ trigram có thể không có cùng kích thước (chúng hiếm khi xảy ra trong trường hợp của tôi). Nếu một vector trigram là kích thước của x và khác là x + 1, sau đó tôi xử lý các vector đầu tiên vì nó là kích thước của x + 1 với giá trị cuối cùng là 0. Đây có phải là ý nghĩa của việc bình thường hóa không? Nếu không, làm thế nào để tôi làm bình thường?

Bên cạnh đó, nếu tôi đã chọn thuật toán sai những gì khác có thể được sử dụng cho vấn đề như vậy (tốt nhất là với cách tiếp cận n-gram)?

Cảm ơn bạn trước.

Trả lời

5

Tôi không chắc chắn lý do tại sao bạn sắp xếp các hình tam giác cho mỗi câu. Tất cả những gì bạn cần quan tâm khi tính toán sự tương đồng cosin là liệu cùng một hình tam giác xuất hiện trong hai câu hay không và với tần số nào. Về mặt khái niệm, bạn xác định một trật tự cố định và phổ biến trong số tất cả các trigram có thể. Hãy nhớ rằng thứ tự phải giống nhau cho tất cả các câu. Nếu số lượng các trigram có thể là N, thì đối với mỗi câu bạn nhận được một vectơ có chiều thứ N. Nếu một hình tam giác nào đó không xảy ra, bạn đặt giá trị tương ứng trong vectơ thành 0. Bạn không thực sự cần phải lưu trữ các số không, nhưng phải chăm sóc chúng khi bạn xác định các sản phẩm dot.

Có nói rằng, trigram không phải là một lựa chọn tốt vì cơ hội của một trận đấu là rất nhiều sparser. Đối với k cao, bạn sẽ có kết quả tốt hơn từ túi k từ liên tiếp, thay vì k-gram. Lưu ý rằng việc đặt hàng không quan trọng bên trong một túi, một bộ của nó. Bạn đang sử dụng k = 3 k-gram, nhưng điều đó có vẻ là ở phía cao, đặc biệt là đối với câu.Hoặc là thả xuống bi-gram hoặc sử dụng các túi có độ dài khác nhau, bắt đầu từ 1. Tốt hơn là sử dụng cả hai.

Tôi chắc rằng bạn đã nhận thấy rằng các câu không sử dụng chính xác trigram có 0 điểm tương đồng trong phương pháp của bạn. K-túi của các từ sẽ làm giảm bớt tình hình một chút nhưng không giải quyết hoàn toàn. Bởi vì bây giờ bạn cần câu để chia sẻ các từ thực tế. Hai câu có thể giống nhau mà không sử dụng cùng một từ. Có một vài cách để sửa lỗi này. Hoặc sử dụng LSI (lập chỉ mục ngữ nghĩa tiềm ẩn) hoặc phân nhóm các từ và sử dụng các nhãn cụm để xác định độ tương tự cosin của bạn.

Để tính toán độ tương tự cosin giữa vectơ x và y, bạn tính toán sản phẩm chấm và chia cho các chỉ tiêu của x và y. Chỉ tiêu 2 của vectơ x có thể được tính là căn bậc hai của tổng các thành phần bình phương. Tuy nhiên, bạn cũng nên thử thuật toán của mình mà không cần bất kỳ sự chuẩn hóa nào để so sánh. Thông thường nó hoạt động tốt, bởi vì bạn đã chăm sóc các kích thước tương đối của các câu khi bạn tính toán các tần số hạn (tf).

Hy vọng điều này sẽ hữu ích.

+0

@Ahmet Nếu có bất kỳ điều gì bạn muốn tôi làm rõ, hãy cho tôi biết. – srean

+0

Cảm ơn bạn đã trả lời. Đầu tiên, lý do tôi sắp xếp vectơ là tôi nhận được kết quả tốt hơn. Tôi đã thử những gì bạn đề nghị nhưng không có may mắn. Nhưng tôi chỉ nhận ra một cái gì đó mà những từ tương tự nói chung là những người có chiều dài tương tự. Sự tương tự cosin này có vẻ hơi ngẫu nhiên với tôi vì chúng tôi không kiểm tra kết nối giữa n-gram, thay vào đó chúng tôi kiểm tra tần số của n-grams mà không xem xét chúng là gì. Có lẽ vẫn còn, tôi đang thiếu một cái gì đó. –

+0

Tất nhiên tương tự cosin sẽ trông ngẫu nhiên nếu bạn không quan tâm họ có phù hợp hay không, bởi vì những gì bạn đang tính toán trong trường hợp đó không liên quan gì đến sự giống nhau về cosin. Bạn đang làm sai và trong trường hợp này nó _will_ là ngẫu nhiên theo định nghĩa. Hãy thử lại và làm theo hướng dẫn chặt chẽ, nó sẽ hoạt động. – srean

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