さまざまな文体の属性を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は開始するのに適切な場所でもあります。