Como ensinar um script para detectar sarcasmo? [fechadas]

11

Atualmente, estou construindo um script divertido, que basicamente corresponde a determinadas frases e fornece uma resposta predefinida com base nos pontos de correspondência. Você pode pedir para recuperar algumas informações com base em feeds ao vivo, executar tarefas, contar histórias ou apenas conversar com ela.

Eu já tenho detecção embutida para palavrões, caps lock ou ambos. O programa tem um nome de menina e eu tentei chegar o mais perto possível de ser uma garota feminina, nos termos lógicos (por exemplo: todo mundo sabe que a maioria das meninas femininas leva 700ms para responder a uma pergunta, brincando, é claro). Então, aqui está um pequeno exemplo:

Cliente: QUAL É O SEU PROBLEMA?
Kiku: Não use esse tom comigo!
Cliente: #### você
Kiku: por que você está sendo tão mau comigo: /

No entanto, eu realmente gostaria de adicionar o recurso sarcasmo. Então, se você escrever algo em sarcasmo, ela o detectará e responderá de acordo. Agora, essa é uma parte complicada: como você ensina um script, o que é sarcasmo?

Para mim, mais específico. Quais são as palavras sarcásticas mais comuns usadas hoje? Ou como obter essa estatística? Como posso fazer o script entender o contexto da frase especificada?

ATUALIZAR

Como esta pergunta está ficando muito exagerada, acho que as coisas devem ser esclarecidas um pouco mais. É muito claro que fazer um script detectar completamente o sarcasmo é basicamente impossível. Pelo menos em questão razoável. No entanto, acredito que alguma quantidade de possível sarcasmo possa ser detectada.

Atualmente, cheguei até agora, que meu script pode detectar um sarcasmo muito limitado. Eu predefini algumas palavras sarcásticas comuns (no entanto, sozinhas são inúteis). Por exemplo: como, o que quer que seja, certo, ótimo. E então ele combina primeiro, as coisas simples, como maiúsculas e citadas: THANKS you are so smartou oh you are so "SMART".

Como a principal função dos scripts é executar tarefas ou recuperar informações, e o afterwords perguntará se foi isso que você quis dizer. Então eu pensei, adicionando "obrigado" como uma variável especial. Então, yeah thanksou whatever thanksdesencadeará o possível sarcasmo, e o script perguntará: "Eu detecto o sarcasmo?" Sua melhor aposta seria pedir desculpas, caso contrário, ele adicionará um ponto de aviso e, se o limite for atingido, começará a ignorá-lo.

Como esses algoritmos muito simples parecem realmente funcionar, essa idéia tem um futuro, é claro, depois de muito ajuste e ajustes. No entanto, alguém mais inteligente criaria um software de código aberto com a mesma idéia em mente. Em seguida, esse recurso pode ser conectado a várias funções na web. O atendimento ao cliente provavelmente se beneficiaria mais, no entanto, esse tipo de software também poderia ser usado para detectar o conteúdo "sinalizável".

Kalle H. Väravas
fonte
14
Até que seu script pode realmente entender o que está sendo dito (ao invés de pegar palavras-chave), eu acho que é impossível pegar a maioria dos cenários de sarcasmo
Rob
26
@ Kalle Vamos ser claros aqui. O sarcasmo é um dos dispositivos mais sutis e avançados da linguagem falada. Mesmo se você é um falante nativo de inglês, totalmente capaz de captar as sutilezas, como tom de voz e qualquer informação contextual relevante, você regularmente falha em detectar o sarcasmo. Os falantes não nativos quase não têm chance alguma. Leve-o ao texto e até os falantes nativos quase não têm chance. E você deseja que computadores, que lutam para compreender vagamente até as frases mais simples, resolvam esse problema? Deixe isso para alguém com uma vida inteira na análise de fala e texto.
doppelgreener
17
Fazer um script reconhecer sarcasmo? Isso é reeeally útil;)
zenzelezz
12
Vamos lá - mesmo Sheldon Cooper não pode detectar o sarcasmo ...
Paul R
3
Eu não acho que essa pergunta deveria ter sido encerrada, especialmente não como "não construtiva". Eu daria uma votação de reabertura agora mesmo se não fosse vinculativa, mas acho que essa pergunta merece alguns votos de reabertura, especialmente com a edição mais recente.
Adam Lear

Respostas:

17

Se você tivesse um sistema completo de processamento de linguagem natural e um banco de dados de fatos do sistema IBM Watson, poderá sinalizar algumas declarações como possível sarcasmo. Por exemplo: "Ouvi dizer que sua mãe tem câncer e você acabou de ser demitido!" "Sim, a vida não é maravilhosa!" pode ser sinalizado porque reconhece que contrair câncer e perder um emprego geralmente não são descritos como experiências positivas.

Suponho que você não tenha recursos para montar um sistema de notas Watson. Você pode montar um banco de dados de frases sarcásticas comumente usadas e, em seguida, usar algum tipo de algoritmo de correspondência de texto entre a instrução de destino e o banco de dados de sarcasmo. Eu tenho que supor que não será muito eficaz, porque todas as frases que são usadas sarcasticamente são usadas sinceramente com mais frequência. Por exemplo "Esse é um bom X." geralmente é usado com sinceridade, mas às vezes é usado com sarcasmo.

O sarcasmo está intimamente relacionado ao engano. Não é incomum uma pessoa que usa o sarcasmo negá-lo quando desafiado, e sua escolha de palavras torna possível a negação. Eu suspeito que isso significa que um bom detector de sarcasmo provavelmente é um problema tão difícil quanto um programa de conversação que passa no teste de Turing.

Charles E. Grant
fonte
1
Obrigado pela sua resposta. Esta qualidade de respostas é definitivamente melhor que a acima. Eu acho que a criação de um banco de dados com frases reais vai ficar muito grande. No entanto, um banco de dados de palavras + alguns outros métodos poderia realmente fazê-lo funcionar (não 100%, mas novamente não 0%). Estou planejando adicionar uma etapa de verificação. Se o script detectar um leve nível de sarcasmo, ele perguntará: Isso foi sarcasmo? Se você responder: "OH NÃO", confirmará o sarcasmo e, na verdade, ficará bravo e o ignorará por algum tempo (o tempo será determinado pelo nível de sarcasmo).
Kalle H. Väravas
3
Eu realmente acho que você quer ficar com as frases, porque o sarcasmo tem tudo a ver com contexto, e há pelo menos algumas frases que são mais propensas a serem usadas sarcasticamente. "Sim" não é sarcástico, "Certo" não é sarcástico, mas "Sim, certo!" provavelmente é usado com mais frequência sarcasticamente do que com sinceridade.
Charles E. Grant
6
Quanto à qualidade das respostas aqui, devo dizer que isso é parcialmente sua responsabilidade. O processamento de linguagem natural é um campo conhecido que pode fornecer várias técnicas úteis, mas você não dá nenhuma indicação de ter feito alguma pesquisa para pesquisar os métodos existentes. É um problema difícil, e não algo que possa ser útil para ser respondido em geral em uma postagem do SO. Muitos, muitos livros foram preenchidos sobre o tema do processamento de linguagem natural.
Charles E. Grant
43

<Sarcasmo>

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

</Sarcasm>

Honestamente, não tenho idéia de como fazer isso. Eu acho que apenas cerca de 30% das pessoas na vida real "pegam" sarcasmo em primeiro lugar, então fazer um computador reconhecê-lo e entendê-lo parece uma tarefa muito difícil.

Editar Com base nos comentários do meu post original, acredito que ilustrei perfeitamente a extrema dificuldade da tarefa que está sendo solicitada. Sim, a primeira metade do meu post foi sarcástica. Eu até enfatizei esse fato usando uma tag de marcação inventada. Ao postar um comentário sarcástico sobre uma solução trivial para um problema excepcionalmente difícil, e esse sarcasmo sendo interpretado como "inútil" traz essa pergunta:

Se você não consegue reconhecer o sarcasmo por escrito, como escrever um algoritmo que o reconheça?

Ah, e Anna, se alguém incluir o termo "eu acho ..." em sua frase, geralmente indica que é uma opinião que está sendo afirmada, não necessariamente um fato concreto pesquisado.

Dave Nay
fonte
3
-1 Sinto muito, não sei por que esta resposta está sendo votada. O código fornecido é 100% irrelevante para a pergunta em questão e a segunda parte da resposta está dizendo "não faço ideia". Sua resposta é de 30% no tópico e não ajuda nem dá uma boa direção.
Kalle H. Väravas
18
Está sendo votado porque o pôster apontou que não há maneira prática de fazer isso. Como os humanos geralmente não conseguem detectar o sarcasmo, não há como ensinar uma máquina. Além disso, o sarcasmo é frequentemente transmitido pelo tom de voz e, portanto, muitas vezes incompreendido na comunicação online.
Andy Waite
1
@ Andy Waite Sim, claro, você está correto. Como eu disse, sua resposta é de 30% no tópico (mesmo que ele tenha começado a receber votos quando não havia texto adicional). Ainda assim, eu não aceitarei essa resposta, porque ... sim, é claro que você não consegue obter 100% de correspondência .. Mas mesmo uma correspondência de 50%? Esta resposta está basicamente dizendo: "Eu não entendo sua pergunta, acho que não é possível. Parece difícil, apenas desista!" Eu, principalmente, só recebem estes tipos de respostas em programadores, ao lado .. "Por que você está fazendo isso Use um quadro?!"
Kalle H. Väravas
4
@ Kalle Eu concordo com você. Essa resposta é parte sarcasmo, parte "não sei" e parte de adivinhação (30%? Sério? Você pode apoiar isso?). É totalmente inútil e deveria ter sido, na melhor das hipóteses, um comentário.
Adam Lear
3
Tópico de comentário interessante - aparentemente, nem os humanos conseguem detectar o sarcasmo (ou a falta dele) de maneira confiável.
Piskvor saiu do prédio
11

O problema da detecção de sarcasmo é um problema aberto na lingüística computacional - você ficaria melhor se pesquisasse no google scholar do que no stackexchange por essas coisas. Houve, no entanto, algum progresso na questão. Para o sarcasmo falado , um reconhecedor robusto pode ser construído usando "recursos espectrais e contextuais" que (afirmam os autores) detecta o sarcasmo e também um anotador humano. Os autores do artigo afirmam que o texto não é, portanto, suficiente para detectar o sarcasmo - de fato, eles obtiveram melhores resultados ignorando as palavras reais ditas.

Tsur et al. também relataram alguns resultados interessantes na detecção de sarcasmo textual no ano passado com o algoritmo SASI . Eles também relatam algumas descobertas adicionais de acompanhamento em outro artigo.

De qualquer forma, essa é a vanguarda da pesquisa em linguagem computacional; não espere que alguém lhe entregue um libsarcasm em uma bandeja de prata. Você precisará de grandes conjuntos de dados de treinamento e muito tempo livre para ajustar seu detector de sarcasmo - e mesmo assim, uma precisão de 77% (conforme relatado no artigo da SASI) não é suficiente para rejeitar uma postagem baseada apenas em um sinalizador de sarcasmo.

bdonlan
fonte
Hmm, 77%? Isso parece ser melhor do que a maioria das pessoas . (nenhum sarcasmo pretendido)
Piskvor saiu do prédio 12/09
@Piskvor, muito possivelmente, mas não tenho estatísticas sobre isso. É melhor precisão do que a de áudio, pelo menos.
bdonlan 12/09
2

Não acho que essa resposta seja um método de abordagem muito realista, mas se você tivesse os recursos para fazê-lo, acredito que seria possível. Considere o projeto reCaptcha do Google, que usa seres humanos para decifrar palavras que os computadores não podem ler ( "Página Saiba mais sobre a recaptcha" ). Acredito que o problema é semelhante, pois você está tentando fazer com que uma máquina descubra algo que os humanos já são pelo menos melhores .

Imagine que você tinha recursos para pedir a milhões de pessoas que lhe identificassem sarcasmo dentro de um contexto de conversa digitada. Imagine que você poderia pedir que muitas pessoas enviassem a você o momento exato da conversa em que o sarcasmo foi realizado e o mínimo da conversa antes da conclusão de que seria necessário marcar essa identificação. Isso pode ser armazenado em um banco de dados, digamos, ao qual seu programa teve acesso. Então, como o usuário estava digitando a conversa para você, o banco de dados poderia ser filtrado para conversas "semelhantes".

Como avaliar a similaridade é algo em que pensar, mas acredito que provavelmente já exista pesquisa para já. Eu acredito que seria muito parecido com a teoria por trás das correções de erros ortográficos. De qualquer maneira, provavelmente se reduziria a um valor probabilístico de que a conversa sendo digitada é de fato sarcástica, e em algum momento um limite teria que ser fornecido.

Também gosto da sua ideia de apresentar a pergunta "Isso foi sarcasmo?" ao usuário e, em seguida, usando sua resposta para chegar a uma decisão mais precisa.

Espero que minha resposta não tenha sido um desperdício completo e desejo-lhe sorte neste empreendimento.

-Asaf

Asaf
fonte
1

A detecção de sarcasmo na lingüística computacional (também conhecida como processamento de linguagem natural) é um problema extremamente difícil por si só. É basicamente um problema de classificação em que um modelo deve ser treinado primeiro. Um problema semelhante para encontrar duplos participantes (arquivo PDF) foi recentemente pesquisado e publicado. As técnicas para ambos os problemas são comparáveis.

stackoverflowuser2010
fonte
1

Meus 2 centavos:

Pergunte a um psicólogo sobre como reconhecer sarcasmo em frases, com essas informações compare-as com a entrada.

Mas seria um projeto muito difícil, com o esforço usado nisso, você poderia fazer o melhor sistema operacional do mundo com certeza: P

dysoco
fonte