从huggingface特征提取管道中获取句子嵌入

如何从huggingface的特征提取管道中获取整个句子的嵌入?

我知道如何获取每个标记的特征(如下所示),但如何获取整个句子的整体特征呢?

feature_extraction = pipeline('feature-extraction', model="distilroberta-base", tokenizer="distilroberta-base")features = feature_extraction("i am sentence")

回答:

为了进一步解释我在stackoverflowuser2010的回答下留的评论,我将使用“基本”模型,但其行为与pipeline组件相同。

BERT及其衍生模型(包括你在管道中使用的DistilRoberta)通常使用特殊标记(通常第一个标记表示为[CLS])来指示句子的开始和结束,这些标记通常是针对整个序列进行预测/生成嵌入的最简单方法。社区内关于哪种方法更优越存在讨论(另见stackoverflowuser2010的更详细回答这里),然而,如果你只是想要一个“快速”的解决方案,那么取[CLS]标记无疑是一种有效的策略。

现在,虽然FeatureExtractionPipeline文档不是很清晰,但在你的例子中,我们可以轻松地比较输出,特别是它们的长度,与直接调用模型进行比较:

from transformers import pipeline, AutoTokenizer# 直接编码样本句子tokenizer = AutoTokenizer.from_pretrained('distilroberta-base')encoded_seq = tokenizer.encode("i am sentence")# 你的方法feature_extraction = pipeline('feature-extraction', model="distilroberta-base", tokenizer="distilroberta-base")features = feature_extraction("i am sentence")# 比较输出长度print(len(encoded_seq)) # 5# 注意输出有一个奇怪的列表输出,需要用0索引。print(len(features[0])) # 5

当检查encoded_seq的内容时,你会注意到第一个标记的索引为0,表示序列开始标记(在我们的例子中,是嵌入标记)。由于输出长度相同,你可以通过类似以下方式简单地访问初步的句子嵌入:

sentence_embedding = features[0][0]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注