模型

sentence_transformers.models 定义了不同的构建模块,可用于从头开始创建 SentenceTransformer 网络。更多详情,请参阅训练概述。

主要类

class sentence_transformers.models.Transformer(model_name_or_path: str, max_seq_length: int | None = None, model_args: dict[str, Any] | None = None, tokenizer_args: dict[str, Any] | None = None, config_args: dict[str, Any] | None = None, cache_dir: str | None = None, do_lower_case: bool = False, tokenizer_name_or_path: str | None = None)[源代码][源代码]

Hugging Face AutoModel 用于生成词嵌入。加载正确的类,例如 BERT / RoBERTa 等。

参数:
  • model_name_or_path -- Hugging Face 模型名称 (https://huggingface.co/models)

  • max_seq_length -- 截断任何长度超过 max_seq_length 的输入

  • model_args -- 传递给 Hugging Face Transformers 模型的关键字参数

  • tokenizer_args -- 传递给 Hugging Face Transformers 分词器的键值参数

  • config_args -- 传递给 Hugging Face Transformers 配置的关键字参数

  • cache_dir -- Hugging Face Transformers 用于存储/加载模型的缓存目录

  • do_lower_case -- 如果为真,则将输入转换为小写(无论模型是否区分大小写)

  • tokenizer_name_or_path -- 分词器的名称或路径。当为 None 时,则使用 model_name_or_path。

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.Pooling(word_embedding_dimension: int, pooling_mode: str | None = None, pooling_mode_cls_token: bool = False, pooling_mode_max_tokens: bool = False, pooling_mode_mean_tokens: bool = True, pooling_mode_mean_sqrt_len_tokens: bool = False, pooling_mode_weightedmean_tokens: bool = False, pooling_mode_lasttoken: bool = False, include_prompt=True)[源代码][源代码]

对标记嵌入执行池化(最大或平均)。

使用池化,它可以从可变长度的句子生成固定长度的句子嵌入。此层还允许使用由底层词嵌入模型返回的CLS标记。您可以将多个池化连接在一起。

参数:
  • word_embedding_dimension -- 词嵌入的维度

  • pooling_mode -- 可以是“cls”、“lasttoken”、“max”、“mean”、“mean_sqrt_len_tokens”或“weightedmean”。如果设置,将覆盖其他pooling_mode_*设置。

  • pooling_mode_cls_token -- 使用第一个标记(CLS 标记)作为文本表示

  • pooling_mode_max_tokens -- 在所有标记中,每个维度使用最大值。

  • pooling_mode_mean_tokens -- 执行均值池化

  • pooling_mode_mean_sqrt_len_tokens -- 执行均值池化,但除以 sqrt(输入长度)。

  • pooling_mode_weightedmean_tokens -- 执行(位置)加权平均池化。参见 SGPT: GPT 句子嵌入用于语义搜索 <https://arxiv.org/abs/2202.08904>_。

  • pooling_mode_lasttoken -- 执行最后一个token的池化。参见 SGPT: GPT Sentence Embeddings for Semantic Search <https://arxiv.org/abs/2202.08904>_ 和 Text and Code Embeddings by Contrastive Pre-Training <https://arxiv.org/abs/2201.10005>_。

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.Dense(in_features: int, out_features: int, bias: bool = True, activation_function=Tanh(), init_weight: Tensor | None = None, init_bias: Tensor | None = None)[源代码][源代码]

带有激活函数的前馈函数。

这一层接受一个固定大小的句子嵌入,并通过一个前馈层传递它。可以用来生成深度平均网络(DAN)。

参数:
  • in_features -- 输入维度的大小

  • out_features -- 输出大小

  • bias -- 添加一个偏置向量

  • activation_function -- Pytorch 激活函数应用于输出

  • init_weight -- 线性层的矩阵的初始值

  • init_bias -- 线性层的偏置初始值

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

更多类

class sentence_transformers.models.Asym(sub_modules: dict[str, list[Module]], allow_empty_key: bool = True)[源代码][源代码]

该模型允许创建非对称的 SentenceTransformer 模型,这些模型根据指定的输入键应用不同的模型。

在下面的示例中,我们为 'query' 和 'doc' 创建了两个不同的 Dense 模型。作为 {'query': 'My query'} 传递的文本将通过第一个 Dense 模型传递,而作为 {'doc': 'My document'} 传递的文本将使用另一个 Dense 模型。

注意,当你调用 encode() 时,只有相同类型的输入可以被编码。混合类型不能被编码。

示例::

word_embedding_model = models.Transformer(model_name) pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension()) asym_model = models.Asym({'query': [models.Dense(word_embedding_model.get_word_embedding_dimension(), 128)], 'doc': [models.Dense(word_embedding_model.get_word_embedding_dimension(), 128)]}) model = SentenceTransformer(modules=[word_embedding_model, pooling_model, asym_model])

model.encode([{'query': 'Q1'}, {'query': 'Q2'}] model.encode([{'doc': 'Doc1'}, {'doc': 'Doc2'}])

#你可以像这样用 InputExample 来训练它。注意,顺序必须始终相同:train_example = InputExample(texts=[{'query': '训练查询'}, {'doc': '文档'}], label=1)

参数:
  • sub_modules -- 格式为 str -> List[models] 的字典。指定列表中的模型将应用于带有相应键的输入。

  • allow_empty_key -- 如果为真,没有键的输入可以被处理。如果为假,如果没有指定键,将会抛出一个异常。

class sentence_transformers.models.BoW(vocab: list[str], word_weights: dict[str, float] = {}, unknown_word_weight: float = 1, cumulative_term_frequency: bool = True)[源代码][源代码]

实现了一个词袋模型(BoW)来推导句子嵌入。

可以添加权重以允许生成 tf-idf 向量。输出向量的长度等于词汇表的大小。

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.CNN(in_word_embedding_dimension: int, out_channels: int = 256, kernel_sizes: list[int] = [1, 3, 5], stride_sizes: list[int] | None = None)[源代码][源代码]

具有多个核大小的词嵌入上的CNN层

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.LSTM(word_embedding_dimension: int, hidden_dim: int, num_layers: int = 1, dropout: float = 0, bidirectional: bool = True)[源代码][源代码]

在词嵌入上运行的双向LSTM。

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.Normalize[源代码][源代码]

这一层将嵌入向量归一化为单位长度

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.WeightedLayerPooling(word_embedding_dimension, num_hidden_layers: int = 12, layer_start: int = 4, layer_weights=None)[源代码][源代码]

Token embeddings 是其不同隐藏层表示的加权平均值

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.WordEmbeddings(tokenizer: WordTokenizer, embedding_weights, update_embeddings: bool = False, max_seq_length: int = 1000000)[源代码][源代码]

初始化内部模块状态,由 nn.Module 和 ScriptModule 共享。

class sentence_transformers.models.WordWeights(vocab: list[str], word_weights: dict[str, float], unknown_word_weight: float = 1)[源代码][源代码]

该模型可以加权词嵌入,例如,使用idf值。

初始化 WordWeights 类。

参数:
  • vocab (List[str]) -- 分词器的词汇表。

  • word_weights (Dict[str, float]) -- 将标记映射到一个浮点权重值。词嵌入会乘以这个浮点值。word_weights 中的标记不能等于词汇表(可以包含更多或更少的值)。

  • unknown_word_weight (float, optional) -- 词汇表中未出现在 word_weights 查找中的单词的权重。例如,这些可以是词汇表中没有权重的罕见单词。默认为 1。