Python 如何输入多个文本列的doc2vec向量?

Python 如何输入多个文本列的doc2vec向量?,python,machine-learning,nlp,doc2vec,Python,Machine Learning,Nlp,Doc2vec,我有一个数据集,其中有3列不同的相关文本信息,我想将其转换为doc2vec向量,然后使用神经网络进行分类。我的问题是如何将这三列转换成向量并输入到神经网络 如何将连接的向量输入到神经网络中?一种方法是以定义的顺序为所有三个文档获取doc2vec向量,并将它们附加在一起。然后将结果向量拟合到神经网络中 另一种方法是创建一个列,其中每一行是3个字符串(表示三个文档)的列表,并获得所有三个文档的一个向量表示。请参阅下面的一些示例代码 from gensim.test.utils import comm

我有一个数据集,其中有3列不同的相关文本信息,我想将其转换为doc2vec向量,然后使用神经网络进行分类。我的问题是如何将这三列转换成向量并输入到神经网络


如何将连接的向量输入到神经网络中?

一种方法是以定义的顺序为所有三个文档获取
doc2vec
向量,并将它们附加在一起。然后将结果向量拟合到神经网络中

另一种方法是创建一个列,其中每一行是3个字符串(表示三个文档)的列表,并获得所有三个文档的一个向量表示。请参阅下面的一些示例代码

from gensim.test.utils import common_texts
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(common_texts)]
model = Doc2Vec(documents, vector_size=5, window=2, min_count=1, workers=4)
model.infer_vector(['theis is a sentence1', 'here is another sentence', 'this represents the third sentence']).tolist()
完成后,您可以初始化模型并对其进行训练

要安装
sklearn分类工具
,例如
sgd
,请检查下面的代码片段

from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100.0)
d = pd.DataFrame({'vectors':[[1,2,3], [3,6,5], [9,2,4], [1,2,7]], "targets": ['class1', 'class1', 'class2', 'class2']})
d
>>>
      vectors   targets
0   [1, 2, 3]   class1
1   [3, 6, 5]   class1
2   [9, 2, 4]   class2
3   [1, 2, 7]   class2
您可以在向量上拟合sklearn分类器,如下所示

clf.fit(X = d.vectors.values.tolist(), y =d.targets)

>>>
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma=0.001, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)

然后,您可以使用该分类器预测值。

我建议使用doc2vec将每个文本字段分别转换为一个向量,将向量连接起来,并将生成的向量输入神经网络

请发布一个数据集和标签的示例。在这种情况下,在连接维度三元组之后,我发现错误与传递序列有关。我不知道您所处的确切情况,但是如果你能自己选择神经网络的形状,你可以选择一个形状,让神经网络处理三倍数量的数据。如果您使用的神经网络已经在其他数据上进行了训练(因此您无法更改其形状),则有两种选择:1)从连接文本字段开始,通过doc2vec将结果输入,最后通过神经网络输入。这可能会使您的模型难以考虑不同的列,因为它们都被挤在一起。2) ...... 创建一个新的神经网络,将来自三个doc2vec操作的数据汇总为可以通过神经网络输入的数据。追加完成。如何将新形成的向量输入sklearn分类器和神经网络?有参考资料吗?但那样的话,这三份文件的个性就会消失……不是吗?@anmolnarang这是真的,但它会被计入doc2vec表示(不幸的是,这是一个黑匣子)。另外,如果我的答案对你有帮助,请投上一票。我也在编辑它以包含更多信息。