5

ドキュメントが「興味深い」期間に関連する約 3000 のテキスト ドキュメントがあります。たとえば、文書 1 に 300 行のテキストとコンテンツがあり、5.5 日間の関心期間があったとします。一方、40 行のテキストを含む別の文書では、6.7 日間の期間が「関心のある」期間になりました。

ここでのタスクは、テキストの内容に基づいて関心のある期間 (連続値) を予測することです。

この問題に取り組むための 2 つのアイデアがあります。

  1. http://radimrehurek.com/gensim/simserver.htmlのようなテクノロジーを使用して、同様のドキュメントのモデルを構築します。新しいドキュメントが到着すると、過去に最も類似した 10 個のドキュメントを見つけて、それらの期間の平均を計算し、その値を新しいドキュメントの対象期間の予測として使用することができます。
  2. ドキュメントを期間のカテゴリに分けます (例: 1 日、2 日、3 ~ 5 日、6 ~ 10 日など)。次に、分類子をトレーニングして、テキスト コンテンツに基づいて期間のカテゴリを予測します。

アイデア 1 の利点は、予測の標準偏差も計算できることですが、アイデア 2 では、予測の不確実性の同様の尺度を計算する方法があまり明確ではありません。また、分類子から最良の結果を得るためにどのカテゴリを選択すればよいか、私にはわかりません。

では、テキスト ドキュメントから時間のような連続値を最適に予測するためのシステムを構築するための経験則はありますか? 分類子を使用する必要がありますか、それとも同様のドキュメントの平均値を使用するアプローチを使用する必要がありますか? 私はその分野で実際の経験がないので、どのアプローチがおそらく最良の結果をもたらすと思われるかを知りたい. この問題を解決するために使用できる単純な既存のテクノロジ (Java または Python ベース) を知っている場合は、ボーナス ポイントが与えられます。

4

2 に答える 2

3

アプローチ (1) は k 最近傍回帰と呼ばれます。それは完全に有効です。ドキュメントのトークンを機能として使用する単純な重回帰など、回帰に対する無数の他のアプローチも同様です。

以下は、 scikit-learn (*)を使用して線形回帰モデルに適合するスケルトン スクリプトです。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDRegressor

# build a term-document matrix with tf-idf weights for the terms
vect = TfidfVectorizer(input="filename")
Xtrain = vect.fit_transform(documents)         # documents: list of filenames

# now set ytrain to a list of durations, such that ytrain[i] is the duration
# of documents[i]
ytrain = ...

# train a linear regression model using stochastic gradient descent (SGD)
regr = SGDRegressor()
regr.fit(Xtrain, ytrain)

それでおしまい。対象期間を予測したい新しいドキュメントがある場合は、次のようにします。

Xtest = vect.transform(new_documents)
ytest = regr.predict(Xtest)

これは単純な線形回帰です。実際には、興味の持続時間はテキストの内容の線形関数ではないと予想しますが、これで始められるかもしれません。次のステップは、より高度な回帰モデルを扱う機械学習または統計に関する教科書を手に入れることです。

(*) 私はこのプロジェクトに貢献しているので、これは公平なアドバイスではありません。中途半端な機械学習ツールキットには、線形回帰モデルがあります。

于 2013-02-26T12:59:54.797 に答える
1

(以下は私の学問的な「経験」に基づいていますが、それを投稿するのに十分な情報があるようです)。

タスクは次のように再定式化できるようです。

スコアリングされたドキュメントのトレーニングセットを前提として、コンテンツに基づいて任意のドキュメントをスコアリングするためのシステムを設計します。

「コンテンツに基づく」は非常にあいまいです。実際、あいまいすぎると思います。スコアの原因と思われるドキュメントの特定の機能を見つけることを試みることができます。スコアを構成する特定の「価値のある」単語、または単語のグループを探していることがわかるまでは、それを絞り込むことができるまでは、より人間的な作業です(http://en.wikipediaを参照してください)。 org / wiki / N-gram)。

また、類似度に基づいて、検索エンジンのようなシステムを開発してみることもできますsim(doc1, doc2)。ただし、可能なすべてのスコア(最低から最高まで、複数回)を特徴とする大きなコーパスが必要になるため、すべての入力ドキュメントに対して、類似のドキュメントが存在する可能性があります。そうしないと、結果がわかりにくくなります。

sim()が返す値に応じて、メジャーは次のような関係を満たす必要があります。

sim(doc1,doc2) == 1.0 - |score(doc1) - score(doc2)|.

メジャーの品質をテストするために、ドキュメントの各ペアの類似性とスコアの差を計算し、相関関係を確認できます。

最初の選択は、tf-idfを使用したコサイン類似度です。

データの分類についても言及しました。貧弱な類似度を「正当化」する方法のように私には思えます。つまり、測定値が適切である場合、ドキュメントがどのカテゴリに分類されるかを明確にする必要があります。分類子に関しては、最初にドキュメントにいくつかの「機能」を定義する必要があります。

ドキュメントのコーパスが大きい場合は、クラスタリングを試してプロセスを高速化できます。

最後に、最終的なスコアを決定するために、いくつかの最も類似したドキュメントのスコアを処理することをお勧めします。この場合、生の平均は最良のアイデアではない可能性があります。「類似性が低い」とは「精度が低い」ことも意味するためです。

実装については、以下をご覧ください。PythonでのN-Gram、tf-idf、Cosineの類似性の簡単な実装

(IMHO、3000のドキュメントは、コンテンツやコンテンツとスコアの関係についての知識がなくても、信頼できることを行うには少なすぎます。)

于 2013-02-26T12:57:27.563 に答える