4

より大きなプロジェクトの一環として、私はテキストを読み、各単語を数字で表す必要があります。たとえば、プログラムに「すべての良い男の子は実を結ぶに値する」と書かれている場合、「 every」を「1742」に、「good」を「977513 」に変換するテーブルを取得します。

これで、明らかにハッシュアルゴリズムを使用してこれらの数値を取得できます。ただし、意味が似ている単語の数値が近く、「good」が「6827」、「great」が「6835」になると便利です。

別のオプションとして、各数値を表す単純な整数の代わりに、複数の数値で構成されるベクトルを使用することをお勧めします。たとえば、(lexical_categorytenseclassificationspecific_word)ここで、lexical_categoryは名詞/動詞/形容詞/ etc、tenseです。はfuture/past / presentであり、分類は幅広い一般的なトピックのセットを定義し、specific_wordは前の段落で説明したものとほとんど同じです。

そのようなアルゴリズムはありますか?そうでない場合は、自分で開発を開始するためのヒントを教えてください。私はC++でコーディングします。

4

4 に答える 4

1

あなたのアイデアは、ほんの少し素朴でも興味深いものです (ただし、素朴な質問は NLP の分野で役立ちます)。

他の実際的な問題 (例えば、構文解析、POS タグ付け、ステミング、そしてもちろん、特定の単語の識別/マッピングの問題...後で非常に簡単に説明します) を脇に置いておくと、その原理そのものはいくつかの困難があります。あなたの提案[意味的に近い単語が近接してコード化される数値スケールの]:

  • 多義性 (いくつかの単語が複数の無関係な意味を持つことができるという事実を示す凝った言葉)
  • セマンティクスは多次元です。たとえば、名詞「ガンプション」は、「エネルギー」のアイデアと「熱意」のアイデアの両方を伝えます。
  • 一部の概念は他の概念とはまったく関係がありません。たとえば、「お茶」と「カーペット」は 2 つの異なる単語セットに属していますが、これらを直線的な尺度で配置しようとすると、この尺度での距離という考えが暗黙のうちに無効になります (おそらく非常に短い距離) はセマンティクスと何らかの関連があります。
  • 表現: 文の中では、特定の概念が個々の単語ではなく表現によって運ばれることがあります。たとえば、「ルネッサンスの男」や「目次」などです。
  • セマンティクスは、(多くの場合) コンテキストから生じることがあります。たとえば、「上司」はしばしば誰かの上司を指し、ブルース・スプリングスティーンのニックネームでもあります.

一言で言えば
  、a)意味(または質問で呼ばれる「定義」、または言語学者によって呼ばれる「セマンティクス」)は、線やツリーにマッピングするのに適していないトリッキーなものです。ネットワークなどの他のグラフを使用することもできますが、比較的制限されたドメインを超えて適用すると、少し扱いに​​くくなる可能性があります。
b) 単語と
  意味を関連付けることも、多義性や表現などのために注意が必要です。

それでも、質問で提案されている種類のマッピングを試みたい場合は、おそらく特定のドメイン (スポーツの解説やメカニックの修理など) のコンテキストで、および/またはいくつかの単語が必要であることを理解する必要があります。 「飛び込む」前に、次の NLP (自然言語処理) の分野とリソースに精通することをお勧めします。

C++ で記述されたツールを使用することに関心がある場合は、さまざまな目的 (およびさまざまな品質) でこれらのツールをいくつか見つけることができるでしょう。また、パフォーマンス上の理由から C/C++ で記述されたプリミティブにバインドされることもありますが、NLP の最新のフレームワークやツールの多くは、Java や Python などのスクリプト言語を使用する傾向があります。C++ ベースの NLP ソフトウェアを直接使用した経験はありません。必要なものが (C++ で) 見つからない場合は、少なくとも以前の技術を広範に検討し、根本的な問題を十分に理解する前に、自分で何かを実装しようとすることを強く思いとどまらせることをお勧めします。

于 2010-03-22T04:11:04.737 に答える
1

単語を数値にマップするには、おそらく単にindexを使用する必要があります。まったく関係のない単語が同じ値を使用してしまう可能性があるため、ハッシュコードを使用することは問題を引き起こしているだけです。

潜在的意味解析 (LSA)や、 WordNetのような語彙リソース内での関連性の尺度の使用 (例: LinResnik、またはJiang-Conrath )など、単語が意味的にどの程度関連しているかを数値的に測定する方法は多数あります。

語彙カテゴリと呼んでいるものを取得するには、品詞 (POS) tagger を使用する必要があります。POS タグは、時制情報も提供します (たとえば、VBP は単語が動詞の過去形であることを意味します)。

トピックに単語を割り当てるには、WordNetの上位語情報を利用できます。これにより、「赤」が「色」のようなものが得られます。または、各単語をさまざまな程度で多数のトピックに割り当てることができるように、トピックへの単語の割り当てをより柔軟にしたい場合は、潜在的ディリクレ割り当て (LDA)を利用できます。

于 2010-03-22T02:18:02.000 に答える
0

自然言語処理は広範で複雑な分野です。そこにはいくつかのツールがあり (リンクされた記事のソフトウェア ツールのセクションを参照)、主なツールはおそらく NLTK です。

簡単な答えはわかりませんが、ここから始めましょう。

于 2010-03-22T01:53:17.907 に答える
0

これは、「意味表現」と呼ばれるより一般的な問題の一部です。私はこの問題に興味がありますが、実際には言葉はあいまいすぎて数字で表せないことがよくあります。少なくともいくつかのコンテキストが存在するため、文がより良い候補になると思います。それでも、テキストを数値として表現することは、コーディングの問題というよりも研究の問題です。

単語については、dmcer が指摘したように、本当に単語を数字にマッピングしたい場合は、LSA/PLSA/LDA が最善の策です。ただし、この場合、整数ではなく実数が得られます。トピック モデルと、意味的に関連する単語を 1 つのトピックの下にグループ化する方法に関する多くの研究があります (トピック モデルは単語の確率的クラスタリングに他なりません)。特に、LSA 表現は過去にセマンティック メモリをモデル化するために使用されていました (Google Scholar "Lemaire and Denhiere" を参照してください)。ただし、mjv が示したように、問題のサイズが手に負えないことを確認できるように、ドメインを制限/特殊化する必要があります。

最後に、個人的には、単語を数値として表現するために使用できる単語の根底にある構造があるのではないかと考えています。述語などの文の明示的な表現には、POS、節などの順序に関連する独自の問題があります。しかし、単語は必ずしもこれらの問題に対処する必要はありません。したがって、まだいくつかの希望があるかもしれません。次のポインターに興味があるかもしれません。

1> 表現論 2> Universal Networking Language (文がハイパーエッジである単語のハイパーグラフとしての言語) 3> Kolmogorov Complexity and Representational Distortion 4> Group Theory and Graph Theory (多くの興味深い表現が使用される可能性があります) 5> レビュー数論の理論 (特定の数のカテゴリを特定のカテゴリの単語に関連付けることができるかどうかを確認するため)

Risi Kondor の論文も興味深いものです。

于 2010-05-26T10:55:23.880 に答える