from rxnfp.tokenization import get_default_tokenizer, SmilesTokenizer
时间: 2024-05-17 14:14:53 浏览: 143
`rxnfp` 是一个 Python 库,用于对化合物进行特征提取和分子预测。`rxnfp.tokenization` 模块提供了对输入 SMILES 序列进行分词处理的函数。`get_default_tokenizer` 函数返回一个默认的分词器,用于将 SMILES 序列转换为 token 序列。`SmilesTokenizer` 则是一个用于处理 SMILES 序列的分词器类,可以根据自定义的参数进行实例化。您可以在 PyCharm 中安装 `rxnfp` 库,然后使用这些函数和类来进行分子分析和预测。
相关问题
TypeError: transformers.models.bert.tokenization_bert_fast.BertTokenizerFast is not a Module subclass
这个错误通常是由于使用了错误的tokenizer类导致的。在使用HuggingFaceEmbeddings时,你需要使用与模型相对应的tokenizer。如果使用了不兼容的tokenizer,就会出现这个错误。
在BERT模型的情况下,可以使用`BertTokenizer`或`BertTokenizerFast`。但是值得注意的是,这两个类的输入格式不同:
- `BertTokenizer`的输入是单个句子或句子对,可以使用`encode`方法将句子转换为输入向量。
- `BertTokenizerFast`的输入是一批句子,需要使用`__call__`方法将句子转换为输入向量。
所以,如果你使用`BertTokenizerFast`类,你需要将句子封装成列表或元组,并将其传递给tokenizer。例如:
```python
from transformers import BertTokenizerFast, BertModel
from sentence_transformers import SentenceTransformer
tokenizer = BertTokenizerFast.from_pretrained('bert-base-cased')
model = BertModel.from_pretrained('bert-base-cased')
sentences = ['This is an example sentence', 'Each sentence is converted']
input_ids = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
outputs = model(**input_ids)
sentence_transformer_model = SentenceTransformer(modules=[model, tokenizer])
embeddings = sentence_transformer_model.encode(sentences)
```
在这个例子中,我们使用了`BertTokenizerFast`类,并将句子列表传递给tokenizer进行编码。然后使用编码后的输入向量来计算BERT模型的输出。最后,我们使用SentenceTransformer将句子转换为嵌入向量。
import tensorflow as tf import tensorflow_hub as hub from tensorflow.keras import layers import bert import numpy as np from transformers import BertTokenizer, BertModel # 设置BERT模型的路径和参数 bert_path = "E:\\AAA\\523\\BERT-pytorch-master\\bert1.ckpt" max_seq_length = 128 train_batch_size = 32 learning_rate = 2e-5 num_train_epochs = 3 # 加载BERT模型 def create_model(): input_word_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="input_word_ids") input_mask = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="input_mask") segment_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="segment_ids") bert_layer = hub.KerasLayer(bert_path, trainable=True) pooled_output, sequence_output = bert_layer([input_word_ids, input_mask, segment_ids]) output = layers.Dense(1, activation='sigmoid')(pooled_output) model = tf.keras.models.Model(inputs=[input_word_ids, input_mask, segment_ids], outputs=output) return model # 准备数据 def create_input_data(sentences, labels): tokenizer = bert.tokenization.FullTokenizer(vocab_file=bert_path + "trainer/vocab.small", do_lower_case=True) # tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') input_ids = [] input_masks = [] segment_ids = [] for sentence in sentences: tokens = tokenizer.tokenize(sentence) tokens = ["[CLS]"] + tokens + ["[SEP]"] input_id = tokenizer.convert_tokens_to_ids(tokens) input_mask = [1] * len(input_id) segment_id = [0] * len(input_id) padding_length = max_seq_length - len(input_id) input_id += [0] * padding_length input_mask += [0] * padding_length segment_id += [0] * padding_length input_ids.append(input_id) input_masks.append(input_mask) segment_ids.append(segment_id) return np.array(input_ids), np.array(input_masks), np.array(segment_ids), np.array(labels) # 加载训练数据 train_sentences = ["Example sentence 1", "Example sentence 2", ...] train_labels = [0, 1, ...] train_input_ids, train_input_masks, train_segment_ids, train_labels = create_input_data(train_sentences, train_labels) # 构建模型 model = create_model() model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate), loss='binary_crossentropy', metrics=['accuracy']) # 开始微调 model.fit([train_input_ids, train_input_masks, train_segment_ids], train_labels, batch_size=train_batch_size, epochs=num_train_epochs)
这段代码是用 TensorFlow 和 BERT 模型进行文本分类的示例。首先定义了模型路径和参数,然后使用 `hub.KerasLayer` 加载 BERT 模型,对输入进行编码后,添加一个全连接层并进行二分类,构建一个分类模型。接着使用 `bert.tokenization.FullTokenizer` 对输入数据进行编码,最后使用 `model.fit` 进行微调训练。这个示例并不是完整的代码,需要根据实际情况进行修改。
阅读全文