2010-04-13 33 views
17

Tôi đã tự hỏi liệu có ai quen thuộc với bất kỳ nỗ lực nào trong từ phủ định thuật toán hay không. Ví dụ, đưa ra một câu như "Cuốn sách này là tốt" cung cấp bất kỳ số lượng câu thay thế có nghĩa là đối diện như "Cuốn sách này là không tốt" hoặc thậm chí "Cuốn sách này là xấu".Thuật toán để bỏ qua các câu

Rõ ràng, việc thực hiện điều này với độ chính xác cao có thể vượt quá phạm vi NLP hiện tại, nhưng tôi chắc chắn đã có một số công việc về chủ đề này. Nếu có ai biết về bất kỳ công việc nào, hãy quan tâm đến việc chỉ cho tôi một số giấy tờ?

+12

chỉ cần thêm "... KHÔNG!" đến cuối của bất kỳ tuyên bố để phủ nhận nó;) – AaronLS

+2

Hoặc trong một ý nghĩa Orwellian/1984, thêm tiền tố "un" cho bất kỳ tính từ ... "Cuốn sách này là không tốt" :-) –

+2

Bạn có thể cung cấp thêm thông tin về mục tiêu sử dụng? –

Trả lời

2

Cách ngây thơ của khóa học, là cố gắng thêm "không" ngay sau {am, are, is}. Tôi không có ý tưởng làm thế nào điều này sẽ làm việc trong thiết lập của bạn mặc dù, nó có lẽ sẽ chỉ làm việc với các câu giống như vị ngữ.

+4

Cách ngây thơ của khóa học, không phải là cố gắng để thêm "không" ngay sau khi {am, là, không phải là} –

0

Đối với các câu đơn giản, phân tích tìm kiếm trạng từ hoặc tính từ được đưa ra trong các quy tắc ngữ pháp tiếng Anh và thay thế một từ trái nghĩa nếu chỉ có một nghĩa duy nhất. Nếu không, hãy sử dụng quy tắc phủ định tiếng Anh chính xác để phủ nhận động từ (tức là: is -> không phải là).

thuật toán cao cấp:

  1. Tra cứu mỗi từ cho loại hình của nó (danh từ, động từ, tính từ, trạng từ, kết hợp, vv ...)
  2. Suy luận cấu trúc câu từ chuỗi kiểu chữ (câu của bạn là: bài viết, danh từ, động từ, tính từ/trạng từ; Đây là một câu đơn giản.)
  3. Đối với các câu đơn giản, hãy chọn một từ không thể đảo ngược và đảo ngược nó. Hoặc bằng cách sử dụng một từ trái nghĩa hoặc phủ nhận động từ.

Đối với các câu phức tạp hơn, chẳng hạn như câu có mệnh đề phụ, bạn sẽ cần phân tích phức tạp hơn, nhưng đối với câu đơn giản, điều này không thể xảy ra.

1

Có quy trình tương tự đối với logic đặt hàng đầu tiên. Các thuật toán thông thường là để lập bản đồ P-not P, và sau đó thực hiện bản dịch hợp lệ để di chuyển not đâu đó thuận tiện, ví dụ:

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)) 

Thực hiện tương tự trên tiếng Anh bạn sẽ được phủ nhận "Nếu nó không mưa ở đây, sau đó là một hoạt động nào đó là hoạt động ngoài trời và có thể được thực hiện ở đây "đến" KHÔNG phải là trường hợp ... "và cuối cùng là" Không mưa và mọi hoạt động có thể không phải là ngoài trời hoặc không thể thực hiện ở đây. "

Ngôn ngữ tự nhiên phức tạp hơn lôgic bậc nhất, tất nhiên ... nhưng nếu bạn có thể phân tích cú pháp thành câu có từ "không", "và", "hoặc", "tồn tại" v.v ... có thể được xác định, sau đó bạn sẽ có thể thực hiện các bản dịch tương tự.

8

Mặc dù tôi không biết về bất kỳ tác phẩm nào tự động xem xét các câu phủ định, tôi tưởng tượng một nơi tốt để bắt đầu sẽ là đọc lên ngôn ngữ hoạt động trong formal semanticspragmatics. Một giới thiệu dễ tiếp cận sẽ là Steven C. Levinson's Pragmatics cuốn sách.

Một vấn đề mà tôi nghĩ bạn sẽ gặp phải là rất khó để phủ nhận tất cả thông tin được truyền đạt bằng một câu.Ví dụ, thực hiện:

John fixed the vase that he broke. 

Thậm chí nếu bạn thay đổi điều này để John không khắc phục được bình rằng ông đã phá vỡ, có một presupposition rằng có một cái bình và rằng John đã phá vỡ nó.

Tương tự như vậy, chỉ cần phủ nhận câu John không ngừng sử dụng thuốc như John ngừng sử dụng thuốc vẫn truyền đạt rằng John, tại một thời điểm, ma túy sử dụng. Phủ định triệt để hơn sẽ là John chưa bao giờ sử dụng ma túy.

Một số quy trình xử lý ngôn ngữ tự nhiên hiện có (NLP) mà bạn có thể muốn xem là Natural Logic for Textual Inference của MacCartney và Manning 2007. Trong bài báo này, họ sử dụng khái niệm về Logic tự nhiên và tính toán đơn điệu của Sanchez Valencia để tạo ra phần mềm tự động xác định liệu một câu có đòi hỏi một câu khác hay không. Bạn có lẽ có thể sử dụng một số kỹ thuật của họ để phát hiện không có yêu cầu để tạo ra các câu phủ định và mâu thuẫn giả tạo.

+0

Có lẽ ông đã không sửa chữa chiếc bình mà không tồn tại và rằng ông đã không phá vỡ? Và nghĩ về nó, anh ta có phải là cô ấy không? Hay ... Anh ta có thực sự phá vỡ chiếc bình thay vì sửa nó không, sau khi anh ta sửa nó? –

+3

Ngoài ra, câu "John chưa bao giờ sử dụng ma túy", khi đưa ra khỏi bối cảnh có thể mang một ý nghĩa rằng ai đó đang cố che giấu điều gì đó. Ví dụ, nếu một tiêu đề lớn của CNN đột nhiên nói "XYZ không bao giờ có quan hệ với một con dê", nó loại ngụ ý rằng ai đó đã bị cáo buộc đó. Có lẽ sự phủ nhận triệt để nhất là viết lại câu cho một điều hoàn toàn khác, "John hạnh phúc". –

2

Tôi khuyên bạn nên kiểm tra wordnet. Bạn có thể sử dụng nó để tra cứu các từ trái nghĩa cho một từ, do đó bạn có thể thay thế được "xấu" bằng "không tốt" vì xấu là một từ trái nghĩa. NLTK có giao diện python đơn giản với wordnet.

-1

Trình diễn đẹp bằng cách sử dụng NTLK - http://text-processing.com/demo và cách viết ngắn - http://text-processing.com/demo/sentiment/.

+1

Câu tiêu cực không giống như tình cảm tiêu cực. Đây là một câu tích cực với một cảm xúc tiêu cực: 'Bộ phim thật khủng khiếp'. Đây là một câu tiêu cực với một cảm xúc tích cực: 'Bộ phim không phải là ít nhất là lớn nhất tôi từng thấy.' –

+0

@Tommy, tôi không đồng ý với khái quát của bạn. "Bộ phim kinh khủng" là một NOTING hợp lệ của "Bộ phim rất hay". tức là khủng khiếp là một từ đồng nghĩa hợp lệ cho "không tốt", cũng giống như "xấu" trong bài đăng của bạn ở trên. – Cerin

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