将 Sentence-Bert 与 scikit-learn 中的其他功能一起使用
Using Sentence-Bert with other features in scikit-learn
我有一个数据集,其中一个特征是文本,另外还有 4 个特征。 Sentence-Bert 向量化器将文本数据转换为张量。我可以直接将这些稀疏矩阵与机器学习分类器一起使用。我可以用张量替换文本列吗?而且,我该如何训练模型。下面的代码是我如何将文本转换为矢量。
model = SentenceTransformer('sentence-transformers/LaBSE')
sentence_embeddings = model.encode(X_train['tweet'], convert_to_tensor=True, show_progress_bar=True)
sentence_embeddings1 = model.encode(X_test['tweet'], convert_to_tensor=True, show_progress_bar=True)
假设这是您的数据
X_train = pd.DataFrame({
'tweet':['foo', 'foo', 'bar'],
'feature1':[1, 1, 0],
'feature2':[1, 0, 1],
})
y_train = [1, 1, 0]
并且您愿意将其与 sklearn
API(交叉验证、管道、网格搜索等)一起使用。有一个名为 ColumnTransformer
的实用程序,它可以使用用户定义的任意函数将 pandas 数据帧映射到所需的数据!你所要做的就是定义一个函数并从中创建一个官方 sklearn.transformer
。
model = SentenceTransformer('mrm8488/bert-tiny-finetuned-squadv2') # model named is changed for time and computation gians :)
embedder = FunctionTransformer(lambda item:model.encode(item, convert_to_tensor=True, show_progress_bar=False).detach().cpu().numpy())
之后,您将能够像使用任何其他转换器一样使用转换器,并将您的文本列映射到语义 space,例如:
preprocessor = ColumnTransformer(
transformers=[('embedder', embedder, 'tweet')],
remainder='passthrough'
)
X_train = preprocessor.fit_transform(X_train) # X_train.shape => (len(df), your_transformer_model_hidden_dim + your_features_count)
X_train
将是您想要的数据。适合与 sklearn
生态系统一起使用。
gnb = GaussianNB()
gnb.fit(X_train, y_train)
输出:
GaussianNB(priors=None, var_smoothing=1e-09)
警告:数字特征和推文嵌入应该属于相同的SCALE,否则某些特征会支配其他特征并降低性能
我有一个数据集,其中一个特征是文本,另外还有 4 个特征。 Sentence-Bert 向量化器将文本数据转换为张量。我可以直接将这些稀疏矩阵与机器学习分类器一起使用。我可以用张量替换文本列吗?而且,我该如何训练模型。下面的代码是我如何将文本转换为矢量。
model = SentenceTransformer('sentence-transformers/LaBSE')
sentence_embeddings = model.encode(X_train['tweet'], convert_to_tensor=True, show_progress_bar=True)
sentence_embeddings1 = model.encode(X_test['tweet'], convert_to_tensor=True, show_progress_bar=True)
假设这是您的数据
X_train = pd.DataFrame({
'tweet':['foo', 'foo', 'bar'],
'feature1':[1, 1, 0],
'feature2':[1, 0, 1],
})
y_train = [1, 1, 0]
并且您愿意将其与 sklearn
API(交叉验证、管道、网格搜索等)一起使用。有一个名为 ColumnTransformer
的实用程序,它可以使用用户定义的任意函数将 pandas 数据帧映射到所需的数据!你所要做的就是定义一个函数并从中创建一个官方 sklearn.transformer
。
model = SentenceTransformer('mrm8488/bert-tiny-finetuned-squadv2') # model named is changed for time and computation gians :)
embedder = FunctionTransformer(lambda item:model.encode(item, convert_to_tensor=True, show_progress_bar=False).detach().cpu().numpy())
之后,您将能够像使用任何其他转换器一样使用转换器,并将您的文本列映射到语义 space,例如:
preprocessor = ColumnTransformer(
transformers=[('embedder', embedder, 'tweet')],
remainder='passthrough'
)
X_train = preprocessor.fit_transform(X_train) # X_train.shape => (len(df), your_transformer_model_hidden_dim + your_features_count)
X_train
将是您想要的数据。适合与 sklearn
生态系统一起使用。
gnb = GaussianNB()
gnb.fit(X_train, y_train)
输出:
GaussianNB(priors=None, var_smoothing=1e-09)
警告:数字特征和推文嵌入应该属于相同的SCALE,否则某些特征会支配其他特征并降低性能