Ana içeriğe geç

Yöntemler

Yöntemler, bir FeatureMatrix'i Result'a dönüştürür. Her yöntem, anlamlı olduğu yerde sklearn uyumludur (fit, predict, fit_transform).

Yazar tespiti — Delta varyantları

Tüm Delta varyantları _DeltaBase'i paylaşır, z-puanlı öznitelikler üzerinde çalışır ve en yakın-merkez sınıflandırıcı üretir.

Sınıf Uzaklık Referans
BurrowsDelta ortalama mutlak L1 Burrows 2002
ArgamonLinearDelta L2 (Öklid) Argamon 2008
QuadraticDelta karesel L2
CosineDelta 1 − kosinüs benzerliği Smith & Aldridge 2011
EderDelta / EderSimpleDelta ağırlıklı Delta varyantları Eder 2015
from tamga import MFWExtractor, BurrowsDelta
fm = MFWExtractor(n=200, scale="zscore", lowercase=True).fit_transform(corpus)
y = np.array(corpus.metadata_column("author"))
clf = BurrowsDelta().fit(fm, y)
predictions = clf.predict(fm)       # en yakın-merkez etiketleri
probs = clf.predict_proba(fm)       # negatif uzaklıklar üzerinde softmax

BurrowsDelta

BurrowsDelta()

Şu durumda kullanın: 2 veya daha fazla aday yazar varsa ve her birinden ~2000+ sözcüklük bilinen yazı mevcutsa; hangi yazarın sorgulandığı metni büyük olasılıkla yazdığını sıralamak istiyorsanız. Şu durumda kullanmayın: yalnızca tek aday yazarınız varsa (GeneralImpostors doğrulamasını kullanın) ya da metinler ~500 sözcükten kısa olduğunda (sinyal gürültülü hale gelir). Beklenen sonuç: aday başına bir uzaklık skoru; en düşük uzaklık tahmin edilen yazardır.

Klasik Burrows (2002) yöntemi: öznitelikleri z-puanlama, her adayın merkezine ortalama mutlak fark (L1) uzaklığı. Edebi İngilizce için iyi bir varsayılan seçim.

CosineDelta

CosineDelta()

Şu durumda kullanın: Delta ailesine dayalı yazar tespiti için modern bir varsayılan istiyorsanız — kosinüs, belge uzunluğu farklılıklarına karşı dayanıklıdır ve L1'e kıyasla aykırı sözcüklere daha az duyarlıdır. Şu durumda kullanmayın: derlem farklı türleri dikkat gözetilmeksizin harmanlıyorsa; konu, biçemi baskıladığında kosinüs daha az tanımlayıcı olur. Beklenen sonuç: aday başına [0, 2] aralığında bir uzaklık skoru; en düşük uzaklık kazanır.

Smith & Aldridge (2011). Modern stilometride standart seçim; ayar yapmadan önce genellikle en iyi tek yöntem temelidir.

EderDelta / EderSimpleDelta

EderDelta(), EderSimpleDelta()

Şu durumda kullanın: en sık sözcükler (MFW) kuyruğundaki gürültülü düşük frekanslı sözcükleri bastırmak istiyorsanız — Eder'in ağırlıklandırması, daha az sık geçen özniteliklerin katkısını cezalandırır. Şu durumda kullanmayın: MFW listeniz zaten kısaysa (n < 100); aşağı ağırlıklandırılacak kuyruk bulunmaz. Beklenen sonuç: Burrows Delta ile aynı biçim; kuyruk MFW katkıları aksi takdirde baskın olacağında farklı sıralama.

Eder (2015). İki varyant: EderDelta açık öznitelik başına ağırlıklarla, EderSimpleDelta basitleştirilmiş bir şemayla.

ArgamonLinearDelta

ArgamonLinearDelta()

Şu durumda kullanın: L1 yerine özellikle Öklid (L2) uzaklığı istiyorsanız — z-puanlamasından sonra öznitelikler yaklaşık Gaussian dağılımlı olduğunda uygundur. Şu durumda kullanmayın: MFW dağılımı aykırı değer üretecek kadar çarpıksa; L2, aykırı değerleri ikinci dereceden cezalandırır. CosineDelta veya BurrowsDelta tercih edin. Beklenen sonuç: aday başına bir uzaklık skoru; diğer Delta varyantlarıyla aynı sıralama biçimi, büyük öznitelik sapmalarına farklı duyarlılık.

Argamon (2008). Gaussian üretici model altında Delta'nın olasılıksal yorumu.

QuadraticDelta

QuadraticDelta()

Şu durumda kullanın: karesel L2 uzaklığı kullanan deneyleri yeniden üretmek istiyorsanız — karekök olmaksızın Argamon Delta'ya eşdeğerdir. Şu durumda kullanmayın: aşağı akış birleştirme için kalibre edilmiş bir uzaklığa ihtiyaç duyuyorsanız; karesel uzaklıklar gerçek bir metrik değildir. Beklenen sonuç: aday başına bir uzaklık skoru; Argamon Linear Delta ile monoton, dolayısıyla sıralama aynıdır.

Karşıtlık — Zeta

Craig'in Zeta'sı (ZetaClassic) ve Eder'in yumuşatılmış varyantı (ZetaEder), bir yazar grubunun diğerine kıyasla en çok tercih ettiği sözcük dağarcığını çıkarır.

from tamga.methods.zeta import ZetaClassic
result = ZetaClassic(group_by="author", top_k=50, group_a="Hamilton", group_b="Madison").fit_transform(corpus)
df_a, df_b = result.tables   # oranlarla birlikte en yüksek k A-tercihli / B-tercihli sözcükler

ZetaClassic

ZetaClassic(group_by=..., top_k=..., group_a=..., group_b=...)

Şu durumda kullanın: iki önceden tanımlanmış yazar grubunuz (veya yazarınız) varsa ve her grubun diğerine kıyasla hangi sözcükleri tercih ettiğini öğrenmek istiyorsanız — Craig'in klasik Zeta'sı. Şu durumda kullanmayın: yalnızca bilinmeyen bir belgeyi adaylara karşı sıralamak istiyorsanız (bunun yerine Delta kullanın) ya da gruplarınız çok küçükse (her grupta <10 belge). Beklenen sonuç: en yüksek k sözcüklük iki tablo; her sözcüğün A'daki ve B'deki oranı; büyük farklar belirleyici sözcük dağarcığıdır.

ZetaEder

ZetaEder(group_by=..., top_k=..., group_a=..., group_b=...)

Şu durumda kullanın: Eder (2017) yumuşatması ile Zeta istiyorsanız — çok nadir veya çok yaygın sözcükleri klasik versiyona kıyasla daha zarif biçimde ele alır. Şu durumda kullanmayın: Burrows/Craig dönemi sonuçlarını karşılaştırma amacıyla yeniden üretiyorsanız; tarihsel eşlik için ZetaClassic kullanın. Beklenen sonuç: ZetaClassic ile aynı çıktı biçimi; kuyruklara yakın daha düzgün sıralama.

Boyut indirgeme

Tüm indirgeyiciler bir FeatureMatrix kabul eder ve 2 boyutlu / n boyutlu koordinatları içeren bir Result döndürür.

PCAReducer

PCAReducer(n_components=2)

Şu durumda kullanın: eksenlerin dik varyans yönleri olduğu hızlı, yorumlanabilir bir 2 veya 3 boyutlu projeksiyon istiyorsanız. "Dermemi görselleştir" soruları için varsayılan seçim. Şu durumda kullanmayın: yazar farklılıkları son derece doğrusal değilse; PCA'nın doğrusal eksenleri kavisli manifoldları kaçırır. Beklenen sonuç: coords (n_docs × n_components) + bileşen başına explained_variance_ratio_.

UMAPReducer

UMAPReducer(n_components=2, n_neighbors=15, min_dist=0.1)

Şu durumda kullanın: hem yerel hem de küresel yapıyı koruyan doğrusal olmayan bir projeksiyon istiyorsanız — genellikle stilometrik özniteliklerin en iyi görünen 2 boyutlu görselleştirmesi. Şu durumda kullanmayın: bir tohum sabitlemeden yeniden üretilebilirliğe ihtiyaç duyuyorsanız — UMAP stokastiktir. Her zaman random_state ayarlayın. Beklenen sonuç: coords (n_docs × n_components). tamga[viz] gerektirir.

TSNEReducer

TSNEReducer(n_components=2, perplexity=30)

Şu durumda kullanın: yerel komşuluk yapısını vurgulayan doğrusal olmayan bir projeksiyon istiyorsanız — yazarlar sıkı kümelenir. Şu durumda kullanmayın: kümeler arası uzaklıkların anlamlı olması gerekiyorsa (t-SNE bunları bozar) ya da koordinatları aşağı akış yöntemi için öznitelik olarak kullanmayı planlıyorsanız. Beklenen sonuç: coords (n_docs × n_components). Tohum olmadan belirleyici değildir.

MDSReducer

MDSReducer(n_components=2, metric=True)

Şu durumda kullanın: çiftler arası Delta uzaklıklarını olabildiğince gerçeğe yakın korumaya çalışan bir projeksiyon istiyorsanız — dendrogram + dağılım grafiğini birlikte yorumlamak için uygundur. Şu durumda kullanmayın: büyük bir derlem (>500 belge) varsa; MDS kötü ölçeklenir. Beklenen sonuç: coords (n_docs × n_components) + stress (düşükse daha iyi uyum).

Kümeleme

Kümeleyiciler bir FeatureMatrix kabul eder ve küme etiketleri üretir; hiyerarşik kümeleme ayrıca dendrogramlar için bağlantı matrisini döndürür.

HierarchicalCluster

HierarchicalCluster(linkage="ward")

Şu durumda kullanın: yaprakların belgeler, dal yüksekliklerinin uzaklıklar olduğu bir dendrogram — stilometrinin kanonik görselleştirmesi — istiyorsanız. Şu durumda kullanmayın: derlem dendrogram incelemesinin artık pratik olmayacağı kadar büyükse (>2000 belge). Beklenen sonuç: labels (n_docs,) + scipy.cluster.hierarchy.dendrogram ile kullanılabilir linkage_matrix.

Desteklenen bağlantılar: "ward" (varsayılan, varyansı en aza indiren), "average", "complete", "single".

KMeansCluster

KMeansCluster(n_clusters=3, seed=42)

Şu durumda kullanın: tahmini bir küme sayınız varsa ve benzer boyutlu küresel kümeler istiyorsanız — en hızlı kümeleme seçeneği. Şu durumda kullanmayın: küme boyutları çok eşitsizse, küme şekilleri uzunsa veya n_clusters'ı önceden bilmiyorsanız (HDBSCANCluster kullanın). Beklenen sonuç: labels (n_docs,) + küme merkezleri.

HDBSCANCluster

HDBSCANCluster(min_cluster_size=5)

Şu durumda kullanın: küme sayısını önceden bilmiyorsanız, değişken küme yoğunluğu bekliyorsanız veya "gürültü" noktalarının aykırı değer (-1) olarak etiketlenmesini istiyorsanız. Şu durumda kullanmayın: derlem küçükse (<30 belge); HDBSCAN'ın yoğunluk tahminleri kararsız hale gelir. Beklenen sonuç: gürültü için -1 içeren labels (n_docs,); probabilities (küme üyelik güveni).

Konsensüs ağaçları

BootstrapConsensus

BootstrapConsensus(mfw_bands=[100, 200, 300], replicates=20)

Şu durumda kullanın: dendrogram için sağlamlık kanıtı istiyorsanız — MFW öznitelik kümesini tekrar tekrar yeniden örnekleyin ve hangi kladların hayatta kaldığını görün. Şu durumda kullanmayın: hızlı tek bir görselleştirmeye ihtiyaç duyuyorsanız; bootstrap birçok Delta + kümeleme döngüsü çalıştırır ve yavaştır. Beklenen sonuç: klade destek değerleriyle (o kladın görüldüğü tekrar oranı) Newick formatında konsensüs ağacı.

Eder (2017). "Kaç tane MFW?" parametresini bantlar üzerinde örnekleyerek dışarıya alır.

Sınıflandırma + çapraz doğrulama

Herhangi bir sklearn sınıflandırıcı (Lojistik Regresyon, lineer / RBF SVM, Random Forest, HistGBM) build_classifier(name) ile, ayrıca üç stilometri odaklı çapraz doğrulama stratejisiyle cross_validate_tamga(fm, y, cv_kind=...):

Şu durumda kullanın: etiketli belgeleriniz (yazar veya grup) varsa ve yazar kimliğini katlara sızdırmayan stilometri odaklı çapraz doğrulama ile standart makine öğrenmesi performans ölçütleri — doğruluk, F1, karışıklık matrisleri — istiyorsanız. Şu durumda kullanmayın: sınıf başına ~20'den az belgeniz varsa; çapraz doğrulama istatistiksel olarak anlamsız hale gelir. Ayrıca tek vaka doğrulaması için kullanmayın (GeneralImpostors kullanın). Beklenen sonuç: kat başına tahminler, ortalama doğruluk / makro F1 ve aşağı akış grafikleri için kat düzeyinde Result nesneleri.

  • stratified — StratifiedKFold; seed karıştırmayı denetler
  • loao — Leave-One-Author-Out (yazar grup olarak LeaveOneGroupOut)
  • leave_one_text_out — LeaveOneOut

Bayesian

BayesianAuthorshipAttributor

BayesianAuthorshipAttributor()

Şu durumda kullanın: N aday yazar üzerinde ilkeli Dirichlet düzleştirmesiyle posteriyor olasılıkları istiyorsanız — Wallace–Mosteller Federalist yaklaşımı. Şu durumda kullanmayın: öznitelikleriniz z-puanlıysa (ham sayımlar bekler; MFWExtractor(scale="none") kullanın). Beklenen sonuç: predict_proba, belge başına adaylar üzerinde posteriyor olasılık vektörleri döndürür. tamga[bayesian] gerekmez — bu varyant saf NumPy'dır.

HierarchicalGroupComparison

HierarchicalGroupComparison(group_a=..., group_b=..., feature_name=...)

Şu durumda kullanın: iki yazar popülasyonunun stilistik bir öznitelik açısından sistematik biçimde farklılaşıp farklılaşmadığını tam yazar başına belirsizlikle sınamak istiyorsanız — PyMC değişken-kesişim modeli. Şu durumda kullanmayın: grup başına yalnızca bir yazarınız varsa (havuzlama sinyali yok) ya da hızlı bir tarama yöntemine ihtiyaç duyuyorsanız (MCMC örneklemesi yavaştır; önce frekansçı Zeta kullanın). Beklenen sonuç: grup farkı parametresi için posteriyor çekimleri içeren arviz InferenceData. tamga[bayesian] gerektirir.

Adli dilbilim yöntemleri

tamga.forensic altında:

Şu durumda kullanın: tamga'nın tek vaka doğrulamasını veya kalibrasyon katmanını kullanmak istiyorsanız — yöntem başına ayrıntılı açıklamalar için özel Adli dilbilim araç takımı sayfalarına bakın. Şu durumda kullanmayın: kapalı bir aday kümeniz varsa ve yalnızca yazar tespiti istiyorsanız — yukarıdaki Delta varyantlarını kullanın. Beklenen sonuç: sınıflandırıcı doğruluğu değil, kalibre edilmiş log-OO + kanıt meta verisi döndüren puanlayıcılar.

Yöntem Görev Referans
GeneralImpostors tek sınıflı yazar doğrulama Koppel & Winter 2014
Unmasking uzun metin doğrulama (doğruluk-bozunma eğrisi) Koppel & Schler 2004
CalibratedScorer herhangi bir puanlayıcının Platt / izotonik kalibrasyonu Platt 1999; Niculescu-Mizil & Caruana 2005

Bkz. Adli dilbilim araç takımı.

Sonraki adım