web-dev-qa-db-ja.com

皮肉を検出するスクリプトを教える方法は?

私は現在、楽しいスクリプトを作成しています。基本的には、指定されたフレーズに一致し、一致ポイントに基づいて事前定義された応答を返します。ライブフィードに基づいて情報を取得したり、タスクを実行したり、逸話を伝えたり、単に彼女とチャットしたりするように要求できます。

私はすでに、badwords、caps lock、またはその両方の検出機能を組み込んでいます。プログラムには女の子の名前があり、論理的にはできるだけ女の子らしい女の子に近づけようとしました(たとえば、ほとんどの女の子の女の子が質問に応答するのに700ミリ秒かかることは誰もが知っていますが、もちろん冗談です)。だからここに小さな例があります:

クライアント:何ISあなたの問題?
Kiku:私と同じものを使用しないでください!
クライアント:####あなた
菊:なぜあなたは私にそんなに意地悪なのですか:/

しかし、私は本当に皮肉機能をそれに追加したいと思います。したがって、皮肉で何かを書くと、彼女はそれを検出し、それに応じて応答します。これはトリッキーな部分ですスクリプトをどのように教えますか、皮肉とは何ですか?

もっと具体的に。今日使用される最も一般的な皮肉な言葉は何ですか?または、その統計を取得する方法は?スクリプトに指定されたフレーズのコンテキストを理解させるにはどうすればよいですか?

[〜#〜]更新[〜#〜]

この質問は非常に誇大宣伝になっているので、もう少し整理しておくべきだと思います。スクリプトで皮肉を完全に検出することは基本的に不可能であることは非常に明白です。少なくとも合理的な問題では。ただし、多少の可能皮肉が検出されたと思います。

現在のところ、スクリプトで非常に限定された皮肉を検出できるようにしています。私はいくつかの一般的な皮肉な単語を定義しました(ただし、それだけでは役に立たないだけです。)例:like、what、yeah、right and great。そして、最初に一致します。 :THANKS you are so smartまたはoh you are so "SMART"

スクリプトの主な機能は、タスクを実行したり情報を取得したりすることなので、あとでそれが意図したことであるかどうかを尋ねられます。それから、特殊変数として「ありがとう」を追加すると思いました。そう yeah thanksまたはwhatever thanksは皮肉の可能性を引き起こし、スクリプトは「皮肉を検出しますか?」あなたの最善の策はそのとき「申し訳ありません」と言うことでしょう、そうでなければそれは警告ポイントを追加し、制限に達した場合-それはあなたを無視し始めます。

これらの非常に単純なアルゴリズムが実際に機能するように見えるので、このアイデアには、もちろん多くの調整と微調整の後の未来があります。ただし、同じアイデアを念頭に置いて、もっと賢い誰かがオープンソースソフトウェアを作成することはありますか。次に、この機能をWeb上の多くの機能にフックできます。カスタマーケアがおそらく最もメリットがありますが、この種のソフトウェアは「フラグ設定可能」コンテンツの検出にも使用できます。

11

完全な自然言語処理システムとIBM Watsonシステムによる事実のデータベースがある場合、一部のステートメントに皮肉のフラグを立てることができる場合があります。たとえば、「あなたのお母さんは癌にかかっていると聞きましたが、あなたはちょうど解雇されました!」 「ええ、人生は素晴らしいものではありません!」がんになることと失業することは一般的に前向きな経験として説明されないことを認識できるため、フラグが立てられる可能性があります。

ワトソン級システムをまとめるリソースがないと思います。一般的に使用される皮肉なフレーズのデータ​​ベースをまとめ、ターゲットステートメントと皮肉データベースの間で何らかのテキストマッチングアルゴリズムを使用できます。皮肉に使われているフレーズはすべて誠実に頻繁に使われているので、あまり効果的ではないと思います。たとえば、「それはいいXです。」通常は誠実に使用されますが、時には皮肉にも使用されます。

皮肉は欺瞞と非常に密接に関連しています。皮肉を使用する人がそれに挑戦したときにそれを否定することは珍しくありません、そして彼らの言葉の選択は否定を可能にします。これは、良い皮肉検出器が、チューリングテストに合格する会話型プログラムと同じくらい難しい問題であることを意味していると思います。

17

<皮肉>

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

</皮>

正直なところ、どうすればいいのかわかりません。そもそも皮肉を「ゲット」する実生活の人は約30%に過ぎないと思います。そのため、コンピューターにそれを認識させ、理解させることは非常に難しい作業のように思えます。

編集元の投稿へのコメントに基づいて、私は質問されているタスクの極端な難しさを完全に示したと思います。はい、私の投稿の前半は皮肉でした。私は、メイクアップマークアップタグを使用してその事実さえ強調しました。非常に困難な問題へのささいな解決策についての皮肉なコメントを投稿することによって、その皮肉が「役に立たない」と解釈されると、次の質問が生じます。

書かれた皮肉を認識できない場合、それを認識するアルゴリズムをどのように記述しますか?

ああ、そしてアンナは誰かが彼らの文に「私は思う…」という用語を含んでいる場合、それは通常、それが述べられている意見であり、必ずしも厳密な事実を調査しているわけではないことを示しています。

43
Dave Nay

皮肉の検出の問題は、計算言語学における未解決の問題です。そのようなものについては、stackexchangeよりも google scholar を検索する方がよいでしょう。しかし、この問題についてはある程度の進展があった。 spoken皮肉の場合、 「スペクトルおよびコンテキスト機能」 を使用して、堅牢な認識機能を構築できます(著者の主張)皮肉と人間の注釈者を検出します。論文の著者は、生のテキストは皮肉を検出するのに十分ではないと主張しています-実際、彼らは言われている実際の単語を無視することでより良い結果を得ました。

ツル他 SASIアルゴリズム を使用した昨年のテキストによる皮肉検出の興味深い結果も報告されています。彼らはまた、 別の論文で追加の追跡調査結果を報告しています。

いずれにせよ、これは計算言語研究の最先端です。誰もが銀の大皿に自由裁判を渡すことを期待しないでください。皮肉検出器を微調整するには、大きなトレーニングデータセットと多くの空き時間が必要です。それでも、77%の精度(SASIの論文で報告されているように)では、皮肉フラグのみに基づいて投稿を拒否するには十分ではありません。

11
bdonlan

この答えは非常に現実的なアプローチではないと思いますが、それを行うためのリソースがあれば、それは可能だと思います。コンピューターが読み取れない単語を人間を使って解読するgoogleのreCaptchaプロジェクトを考えてみてください( "詳細はこちらのRecaptchaページ" )。私は問題が似ていると思います。人間が少なくともより優れている何かをマシンに理解させようとしているからです。

何百万人もの人々に、タイプされた会話のコンテキスト内であなたに皮肉を特定するよう依頼するリソースがあると想像してください。多くの人に、皮肉が実現した会話の正確な瞬間と、その識別をマークする必要があることに気付く前の会話のほんの一部をあなたに提出するように依頼できると想像してください。これは、たとえばプログラムがアクセスしたデータベースに保存できます。次に、ユーザーが会話を入力しているときに、データベースをフィルターして「類似した」会話を見つけることができます。

類似性を評価する方法については考える必要がありますが、おそらくすでに研究が存在していると私は思います。私はそれが綴りの誤り訂正の背後にある理論に非常に似ていると思います。どちらの方法でも、タイプされている会話が実際に皮肉であるという確率的な値におそらくなり、ある時点でしきい値を指定する必要があります。

「あの皮肉だった?」という質問をするというあなたの考えも気に入っています。より正確な決定に到達するために、ユーザーへの応答を使用します。

私の答えが完全な無駄ではなかったことを願っています。この取り組みに幸運を祈ります。

-アサフ

2
Asaf

私の2セント:

フレーズで皮肉を認識する方法について心理学者に尋ね、その情報を入力と比較します。

しかし、それは本当に難しいプロジェクトであり、そのために使用された努力によって、あなたは最善のO.S.世界で確かに:P

1
dysoco

計算言語学(別名自然言語処理)での皮肉の検出は、それ自体が非常に難しい問題です。これは基本的に、モデルを最初にトレーニングする必要がある分類問題です。 A 二重項目を見つけるための同様の問題 (PDFファイル)が最近研究され、公開されました。両方の問題の手法は同等です。