2010-04-13 32 views
17

我想知道是否有人熟悉算法否定的任何嘗試。否定句子的算法

例如,給定一個像「這本書很好」這樣的句子可以提供任意數量的替代句子,意思就像「這本書不好」甚至「這本書很糟糕」。

顯然,以高精度完成此操作可能超出了當前NLP的範圍,但我相信在這個主題上已經有了一些工作。如果有人知道任何工作,請注意指向我一些文件?

+12

只需添加「... NOT!」到任何陳述的結尾否定它;) – AaronLS 2010-04-13 21:32:02

+2

或者在Orwellian/1984的意義上,爲任何形容詞添加「un」前綴......「這本書是ungood」:-) – 2010-04-13 21:33:14

+2

你能提供一些關於你的更多信息使用目標? – 2010-04-13 21:33:54

回答

2

當然,天真的做法是嘗試在{am,are,is}之後加上「not」。我不知道這是如何在你的設置中起作用的,但它可能只適用於謂詞式的句子。

+4

天真的方式當然不是試圖在{am,are,is}之後加上「not」 – 2010-04-13 21:54:54

0

對於簡單句子,在給定英語語法規則的情況下解析尋找副詞或形容詞,並且如果只有一個意思存在,則用一個反義詞來代替。否則,使用正確的英語否定規則否定動詞(即:是 - >不是)。

高級算法:

  1. 查找每個單詞爲它的類型(名詞,動詞,形容詞,副詞,連詞等)
  2. 從字類型序列推斷句子結構(你的句子是:文章,名詞,動詞,形容詞/副詞;這是已知的簡單句子。)
  3. 對於簡單句子,請選擇一個可翻轉單詞並將其倒置。要麼使用反義詞,要麼否定動詞。

對於更復雜的句子,例如那些具有從屬從句的句子,您需要進行更復雜的分析,但對於簡單的句子而言,這不應該是不可行的。

1

對於一階邏輯有一個類似的過程。通常的算法是映射Pnot P,然後進行有效轉換到移動not方便的地方,如:

Original: (not R(x) => exists(y) (O(y) and P(x, y))) 
Negate it: not (not R(x) => exists(y) (O(y) and P(x, y))) 
Rearrange: not (R(x) or exists(y) (O(y) and P(x, y))) 
      not R(x) and not exists(y) (O(y) and P(x, y)) 
      not R(x) and forall(y) not (O(y) and P(x, y)) 
      not R(x) and forall(y) (not O(y) or not P(x, y)) 

執行相同的英語你會否定「如果它不下雨這裏,再有是一種戶外活動,可以在這裏進行「,」不是......「,最後是」沒有下雨,每一種可能的活動都不是在戶外或不能在這裏進行。 「

自然語言比一階邏輯複雜得多,當然......但是如果你可以把句子解析成「不」,「和」,「或」,「存在」等等。可以被識別,那麼你應該可以執行類似的翻譯。

8

雖然我不知道任何專門研究自動生成否定句的工作,但我想一個好的起點是閱讀formal semanticspragmatics中的語言學工作。一個好的可訪問的介紹將是Steven C. Levinson's Pragmatics書。

我認爲你會遇到的一個問題是,否定句子所傳遞的所有信息可能非常困難。例如,採取:

John fixed the vase that he broke. 

即使您更改爲約翰沒有修好,他打破了花瓶,有presupposition有一個花瓶和約翰把它弄壞了。

同樣地,簡單地否定句約翰沒有使用藥物作爲約翰使用藥物仍然傳達了約翰,在一個點上,使用的藥物攔停。更徹底的否定將是約翰從未使用過藥物

你可能想看的一些現有的自然語言處理(NLP)工作是MacCartney和Manning 2007的Natural Logic for Textual Inference。在本文中,他們使用George Lakoff的Natural Logic和Sanchez Valencia的單調性演算的概念來創建自動確定一個句子是否需要另一個句子的軟件。你或許可以使用他們的一些技術來檢測不需要的東西,以人爲地構造否定和矛盾的句子。

+0

也許他沒有修復那個不存在的花瓶而且他沒有破碎?來想一想,他是她嗎?或者......在他修好之後,他是否真的打破了花瓶而不是固定它? – 2010-04-19 08:45:13

+3

另外,當「不使用藥物」這個句子脫離語境時,可能意味着有人試圖隱藏某些東西。例如,如果CNN的一個大標題突然說「XYZ從來沒有和山羊有過關係」,這意味着有人聲稱這一點。也許最徹底的否定是將句子改寫成完全不同的東西,「約翰很高興」。 – 2010-04-19 08:48:13

2

我建議檢查wordnet。你可以用它來查找一個單詞的反義詞,所以你可以想象用「不好」代替「壞」,因爲壞是一個好的反義詞。 NLTK有一個簡單的python界面到wordnet。

-1

尼斯演示使用NTLK - http://text-processing.com/demo和一個簡短的文字 - http://text-processing.com/demo/sentiment/

+1

否定句與負面情緒不同。這是一個積極的句子,帶有消極的情緒:「電影太糟糕了。」這是一個有積極情緒的否定句:「這部電影不下於我見過的最棒的電影。」 – 2011-03-08 22:22:03

+0

@Tommy,我不同意你的概括。 「這部電影太糟糕了」是對「這部電影很好」的有效評論。即糟糕是「不好」的有效同義詞,就像上面的帖子中的「不好」一樣。 – Cerin 2011-03-09 05:54:59