2010-01-10 72 views
7

我在做project.i需要任何開源工具或技術來找到語句之間的語義相似度,我將輸入作爲兩個語句並輸出爲分數(即語義相似度)。任何人都可以知道這些信息我希望我能很快得到答覆。謝謝大家。語句之間的語義相似性

+0

一種幼稚方法可以是第一至[從輸入提取關鍵詞(https://stackoverflow.com/q/17447045/1225328),然後比較獲得的關鍵字。 – sp00m 2017-06-08 12:54:13

+0

結帳https://markroxor.github.io/gensim/static/notebooks/WMD_tutorial.html – 2017-12-10 09:50:45

回答

19

薩爾瑪,恐怕這不是你的問題的正確論壇,因爲它與編程沒有直接關係。我建議您在corpora list上再次提出您的問題。你也可能想先搜索他們的檔案。

除此之外,你的問題還不夠精確,我會解釋我的意思。我假設你的項目是關於計算語句之間的語義相似度,而不是關於其他語義相似度只是其中的一個。如果是這樣的話,那麼有幾件事情需要考慮:首先,從計算語言學和理論語言學的角度來看,「語義相似性」這個術語究竟意味着什麼。它有許多不同的觀點和定義,全部取決於要解決的問題的類型,手頭的工具和技術以及接近此任務的人的背景等。考慮以下示例:

  1. 皮特和羅布在車站附近找到一隻狗。
  2. 皮特和羅布從來沒有在車站附近發現一隻狗。
  3. 皮特和羅伯都喜歡編程很多。
  4. 帕特里夏在車站附近發現一隻狗。
  5. 這是一隻在雪地上發現皮特和羅布的狗。

哪個句子2-4與1相似? 2與1完全相反,仍然是關於皮特和羅布(不)找到一條狗。 3是關於皮特和羅布,但在完全不同的情況下。 4是關於在車站附近找到一隻狗,雖然發現者是別人。 5是關於皮特,羅布,一隻狗,還有一個'發現'事件,但採用與1不同的方式。就我而言,即使不必編寫計算機程序,我也無法根據它們的相似性對這些示例進行排序。

爲了計算語義相似性,您需要先決定要將什麼視爲'語義相似',哪些不是。爲了計算句子級別上的語義相似度,理想情況下,你會比較句子的某種意義表示。含義表示通常以邏輯公式形式出現,並且非常複雜。但是,有些工具試圖做到這一點,例如Boxer

作爲一種過於簡單但常常實用的方法,您將語義相似性定義爲一個句子和另一個句子中詞語之間相似度的總和。這使得問題變得更加容易,但仍然有一些難以解決的問題需要解決,因爲單詞的語義相似性與句子的語義相似性一樣嚴重。如果你想得到這個印象,請看看D.A.的書「詞彙語義學」。 Cruse(1986)。然而,有相當多的工具和技術來計算單詞之間的語義相似度。他們中的一些人基本上將其定義爲類似於Word Net或維基百科分類的兩個詞的負距離(參見this paper,其描述了用於此的API)。其他人通過使用在大型文本語料庫上計算的一些統計度量來計算語義相似度。他們基於類似的詞語出現在相似的背景下的見解。計算句子之間的語義相似度的第三種方法涉及從信息檢索中可能知道的向量空間模型。要了解後面的這些技術,請看第8章。5在書統計自然語言處理的基礎曼寧和Schütze。

希望這能讓你暫時擺脫困境。

+0

這非常有趣,謝謝回答! – sp00m 2017-06-08 12:50:17

8

我照着類別開發了一個簡單的開源工具,做語義比較: https://sourceforge.net/projects/semantics/files/

它適用於任何長度的句子,簡單,穩定,速度快,體積小... 下面是一個示例輸出:
句子之間的相似性
-Pete和Rob在車站附近找到了一條狗。
-Pete and Rob從未在車站附近發現過一隻狗。
是:句子
-Patricia之間1.0000000000


相似發現車站附近的狗。
- 這是一隻狗在雪地下發現了皮特和羅布。
是:句子
-Patricia之間0.405107239


相似發現車站附近的狗。
- 我很好,謝謝!
是:0.0


句子
你好之間有相似性,你怎麼樣?
- 我很好,謝謝!
是:0.29160592175990213



USAGE:

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

不錯的lib :)你是如何生成字典/單詞列表的?我需要一個德國人。 – schokocappucino 2013-08-05 10:03:25

+0

使用DISCO實用程序並從字典中爲每個單詞找到最接近的單詞。 DISCO確實支持德語,所以你可以這樣做。 – 2014-01-09 16:14:13