特定の単語に関連する単語(具体的には物理的なオブジェクト)を見つける
質問
1つの単語に関連する単語(具体的には物理的なオブジェクト)を見つけようとしています。例:
テニス:テニスラケット、テニスボール、テニスシューズ
スヌーカー:スヌーカーキュー、スヌーカーボール、チョーク
チェス:チェス盤、チェスの駒
本棚:本
WordNet、特にメロニムの意味関係を使用しようとしました。ただし、以下の結果が示すように、この方法は一貫していません。
テニス:サーブ、ボレー、フットフォール、セットポイント、リターン、アドバンテージ
スヌーカー: nothing
チェス:チェスの動き、チェッカーボード(自分のメロニーム関係は‘ square’& 'diagonal')
本棚:棚
最終的には用語の重み付けが必要になりますが、今では実際には問題になりません。
これを行う方法について誰でも提案がありますか?
更新:JeffとStompChickenの両方の回答を使用してしまいました。
Wikipediaから取得した情報の品質は優れており、特に(当然のことながら)関連情報が(「ブログ」や「ipod」などの用語が存在しないコーパスと比較して)非常に多くあります。
ウィキペディアの結果の範囲は最良の部分です。ソフトウェアは、次のような用語を一致させることができます(簡潔にするためにリストをカットします):
- ゴルフ:[ボール、アイロン、ティー、バッグ、クラブ]
- 写真:[カメラ、フィルム、写真、アート、画像]
- 釣り:[魚、ネット、フック、トラップ、餌、ルアー、ロッド]
最大の問題は、特定の単語を物理的なアーティファクトとして分類することです。デフォルトのWordNetは多くの用語(「ipod」や「トランポリン」など)が存在しないため、信頼できるリソースではありません。
解決
あなたが求めているのは、概念間の意味的関係の源であると思います。そのためには、いくつかの方法が考えられます。
- セマンティック類似度アルゴリズム 。これらのアルゴリズムは通常、Wordnetの関係をツリーウォークして、2つの用語がどの程度関連しているかの実際のスコアを算出します。これらは、WordNetが関心のある概念をどれだけうまくモデル化するかによって制限されます。 WordNet ::類似性(Perlで書かれている)はかなり良いです。
- OpenCyc をナレッジベースとして使用してみてください。 OpenCycは、Cycのオープンソースバージョンであり、「実世界」の事実に関する非常に大きな知識ベースです。 WordNetよりもはるかに豊富なセマティックな関係を持つ必要があります。ただし、OpenCycを使用したことがないので、OpenCycの完成度や使いやすさについては説明できません。
- n-gram頻度分析。ジェフモーザーが述べたように。大量のデータから関係を「発見」できますが、多くの場合ノイズの多い結果を生成できるデータ駆動型のアプローチ。
- 潜在的意味分析 。意味的に関連する単語のセットを見つける、n-gram頻度分析に似たデータ駆動型アプローチ。
[...]
やりたいことを判断すると、最後の2つのオプションは成功する可能性が高いと思います。関係がWordnetにない場合、セマンティックの類似性は機能せず、OpenCycは snookerについてあまり知らないようです。 存在するという事実以外。
n-gramとLSA(またはそれに似たもの)の両方の組み合わせは良いアイデアだと思います。 N-gramの頻度は、ターゲットコンセプト(テニスボールなど)に密接に結びついたコンセプトを見つけ、LSAは同じ文/ドキュメント(ネット、サーブなど)で言及されている関連コンセプトを見つけます。また、名詞のみに関心がある場合は、名詞または名詞句のみを含むように出力をフィルタリングします(品詞タガー)を使用すると、結果が改善される可能性があります。
他のヒント
最初のケースでは、おそらく n-grams n =2。Googleなどの場所から取得するか、すべてのウィキペディア。
詳細については、この関連スタックをご覧くださいオーバーフローの質問。