如何从语料库或查询中获取SentenceTransformer词汇表?

我正在尝试使用来自SBERT.netSentenceTransformer模型,我想了解它是如何处理实体名称的。它们是否被标记为未知词 – 是否被分解成词元等。我希望确保它们在比较中被使用。

然而,要做到这一点,我需要查看它为查询构建的词汇表 – 甚至可能需要将嵌入转换为文本。

查看API – 对我来说并不明显如何做到这一点。

这里是他们文档中的一个快速示例:

embedder = SentenceTransformer("all-MiniLM-L6-v2")corpus = [    "A man is eating food.",    "A man is eating a piece of bread.",    "The girl is carrying a baby."]corpus_embeddings = embedder.encode(corpus, convert_to_tensor=True)# Query sentences:queries = [    "A man is eating pasta."]top_k = min(5, len(corpus))for query in queries:    query_embedding = embedder.encode(query, convert_to_tensor=True)    ...

回答:

您的SentenceTransformer模型实际上是在内部使用Hugging Face的transformers库中的分词器。您可以通过模型的.tokenizer属性访问它。这种分词器的典型行为是将未知词元分解成词片。我们可以继续检查它确实是这样做的,因为这相对简单:

embedder = SentenceTransformer("all-MiniLM-L6-v2")corpus = [    "A man is eating food.",    "A man is eating a piece of bread.",    "The girl is carrying a baby."]# 分词器就在这里:tokenizer = embedder.tokenizer  # BertTokenizerFast# 如果需要,词汇表本身就在这里:vocab = tokenizer.vocab  # 长度为30522的字典# 根据词汇表获取句子的分词,例如:inputs = tokenizer(corpus, padding='longest', truncation=True)tokens = [e.tokens for e in inputs.encodings]# tokens包含:# [#   ['[CLS]', 'a', 'man', 'is', 'eating', 'food', '.', '[SEP]', '[PAD]', '[PAD]', '[PAD]']#   ['[CLS]', 'a', 'man', 'is', 'eating', 'a', 'piece', 'of', 'bread', '.', '[SEP]']#   ['[CLS]', 'the', 'girl', 'is', 'carrying', 'a', 'baby', '.', '[SEP]', '[PAD]', '[PAD]']# ]# 现在让我们尝试一些未知词元,看看它会做什么queries = [    "Edv Beq is eating pasta."]q_inputs = tokenizer(queries, padding='longest', truncation=True)q_tokens = [e.tokens for e in q_inputs.encodings]# q_tokens包含:# [#   ['[CLS]', 'ed', '##v', 'be', '##q', 'is', 'eating', 'pasta', '.', '[SEP]']# ]

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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