pelinker.analysis¶
compute_adjusted_rand_index(y_true, y_pred)
¶
Compute clustering quality via adjusted Rand index (ARI).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
y_true
|
ndarray
|
True labels (e.g., property names) |
required |
y_pred
|
ndarray
|
Predicted cluster labels |
required |
Returns:
| Type | Description |
|---|---|
float
|
ARI score. |
Source code in pelinker/analysis.py
compute_clustering_fit_metrics(clusterer, manifold_df, *, min_cluster_size, cluster_labels)
¶
DBCV, ARI vs entity, and cluster counts for a fitted HDBSCAN model.
Source code in pelinker/analysis.py
compute_kb_generality_scores(embeddings, labels, k_neighbors=10, metric='cosine', word_frequencies=None, density_weight=0.5)
¶
Compute generality scores for entities based on KB statistics.
Combines embedding-space density with label simplicity to identify generic vs specific terms. Generic terms tend to have: - Many similar neighbors (high density) - High average similarity to neighbors - Shorter, simpler labels (fewer words, common words) - Central position in semantic space
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
embeddings
|
ndarray
|
Array of shape (n_points, n_features) containing embeddings |
required |
labels
|
list[str]
|
List of labels corresponding to embeddings |
required |
k_neighbors
|
int
|
Number of nearest neighbors to consider |
10
|
metric
|
str
|
Distance metric ('cosine' or 'euclidean') |
'cosine'
|
word_frequencies
|
Mapping[str, float] | None
|
Optional word frequency mapping for simplicity scoring |
None
|
density_weight
|
float
|
Weight for embedding density vs label simplicity (0.0 = pure simplicity, 1.0 = pure density) |
0.5
|
Returns:
| Type | Description |
|---|---|
ndarray
|
Array of generality scores (higher = more generic), shape (n_points,) |
Source code in pelinker/analysis.py
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 | |
drop_entities_with_few_mentions(frame, min_mentions_per_entity, *, negative_label=None)
¶
Drop entities with fewer than min_mentions_per_entity rows (same rule as
:func:~pelinker.selection.load_selection_frame / mention-level selection eval).
When negative_label is set, that label is never dropped for low mention count
(so thin negative tails remain for screener training).
Source code in pelinker/analysis.py
embeddings_dict_to_dataframe(embeddings_dict)
¶
Convert embeddings dictionary to DataFrame format expected by transform artifacts.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
embeddings_dict
|
dict[str, tuple[str, Tensor | ndarray]]
|
Dictionary mapping id -> (label, embedding) |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: id, label, embed |
Source code in pelinker/analysis.py
evaluate_all_screeners_cv(X_embed, X_manifold, y, entity, orig_idx, screener_cfg, oov_cfg)
¶
Shared-stratified-fold CV for LDA/SVM negative screener, manifold OOV model, and stacked score.
screener_best scores use the ROC winner (LDA vs SVM) on pooled OOS predictions.
When oov_cfg.enabled is False or X_manifold is None, OOV branch is skipped:
combined metrics match screener_best and oov_winner_kind is "disabled".
Source code in pelinker/analysis.py
759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 | |
fit_ambient_screener_with_metrics(dfr, config)
¶
Fit the persisted screener on dfr and report in-sample PR/F1 for detecting
negative_label when both classes are present.
Source code in pelinker/analysis.py
get_word_frequencies_from_library(language='en', wordlist='best')
¶
Get word frequency lookup object from wordfreq library.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
language
|
str
|
Language code (default: "en" for English) |
'en'
|
wordlist
|
str
|
Wordlist size - "best", "large", or "small" (default: "best") |
'best'
|
Returns:
| Type | Description |
|---|---|
object | None
|
WordFrequencyLookup object with .get() method, or None if library not available |
Source code in pelinker/analysis.py
grid_solver_config(optimization_config, *, grid_cluster_count_reward=None, grid_n_entities=None, grid_objective=None, optimization_method=None)
¶
Merge optional solver overrides into optimization_config (or defaults).
Source code in pelinker/analysis.py
grid_solver_overrides_active(*, optimization_config, grid_cluster_count_reward, grid_n_entities, grid_objective, optimization_method)
¶
True when any solver knob was supplied, i.e. a re-solve was explicitly requested.
Source code in pelinker/analysis.py
pooled_grid_solve_from_metrics_dfs(metrics_dfs, optimization_config=None)
¶
After all bootstrap samples have run a min_cluster_size grid, aggregate their metrics
once and return full smoothed-grid diagnostics (including y_objective curve).
Source code in pelinker/analysis.py
pooled_min_cluster_size_from_metrics_dfs(metrics_dfs, optimization_config=None)
¶
After all bootstrap samples have run a min_cluster_size grid, aggregate their metrics
once and return the smoothed (chosen_min_cluster_size, raw objective mean at that grid point).
The objective is set by ClusteringOptimizationConfig.grid_objective (default: pooled
min–max normalized DBCV and ARI).
Source code in pelinker/analysis.py
resolve_chosen_min_cluster_size_by_combo_from_grid(df_grid, optimization_config=None, *, grid_cluster_count_reward=None, grid_n_entities=None, grid_objective=None, optimization_method=None)
¶
Re-solve chosen_min_cluster_size per (model, layer) from a grid export CSV frame.
Source code in pelinker/analysis.py
should_resolve_chosen_min_cluster_size(*, chosen_min_cluster_size, optimization_config, grid_cluster_count_reward, grid_n_entities, grid_objective, optimization_method)
¶
Re-solve only when no chosen value is on hand and solver knobs were supplied.
Source code in pelinker/analysis.py
solve_pooled_grid_by_combo_from_grid(df_grid, optimization_config=None, *, grid_cluster_count_reward=None, grid_n_entities=None, grid_objective=None, optimization_method=None)
¶
Pooled grid solve per (model, layer) from a grid export CSV frame.
Source code in pelinker/analysis.py
solve_pooled_grid_from_metrics_list(metrics_list, optimization_config=None, *, grid_cluster_count_reward=None, grid_n_entities=None, grid_objective=None, optimization_method=None)
¶
Pooled grid solve on per-sample metric tables; returns full diagnostics.
Source code in pelinker/analysis.py
split_by_negative_label(dfr, negative_label)
¶
Split a mention frame into a boolean mask of synthetic-negative rows and the manifold frame (KB / non-negative rows only).