speechbrain.utils.EDER 模块

计算情感分割错误率 (EDER),它是漏检情感 (ME)、虚警 (FA) 和混淆 (CF) 的总和。

作者
  • Yingzhi Wang 2023

总结

函数

EDER

计算 EDER 值

distribute_overlap

将重叠语音等量分配给具有不同情感的相邻片段。

getOverlap

获取两个区间重叠的长度

is_overlapped

如果片段重叠则返回 True。

merge_ssegs_same_emotion_adjacent

如果相邻子片段具有相同情感,则合并它们。

reference_to_lol

将引用更改为列表的列表

参考

speechbrain.utils.EDER.EDER(prediction, id, duration, emotion, window_length, stride)[source]

计算 EDER 值

参数:
  • prediction (list) – utterance 的帧级预测列表

  • id (str) – utterance 的 ID

  • duration (float) – utterance 的持续时间

  • emotion (list of dicts) – 真值情感及其持续时间,例如 [{‘emo’: ‘angry’, ‘start’: 1.016, ‘end’: 6.336}]

  • window_length (float) – 用于帧级预测的帧长度

  • stride (float) – 用于帧级预测的帧步长

返回:

float

返回类型:

计算出的 utterance 的 EDER 值

示例

>>> from speechbrain.utils.EDER import EDER
>>> prediction=['n', 'n', 'n', 'a', 'a', 'a']
>>> id="spk1_1"
>>> duration=1.22
>>> emotion=[{'emo': 'angry', 'start': 0.39, 'end': 1.10}]
>>> window_length = 0.2
>>> stride = 0.2
>>> EDER(prediction, id, duration, emotion, window_length, stride)
0.2704918032786885
speechbrain.utils.EDER.getOverlap(a, b)[source]

获取两个区间重叠的长度

参数:
返回:

float

返回类型:

重叠长度

示例

>>> from speechbrain.utils.EDER import getOverlap
>>> interval1=[1.2, 3.4]
>>> interval2=[2.3, 4.5]
>>> getOverlap(interval1, interval2)
1.1
speechbrain.utils.EDER.is_overlapped(end1, start2)[source]

如果片段重叠则返回 True。

参数:
  • end1 (float) – 第一个片段的结束时间。

  • start2 (float) – 第二个片段的开始时间。

返回:

overlapped – 如果片段重叠则为 True,否则为 False。

返回类型:

bool

示例

>>> is_overlapped(5.5, 3.4)
True
>>> is_overlapped(5.5, 6.4)
False
speechbrain.utils.EDER.merge_ssegs_same_emotion_adjacent(lol)[source]

如果相邻子片段具有相同情感,则合并它们。

参数:

lol (list of list) – 每个列表包含 [utterance_id, 子片段开始时间, 子片段结束时间, 情感标签]。

返回:

new_lol – new_lol 包含从相同情感 ID 合并的相邻片段。

返回类型:

list of list

示例

>>> from speechbrain.utils.EDER import merge_ssegs_same_emotion_adjacent
>>> lol=[['u1', 0.0, 7.0, 'a'],
... ['u1', 7.0, 9.0, 'a'],
... ['u1', 9.0, 11.0, 'n'],
... ['u1', 11.0, 13.0, 'n'],
... ['u1', 13.0, 15.0, 'n'],
... ['u1', 15.0, 16.0, 'a']]
>>> merge_ssegs_same_emotion_adjacent(lol)
[['u1', 0.0, 9.0, 'a'], ['u1', 9.0, 15.0, 'n'], ['u1', 15.0, 16.0, 'a']]
speechbrain.utils.EDER.reference_to_lol(id, duration, emotion)[source]

将引用更改为列表的列表

参数:
  • id (str) – utterance 的 ID

  • duration (float) – utterance 的持续时间

  • emotion (list of dicts) – 真值情感及其持续时间,例如 [{‘emo’: ‘angry’, ‘start’: 1.016, ‘end’: 6.336}]

返回:

lol – 每个列表结构为 [recording_id, 子片段开始时间, 子片段结束时间, 说话人 ID]。

返回类型:

list of list

示例

>>> from speechbrain.utils.EDER import reference_to_lol
>>> id="u1"
>>> duration=8.0
>>> emotion=[{'emo': 'angry', 'start': 1.016, 'end': 6.336}]
>>> reference_to_lol(id, duration, emotion)
[['u1', 0, 1.016, 'n'], ['u1', 1.016, 6.336, 'a'], ['u1', 6.336, 8.0, 'n']]
speechbrain.utils.EDER.distribute_overlap(lol)[source]

将重叠语音等量分配给具有不同情感的相邻片段。

参数:

lol (list of list) – 每个列表结构为 [recording_id, 子片段开始时间, 子片段结束时间, 说话人 ID]。

返回:

new_lol – 它包含在具有不同情感 ID 的相邻片段中等量分配的重叠部分。

返回类型:

list of list

示例

>>> lol = [
...     ['r1', 5.5, 9.0, 's1'],
...     ['r1', 8.0, 11.0, 's2'],
...     ['r1', 11.5, 13.0, 's2'],
...     ['r1', 12.0, 15.0, 's1'],
... ]
>>> distribute_overlap(lol)
[['r1', 5.5, 8.5, 's1'], ['r1', 8.5, 11.0, 's2'], ['r1', 11.5, 12.5, 's2'], ['r1', 12.5, 15.0, 's1']]