Jak nauczyć skrypt rozpoznawania sarkazmu? [Zamknięte]

11

Obecnie tworzę zabawny skrypt, który w zasadzie pasuje do podanych fraz i daje wstępnie zdefiniowaną odpowiedź na podstawie punktów dopasowania. Możesz poprosić go o pobranie niektórych informacji na podstawie kanałów na żywo, uruchamianie zadań, opowiadanie anegdot lub po prostu czatowanie z nią.

Mam już wbudowane wykrywanie złych słów, Caps Lock lub obu. Program ma na imię dziewczęce, a ja starałem się zbliżyć do bycia dziewczęcą dziewczyną na logicznych zasadach (na przykład: wszyscy wiedzą, że większość dziewczęcych dziewcząt potrzebuje 700 ms, aby odpowiedzieć na pytanie, oczywiście żartując). Oto mały przykład:

Klient: JAKI JEST TWÓJ PROBLEM?
Kiku: NIE UŻYWAJ TEGO TONU DO MNIE!
Klient: #### you
Kiku: dlaczego jesteś dla mnie taki wredny: /

Jednak naprawdę chciałbym dodać do niego funkcję sarkazmu. Więc jeśli napiszesz coś z sarkazmem, ona to wykryje i odpowiednio zareaguje. To trudna część. Jak uczysz scenariusz, czym jest sarkazm?

Dla mnie bardziej szczegółowe. Jakie są dziś najczęściej używane sarkastyczne słowa? Lub jak zdobyć tę statystykę? Jak sprawić, by skrypt zrozumiał kontekst podanej frazy?

AKTUALIZACJA

Ponieważ pytanie to zyskuje na popularności, myślę, że należy nieco wyjaśnić. Jest bardzo jasne, że wykonanie skryptu w pełni wykrywającym sarkazm jest w zasadzie niemożliwe. Przynajmniej w rozsądnej sprawie. Uważam jednak, że można wykryć pewną ilość możliwego sarkazmu.

Do tej pory doszedłem do tego, że mój skrypt może wykryć bardzo ograniczony sarkazm. Z góry zdefiniowałem kilka typowych sarkastycznych słów (jednak same są bezużyteczne). Na przykład: cokolwiek, tak, tak, dobrze i wspaniale. A potem najpierw pasuje, proste rzeczy, takie jak wielkie litery i cytowane: THANKS you are so smartlub oh you are so "SMART".

Ponieważ główną funkcją skryptów jest wykonywanie zadań lub uzyskiwanie informacji, a posłowie pytają, czy o to ci chodziło. Potem pomyślałem, dodając „dzięki” jako specjalną zmienną. Tak yeah thanksczy whatever thankswyzwoli możliwy sarkazm, a skrypt zapyta: „Czy wykryję sarkazm?” Najlepiej byłoby wtedy powiedzieć „przepraszam”, w przeciwnym razie doda punkt ostrzegawczy, a jeśli limit zostanie osiągnięty - zacznie cię ignorować.

Ponieważ wydaje się, że te bardzo proste algorytmy rzeczywiście działają, ten pomysł ma przyszłość, oczywiście po wielu modyfikacjach i poprawkach. Czy jednak ktoś mądrzejszy stworzyłby oprogramowanie typu open source z myślą o tym samym pomyśle. Następnie tę funkcję można podłączyć do wielu funkcji w sieci. Obsługa klienta prawdopodobnie przyniosłaby największe korzyści, jednak tego rodzaju oprogramowanie może być również wykorzystywane do wykrywania zawartości „oznaczalnej”.

Kalle H. Väravas
źródło
14
Dopóki twój skrypt nie zrozumie, co zostało powiedziane (zamiast wybierać słowa kluczowe), myślę, że nie jest możliwe uchwycenie większości scenariuszy sarkazmu
Rob
26
@Kalle Wyjaśnijmy tutaj. Sarkazm jest jednym z najbardziej subtelnych i zaawansowanych urządzeń w mowie. Nawet jeśli jesteś rodzimym językiem angielskim, w pełni zdolnym do wychwycenia subtelności, np. Tonu głosu i wszelkich istotnych informacji kontekstowych, regularnie nie wykryjesz sarkazmu. Osoby nie będące rodzimymi użytkownikami języka obcego nie mają prawie żadnych szans. Przejdź do tekstu, a nawet rodzimi użytkownicy nie mają prawie żadnych szans. Czy chcesz, aby komputery, które mają trudności ze zrozumieniem nawet najprostszych zdań, rozwiązały ten problem? Pozostaw to komuś, kto ma całe życie w analizie mowy i tekstu.
doppelgreener
17
Czy skrypt rozpoznaje sarkazm? To naprawdę przydatne;)
zenzelezz
12
Chodź - nawet Sheldon Cooper nie może wykryć sarkazmu ...
Paul R
3
Nie sądzę, że to pytanie powinno zostać zamknięte, szczególnie nie jako „niekonstruktywne”. Oddałbym teraz głosowanie na ponowne otwarcie, gdyby nie było wiążące, ale myślę, że to pytanie zasługuje na kilka ponownych głosów, zwłaszcza w najnowszej edycji.
Adam Lear

Odpowiedzi:

17

Jeśli posiadasz pełny system przetwarzania języka naturalnego i bazę danych faktów, na przykład system IBM Watson, być może możesz oznaczyć niektóre stwierdzenia jako możliwe sarkazm. Na przykład: „Słyszałem, że twoja matka ma raka i właśnie cię zwolniono!” „Tak, życie nie jest cudowne!” można oznaczyć, ponieważ można uznać, że zachorowanie na raka i utrata pracy nie są ogólnie opisywane jako pozytywne doświadczenia.

Zakładam, że nie masz zasobów, aby stworzyć system ocen Watson. Możesz połączyć bazę danych często używanych sarkastycznych fraz, a następnie użyć pewnego rodzaju algorytmu dopasowywania tekstu między instrukcją docelową a bazą danych sarkazmu. Muszę zgadywać, że nie będzie to bardzo skuteczne, ponieważ wszystkie wyrażenia używane sarkastycznie są używane częściej. Na przykład „To niezły X”. jest zwykle używany szczerze, ale czasami jest stosowany sarkastycznie.

Sarkazm jest bardzo ściśle związany z oszustwem. Często zdarza się, że osoba stosująca sarkazm zaprzecza jej, gdy jest na nią rzucana, a dobór słów umożliwia zaprzeczenie. Podejrzewam, że oznacza to, że dobry detektor sarkazmu jest prawdopodobnie tak samo trudny jak program konwersacyjny, który pomyślnie przejdzie test Turinga.

Charles E. Grant
źródło
1
Dziękuję za odpowiedź. Ta jakość odpowiedzi jest zdecydowanie lepsza niż powyższa. Myślę, że utworzenie bazy danych rzeczywistych fraz stanie się zbyt duże. Jednak baza słów i innych metod może sprawić, że będzie działać (nie 100%, ale znowu nie 0%). Planuję dodać krok weryfikacji. Jeśli skrypt wykryje niewielki poziom sarkazmu, zapyta: Czy to był sarkazm? Jeśli odpowiesz: „OH NO”, to potwierdzi to sarkazm i faktycznie oszaleje i zignoruje cię przez pewien czas (czas zostanie określony przez poziom sarkazmu).
Kalle H. Väravas
3
Naprawdę myślę, że chcesz trzymać się wyrażeń, ponieważ w sarkazmie chodzi o kontekst, a istnieje co najmniej kilka zwrotów, które są bardziej prawdopodobne, że zostaną użyte sarkastycznie. „Tak” nie jest sarkastyczne, „Racja” nie jest sarkastyczne, ale „Tak, racja!” jest prawdopodobnie częściej używany sarkastycznie niż szczerze.
Charles E. Grant,
6
Jeśli chodzi o jakość odpowiedzi tutaj, muszę powiedzieć, że jest to częściowo twoja odpowiedzialność. Przetwarzanie języka naturalnego jest dobrze znaną dziedziną, która może zapewnić ci kilka przydatnych technik, ale nie dajesz żadnych wskazówek, aby przeprowadzić jakiekolwiek badania w celu sprawdzenia istniejących metod. Jest to trudny problem i nie jest to coś, na co można ogólnie odpowiedzieć w poście SO. Wiele, wiele książek zostało wypełnionych na temat przetwarzania języka naturalnego.
Charles E. Grant,
43

<Sarkazm>

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

</Sarcasm>

Szczerze mówiąc, nie mam pojęcia, jak sobie z tym poradzić. Myślę, że tylko około 30% ludzi w prawdziwym życiu „dostaje” sarkazm, więc sprawienie, by komputer go rozpoznał i zrozumiał, brzmi jak bardzo trudne zadanie.

Edytuj Na podstawie komentarzy do mojego oryginalnego posta uważam, że doskonale zilustrowałem ekstremalną trudność zadawanego zadania. Tak, pierwsza połowa mojego postu była sarkastyczna. Podkreśliłem nawet ten fakt, używając gotowego znacznika. Publikując sarkastyczny komentarz na temat trywialnego rozwiązania wyjątkowo trudnego problemu, a sarkazm interpretowany jako „nieprzydatny” rodzi to pytanie:

Jeśli nie potrafisz rozpoznać pisanego sarkazmu, to jak zamierzasz napisać algorytm, który go rozpozna?

Aha, i Anna, jeśli ktoś w swoim zdaniu zawiera termin „myślę ...”, zwykle oznacza to, że jest to opinia, która jest wypowiadana, niekoniecznie badana twardym faktem.

Dave Nay
źródło
3
-1 Przepraszam, nie jestem pewien, dlaczego ta odpowiedź zyskuje aprobatę. Podany kod jest w 100% nieistotny dla pytania, a druga część odpowiedzi brzmi „nie mam pojęcia”. Twoja odpowiedź w 30% dotyczy tematu i tak naprawdę nie pomaga ani nie daje dobrego kierunku.
Kalle H. Väravas
18
Robi się głośno, ponieważ plakat wskazał, że nie ma praktycznego sposobu na zrobienie tego. Ponieważ ludzie często nie potrafią wykryć sarkazmu, nie ma sposobu, aby nauczyć maszynę. Również sarkazm jest często przekazywany tonem głosu, a zatem często źle rozumiany w komunikacji online.
Andy Waite,
1
@Andy Waite Tak, oczywiście, masz rację. Jak powiedziałem, jego odpowiedź jest w 30% na temat (nawet myślał, że zaczął otrzymywać pozytywne opinie, gdy nie było dodatkowego tekstu). Mimo to nie przyjmuję tej odpowiedzi, ponieważ ... tak, oczywiście, nie można uzyskać 100% dopasowania .. Ale nawet 50% dopasowania? Ta odpowiedź mówi w zasadzie: „Nie rozumiem twojego pytania, myślę, że to niemożliwe, brzmi ciężko, po prostu wyjdź!” Najczęściej tego typu odpowiedzi otrzymuję tylko w Programistach, obok „Dlaczego to robisz? Użyj frameworka!”
Kalle H. Väravas,
4
@Kalle Zgadzam się z tobą. Ta odpowiedź to po części sarkazm, po części „Nie wiem”, a po części zgadywanie (30%? Naprawdę? Czy możesz to poprzeć?). Jest to całkowicie nieprzydatne i powinno być co najwyżej komentarzem.
Adam Lear
3
Interesujący wątek komentarza - najwyraźniej nawet ludzie nie potrafią wiarygodnie wykryć sarkazmu (lub jego braku).
Piskvor opuścił budynek
11

Problem wykrywania sarkazmu jest otwartym problemem w lingwistyce obliczeniowej - lepiej byłoby, gdybyś szukał google scholar niż wymiany stosu na takie rzeczy. Poczyniono jednak pewne postępy w tej kwestii. W przypadku sarkazmu mówionego można zbudować solidny rozpoznawacz za pomocą „cech spektralnych i kontekstowych”, które (jak twierdzą autorzy) wykrywają sarkazm, a także człowieka jako adnotatora. Autorzy artykułu twierdzą, że surowy tekst nie jest zatem wystarczający do wykrycia sarkazmu - w rzeczywistości osiągnęli lepsze wyniki, ignorując wypowiedziane słowa.

Tsur i in. zgłosili także kilka interesujących wyników w wykrywaniu sarkazmu tekstowego w zeszłym roku dzięki swojemu algorytmowi SASI . W innym dokumencie podają także dodatkowe ustalenia .

W każdym razie jest to najnowocześniejsze badanie języka obliczeniowego; nie oczekuj, że ktoś poda ci libsarkazm na srebrnym talerzu. Będziesz potrzebował dużych zestawów danych szkoleniowych i dużo wolnego czasu, aby ulepszyć swój detektor sarkazmu - i nawet wtedy dokładność 77% (jak podano w artykule SASI) nie wystarcza, aby odrzucić post oparty wyłącznie na sarkazmie.

bdonlan
źródło
Hmm, 77%? To wydaje się lepsze niż większość ludzi . (bez zamierzonego sarkazmu)
Piskvor opuścił budynek
@Piskvor, całkiem możliwe, ale nie mam statystyk na ten temat. To lepsza precyzja niż przynajmniej audio.
bdonlan
2

Nie sądzę, aby ta odpowiedź była bardzo realistyczną metodą, ale jeśli masz na to środki, uważam, że byłoby to możliwe. Zastanów się nad projektem Google reCaptcha, który używa ludzi do odszyfrowywania słów, których komputery nie potrafią odczytać ( „Dowiedz się więcej na stronie Recaptcha” ). Uważam, że problem jest podobny, ponieważ próbujesz zdobyć maszynę, aby dowiedzieć się czegoś, co ludzie są już co najmniej lepsi w robieniu.

Wyobraź sobie, że masz zasoby, aby poprosić miliony ludzi, aby zidentyfikowali sarkazm w kontekście konwersacji na maszynie. Wyobraź sobie, że możesz poprosić tylu ludzi, by podali ci dokładnie ten moment w rozmowie, kiedy urzeczywistniono sarkazm, i jak najmniejszą część rozmowy przed uświadomieniem sobie, że należałoby zaznaczyć tę identyfikację. Można to zapisać w bazie danych, powiedzmy, do której program miał dostęp. Następnie, gdy użytkownik pisał do Ciebie rozmowę, bazę danych można filtrować pod kątem „podobnych” rozmów.

O tym, jak ocenić podobieństwo, warto się zastanowić, ale moim zdaniem prawdopodobnie istnieją już badania. Uważam, że byłoby to bardzo podobne do teorii dotyczącej błędów ortograficznych. Tak czy inaczej, prawdopodobnie sprowadzałoby się to do probabilistycznej wartości, że wpisywana rozmowa jest w rzeczywistości sarkastyczna i w pewnym momencie należałoby podać próg.

Podoba mi się również twój pomysł przedstawienia pytania „Czy to był sarkazm?” do użytkownika, a następnie za pomocą jego odpowiedzi, aby podjąć bardziej trafną decyzję.

Mam nadzieję, że moja odpowiedź nie była kompletnym marnotrawstwem i życzę powodzenia w tym przedsięwzięciu.

-Asaf

Asaf
źródło
1

Wykrywanie sarkazmu w językoznawstwie obliczeniowym (inaczej przetwarzanie języka naturalnego) jest niezwykle trudnym problemem samym w sobie. Jest to w zasadzie problem z klasyfikacją, w którym model musi zostać najpierw przeszkolony. Podobny problem znalezienia podwójnych entenders (plik PDF) został ostatnio badane i publikowane. Techniki obu problemów są porównywalne.

stackoverflowuser2010
źródło
1

Moje 2 centy:

Zapytaj psychologa o to, jak rozpoznać sarkazm w zdaniach, dzięki tej informacji porównaj je z danymi wejściowymi.

Byłby to jednak naprawdę trudny projekt, przy takim wysiłku można na pewno wykonać najlepszy system operacyjny na świecie: P

dsocolobsky
źródło