使用 BERT 和 Keras 的神经网络进行文本分类



我正在尝试使用BERT运行二进制监督文本分类任务,但我不确定如何做到这一点。我试过用hug Face(🤗)库运行BERT,但是我不知道该如何处理这个过程的输出。

经过大量的互联网搜索,我最终得到了以下类(根据https://towardsdatascience.com/build-a-bert-sci-kit-transformer-59d60ddd54a5):

class BertTransformer(BaseEstimator, TransformerMixin):
def __init__(self):
self.tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
self.model = BertModel.from_pretrained("bert-base-uncased")
self.model.eval()
self.embedding_func = lambda x: x[0][:, 0, :].squeeze()
def _tokenize(self, text: str):
# Tokenize the text with the provided tokenizer
tokenized_text = self.tokenizer.encode_plus(text,
add_special_tokens=True,
truncation=True
)["input_ids"]
# Create an attention mask telling BERT to use all words
attention_mask = [1] * len(tokenized_text)
# bert takes in a batch so we need to unsqueeze the rows
return (
torch.tensor(tokenized_text).unsqueeze(0),
torch.tensor(attention_mask).unsqueeze(0),
)
def _tokenize_and_predict(self, text: str) -> torch.tensor:
tokenized, attention_mask = self._tokenize(text)
embeddings = self.model(tokenized, attention_mask)
return self.embedding_func(embeddings)
def transform(self, text: List[str]):
if isinstance(text, pd.Series):
text = text.tolist()
with torch.no_grad():
return torch.stack([self._tokenize_and_predict(string) for string in text])
def fit(self, X, y=None):
return self
  1. 这个类适合在sikit - learn中使用,这对我有好处,但我也想使用Keras与深度学习模型一起运行它。如何使用Keras的神经网络(如RNN和CNN)?

  2. 据我所知,上面的代码只接受CLS令牌,而不是所有的令牌。我不知道这样行不行。也许我应该把它们都用上?如果有,我该怎么做呢?

如有任何帮助,不胜感激。

我不确定您所说的流程输出是什么意思。如果您想使用模型进行预测,可以使用下面的代码。在这个库中可能有一些关于如何使用基于预训练模型的预测的提示,lazy-text-predict它也可能帮助你实现你的文本分类器。

text='my text to classify'
model=BertForSequenceClassification.from_pretrained('/content/bert-base-uncased_model')
tokenizer=BertTokenizerFast.from_pretrained('bert-base-uncased')
text_classification= transformers.pipeline('sentiment-analysis',
model=model, 
tokenizer=tokenizer)
y=text_classification(text)[0]
print(y)

最新更新