用于 2 个数据输入的相同 TF-IDF 矢量化器

数据挖掘 Python nlp scikit-学习 特征选择 特征工程
2022-03-14 17:21:57

我正在尝试处理 quora 发布的数据集,以确定 Question1 是否具有与 Question2 相似的意图

数据集如下所示:

id|question1|question2|is_duplicate

0|什么是投资印度股票市场的分步指南|什么是投资股票市场的分步指南?|0

我想参考Abhishek Thakur 的功能来开始。它说: 在此处输入图像描述

根据我的理解,sklearn 的 python 代码将是:

    from sklearn.feature_extraction.text import TfidfVectorizer
    import pandas as pd
    tfidf_vectorizer = TfidfVectorizer()
    data['tf_idf_q1'] = tfidf_vectorizer.fit_transform(data.question1)
    data['tf_idf_q2'] = tfidf_vectorizer.fit_transform(data.question2)

data['tf_idf_q1]data['tf_idf_q2]将针对每个问题引用 2 个模型,如图像的第一部分。

我不确定我将如何实现第二部分?我是否用第一个问题 fit_transform 向量化器然后转换第二个问题?还是我合并 2 个问题然后得到一个矢量化器?如下所示:

merged_questions = pd.DataFrame(data['question1'].map(str) + data['question2'].map(str))
data['tf_idf_q1_q2'] = tfidf_vectorizer.fit_transform(merged_questions)

非常感谢任何输入。

1个回答

你可以使用这样的东西

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
tfidf_vectorizer = TfidfVectorizer()
raw_data = pd.DataFrame(*raw_data, columns = ['id', 'is_identical', 'q1', 'q2'])
data['tf_idf_q1'] = tfidf_vectorizer.fit_transform(data['q1'])
data['tf_idf_q2'] = tfidf_vectorizer.fit_transform(data['q2'])
data_for_model = data[['tf_idf_q1', 'tf_idf_q2', 'is_identical']]
X = data_for_model[['tf_idf_q1', 'tf_idf_q2']].as_matrix()
Y = data_for_model['is_identical'].as_matrix()
model = Sklearn.LogisticRegression()
model.fit(X, Y)

组合模型 - 在这里您实际上学习了所有问题的转换。然后分别转换每个(问题)以创建模型训练的特征。

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
tfidf_vectorizer = TfidfVectorizer()
raw_data = pd.DataFrame(*raw_data, columns = ['id', 'is_identical', 'q1', 'q2'])
tf_train_data = pd.concat([data['q1'], data['q2']])
trained_tf_idf_transformer = tfidf_vectorizer.fit_transform(tf_train_data)
data['tf_idf_q1'] = trained_tf_idf_transformer.transform(data['q1'])
data['tf_idf_q2'] = trained_tf_idf_transformer.transform(data['q2'])
data_for_model = data[['tf_idf_q1', 'tf_idf_q2', 'is_identical']]
X = data_for_model[['tf_idf_q1', 'tf_idf_q2']].as_matrix()
Y = data_for_model['is_identica'l].as_matrix()
model = Sklearn.LogisticRegression()
model.fit(X, Y)