feat(audio): 修复说话人聚类并更新至0.4.0-alpha.1
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
from app.local_models.worker import cluster_speaker_embeddings
|
||||
|
||||
|
||||
def segment(start, end):
|
||||
return {"start_time": start, "end_time": end}
|
||||
|
||||
|
||||
def test_centroid_updates_allow_one_speaker_to_drift():
|
||||
speakers = cluster_speaker_embeddings(
|
||||
[[1, 0], [0.8, 0.6], [0.55, 0.835]],
|
||||
[segment(0, 2), segment(2, 4), segment(4, 6)],
|
||||
threshold=0.7,
|
||||
)
|
||||
assert speakers == ["speaker_1"] * 3
|
||||
|
||||
|
||||
def test_short_segments_and_short_singleton_join_stable_neighbors():
|
||||
speakers = cluster_speaker_embeddings(
|
||||
[[1, 0], None, [0.98, 0.1], [0, 1], [-0.9, -0.1], [0.1, 0.99]],
|
||||
[segment(0, 2), segment(2, 2.4), segment(2.4, 5), segment(5, 8), segment(8, 9.5), segment(9.5, 12)],
|
||||
)
|
||||
assert speakers[0] == speakers[1] == speakers[2] == "speaker_1"
|
||||
assert speakers[3] == speakers[4] == speakers[5] == "speaker_2"
|
||||
assert None not in speakers
|
||||
|
||||
|
||||
def test_multiple_supported_speakers_are_not_collapsed():
|
||||
speakers = cluster_speaker_embeddings(
|
||||
[[1, 0, 0], [0.99, 0.05, 0], [0, 1, 0], [0.05, 0.99, 0], [0, 0, 1], [0, 0.05, 0.99]],
|
||||
[segment(i * 2, i * 2 + 2) for i in range(6)],
|
||||
)
|
||||
assert speakers == ["speaker_1", "speaker_1", "speaker_2", "speaker_2", "speaker_3", "speaker_3"]
|
||||
|
||||
|
||||
def test_all_too_short_remains_unassigned_without_model_evidence():
|
||||
assert cluster_speaker_embeddings(
|
||||
[None, None], [segment(0, 0.4), segment(0.5, 0.9)]
|
||||
) == [None, None]
|
||||
Reference in New Issue
Block a user