Làm thế nào để dạy một kịch bản để phát hiện châm biếm? [đóng cửa]


11

Tôi hiện đang xây dựng một kịch bản thú vị, về cơ bản khớp với các cụm từ đã cho và đưa ra phản hồi được xác định trước dựa trên các điểm trùng khớp. Bạn có thể yêu cầu nó lấy một số thông tin dựa trên nguồn cấp dữ liệu trực tiếp, chạy các tác vụ, kể những giai thoại hoặc chỉ trò chuyện với cô ấy.

Tôi đã có tính năng phát hiện tích hợp cho badwords, mũ khóa hoặc cả hai. Chương trình có tên con gái và tôi đã cố gắng trở thành một cô gái nữ tính nhất có thể, theo các thuật ngữ logic (ví dụ: mọi người đều biết rằng hầu hết các cô gái nữ tính mất 700ms để trả lời câu hỏi, dĩ nhiên là nói đùa). Vì vậy, đây là một ví dụ nhỏ:

Khách hàng: VẤN ĐỀ CỦA BẠN LÀ GÌ?
Kiku: KHÔNG SỬ DỤNG RATNG VỚI TÔI!
Khách hàng: #### bạn
Kiku: tại sao bạn lại rất có ý nghĩa với tôi: /

Tuy nhiên, tôi thực sự muốn thêm tính năng châm biếm vào nó. Vì vậy, nếu bạn viết một cái gì đó trong mỉa mai, sau đó cô ấy sẽ phát hiện ra và trả lời tương ứng. Bây giờ đây là một phần khó khăn, Làm thế nào để bạn dạy một kịch bản, châm biếm là gì?

Để tôi cụ thể hơn. Các từ châm biếm phổ biến nhất được sử dụng ngày nay là gì? Hoặc làm thế nào để có được thống kê đó? Làm thế nào tôi có thể làm cho kịch bản hiểu ngữ cảnh của cụm từ đã cho?

CẬP NHẬT

Vì câu hỏi này đang nhận được rất nhiều sự cường điệu, tôi nghĩ mọi thứ nên được làm rõ hơn một chút. Rất rõ ràng, về cơ bản, việc tạo ra một kịch bản phát hiện đầy đủ châm biếm là không thể. Ít nhất là trong vấn đề hợp lý. Tuy nhiên, tôi tin rằng một số lượng có thể mỉa mai có thể được phát hiện.

Tôi hiện đã làm cho đến nay, rằng kịch bản của tôi có thể phát hiện một sự châm biếm rất hạn chế. Tôi đã xác định trước một số từ châm biếm phổ biến (tuy nhiên, một mình chúng là vô dụng.) Ví dụ: like, anything, yeah, right và great. Và sau đó, nó khớp đầu tiên, những điều đơn giản, như chữ hoa và trích dẫn: THANKS you are so smarthoặc oh you are so "SMART".

Vì chức năng chính của tập lệnh là thực hiện các tác vụ hoặc truy xuất thông tin, và lời bạt sẽ hỏi xem đó có phải là ý bạn không. Sau đó tôi nghĩ, thêm "cảm ơn" như một biến đặc biệt. Vì vậy, yeah thankshoặc whatever thankssẽ kích hoạt sự châm biếm có thể, và kịch bản sẽ hỏi bạn: "Tôi có phát hiện ra sự mỉa mai không?" Đặt cược tốt nhất của bạn sẽ là nói "xin lỗi" sau đó, nếu không nó sẽ thêm một điểm cảnh báo và nếu đạt đến giới hạn - nó sẽ bắt đầu phớt lờ bạn.

Vì các thuật toán rất đơn giản này dường như thực sự hoạt động, nên ý tưởng này có một tương lai, tất nhiên sau rất nhiều điều chỉnh và điều chỉnh. Tuy nhiên, có ai đó thông minh hơn nhiều sẽ tạo ra một phần mềm nguồn mở với ý tưởng tương tự trong đầu. Sau đó, tính năng này có thể được nối với rất nhiều chức năng trên web. Chăm sóc khách hàng có thể sẽ có lợi nhất, tuy nhiên, loại phần mềm này cũng có thể được sử dụng để phát hiện "liên kết có thể gắn cờ".


14
Cho đến khi kịch bản của bạn thực sự có thể hiểu những gì đang được nói (thay vì chọn từ khóa), tôi nghĩ không thể bắt được hầu hết các kịch bản châm biếm
Rob

26
@Kalle Hãy rõ ràng ở đây. Sarcasm là một trong những thiết bị tinh tế và tiên tiến nhất trong ngôn ngữ nói. Ngay cả khi bạn là người nói tiếng Anh bản ngữ, hoàn toàn có khả năng tiếp thu những điều tinh tế, ví dụ như giọng nói và bất kỳ thông tin theo ngữ cảnh có liên quan nào, bạn sẽ thường xuyên không phát hiện ra sự mỉa mai. Người không bản ngữ đứng gần như không có cơ hội nào. Mang nó đến văn bản và thậm chí người bản ngữ đứng gần như không có cơ hội. Và bạn muốn máy tính, mà đấu tranh để hiểu một cách mờ nhạt ngay cả những câu đơn giản nhất, để giải quyết vấn đề này? Để lại điều này cho một người có cả đời trong phân tích lời nói và văn bản.
doppelgreener

17
Làm kịch bản nhận ra sự mỉa mai? Điều đó thực sự hữu ích;)
zenzelezz

12
Thôi nào - ngay cả Sheldon Cooper cũng không thể phát hiện ra sự mỉa mai ...
Paul R

3
Tôi không nghĩ câu hỏi này nên được đóng lại, đặc biệt không phải là "không mang tính xây dựng". Tôi đã bỏ phiếu mở lại ngay bây giờ nếu nó không ràng buộc, nhưng tôi nghĩ rằng câu hỏi này xứng đáng với một vài phiếu mở lại, đặc biệt là với bản chỉnh sửa mới nhất.
Adam Lear

Câu trả lời:


17

Nếu bạn có một hệ thống xử lý ngôn ngữ tự nhiên đầy đủ và cơ sở dữ liệu về các sự kiện trong hệ thống IBM Watson, bạn có thể đánh dấu một số câu có thể châm biếm. Ví dụ: "Tôi nghe nói mẹ bạn bị ung thư và bạn vừa bị sa thải!" "Yeah, không phải cuộc sống tuyệt vời!" có thể được gắn cờ vì nó có thể nhận ra rằng bị ung thư và mất việc thường không được mô tả là những trải nghiệm tích cực.

Tôi cho rằng bạn không có tài nguyên để kết hợp một hệ thống cấp Watson. Bạn có thể kết hợp một cơ sở dữ liệu gồm các cụm từ châm biếm thường được sử dụng, sau đó sử dụng một số loại thuật toán khớp văn bản giữa câu lệnh đích và cơ sở dữ liệu châm biếm. Tôi phải đoán rằng nó sẽ không hiệu quả vì tất cả các cụm từ được sử dụng một cách mỉa mai đều được sử dụng một cách chân thành thường xuyên hơn. Ví dụ: "Đó là một X." thường được sử dụng một cách chân thành, nhưng đôi khi được sử dụng một cách mỉa mai.

Sarcasm liên quan rất chặt chẽ đến sự lừa dối. Không có gì lạ khi một người sử dụng lời mỉa mai để từ chối nó khi bị thách thức và sự lựa chọn từ ngữ của họ khiến cho việc từ chối trở nên khả thi. Tôi nghi ngờ điều này có nghĩa là một máy dò châm biếm tốt có lẽ là một vấn đề khó như một chương trình đàm thoại vượt qua bài kiểm tra Turing.


1
Cảm ơn câu trả lời của bạn. Câu trả lời này chất lượng chắc chắn là tốt hơn sau đó. Tôi nghĩ rằng việc tạo ra một cơ sở dữ liệu của cụm từ thực tế sẽ trở nên quá lớn. Tuy nhiên, một cơ sở dữ liệu các từ + một số phương thức khác, thực sự có thể làm cho nó hoạt động (không phải 100%, nhưng sau đó lại không 0%). Tôi đang dự định thêm một bước xác minh. Nếu kịch bản phát hiện một mức độ mỉa mai nhẹ, nó sẽ hỏi: Đó có phải là châm biếm không? Nếu bạn trả lời: "OH NO", thì nó sẽ xác nhận sự mỉa mai và thực sự nổi điên và bỏ qua bạn trong một thời gian (thời gian sẽ được xác định bởi mức độ châm biếm).
Kalle H. Väravas

3
Tôi thực sự nghĩ rằng bạn muốn gắn bó với các cụm từ bởi vì châm biếm là tất cả về bối cảnh, và có ít nhất một vài cụm từ có nhiều khả năng được sử dụng sarcasticaly. "Yeah" không mỉa mai, "Phải" không mỉa mai, nhưng "Yeah, phải!" Có lẽ được sử dụng thường xuyên hơn một cách mỉa mai sau đó chân thành.
Charles E. Grant

6
Đối với chất lượng của các câu trả lời ở đây, tôi phải nói rằng đây là một phần trách nhiệm của bạn. Xử lý ngôn ngữ tự nhiên là một lĩnh vực nổi tiếng có thể cung cấp cho bạn một số kỹ thuật hữu ích, nhưng bạn không đưa ra dấu hiệu nào về việc thực hiện bất kỳ nghiên cứu nào để tìm kiếm các phương pháp hiện có. Đây là một vấn đề khó khăn và không phải là điều gì đó có thể được trả lời một cách hữu ích trong bài viết SO. Nhiều, rất nhiều, những cuốn sách đã được lấp đầy về chủ đề xử lý ngôn ngữ tự nhiên.
Charles E. Grant

43

<Sarcasm>

if(string.Contains("<Sarcasm>")) containsSarcasm = true;

</ Sarcasm>

Thành thật mà nói, tôi không biết làm thế nào để đi về điều này. Tôi nghĩ rằng chỉ có khoảng 30% người trong đời thực "bị" mỉa mai ngay từ đầu, vì vậy làm cho máy tính nhận ra nó và hiểu nó nghe có vẻ là một nhiệm vụ rất khó khăn.

Chỉnh sửa Dựa trên các nhận xét cho bài viết gốc của tôi, tôi tin rằng tôi đã minh họa hoàn hảo độ khó cực cao của nhiệm vụ đang được yêu cầu. Vâng, nửa đầu bài viết của tôi là mỉa mai. Tôi thậm chí đã nhấn mạnh thực tế đó bằng cách sử dụng thẻ đánh dấu trang điểm. Bằng cách đăng một bình luận mỉa mai về một giải pháp tầm thường cho một vấn đề đặc biệt khó khăn, và sự mỉa mai đó được hiểu là "không có ích" đưa ra câu hỏi này:

Nếu bạn không thể nhận ra sự mỉa mai bằng văn bản, thì làm thế nào bạn sẽ viết một thuật toán nhận ra nó?

Ồ, và Anna nếu ai đó bao gồm thuật ngữ "Tôi nghĩ ..." trong câu của họ, nó thường chỉ ra rằng đó là một ý kiến ​​đang được nêu, không nhất thiết phải nghiên cứu thực tế khó khăn.


3
-1 Tôi xin lỗi, tôi không chắc tại sao câu trả lời này lại được nâng cấp. Mã được cung cấp là 100% không liên quan đến câu hỏi trong tay và phần thứ hai của câu trả lời bạn đang nói "tôi không có ý kiến ​​gì". Câu trả lời của bạn là 30% theo chủ đề và không thực sự giúp ích hay đưa ra bất kỳ hướng tốt nào.
Kalle H. Väravas

18
Nó được nâng cấp bởi vì poster đã chỉ ra rằng không có cách thực tế để làm điều này. Vì con người thường không thể phát hiện ra sự mỉa mai, nên bạn không thể dạy máy. Ngoài ra, châm biếm thường được truyền tải bằng giọng điệu, và do đó thường bị hiểu lầm trong giao tiếp trực tuyến.
Andy Chờ đợi

1
@Andy Chờ đợi Tất nhiên, bạn đã đúng. Như tôi đã nói, câu trả lời của anh ấy là 30% theo chủ đề (thậm chí anh ấy nghĩ rằng anh ấy đã bắt đầu nhận được thông báo khi không có văn bản bổ sung.) Tuy nhiên, tôi sẽ không chấp nhận câu trả lời đó, vì .. tất nhiên bạn có thể nhận được 100% trận đấu .. Nhưng thậm chí là một trận đấu 50%? Câu trả lời này về cơ bản là nói, "Tôi không hiểu câu hỏi của bạn, tôi nghĩ rằng điều đó là không thể, Nghe có vẻ khó khăn, Hãy bỏ cuộc!" Tôi hầu như chỉ nhận được các loại câu trả lời này trong Lập trình viên, bên cạnh "Tại sao bạn làm điều này? Sử dụng một khung!" ..
Kalle H. Väravas

4
@Kalle Tôi đồng ý với bạn. Câu trả lời này là một phần châm biếm, phần "Tôi không biết" và phần phỏng đoán (30%? Thật sao? Bạn có thể sao lưu nó không?). Điều đó hoàn toàn không có ích và tốt nhất nên là một bình luận.
Adam Lear

3
Chủ đề bình luận thú vị - rõ ràng ngay cả con người cũng không thể phát hiện ra sự mỉa mai (hoặc thiếu nó) một cách đáng tin cậy.
Piskvor rời khỏi tòa nhà

11

Vấn đề phát hiện châm biếm là một vấn đề mở trong ngôn ngữ học tính toán - bạn sẽ được phục vụ tốt hơn bằng cách tìm kiếm học giả google hơn là stackexchange cho những thứ đó. Tuy nhiên, đã có một số tiến bộ về vấn đề này. Đối với châm biếm nói , một bộ nhận dạng mạnh mẽ có thể được xây dựng bằng cách sử dụng "các đặc điểm phổ và ngữ cảnh" mà (các tác giả tuyên bố) phát hiện sự châm biếm cũng như chú thích của con người. Các tác giả của bài báo cho rằng văn bản thô vì thế không đủ để phát hiện sự mỉa mai - thực sự, họ đã có kết quả tốt hơn bằng cách bỏ qua các từ thực tế được nói.

Tsur và cộng sự. cũng đã báo cáo một số kết quả thú vị trong phát hiện châm biếm văn bản chỉ trong năm ngoái với thuật toán SASI của họ . Họ cũng báo cáo một số phát hiện tiếp theo trong một bài báo khác.

Trong mọi trường hợp, đây là tiên tiến của nghiên cứu ngôn ngữ tính toán; đừng mong đợi bất cứ ai trao cho bạn một lời nói dối trên đĩa bạc. Bạn sẽ cần các bộ dữ liệu đào tạo lớn và nhiều thời gian rảnh để điều chỉnh trình phát hiện châm biếm của bạn - và thậm chí sau đó, độ chính xác 77% (như được báo cáo trong bài báo của SASI) không đủ để từ chối một bài viết chỉ dựa trên cờ châm biếm.


Hừm, 77%? Điều đó dường như là tốt hơn so với hầu hết mọi người . (không có ý định mỉa mai)
Piskvor rời khỏi tòa nhà

@Piskvor, hoàn toàn có thể, nhưng tôi không có số liệu thống kê về điều đó. Đó là độ chính xác tốt hơn âm thanh ít nhất.
bdonlan

2

Tôi không nghĩ câu trả lời này là một phương pháp tiếp cận rất thực tế, nhưng nếu bạn có đủ nguồn lực để thực hiện thì tôi tin rằng nó sẽ có thể. Hãy xem xét dự án reCaptcha của google sử dụng con người để giải mã các từ mà máy tính không thể đọc được ( "Tìm hiểu thêm Trang Recaptcha" ). Tôi tin rằng vấn đề là tương tự, ở chỗ bạn đang cố gắng để có được một cỗ máy để tìm ra thứ gì đó mà con người ít nhất là làm tốt hơn .

Hãy tưởng tượng bạn có tài nguyên để yêu cầu hàng triệu người xác định sự mỉa mai với bạn trong bối cảnh cuộc trò chuyện được đánh máy. Hãy tưởng tượng rằng bạn có thể yêu cầu nhiều người gửi cho bạn thời điểm chính xác trong cuộc trò chuyện khi nhận ra sự mỉa mai và ít khi nói chuyện trước khi nhận ra rằng người ta sẽ cần phải đánh dấu nhận dạng đó. Điều này có thể được lưu trữ trong cơ sở dữ liệu, giả sử chương trình của bạn có quyền truy cập. Sau đó, khi người dùng đang nhập cuộc hội thoại cho bạn, cơ sở dữ liệu có thể được lọc cho các cuộc hội thoại "tương tự".

Làm thế nào để đánh giá sự tương đồng là điều cần suy nghĩ, nhưng một điều mà tôi tin rằng có lẽ đã có nghiên cứu về sự tồn tại. Tôi tin rằng nó sẽ rất giống với lý thuyết đằng sau sửa lỗi chính tả. Dù bằng cách nào, nó có thể đi xuống một giá trị xác suất rằng cuộc trò chuyện được gõ thực sự là mỉa mai, và đến một lúc nào đó một ngưỡng sẽ phải được cung cấp.

Tôi cũng thích ý tưởng của bạn về việc trình bày câu hỏi "Có phải đó là sự mỉa mai?" cho người dùng và sau đó sử dụng phản hồi của họ để đưa ra quyết định chính xác hơn.

Tôi hy vọng câu trả lời của tôi không phải là một sự lãng phí hoàn toàn và tôi chúc bạn may mắn trong nỗ lực này.

-Asaf


1

Phát hiện Sarcasm trong ngôn ngữ học tính toán (hay còn gọi là xử lý ngôn ngữ tự nhiên) là một vấn đề cực kỳ khó khăn theo đúng nghĩa của nó. Về cơ bản, đây là một vấn đề phân loại trong đó một mô hình phải được đào tạo trước. Một vấn đề tương tự để tìm kiếm người tham gia kép (tệp PDF) gần đây đã được nghiên cứu và xuất bản. Các kỹ thuật cho cả hai vấn đề là tương đương.


1

2 xu của tôi:

Hỏi một nhà tâm lý học về cách nhận ra sự mỉa mai trong các cụm từ, với thông tin đó so sánh chúng với đầu vào.

Nhưng nó sẽ là một dự án thực sự khó khăn, với nỗ lực được sử dụng trong đó, bạn có thể làm hệ điều hành tốt nhất trên thế giới: P

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.