8

前任者の残骸から組み立てられたソフトウェアプロジェクトの要件のリストがあります。各要件は、1つ以上のカテゴリにマップする必要があります。各カテゴリは、キーワードのグループで構成されています。私がやろうとしているのは、各要件がどのカテゴリーに分類される可能性が高いかをスコアランキングするアルゴリズムを見つけることです。結果は、要件をさらに分類するための開始点として使用されます。

例として、次の要件があるとします。

システムは、顧客の指定された口座に預金を適用するものとします。

そしてカテゴリー/キーワード:

  1. 顧客取引:預金、預金、顧客、口座、口座
  2. 残高勘定:勘定、勘定、借方、貸方
  3. その他のカテゴリ:foo、bar

アルゴリズムで要件をカテゴリ1で最も高く、カテゴリ2で低く、カテゴリ3ではまったくスコア付けしないようにします。スコアリングメカニズムはほとんど私には関係ありませんが、カテゴリ1がカテゴリ2よりも適用される可能性がどれだけ高いかを伝える必要があります。 。

私はNLPを初めて使用するので、少し戸惑っています。私はPythonで自然言語処理を読んでいて、いくつかの概念を適用したいと思っていましたが、完全に適合するものは見当たりませんでした。私が処理しているテキストは非常に小さい(1文)ので、単純な度数分布は機能しないと思います。

4

3 に答える 3

6

「類似性測度」または「距離測度」のカテゴリを確認することをお勧めします(データマイニングの用語では、「分類」とは異なります)。

基本的に、類似度は数学で次のことができる方法です。

  1. 2セットのデータ(あなたの場合は単語)を取ります
  2. いくつかの計算/方程式/アルゴリズムを実行します
  3. その結果、そのデータがどれほど「類似」しているかを示す数値が得られます。

類似性の尺度では、この数値は0から1までの数値です。ここで、「0」は「まったく一致しない」を意味し、「1」は「同一」を意味します。

したがって、実際には文をベクトルと考えることができます。文の各単語は、そのベクトルの要素を表します。同様に、各カテゴリのキーワードのリストについて。

そして、非常に簡単なことを行うことができます。「コサイン類似度」または「ジャッカード係数」を取得します(データの構造に応じて)。

これらのメトリックの両方が行うことは、両方のベクトル(入力文と「キーワード」リスト)を取り、数値を与えることです。すべてのカテゴリでこれを行う場合は、それらの数値をランク付けして、どの一致が最大の類似度係数を持っているかを確認できます。

例として:

あなたの質問から:

顧客取引:預金、預金、顧客、口座、口座

したがって、5つの要素(1、1、1、1、1)でベクトルを作成できます。これは、「customertransactions」キーワードの場合に5つの単語があり、(これは明白に聞こえますが)各単語が検索文字列に含まれていることを意味します。私と一緒にいてください。

だから今あなたはあなたの文を取ります:

システムは、顧客の指定された口座に預金を適用するものとします。

これには、「顧客トランザクション」セットからの2つの単語があります:{預金、アカウント、顧客}

(実際、これは別のニュアンスを示しています。実際には「顧客」がいます。これは「顧客」と同等ですか?)

あなたの文のベクトルは(1、0、1、1、0)かもしれません

このベクトルの1は、最初のベクトルの1と同じ位置にあります。これは、これらの単語が同じであるためです。

つまり、これらのベクトルは何回違うのでしょうか。比較してみましょう:

(1,1,1,1,1)(1,0,1,1,0)

うーん。それらは同じ「ビット」を3回持っています-1、3、および4番目の位置にあります。それらは2ビットだけ異なります。したがって、これら2つのベクトルを比較すると、「距離」は2であるとしましょう。おめでとうございます。ハミング距離を計算しました。ハミング距離が短いほど、データは「類似」しています。

(「類似度」測度と「距離」測度の違いは、前者が正規化されていることです。0から1までの値が得られます。距離は任意の数値であるため、相対値のみが得られます。)

とにかく、これは自然言語処理を行うための最良の方法ではないかもしれませんが、あなたの目的にとっては最も簡単で、実際にはアプリケーションにとって、または少なくとも出発点としてはかなりうまくいくかもしれません。

(追記:「分類」は、タイトルにあるように、「私の文章をとると、どのカテゴリに分類される可能性が最も高いか」という質問に答えることになります。これは、「どれだけ似ているか」と言うのとは少し異なります。カテゴリ2よりもカテゴリ1への私の文章?」これはあなたが求めているもののようです。)

幸運を!

于 2009-09-29T03:59:41.440 に答える
2

問題の主な特徴は次のとおりです。

  • 外部で定義された分類基準(キーワードリスト)
  • 分類される項目(要件文書からの行)は、事実上単一の次元である「キーワード」のために、比較的少数の属性値で構成されています。
  • 定義されているように、フィードバック/キャリブレーションはありません(ただし、その一部を提案するのが適切な場合があります)

これらの特性は、良いニュースと悪いニュースの両方をもたらします。実装は比較的簡単である必要がありますが、分類プロセスの一貫したレベルの精度を達成するのは難しい場合があります。また、少量のさまざまな量(可能なカテゴリの数、アイテム内の最大/平均単語数など)により、必要に応じて、CPUおよび/またはスペースを集中的に使用できるソリューションを選択する余地があります。

それでも、このライセンスが「空想」になったとしても、単純なアルゴリズムから始めて(そしてそれに近づき) 、いくつかの追加と考慮事項を加えて、過剰適合と呼ばれる常に存在する危険に注意しながら、これに基づいて支出することをお勧めします。 。

基本的なアルゴリズム (概念的、つまり現時点ではパフォーマンストリックに焦点を当てていない)

   パラメータ=
     CatKWs=文字列のリストの配列/ハッシュ。リストには可能なものが含まれています
              特定のカテゴリのキーワード。
         使用法:CatKWs [CustTx] =('deposits'、'deposit'、'customer' ...)
     NbCats=事前定義されたカテゴリの整数
   変数:
      CatAccu=数値の配列/ハッシュ。各エントリごとに1つのエントリがあります。
                可能なカテゴリ。使用法:CatAccu [3] = 4(配列の場合)または
                 CatAccu ['CustTx'] + = 1(ハッシュ)
      TotalKwOccurences =一致するキーワードの総数をカウントします(カウント
       単語がいくつかの事前定義されたカテゴリで見つかった場合は複数)

    擬似コード:(1つの入力項目を分類するため)
       1. xin1からNbCatsまで
            CatAccu [x] =0//アキュムレータをリセットします
       2.アイテムの単語Wごとに
             1からNbCatsまでのxごとに
                 WがCatKWs[x]で見つかった場合
                      TotalKwOccurences ++
                      CatAccu [x] ++
       3.1からNbCatsまでのxごとに
             CatAccu [x] = CatAccu [x] /TotalKwOccurences//評価を計算します
       4.CatAccuを値で並べ替えます
       5.(CategoryID、rating)の順序付きリストを返します
              特定のしきい値に関するすべての対応するCatAccu[x]値。

シンプルだがもっともらしい:最も一致するカテゴリを優先しますが、多くの単語が見つかった場合の信頼度を下げる方法として、一致の総数で割ります。この分割は、特定のアイテムのカテゴリ選択の相対的なランク付けには影響しませんが、異なるアイテムの評価を比較する場合は重要である可能性があることに注意してください。

ここで、いくつかの簡単な改善が思い浮かびます:(最初の2つを真剣に検討し、他の1つについて考えます。これらのそれぞれを決定することは、プロジェクトの範囲、データの統計プロファイルに非常に関係しています。分類され、他の要因...)

  • 入力項目から読み取ったキーワードを正規化するか、スペルミスを許容する方法でそれらを一致させる必要があります。使用する単語が非常に少ないため、ばかげたタイプミスのために重要な単語を失うことがないようにする必要があります。
  • CatKWであまり頻繁に見られない単語をより重要視する必要があります。たとえば、「アカウント」という単語は、「foo」または「credit」という単語よりも小さくする必要があります。
  • [ノイズのない]単語が少ないアイテムの評価を重視することもできます(ただし、それは役に立たないか、役に立たないかもしれません)。
  • 自然言語(および要件文書は完全に自然ではない:-))の場合、単語の近接性は単語自体のより強力な指標であることが多いため、ダイグラム(2つの連続する単語)に基づく考慮事項を含めることもできます。
  • 前の(または、先読みロジックでは後の)アイテムに割り当てられたカテゴリに少し重要性を追加することができます。アイテムは関連シリーズで登場する可能性が高く、この規則性の恩恵を受けることができます。

また、格付け自体の計算とは別に、次のことも考慮する必要があります。

  • アルゴリズムの結果自体を評価するために使用されるいくつかのメトリック(tbd)
  • 割り当てられたカテゴリに関連付けられた単語のリストを収集し、最終的にこれらの単語の統計を実行するためのロジック。これにより、CatKWに最初にリストされていない、カテゴリを表す単語を識別できる場合があります。

メトリックの問題は早期に検討する必要がありますが、これには入力項目の参照セットも必要になります。事前定義された辞書カテゴリキーワード(通常はトレーニングセットが使用されます)を処理している場合でも、一種の「トレーニングセット」です。このカテゴリキーワードのリストと重み係数を決定します)。もちろん、そのような参照/トレーニングセットは、統計的に有意であり、[セット全体の]統計的に代表的である必要があります。

要約すると、単純なアプローチに固執します。とにかく、コンテキストは非常に凝ったものになる余地を残しません。特定のアルゴリズム(または特定のアルゴリズム内の特定のパラメーター)の効率を測定する方法を導入することを検討してください。ただし、そのようなメトリックには欠陥がある可能性があり、他の項目を犠牲にして特定のセットのソリューションを専門化するように促されることに注意してください(過剰適合)。

于 2009-09-29T04:21:20.087 に答える