如何向 doc2Vec model.infer_vector 创建的数组添加额外的功能?

How do I add extra features to the array created by doc2Vec model.infer_vector?

我是 NLP 和 doc2Vec 的新手。

  1. 我使用 doc2vec 为每个文档生成一个数组。
  2. 我想使用数组和额外特征(例如收入)作为其他模型(如逻辑回归)的特征。如何组合文档数组和额外功能?
def get_vectors(model, tagged_docs):
    sents = tagged_docs.values
    targets, regressors = zip(*[(doc.tags[0], model.infer_vector(doc.words)) for doc in sents])
    return targets, regressors

model= Doc2Vec(dm=0, vector_size=300, negative=5, hs=0, min_count=2, sample = 0, workers=cores)
model.build_vocab(train_tagged.values)
model.train(train_tagged.values, total_examples=len(train_tagged.values), epochs=1)

y_train_doc , X_train_doc = get_vectors(model, train_tagged)

print(X_train_doc)
(array([ 0.168, -0.36 , -0.13], dtype=float32), 
 array([ 0.185,  0.17, 0.04], dtype=float32),....)

X_train_doc 是数组的元组。那么对于每个数组,我是否将每个元素输入到 df 中的不同列中,如下所示?

doc | Income | doc_feature1 | doc_feature2|  doc_feature3 |
  1 | 10000  |  0.168       | -0.36       | -0.13         |
  2 |  500   |  0.185       | 0.17        |  0.04         |

这将完全取决于您使用的下游 libraries/models。一般来说,您 不想 想要重新引入 Pandas 数据帧的开销——下游模型更有可能使用原始 numpy 数组。

如果使用 scikit-learn 管道,FeatureUnion class 可能有用:

https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html

如果你有,说...

  • 一个 numpy 10000 行数组,每行 300 个维度,用于 10000 个元素的文档向量,然后
  • 10000 行,每行 5 个维度,用于 10000 个元素的其他特征,顺序相同

…然后你可能想将它们水平连接成 10000 行,每行 305 个维度,使用类似 numpy hstack 函数(多种选项之一)的东西:

https://numpy.org/doc/stable/reference/generated/numpy.hstack.html#numpy.hstack