2010-01-10 32 views
7

Tôi đang làm project.i cần bất kỳ công cụ hoặc kỹ thuật mã nguồn mở nào để tìm sự giống nhau ngữ nghĩa giữa các câu mà tôi cung cấp đầu vào dưới dạng hai câu và đầu ra dưới dạng điểm (nghĩa là tương tự ngữ nghĩa). Tôi hy vọng tôi sẽ nhận được trả lời sớm. Cảm ơn tất cả các bạn.tương tự ngữ nghĩa giữa các câu

+0

Một cách tiếp cận ngây thơ có thể đến đầu tiên [từ khóa chiết xuất từ ​​nguyên liệu đầu vào] (https://stackoverflow.com/q/17447045/1225328), và sau đó so sánh các từ khóa thu được. – sp00m

+0

Thanh toán https://markroxor.github.io/gensim/static/notebooks/WMD_tutorial.html –

Trả lời

19

Salma, tôi e rằng đây không phải là diễn đàn thích hợp cho câu hỏi của bạn vì nó không liên quan trực tiếp đến lập trình. Tôi khuyên bạn nên đặt lại câu hỏi của mình trên corpora list. Bạn cũng có thể muốn tìm kiếm lưu trữ của họ trước tiên.

Ngoài ra, câu hỏi của bạn không đủ chính xác và tôi sẽ giải thích ý tôi là gì. Tôi cho rằng dự án của bạn là về tính toán sự giống nhau về ngữ nghĩa giữa các câu chứ không phải về cái gì khác mà sự giống nhau ngữ nghĩa chỉ là một điều trong số rất nhiều câu. Nếu đây là trường hợp, thì có một vài điều cần cân nhắc: Trước hết, không phải từ quan điểm của ngôn ngữ học tính toán cũng như ngôn ngữ học lý thuyết thì rõ ràng thuật ngữ 'tương tự ngữ nghĩa' có nghĩa là chính xác. Có rất nhiều quan điểm và định nghĩa khác nhau, tất cả tùy thuộc vào loại vấn đề cần giải quyết, công cụ và kỹ thuật hiện có, và nền tảng của công cụ tiếp cận tác vụ này, v.v. Hãy xem xét các ví dụ sau:

  1. Pete và Rob đã tìm thấy một con chó gần nhà ga.
  2. Pete và Rob chưa bao giờ tìm thấy một chú chó gần nhà ga.
  3. Pete và Rob đều thích lập trình rất nhiều.
  4. Patricia tìm thấy một con chó gần nhà ga.
  5. Đó là một con chó đã tìm thấy Pete và Rob dưới tuyết.

Câu nào trong số 2-4 câu tương tự như 1? 2 là đối diện chính xác của 1, vẫn còn đó là về Pete và Rob (không) tìm thấy một con chó. 3 là về Pete và Rob, nhưng trong một bối cảnh hoàn toàn khác. 4 là về tìm một con chó gần nhà ga, mặc dù người tìm được người khác. 5 là về Pete, Rob, một con chó, và một sự kiện 'tìm kiếm' nhưng theo một cách khác so với 1. Đối với tôi, tôi sẽ không thể xếp hạng những ví dụ này theo sự giống nhau của họ ngay cả khi không cần phải viết một chương trình máy tính .

Để tính toán sự giống nhau ngữ nghĩa, trước tiên bạn cần quyết định điều bạn muốn được coi là 'tương tự ngữ nghĩa' và nội dung nào không. Để tính toán sự giống nhau ngữ nghĩa ở cấp câu, bạn lý tưởng sẽ so sánh một số loại biểu diễn ý nghĩa của các câu. Có nghĩa là đại diện thường đến như công thức logic và cực kỳ phức tạp để tạo ra. Tuy nhiên, có những công cụ cố gắng thực hiện điều này, ví dụ: Boxer

Là một cách tiếp cận đơn giản nhưng thực tế, bạn sẽ xác định sự giống nhau ngữ nghĩa như tổng của các điểm giống nhau giữa các từ trong một câu và câu còn lại. Điều này làm cho vấn đề trở nên dễ dàng hơn nhiều, mặc dù vẫn còn một số vấn đề khó giải quyết do sự giống nhau về ngữ nghĩa của các từ chỉ được định nghĩa sai như câu. Nếu bạn muốn có ấn tượng về điều này, hãy xem cuốn sách 'Ngữ nghĩa học' của D.A. Cruse (1986). Tuy nhiên, có khá nhiều công cụ và kỹ thuật để tính toán sự giống nhau về ngữ nghĩa giữa từ. Một số người trong số họ xác định nó về cơ bản là khoảng cách tiêu cực của hai từ trong một phân loại như Word Net hoặc phân loại Wikipedia (xem this paper mô tả một API cho điều này). Những người khác tính toán tương tự ngữ nghĩa bằng cách sử dụng một số biện pháp thống kê được tính toán trên các văn bản lớn. Chúng dựa trên cái nhìn sâu sắc mà các từ tương tự xảy ra trong bối cảnh tương tự. Cách tiếp cận thứ ba để tính toán sự giống nhau ngữ nghĩa giữa các câu hoặc từ có liên quan với các mô hình không gian vectơ mà bạn có thể biết từ việc truy xuất thông tin. Để có cái nhìn tổng quan về các kỹ thuật sau này, hãy xem chương 8.5 trong sách Cơ sở xử lý ngôn ngữ tự nhiên thống kê bởi Manning và Schütze.

Hy vọng điều này sẽ giúp bạn nghỉ ngơi ngay bây giờ.

+0

Điều này khá thú vị, cảm ơn bạn đã trả lời! – sp00m

8

tôi đã phát triển một công cụ mã nguồn mở đơn giản mà không so sánh ngữ nghĩa theo loại: https://sourceforge.net/projects/semantics/files/

Nó hoạt động với câu dù ngắn hay dài, rất đơn giản, ổn định, nhanh chóng, kích thước nhỏ ... Đây là một kết quả mẫu:
Tương tự giữa các câu
-Pete và Rob đã tìm thấy một con chó gần nhà ga.
-Pete và Rob chưa bao giờ tìm thấy một chú chó gần nhà ga.
là: 1,0000000000


tương đồng giữa câu
-Patricia tìm thấy một con chó gần nhà ga.
-Đó là một con chó đã tìm thấy Pete và Rob dưới tuyết.
là: 0,405107239


tương đồng giữa câu
-Patricia tìm thấy một con chó gần nhà ga.
-Tôi ổn, cảm ơn!
là: 0,0


tương đồng giữa câu
-Hello đó, how are you?
-Tôi ổn, cảm ơn!
là: 0,29160592175990213



SỬ DỤNG:

import semantics.Compare; 
public class USAGE { 

public static void main(String[] args) { 

    String a = "This is a first sentence."; 
    String b = "This is a second one."; 

    Compare c = new Compare(a,b); 
    System.out.println("Similarity between the sentences\n-"+a+"\n-"+b+"\n is: " + c.getResult()); 

    } 

} 
+0

Nice lib :) Bạn đã tạo danh sách từ điển/từ như thế nào? Tôi cần một người Đức. – schokocappucino

+0

Sử dụng tiện ích DISCO và tìm các từ gần nhất cho từng từ trong từ điển. DISCO không hỗ trợ tiếng Đức, vì vậy bạn có thể làm tương tự. –

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