問題タブ [machine-learning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PythonでのTwitterの感情分析
Textual Sentiment Analysis(http://en.wikipedia.org/wiki/Sentiment_analysis )のオープンソース実装、できればPythonでの実装を探しています。私が使用できるそのようなオープンソースの実装に精通している人はいますか?
Twitterで「youtube」などの検索用語を検索し、「幸せな」ツイートと「悲しい」ツイートをカウントするアプリケーションを作成しています。私はGoogleのappengineを使用しているので、Pythonで使用しています。Twitterから返された検索結果を分類できるようにしたいのですが、Pythonで分類したいと思います。私はこれまでそのような感情分析装置を見つけることができませんでした。特にPythonでは見つかりませんでした。私が使用できるそのようなオープンソースの実装に精通していますか?できれば、これはすでにpythonに含まれていますが、そうでない場合は、Pythonに変換できることを願っています。
注意してください、私が分析しているテキストは非常に短く、ツイートです。したがって、理想的には、この分類器はそのような短いテキスト用に最適化されています。
ところで、ツイッターは検索で「:)」と「:(」の演算子をサポートしています。これはまさにこれを目的としていますが、残念ながら、それらによって提供される分類はそれほど優れていないので、これを自分で試してみるかもしれないと思いました。
ありがとう!
ところで、初期のデモはここにあり、私がこれまでに持っているコードはここにあり、興味のある開発者と一緒にオープンソース化したいと思っています。
machine-learning - 自然言語処理における二値化
二値化とは、エンティティのカラフルな特徴を数値のベクトル (ほとんどの場合はバイナリ ベクトル) に変換して、分類アルゴリズムの良い例を作成することです。
「The cat ate the dog」という文を二値化する場合、すべての単語に ID (たとえば、cat-1、ate-2、the-3、dog-4 など) を割り当てることから始めて、単語を単純に次のように置き換えることができます。ベクトル <3,1,2,3,4> を与える ID です。
これらの ID が与えられると、各単語に 4 つの可能なスロットを与え、特定の単語に対応するスロットを 1 に設定して、ベクトル <0,0,1,0,1,0,0,0 を与えるバイナリ ベクトルを作成することもできます。 ,0,1,0,0,0,0,0,1>. 後者の方法は、私の知る限り、一般的にバッグ・オブ・ワード法と呼ばれています。
さて、私の質問ですが、一般的な自然言語処理の機能、特に (Nivres アルゴリズムを使用した)遷移ベースの依存関係解析の機能を説明する際に最適な2 値化方法は何ですか?
このコンテキストでは、文全体をエンコードするのではなく、解析の現在の状態 (たとえば、スタックの先頭の単語と入力キューの最初の単語など) をエンコードしたいと考えています。順序は関連性が高いため、bag-of-words-method は除外されます。
bestとは、不必要なメモリを使い果たすことなく、データを分類器にとって最もわかりやすいものにする方法を指しています。たとえば、実際にバイグラムが 2% しか存在しない場合、バイグラムが 20000 の一意の単語に対して 4 億の機能を使用することは望ましくありません。
答えは特定の分類子にも依存するため、最大エントロピー モデル (liblinear)、サポート ベクター マシン (libsvm)、およびパーセプトロンに主に関心がありますが、他のモデルに適用される答えも歓迎します。
artificial-intelligence - 進化的アルゴリズムとニューラル ネットワークは同じドメインで使用されていますか?
さまざまなクラスの機械学習アルゴリズムの違いを感じようとしています。
進化的アルゴリズムの実装は、ニューラル ネットワークの実装とはかなり異なることを理解しています。
ただし、どちらも、潜在的にノイズの多いトレーニング/履歴データのセットからの入力と出力の間の相関関係を判断することを目的としているようです。
定性的な観点から、進化的アルゴリズムとは対照的に、ニューラル ネットワークのより適切なターゲットとなる問題領域はありますか?
それらを補完的な方法で使用することを提案するいくつかの記事をざっと見てきました。そのためのユースケースの適切な例はありますか?
language-agnostic - プログレスバーなどの現実的な時間の見積もり
ソフトウェアで非現実的な見積もりを出すプログレスバーや時間の見積もりが好きではないのは私だけではないことを私は知っています。最良の例は、10秒で0%から90%にジャンプし、最後の10%を完了するのに1時間かかるインストーラーです。
ほとんどの場合、プログラマーはタスクを完了するためのステップを見積もり、現在のステップ/合計ステップをパーセンテージで表示します。各ステップの完了には異なる時間がかかる可能性があるという事実を無視します。たとえば、データベースに行を挿入する場合、挿入時間は挿入された行の数に応じて長くなる可能性があります(簡単な例)。または、ファイルをコピーする時間は、ファイルのサイズだけでなく、ディスクとそれがどれほど断片化されているか。
今日、私は誰かがすでにこれをモデル化しようとしていて、おそらく構成可能なロバスト推定器を備えたライブラリを作成したかどうかを自問しました。外部要因(ネットワーク接続、ユーザーが他のプログラムを実行するなど)がその役割を果たすため、確実な見積もりを出すことは難しいことを私は知っています。
プロファイリングを使用してより適切な推定量を設定するソリューションもあるかもしれません。あるいは、機械学習アプローチを使用することもできます。
この問題の高度な解決策を知っている人はいますか?
これに関連して、プログレスバーの再考という記事が非常に興味深いものであることがわかりました。プログレスバーが時間の認識をどのように変えることができるか、そしてそれらの洞察を使用してより速いように見えるプログレスバーを作成する方法を示しています。
編集:時間の見積もりを手動で調整する方法を考えることができます。「推定ライブラリ」を使用しても、アルゴリズムを微調整する必要があります。しかし、この問題は統計ツールで対処できると思います。もちろん、見積もり担当者はプロセス中にデータを収集して、次のステップのためのより適切な見積もりを作成します。
私が今していることは、前のステップ(タイプごとにグループ化され、ファイルサイズ、トランザクションのサイズなどで正規化されたステップ)でかかった平均時間を取り、この平均を次のステップの見積もりとして取ります(ここでも、さまざまなタイプでカウントし、サイズ)。
今、私は推定量を作成するためのより良い統計ツールがあることを知っています、そして誰かがそれらを問題に適用したかどうか疑問に思います。
machine-learning - インテリジェントなコード補完? 学習してコードを書くAIはありますか?
私がこの質問をしているのは、明確な答えを与えることができるよく読まれた CS タイプがここにたくさんいることを知っているからです。
自分でコードを生成してコンパイルしてプログラムを書き、過去の反復から学習して進歩するような AI が存在するか (または研究/開発されているか) 疑問に思っています。私は、私たちプログラマーを時代遅れにするために働くことについて話している. 試行錯誤によって、プログラミング言語で何が機能し、何が機能しないかを学習するものを想像しています。
私はこれが空想のパイに聞こえることを知っているので、何が行われたかを知りたいと思っています。
もちろん、人間のプログラマーでも入力と仕様が必要なので、このような実験ではパラメーターを慎重に定義する必要があります。AI がさまざまなタイミング機能を探索する場合と同様に、その側面を明確に定義する必要があります。
しかし、洗練された学習 AI があれば、それが何を生成するのか興味があります。
私たちの判断力、好み、偏見など、コンピューターが再現できない人間の資質がたくさんあることを私は知っています。しかし、私の想像力は、1 日考えた後に Web サイトを吐き出して、それが何を思いついたのかを私に見せてくれるプログラムのアイデアが好きです。でも、1日1回、フィードバックをして学習を手伝うかもしれません。
この考えのもう 1 つの手段は、「メニュー付き Web サイト」や「画像ツール」などの高レベルの説明を提供するとよいでしょう。これにより、コード補完モジュールとして役立つ十分な深さのコードが生成され、詳細。しかし、それは非インテリジェントな静的階層コード補完スキームとして想定できると思います。
どうですか?
twitter - 大量のデータを楽しむにはどのような方法がありますか? (つまり、Twitter、del.icio.us などの API)
Twitter、Google、Amazon、del.icio.us などはすべて無料で遊べる大量のデータを提供します。Project Gutenberg などのイニシアチブを通じて利用できるテキスト データも多数あります。そして、それは氷山の一角に過ぎないようです。
このデータをどのように楽しみに使用できるか、ずっと考えていました。私は IT の学生 1 年生なので、統計、機械学習、協調フィルタリングなどの知識はありません。この分野への関心は、Toby Segaran著『 Programming Collective Intelligence 』という本に刺激されました。データでできること。どこから始めればよいかわかりません。何か案は?
また、人工知能プログラミングのパラダイムのようなものを買いに行くべきかどうかも考えています。街中を旅する価値はありますか?
language-agnostic - 強化学習の優れた実装?
AIクラスのプロジェクトでは、テトリスの単純なゲームに勝る強化学習アルゴリズムを実装する必要があります。ゲームはJavaで書かれており、ソースコードがあります。私は強化学習理論の基礎を知っていますが、SOコミュニティの誰かがこの種のことを実際に体験したことがあるかどうか疑問に思いました。
- テトリスゲームで強化学習を実装するための推奨読書は何ですか?
- チェックする価値のある同様のことを達成する優れたオープンソースプロジェクトはありますか?
編集:より具体的であるほど良いですが、主題に関する一般的なリソースを歓迎します。
ファローアップ:
フォローアップを投稿したらいいなと思いました。
これが私が将来の学生のために最終的に得た解決策(コードと記述)です:)。
sql - SQLでの単純ベイズ計算
単純ベイズを使用して、ドキュメントを比較的多数のクラスに分類したいと考えています。私は、エンティティが正しく検証された記事とその記事が類似しているかどうかに基づいて、記事内のエンティティ名の言及が本当にそのエンティティであるかどうかを確認しようとしています。
たとえば、ある記事で「General Motors」というテキストを見つけたとします。記事とその中で言及されている正しいエンティティを含む一連のデータがあります。したがって、新しい記事で言及されている「ゼネラルモーターズ」が見つかった場合、既知の本物を含む以前のデータの記事のクラスに該当する必要があります。 「ゼネラルモーターズ」に言及するのと、そのエンティティに言及していない記事のクラスとの比較は?
(すべてのエンティティのクラスを作成して、すべての新しい記事を可能なすべてのクラスに分類しようとしているわけではありません。エンティティ名のもっともらしい言及を見つけるためのヒューリスティックな方法が既にあり、限られた数の妥当性を検証したいだけです。メソッドが既に検出した記事ごとのエンティティ名の言及)。
潜在的なクラスと記事の数が非常に多く、単純なベイズが比較的単純であることを考えると、SQL ですべてを実行したかったのですが、スコアリング クエリに問題があります...
これが私がこれまでに持っているものです:
マークされたデータ内の各記事は個別の単語に分割され、各エンティティの各記事について、すべての単語が に追加され、each_entity_word
および/またはその単語がword_count
インクリメントされ、doc_count
インクリメントされます。これは、その記事で言及されている既知のエンティティごとに繰り返されます。entity_word_sum
entity_id
各単語に含まれるエンティティに関係なく、記事ごとtotal_entity_word
total_entity_word_sum
に同様にインクリメントされます。
- P(word|any document) は、その単語
の
word_count
inに等しい必要があり ますtotal_entity_word
doc_count
total_entity_sum
- P(単語|ドキュメントは
エンティティxに言及
word_count
し ています)each_entity_word
entity_id
doc_count
each_entity_sum
entity_id
- P(単語|ドキュメントはエンティティxについて言及していません) は、(そのエンティティのinからその単語のinを引いたもの) 以上 ( inのそのエンティティの inを引いたもの)に等しくなければなりません
word_count
total_entity_word
word_count
each_entity_word
doc_count
total_entity_sum
doc_count
each_entity_sum
- P(ドキュメントはエンティティx
doc_count
に言及しています) は、each_entity_sum
そのエンティティ ID に対して等しい必要がありますdoc_count
。total_entity_word
- P(ドキュメントはエンティティxについて言及していません) は 1 マイナス ( xのエンティティ ID に対してin )
doc_count
に等しい必要があります。each_entity_sum
doc_count
total_entity_word
入ってくる新しい記事の場合、それを単語に分割し、または のいずれeach_entity_word
かに対して ('I'、'want'、'to'、'use'...) の単語を選択するだけtotal_entity_word
です。私が(mysql)で作業しているdbプラットフォームでは、IN句は比較的適切に最適化されています。
また、SQLにはproduct()集計関数がないため、もちろん、sum(log(x))またはexp(sum(log(x)))を実行して、product(x)と同等のものを取得できます。
したがって、新しい記事を取得し、それを個別の単語に分割し、それらの単語を大きな IN() 句とテストする潜在的なエンティティ ID に入れる場合、記事がそのエンティティに該当する単純なベイジアン確率を取得するにはどうすればよいですか? SQLのidのクラス?
編集:
#1を試してください:
tdd - TDD とベイジアン スパム フィルターの問題
ベイジアン分類器がスパムをフィルタリングする効果的な方法であることはよく知られています。これらはかなり簡潔にできますが (私たちのものは数百の LoC にすぎません)、結果を得る前にすべてのコア コードを事前に記述する必要があります。
ただし、TDD アプローチでは、テストに合格するための最小限のコードしか記述できないことが義務付けられているため、次のメソッド シグネチャが与えられます。
次のテキスト文字列は、明らかにスパムです。
私が書くことができるコードの最小量は次のとおりです。
ここで、別のテスト メッセージを追加するかもしれません。
コードを次のように変更できます。
...などなど。ある時点までは、コードは文字列チェックや正規表現などでごちゃごちゃになってしまいます。最初から考えたり、別の方法で書いたりするのではなく、コードを進化させたからです。
では、可能な限り単純なコードからコードを進化させてテストに合格することが適切なアプローチではない、このような状況で TDD はどのように機能するのでしょうか? (特に、最良の実装を自明に進化させることができないことが事前にわかっている場合)。
machine-learning - 電子メールスパム検出のためのニューラルネットワーク
2つのグループに分類された過去数年間に受信した電子メール(約1万通の電子メール)の履歴を持つ電子メールアカウントにアクセスできるとします。
- 本物のメール
- スパム
スパム検出に使用できるニューラルネットワークソリューションを作成するタスクにどのようにアプローチしますか?基本的に、電子メールをスパムまたは非スパムのいずれかに分類しますか?
電子メールのフェッチがすでに行われており、分類部分のみに焦点を当てる必要があると仮定します。
私が答えてもらいたい主なポイントは次のとおりです。
- NNの入力として選択するパラメーターとその理由を教えてください。
- NNのどの構造が、そのようなタスクに最適である可能性が最も高いでしょうか。
また、リソースの推奨事項、または既存の実装(できればC#)は大歓迎です
ありがとうございました
編集
- プロジェクトの主な側面は、スパム検出でNNアプローチがどのように機能するかをテストすることであるため、ニューラルネットワークを使用することにしました。
- また、ニューラルネットワークとスパムの主題を単に調査することは「トイプロブレム」です