From 32c875b2e8a981ebf39ce7c0a453d2eebbd1bee9 Mon Sep 17 00:00:00 2001 From: Matt Buchovecky Date: Fri, 24 Jan 2025 23:54:11 -0800 Subject: [PATCH 1/5] fix: cast indices tensor to int to fix bug --- flair/nn/model.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/flair/nn/model.py b/flair/nn/model.py index 54c52eba3e..04a9c24a3b 100644 --- a/flair/nn/model.py +++ b/flair/nn/model.py @@ -899,7 +899,9 @@ def predict( if has_unknown_label: has_any_unknown_label = True - scores = torch.index_select(scores, 0, torch.tensor(filtered_indices, device=flair.device)) + scores = torch.index_select( + scores, 0, torch.tensor(filtered_indices, device=flair.device, dtype=torch.int32) + ) gold_labels = self._prepare_label_tensor([data_points[index] for index in filtered_indices]) overall_loss += self._calculate_loss(scores, gold_labels)[0] From 7c302c6afea086acd2aa0a29475ee81887f4a049 Mon Sep 17 00:00:00 2001 From: Matt Buchovecky Date: Sun, 26 Jan 2025 12:20:25 -0800 Subject: [PATCH 2/5] fix: use proper eval default main eval metrics for text regression model also refactor variables to avoid type conflicts --- flair/models/pairwise_regression_model.py | 8 +++---- flair/models/text_regression_model.py | 27 ++++++++++++++--------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/flair/models/pairwise_regression_model.py b/flair/models/pairwise_regression_model.py index 9a1c2704be..bc77b54dce 100644 --- a/flair/models/pairwise_regression_model.py +++ b/flair/models/pairwise_regression_model.py @@ -345,7 +345,7 @@ def evaluate( f"spearman: {metric.spearmanr():.4f}" ) - scores = { + eval_metrics = { "loss": eval_loss.item(), "mse": metric.mean_squared_error(), "mae": metric.mean_absolute_error(), @@ -354,12 +354,12 @@ def evaluate( } if main_evaluation_metric[0] in ("correlation", "other"): - main_score = scores[main_evaluation_metric[1]] + main_score = eval_metrics[main_evaluation_metric[1]] else: - main_score = scores["spearman"] + main_score = eval_metrics["spearman"] return Result( main_score=main_score, detailed_results=detailed_result, - scores=scores, + scores=eval_metrics, ) diff --git a/flair/models/text_regression_model.py b/flair/models/text_regression_model.py index d1ad98d4e0..a0a99e6402 100644 --- a/flair/models/text_regression_model.py +++ b/flair/models/text_regression_model.py @@ -137,7 +137,7 @@ def evaluate( out_path: Optional[Union[str, Path]] = None, embedding_storage_mode: EmbeddingStorageMode = "none", mini_batch_size: int = 32, - main_evaluation_metric: tuple[str, str] = ("micro avg", "f1-score"), + main_evaluation_metric: tuple[str, str] = ("correlation", "pearson"), exclude_labels: Optional[list[str]] = None, gold_label_dictionary: Optional[Dictionary] = None, return_loss: bool = True, @@ -195,16 +195,23 @@ def evaluate( f"spearman: {metric.spearmanr():.4f}" ) - result: Result = Result( - main_score=metric.pearsonr(), + eval_metrics = { + "loss": eval_loss.item(), + "mse": metric.mean_squared_error(), + "mae": metric.mean_absolute_error(), + "pearson": metric.pearsonr(), + "spearman": metric.spearmanr(), + } + + if main_evaluation_metric[0] in ("correlation", "other"): + main_score = eval_metrics[main_evaluation_metric[1]] + else: + main_score = eval_metrics["spearman"] + + result = Result( + main_score=main_score, detailed_results=detailed_result, - scores={ - "loss": eval_loss.item(), - "mse": metric.mean_squared_error(), - "mae": metric.mean_absolute_error(), - "pearson": metric.pearsonr(), - "spearman": metric.spearmanr(), - }, + scores=eval_metrics, ) return result From 0b95bcd0dba10ac714cbf32ae7d3528f9d9ba5ad Mon Sep 17 00:00:00 2001 From: Samule Garda Date: Tue, 28 Jan 2025 10:56:38 +0100 Subject: [PATCH 3/5] fix: update scipy .A to toarray() --- flair/embeddings/document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flair/embeddings/document.py b/flair/embeddings/document.py index 8f66a198ed..69fe9405b3 100644 --- a/flair/embeddings/document.py +++ b/flair/embeddings/document.py @@ -210,7 +210,7 @@ def embed(self, sentences: Union[list[Sentence], Sentence]): sentences = [sentences] raw_sentences = [s.to_original_text() for s in sentences] - tfidf_vectors = torch.from_numpy(self.vectorizer.transform(raw_sentences).A) + tfidf_vectors = torch.from_numpy(self.vectorizer.transform(raw_sentences).toarray()) for sentence_id, sentence in enumerate(sentences): sentence.set_embedding(self.name, tfidf_vectors[sentence_id]) From 79aa33706e7f753f2edf962feb1d75de22af0d1d Mon Sep 17 00:00:00 2001 From: Benedikt Fuchs Date: Fri, 31 Jan 2025 14:09:37 +0100 Subject: [PATCH 4/5] add compability to torch 2.6 --- flair/file_utils.py | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flair/file_utils.py b/flair/file_utils.py index 518d69e809..53fac0f75b 100644 --- a/flair/file_utils.py +++ b/flair/file_utils.py @@ -382,4 +382,4 @@ def load_torch_state(model_file: str) -> dict[str, typing.Any]: # to load models on some Mac/Windows setups # see https://github.com/zalandoresearch/flair/issues/351 f = load_big_file(model_file) - return torch.load(f, map_location="cpu") + return torch.load(f, map_location="cpu", weights_only=False) diff --git a/requirements.txt b/requirements.txt index 2704114ace..39cf750c66 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ scikit-learn>=1.0.2 segtok>=1.5.11 sqlitedict>=2.0.0 tabulate>=0.8.10 -torch>=1.5.0,!=1.8 +torch>=1.13.1 tqdm>=4.63.0 transformer-smaller-training-vocab>=0.2.3 transformers[sentencepiece]>=4.25.0,<5.0.0 From 087b74efa3c1839010bb8dcc3bbc740d57da131a Mon Sep 17 00:00:00 2001 From: Benedikt Fuchs Date: Fri, 31 Jan 2025 15:05:56 +0100 Subject: [PATCH 5/5] fix some typing --- flair/embeddings/document.py | 3 +-- flair/embeddings/token.py | 2 +- flair/models/sequence_tagger_model.py | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/flair/embeddings/document.py b/flair/embeddings/document.py index 8f66a198ed..91aac0b9e0 100644 --- a/flair/embeddings/document.py +++ b/flair/embeddings/document.py @@ -691,10 +691,9 @@ def _add_embeddings_internal(self, sentences: list[Sentence]): lengths: list[int] = [len(sentence.tokens) for sentence in sentences] padding_length: int = max(max(lengths), self.min_sequence_length) - pre_allocated_zero_tensor = torch.zeros( self.embeddings.embedding_length * padding_length, - dtype=self.convs[0].weight.dtype, + dtype=cast(torch.nn.Conv1d, self.convs[0]).weight.dtype, device=flair.device, ) diff --git a/flair/embeddings/token.py b/flair/embeddings/token.py index 3d95c8ee0b..a9e6ba2199 100644 --- a/flair/embeddings/token.py +++ b/flair/embeddings/token.py @@ -1466,7 +1466,7 @@ def _add_embeddings_internal(self, sentences: list[Sentence]) -> list[Sentence]: word = token.text if self.field is None else token.get_label(self.field).value if word.strip() == "": - ids = [self.spm.vocab_size(), self.embedder.spm.vocab_size()] + ids = [self.spm.vocab_size(), self.spm.vocab_size()] else: if self.do_preproc: word = self._preprocess(word) diff --git a/flair/models/sequence_tagger_model.py b/flair/models/sequence_tagger_model.py index ea028c3e70..25b5b374f3 100644 --- a/flair/models/sequence_tagger_model.py +++ b/flair/models/sequence_tagger_model.py @@ -862,8 +862,8 @@ def push_to_hub( self.save(local_model_path) # Determine if model card already exists - info = model_info(repo_id, use_auth_token=token) - write_readme = all(f.rfilename != "README.md" for f in info.siblings) + info = model_info(repo_id, token=token) + write_readme = info.siblings is None or all(f.rfilename != "README.md" for f in info.siblings) # Generate and save model card if write_readme: