Doc2Vec
予測を取得しようとしているモデルをトレーニングしました。
私が使う
test_data = word_tokenize("Филип Моррис Продактс С.А.".lower())
model = Doc2Vec.load(model_path)
v1 = model.infer_vector(test_data)
sims = model.docvecs.most_similar([v1])
print(sims)
戻り値
[('624319', 0.7534812092781067), ('566511', 0.7333904504776001), ('517382', 0.7264763116836548), ('523368', 0.7254455089569092), ('494248', 0.7212602496147156), ('382920', 0.7092794179916382), ('530910', 0.7086726427078247), ('513421', 0.6893941760063171), ('196931', 0.6776881814002991), ('196947', 0.6705600023269653)]
次に、私はこの番号のテキストが何であるかを知りたいと思いました
model.docvecs['624319']
しかし、それは私にベクトル表現だけを返します
array([ 0.36298314, -0.8048847 , -1.4890883 , -0.3737898 , -0.00292279,
-0.6606688 , -0.12611026, -0.14547637, 0.78830665, 0.6172428 ,
-0.04928801, 0.36754376, -0.54034036, 0.04631123, 0.24066721,
0.22503968, 0.02870891, 0.28329515, 0.05591608, 0.00457001],
dtype=float32)
それで、モデルからこのラベルのテキストを取得する方法はありますか?電車のデータセットの読み込みには時間がかかるので、別の方法を見つけようとしています。
docベクトルを元のテキストに直接変換する方法はありません(語順などの情報は、テキストの縮小の過程で失われます->ベクトル)。
しかし、あなたがすることができ、あなたの作成しているとき、あなたのコーパスリストにそのインデックスの各文書をタグ付けすることによって、元のテキストを取得TaggedDocument
するために秒Doc2Vec()
。と呼ばれるリストに含まれている文/ドキュメントのコーパスがあるとしましょうtexts
。enumerate()
このように使用i
して、各文に一意のインデックスを生成し、それをtags
引数として渡しますTaggedDocument
。
tagged_data = []
for i, t in enumerate(texts):
tagged_data.append(TaggedDocument(words=word_tokenize(c.lower()), tags=[str(i)]))
model = Doc2Vec(vector_size=VEC_SIZE,
window=WINDOW_SIZE,
min_count=MIN_COUNT,
workers=NUM_WORKERS)
model.build_vocab(tagged_data)
次に、トレーニング後、から結果を取得model.docvecs.most_similar()
すると、各タプルの最初の番号が、コーパステキストの元のリストへのインデックスになります。したがって、たとえば、実行model.docvecs.most_similar([some_vector])
して取得した場合:
[('624319', 0.7534812092781067), ('566511', 0.7333904504776001), ('517382', 0.7264763116836548), ('523368', 0.7254455089569092), ('494248', 0.7212602496147156), ('382920', 0.7092794179916382), ('530910', 0.7086726427078247), ('513421', 0.6893941760063171), ('196931', 0.6776881814002991), ('196947', 0.6705600023269653)]
...次に、次の('624319', 0.7534812092781067)
コマンドを使用して最初のコーパスリストにインデックスを付けることにより、最初の結果の元のドキュメントを取得できますtexts[624319]
。
または、ループして最も類似したテキストをすべて取得したい場合は、次のようにすることができます。
most_similar_docs = []
for d in model.docvecs.most_similar([some_vector]):
most_similar_docs.append(texts[d[0]])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加