1

私はテキスト分析について個人的な調査を行っており、テキストの一部を「スコアリング」するために70近くのメトリック(代名詞の使用頻度、読みのレベル、母音の頻度、箇条書きの使用など)を考え出しました。

理想的には、同じ著者からの別々のテキストが同様のスコアを持つでしょう。最終的な目標は、多数の著者にインデックスを付け、スコアを使用して、誰が別の匿名のテキストを書いたかを推測することです。

スコアを0から100に正規化し、2つのテキストがどのように「類似」しているのかをパーセンテージで表したいと思います。重みを決定する方法などの質問スコアを計算する方法は?スコアリングメトリックの背後にある数学と正規化する方法を説明しますが、すべてのメトリックが同じ重みであると想定します。

私の質問はこれです:ユーザーごとの累積スコアがその特定のユーザーからの書き込みを最も正確に説明することを保証するために、各メトリックをスコアリングするときに使用する適切な重みをどのように決定しますか?

また、ユーザーごとに重みを割り当てることができます。単語あたりの音節がアリスのために作品を書いた人を最も適切に説明している場合、2文字の単語の頻度はボブにとって最適ですが、アリスの最も重い重みは単語あたりの音節にあり、ボブは2の頻度になります-文字の言葉。

4

2 に答える 2

2

加重スコアでそれを行いたい場合は、http://en.wikipedia.org/wiki/Principal_component_analysisを見てください-さまざまな作成者の最初の(最大の)主成分のカップルの値をプロットして、クラスタリングを見つけます。また、最小のいくつかの主成分のプロットを取り、何かが目立つかどうかを確認することもできます-目立つ場合は、おそらくグリッチまたは間違いによるものです-一般的なルールから例外を選択する傾向があります。

別のオプションはhttp://en.wikipedia.org/wiki/Linear_discriminant_analysisです

アリスと非アリスの分類の重み、およびボブと非ボブの分類の重みを作成した場合は、作成者ごとの重みを作成できると思います。

著者を特定するもう1つの方法は、著者ごとにhttp://en.wikipedia.org/wiki/Language_modelを作成することです。

さまざまな測定値が独立していると主張する準備ができている場合は、それらをhttp://en.wikipedia.org/wiki/Naive_Bayes_classifierと組み合わせることができます。最終的なベイズ因子の対数は、個々のベイズ因子の対数の合計になり、加重スコアの合計が得られます。

于 2012-03-24T05:18:11.303 に答える
1

さまざまな文体の属性を1つの数字にまとめようとしているようです。これは、ユーザーの文体間の類似性を判断するために何らかの形で使用されます。それはどのようにうまくいくのでしょうか?ボブは100、アリスは50などですか?

本当に必要なのは、メトリックの(一部のサブセット)を使用して、各文体の特徴ベクトルを形成することです。(60% pronoun usage, 10th grade "reading level", 40% vowels, ...)次に、特定のドキュメントが、で表され、別のドキュメントがで表されると言うことができます(40% pronouns, 12th grade "reading level", 50% vowels, ...)。ここで、これらの各属性は実数であり、ベクトル内の位置は、話している属性を示します。

次に、これらの各ベクトルに真の作成者によってラベルを付けることができるため、各作成者に対してラベル付けされた特徴ベクトルのコレクションが得られます。次に、さまざまな方法で類似度を計算できます。


新しいドキュメントがあり、誰がそれを書いたかを推測したい場合、これは標準的な教師あり学習の問題です。簡単な方法の1つは、k最近傍法です。このアプローチkでは、ある距離計量の下でテストポイントに最も近いベクトルを見つけ、それらのラベルを使用して、これがどの著者であるかを投票します。どの機能が最も役立つかわからない場合は、マハラノビス距離を使用できます。これは、ベクトルの各コンポーネントを((((x - y) / all_data_stacked.std(axis=0))**2).sum()numpy表記で)単位分散を持つようにスケーリングすると、標準のユークリッド距離に相当します。

しかし、分類を行うには他にも多くのアプローチがあります。それらの多くは、ある作成者を別の作成者から分離する、フィーチャスペース内の分離サーフェスを見つけることに基づいています。多くの作成者でそれを行うには、作成者のすべてのペアの間でこれらの決定面を見つけ、それらのnum_authors * (num_authors - 1) / 2分類子のそれぞれをテストポイントに適用し、それらのラベルの間で投票することができます。もう1つの方法は、この作成者と他の作成者を比較する作成者ごとに1つの分類子をトレーニングしてから、最も自信のある分類器を使用することです。

ほとんどの問題に最適な、すぐに使用できる教師あり分類アルゴリズムは、サポートベクターマシン(SVM)と呼ばれます。LibSVMは優れた実装です。しかし、他にもたくさんあります。


ただし、実際にテストポイントを分類しようとしておらず、「アリスとボブの文体がどの程度似ているか」を測定したい場合は、他の方法があります。その場合、私がここで扱っているフレームワークで、2セットのベクトルを取り、「それらはどの程度類似しているか」を尋ねることです。

人々がこのようなものに使用するいくつかの簡単な尺度があります。たとえば、セットの要素間の最小距離または平均距離などです。しかし、それは必ずしも非常に役立つとは限りません。

アドホックな対策の1つは、アリスの文章をボブの文章と混同するのは簡単ですか。これをテストするには、交差検定を使用してAlice-vs-Bob分類器をトレーニングし、分類器がAliceとBobのテストポイントを混同する頻度を確認します。つまり、kアリスまたはボブのすべてのドキュメントを除くすべてのドキュメントを使用して、2つの間で分類子をトレーニングし、それらでその分類子を評価しkます。すべてのドキュメントが分類されるように繰り返します。エラー率が高い場合、それらの文体は似ています。そうでなければ、それらは似ていません。k = 1余裕があれば、ここで使用するのが最適です。

より正式なアプローチからこれに到達することもできます。私が関わっている研究プロジェクトでは、これらの特徴ベクトルのセットを、個々の著者の文体を表す未知の確率分布からのサンプルとして扱います。したがって、アリスがドキュメントを作成するとき、その機能は、彼女が作成する方法を表す確率分布に従って選択されます。ボブのドキュメントは、ボブのディストリビューションから選択されます。次に、これら2つの分布間のRényi-αの発散を推定できます。これは、それらがどの程度「類似」しているかを測定する1つの方法です。(1に近いαを選択すると、重要なカルバック・ライブラー(KL)発散に近似します。)この手法を紹介するいくつかの論文があります。推定器に関するすべての数学的詳細と、この推定器をSVMと組み合わせて、コンピュータービジョンの問題に関する最先端技術を打ち負かす方法を説明するプレプリントを提供します。ここにC++の実装があります; あなたがそれを使うことになった場合は私に知らせてください!

人々が使用する別の同様の方法は、最大平均不一致と呼ばれます。

残念ながら、これらの手法はすべて(分類子を除く)、元の機能を手動で適切にスケーリングすることにある程度依存しています。(これは、たとえば分類用のSVMには当てはまりません。特定のユーザーにとって、一部の機能が他の機能よりも重要であるかどうかを判断できますが、最初のステップとして、平均と単位の分散がゼロになるようにすべてをスケーリングする必要があります。)これは特徴選択の問題であり、残念ながらまだかなりの調整が必要な難しい問題です。そこでは、相互情報量など(発散推定に密接に関連する)に基づくアプローチが役立つ可能性があります。mcdowellaが示唆したように、PCAは開始するのに適切な場所でもあります。

于 2012-03-24T05:29:45.790 に答える