簡體   English   中英

將 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的實用程序,它可以使用用戶定義的任意函數將ColumnTransformer數據幀映射到所需的數據! 您需要做的是定義一個函數並sklearn.transformer創建一個官方的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())

之后,您將能夠像使用任何其他轉換器一樣使用轉換器並將文本列映射到語義空間,例如:

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,否則一些特征會支配其他特征並降低性能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM