zhifu gao
2024-04-26 1cdb3cc28d4d89a576cc06e5cd8eb80da1f3a3aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random
 
 
def sample_hotword(
    length,
    hotword_min_length,
    hotword_max_length,
    sample_rate,
    double_rate,
    pre_prob,
    pre_index=None,
    pre_hwlist=None,
):
    if length < hotword_min_length:
        return [-1]
    if random.random() < sample_rate:
        if pre_prob > 0 and random.random() < pre_prob and pre_index is not None:
            return pre_index
        if length == hotword_min_length:
            return [0, length - 1]
        elif random.random() < double_rate and length > hotword_max_length + hotword_min_length + 2:
            # sample two hotwords in a sentence
            _max_hw_length = min(hotword_max_length, length // 2)
            # first hotword
            start1 = random.randint(0, length // 3)
            end1 = random.randint(start1 + hotword_min_length - 1, start1 + _max_hw_length - 1)
            # second hotword
            start2 = random.randint(end1 + 1, length - hotword_min_length)
            end2 = random.randint(
                min(length - 1, start2 + hotword_min_length - 1),
                min(length - 1, start2 + hotword_max_length - 1),
            )
            return [start1, end1, start2, end2]
        else:  # single hotword
            start = random.randint(0, length - hotword_min_length)
            end = random.randint(
                min(length - 1, start + hotword_min_length - 1),
                min(length - 1, start + hotword_max_length - 1),
            )
            return [start, end]
    else:
        return [-1]