2013-06-10 24 views
36

Có thư viện nào để tính toán điểm tương đồng ngữ nghĩa cho một cặp câu không?Python: Điểm tương đồng ngữ nghĩa cho chuỗi

Tôi biết cơ sở dữ liệu ngữ nghĩa của WordNet và cách tôi có thể tạo điểm số cho 2 từ, nhưng tôi đang tìm các thư viện làm tất cả các tác vụ tiền xử lý như bắt nguồn từ cổng, dừng xóa từ, v.v. toàn bộ câu và kết quả đầu ra cho điểm liên quan của hai câu.

Tôi đã tìm thấy work đang tiến hành được viết bằng khuôn khổ .NET tính điểm số bằng cách sử dụng một loạt các bước xử lý trước. Có dự án nào thực hiện điều này trong python không?

Tôi không tìm kiếm chuỗi hoạt động có thể giúp tôi tìm điểm (như được yêu cầu here)
Tôi muốn thực hiện từng giai đoạn theo cách riêng của mình hoặc các chức năng dán từ các thư viện khác nhau sao cho nó hoạt động cho các cặp câu, nhưng tôi cần điều này chủ yếu như một công cụ để kiểm tra các suy luận về dữ liệu.


EDIT: Tôi đã xem xét sử dụng NLTK và tính toán số điểm cho mỗi cặp từ lặp trong hai câu, sau đó rút ra kết luận từ độ lệch chuẩn của các kết quả, nhưng tôi không biết nếu đó là một ước tính hợp lý về sự giống nhau. Thêm vào đó, sẽ mất rất nhiều thời gian cho các chuỗi dài.
Một lần nữa, tôi đang tìm kiếm các dự án/thư viện đã triển khai thực hiện điều này một cách thông minh. Một cái gì đó cho phép tôi làm điều này:

import amazing_semsim_package 
str1='Birthday party ruined as cake explodes' 
str2='Grandma mistakenly bakes cake using gunpowder' 

>>similarity(str1,str2) 
>>0.889 
+0

Xem xét mô hình ngữ nghĩa cơ sở vectơ hoặc mô hình phân tích ma trận để so sánh sự giống nhau về câu. Nếu không, bạn có thể quay trở lại với cosin giống như lesk, đầu tiên vector hóa một câu tính cosin giữa 2 vectơ – alvas

+0

nếu bạn đang muốn cân nhắc thứ gì đó như một điểm cắt hoặc cần đến điểm số, hãy xem xét sự tương đồng của NLTK. Bạn sẽ cần phải sử dụng một cái gì đó giống như mô hình CLIPS để có được loại (động từ, danh từ, adj, vv).bạn có thể sử dụng điều đó để thực sự tìm thấy số lượng danh mục hoàn hảo cho LSA/LDA như được tìm thấy trong gensim hoặc triển khai mờ/cosin của Kmeans. –

Trả lời

37

Các gói phần mềm tốt nhất mà tôi đã nhìn thấy việc này là Gensim, tìm thấy tại Gensim Homepage. Tôi đã sử dụng nó nhiều lần, và tổng thể rất hài lòng với nó dễ sử dụng; nó được viết bằng Python và có thể dễ dàng theo dõi tutorial để giúp bạn bắt đầu, so sánh 9 chuỗi. Nó có thể được cài đặt thông qua pip, vì vậy bạn sẽ không có nhiều rắc rối khi cài đặt nó Tôi hy vọng.

Thuật toán tính điểm bạn sử dụng phụ thuộc rất nhiều vào ngữ cảnh của sự cố, nhưng tôi khuyên bạn nên bắt đầu với chức năng LSI nếu bạn muốn một thứ cơ bản. (Đó là những gì hướng dẫn hướng dẫn bạn qua.)

Nếu bạn đi qua hướng dẫn cho gensim, nó sẽ hướng dẫn bạn so sánh hai chuỗi, sử dụng chức năng tương tự. Điều này sẽ cho phép bạn xem cách stings của bạn so sánh với nhau, hoặc một số sting khác, trên cơ sở của văn bản mà họ chứa.

Nếu bạn quan tâm đến khoa học đằng sau như thế nào nó hoạt động, kiểm tra this paper.

+0

Điều này có vẻ rất hứa hẹn. Cảm ơn bạn đã chỉ ra điều này với Justin. – user8472

-4

AFAIK mạnh mẽ nhất NLP-Lib cho Python là http://nltk.org/

+3

NLTK có 6 điểm tương tự ngữ nghĩa giữa một cặp khái niệm từ, nhưng tôi đang tìm cách so sánh hai chuỗi (một số, có thể là hàng trăm từ) – user8472

0

Thật không may, tôi không thể giúp bạn với PY nhưng bạn có thể có một cái nhìn tại dự án cũ của tôi có sử dụng từ điển để thực hiện sự so sánh Semantic giữa các câu (mà sau này có thể được mã hóa trong PY thực hiện phân tích không gian vectơ). Nó sẽ chỉ là một vài giờ mã hóa để dịch từ JAVA sang PY. https://sourceforge.net/projects/semantics/

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