doc=["This is a sentence","This is another sentence"]
documents=[doc.strip().split(" ") for doc in doc1 ]
model = doc2vec.Doc2Vec(documents, size = 100, window = 300, min_count = 10, workers=4)
Doc2vec() への入力ドキュメントが正しい LabeledSentence 形式ではなかったため、AttributeError: 'list' object has no attribute 'words' が発生しました。以下の例がフォーマットの理解に役立つことを願っています。
documents = LabeledSentence(words=[u'some', u'words', u'here'], labels=[u'SENT_1'])
詳細はこちら : http://rare-technologies.com/doc2vec-tutorial/
ただし、TaggedLineDocument() を使用してファイルから入力データを取得することで問題を解決しました。
ファイル形式: 1 ドキュメント = 1 行 = 1 TaggedDocument オブジェクト。単語はすでに前処理され、空白で区切られていると予想され、タグはドキュメントの行番号から自動的に作成されます。
sentences=doc2vec.TaggedLineDocument(file_path)
model = doc2vec.Doc2Vec(sentences,size = 100, window = 300, min_count = 10, workers=4)
ドキュメント ベクトルを取得するには: docvecs を使用できます。詳細はこちら: https://radimrehurek.com/gensim/models/doc2vec.html#gensim.models.doc2vec.TaggedDocument
docvec = model.docvecs[99]
ここで、99 は、ベクターが必要なドキュメント ID です。ラベルが整数形式の場合 (デフォルトでは、 TaggedLineDocument() を使用してロードする場合)、私のように整数 ID を直接使用します。ラベルが文字列形式の場合は、"SENT_99" を使用します。これは Word2vec に似ています。