私はLDAモデルといくつかのデータを持っています(現時点で50Kの質問)。モデルを実行すると、トピックが作成され、すべての質問がトピックに追加されます。この例では、20のトピックがあります。トピックに関する質問の分布を比較する(値を行にする)
ほとんどの質問が100%1トピックに適合しないため、各質問ごとにトピックに関する分布を見つけることができます。
私がしたいのは、各質問と他の質問とを比較して類似点を探し、ほぼ同じ質問を選択できるようにすることです。私は他のすべてにそれぞれの質問を比較するためのループを持っている現時点で
words = {'00': [0,0,35,0,0,0,0,0,0,0,],'01': [0,0,20,0,0,0,0,0,0,0,],
'02': [0,15,0,0,0,0,0,0,0,0,],'03': [0,0,0,0,0,0,5,0,0,0,],
'04': [0,0,0,0,0,0,28,0,0,0,],'05': [0,0,0,0,97,0,0,0,0,0,],
'06': [19,0,39,0,0,0,0,0,0,0,],'07': [0,0,0,25,0,0,41,0,56,38,],
'08': [0,0,0,54,0,0,0,0,0,0,],'09': [0,0,0,0,0,0,0,0,34,0,],
'10': [0,0,0,16,1,0,0,0,0,0,],'11': [0,0,0,0,0,99,0,0,0,0,],
'12': [79,0,0,0,0,0,0,35,0,0,],'13': [0,57,0,0,0,0,0,0,0,0,],
'14': [0,0,0,0,0,0,0,0,0,0,], '15': [0,0,0,0,0,0,0,0,0,0,],
'16': [0,0,0,0,0,0,0,23,0,54,],'17': [0,21,0,0,0,0,0,36,0,0,],
'18': [0,0,0,0,0,0,23,0,0,0,],'19': [0,0,0,0,0,0,0,0,0,0,]}
dfwords = pd.DataFrame.from_dict(words)
:
は私が質問し、そこ分布の小さな部分を取ります。それは、すべての他の質問「J」について各質問「I」をループし、各トピック「K」のスコアの差を計算する。それぞれの質問「J」には「K」の違いがあり、スコアが最も低い質問が最もよく似ています。df4 = pd.DataFrame(np.zeros((len(Question), len(Question))))
for i in range(len(Question)):
df3 = pd.DataFrame(np.zeros((len(Question), 1)))
df3.rename(columns={0:str(i)}, inplace=True)
for j in range(len(Question)):
indnum = 0
for k in range(Topic_num):
indnum+=abs((dfwords.iat[j, k]-dfwords.iat[i, k]))
df3.iat[j,0]=indnum
df4[i] = df3[str(i)]
それは動作しますが、これは本当に力ずくであり、私はこれを行うには、現時点では、私はそれらを把握することはできませんよりスマートな方法がたくさんあると確信しています。私はそれぞれのトピックについてxy座標を持っているので、それを使って何かをやろうと思っていましたが、どうしたらよいか分かりません。
50k回の50k回の20回の比較を優先し、50k回の50k回のテーブルよりアクセスしやすくすることがよりスマートでなければなりません。
誰でも私にこれを手伝ってもらえますか、多分正しい方向に向いていますか?どんな助けも本当に訴えるでしょう!