精华内容
下载资源
问答
  • 语音识别算法工程师好几年,最近才弄清楚wer的统计算法-编辑距离,真是惭愧。 编辑距离,又称Levenshtein Distance,是一位俄罗斯的科学家Vladimir Levenshtein 在1965年在1965年提出来的。编辑距离指的是在两个...

    编辑距离(edit distance)

    做语音识别算法工程师好几年,最近才弄清楚wer与插入错误,删除错误和替换错误的统计算法,真是惭愧。

    编辑距离,又称Levenshtein Distance,是一位俄罗斯的科学家Vladimir Levenshtein 在1965年在1965年提出来的。编辑距离指的是在两个字符串S1和S2 之间,将S1转换为S2所需要的最少编辑操作次数。

    字符编辑操作有且仅有三种:

    • 插入(Insertion)
    • 删除(Deletion)
    • 替换(Substitution)

    编辑距离的算法公式:

    我们将两个字符串 a,b 的编辑距离表示为lev_a_,_b(i,j),其中|a||b|分别对应字符串a,b的长度。两个字符串 a,b 的编辑距离即可用如下的数学语言表示:

     

    lev_a_,_b(i,j)是指字符串a的前i个字符和字符串b的前j个字符之间的编辑距离。这里的i,j的上限是a,b的长度|a|,|b|。注意,字符串的第一个字符的index从 1 开始。

    min(i,j)=0,表示字符串a或者b有一个是空字符串,所以,将a转化成b就需要max(i,j)次编辑。

    min(a,b)\neq 0, 表示a和b都不是空字符串,a和b的编辑距离等于三种情况下编辑距离的最小值。其中,

    • lev_a_,_b(i-1,j)+1 表示插入编辑,(个人理解:a_i从末尾删除一个字符后的a_i_-_1b_j的编辑距离只需做一次插入操作就和lev_a_,_b(i,j)相等)
    • lev_a_,_b(i,j-1)+1 表示删除编辑,
    • lev_a_,_b(i-1,j-1)a_i\neq b_j 表示替换编辑,
    • lev_a_,_b(i-1,j-1)+1a_i = b_j 表示跳过不做编辑

    算法举例:

    a: "This great machine can recognize speech"

    b: “This machine can wreck a nice beach”

    1. 首先列一个表格,表格的长度和宽度分别等于|a|+2和|b|+2,行列开头分别填充一个0.

     

      0 this machine can wreck a nice beach
    0                
    this                
    great                
    machine                
    can                
    recognize                
    speech                

     

    2. 计算当min(i,j)=0

     

      0 this machine can wreck a nice beach
    0 0 1 2 3 4 5 6 7
    this 1              
    great 2              
    machine 3              
    can 4              
    recognize 5              
    speech 6              

     

    3. 计算第一行:

     

      0 this machine can wreck a nice beach
    0 0 1 2 3 4 5 6 7
    this 1  0  1  2  3  4  5  6
    great 2              
    machine 3              
    can 4              
    recognize 5              
    speech 6              

     

    计算技巧:只需要计算单元格的上+1,左+1,左上+1(或+0)的值,再进行比较即可。比如计算(1,2)时,上面单元2+1=3,左面单元0+1=1,左上单元,由于this = machine,所以是1+0=1。三者取最小值是1

      0 this machine
    0 0 1 2
    this 1  0  1

    4. 以此类推,填满整个表格,最右下角的值就是a和b的编辑距离5。

      0 this machine can wreck a nice beach
    0 0 1 2 3 4 5 6 7
    this 1  0  1  2  3  4  5  6
    great 2  1  1  2  3    4  5  6
    machine 3  2  1  2  3  4  5  6
    can 4  3  2  1  2  3  4  5
    recognize 5  4  3  2  2  3  4  5
    speech 6  5  4  3  3  3  4  5

     

    5. 那在语音识别里面,如何分别计算删除错误D,插入错误I,和替换错误S呢?只需要从图表右下角,从右下到左上进行回溯即可。但是不同的回溯方式可能会计算出不同的I-D-S。如下图所示,不同颜色代表不同的回溯路径:

    如,红色路径,对应的回溯路径是c-d-c-c-s-s-i-i.

    那么:ref :This great machine can recognize speech

              hyp:This          machine can wreck        a nice beach

    再比如绿色路径,对应的额回溯路径是:c-d-c-c-s-i-i-s

    那么:ref :This great machine can recognize            speech

              hyp:This          machine can wreck       a nice  beach

    橙色蓝色回溯路径,同样会导致ref和hyp对应方式不同。但是这些不同的回溯方式不影响最终的识别率wer的值。

    上面的例子,不同的回溯路径恰好会使I-D-S相同,但是,有的时候,不用的回溯路径会导致不同的I-D-S。例如:

    ref: x, y, z; 

    hyp: a,b,c,y

    回溯路径1:

    ref:      x y z

    hyp: a b c y 

    回溯路径2:

    ref: x y z

    hyp:a b c y 

    上面两种不同的对齐方式,编辑距离一样,wer也一样,但是I-D-S一个是2-1-1,另外一个是 1-0-3。可见,在语言识别wer统计过程中,不同的对其方式会产生不同的I-D-S统计结果。

    展开全文
  • 以下用字错误率CER来假定模型的表现,CER =编辑距离/句子长度,越低越好 大致可以理解为1-CER就是识别准确率。 模型使用AISHELL-1数据集训练,共150小时的录音,覆盖了4000多个汉字。工业界使用的语音识别系统通常...
  • 其中label.test为人工标注过的正确文本内容,内容是按字切分的,result.test 为语音识别后的结果文件   四、 【结果说明】 tmp/result.test.sys的最后几行中,包含”Sum/Avg”的那行是整体的评估详情,...

    一、【下载】

    sclite的下载网站是:http://www.itl.nist.gov/iad/mig/tools/

    二、【编译】

    1:首先解压sctk-2.4.0-20091110-0958.tar.bz2,并进入解压后的目录sctk-2.4.0

    2.:将源码中以下几处Filter::Filter,改为::Filter

    src/asclite/core/recording.cpp:157:     map<string, Filter::Filter*>::iterator fi, fe;

    src/asclite/core/recording.cpp:164:             Filter::Filter* ptr_elt = fi->second;

    src/asclite/core/recording.h:122:        map<string, Filter::Filter*> filters;

     

    3:然后顺次执行以下命令:

    make config

    make all

    make install 

     

    4.最终在bin目录下会生成可执行文件sclite

    三、【使用】

    仍然在sctk-2.4.0目录下,创建存放评估结果的目录:mkdir tmp

    然后执行命令:./bin/sclite  -r label.test -h result.test  -i wsj -e gb -o all -O  tmp/ 

    另一种方法是:./bin/sclite  -r label.test -h result.test  -i wsj -e gb -o dtl -O  tmp/  可以得到更详细的结果信息

    其中label.test为人工标注过的正确文本内容,内容是按字切分的,result.test 为语音识别后的结果文件

     

    四、【结果说明】

    tmp/result.test.sys的最后几行中,包含”Sum/Avg”的那行是整体的评估详情,例如:

    Sum/Avg|   11    645 | 92.7    3.3    4.0    1.1    8.4  100.0

     

    表示本次测试共11句话,645个词,92.7%的字正确率,3.3%的替代错误率,4.0%的删除错误率,1.1%的插入错误率,整体句错误率为100%

     

    tmp/result.test.pra里面有每句话的对齐详情,具体展示了是哪些替代错误(S)、删除错误(D)和插入错误(I)

     

    label.test中的文本举例:你 吃 饭 了 吗(731279974666705361.wav)

    result.test中的文本举例:你 吃 饭 啦 吗(731279974666705361.wav)

    展开全文
  • 字符串编辑距离

    2019-08-25 11:00:58
    语音识别领域和NLP领域都会接触到WER(字错率)和CER(字符错误率),但两者的计算都离不开字符串编辑距离。 字符串编辑距离(Edit Distance),是俄罗斯科学家Vladimir Levenshtein提出的概念。两个字符串之间的最小距离...

    编辑距离

    语音识别领域和NLP领域都会接触到WER(字错率)和CER(字符错误率),但两者的计算都离不开字符串编辑距离。
    字符串编辑距离(Edit Distance),是俄罗斯科学家Vladimir Levenshtein提出的概念。两个字符串之间的最小距离就是指把一个字符串转换为另一个字符串时,所需要的最小编辑操作的次数。编辑操作包含以下3种:
    替换(substitution),将一个字符替换为另一个字符
    插入(insertion),插入一个字符
    删除(deletion),删除一个字符

    那么如何求两个字符串的编辑距离呢?

    最小编辑距离使用动态规划来计算。从直觉上来说,动态规划问题就是把一个大的问题化解为不同的子问题来求解,再把这些子问题的解适当地结合起来,就可以实现对大问题的求解。
    举个简单的例子:求字符abc和字符abcd之间的编辑距离,很明显,字符abcd相当于是在字符abc的基础上插入字符d,所以两个字符串之间的编辑距离为1。
    从最后一个字符考虑
    假设源字符串为S,目标字符串为T,则S和T的最后一个字符s[i]和t[j]对应四种情况:

    • 字符–字符
    • 字符–空白
    • 空白–字符
    • 空白–空白

    显然第四种情况是多余的编辑操作。下面来逐个分析以上3种情况。
    第一种情况

    • S+空白
    • T+字符X

    S变成T,最后,在S的末尾插入“字符X”,若以dp矩阵来表示两个字符串之间的距离,则dp[i, j]=dp[i, j-1]+1。
    第二种情况

    • S+字符X
    • T+字符Y

    S变成T,最后,把X修改成Y,如果X==Y,说明不需要操作变化,dp[i, j]=dp[i-1, j-1],否则,需要在原来的基础上加1,dp[i, j]=dp[i-1, j-1]+1。
    第三种情况:

    • S+字符X
    • T+空白

    S变成T,最后,X被删除。dp[i, j]=dp[i-1, j]+1。
    综合以上三种情况:

    具体用矩阵表示,可以看下面的一个示例:

    图1,编辑距离示意图
    初始化dp[0][0]=0,矩阵中每一个位置编辑距离的大小,由其左侧、右侧和左对角侧三者中最小值决定。然后依次计算,最右下角位置处的值,即为两个字符串的最小编辑距离。
    Python程序实现如下:

    # -*- coding: utf-8 -*-
    # @Time    : 2019/8/24 20:56
    # @Author  : qszhu
    
    
    def levenshtein_distance(str1, str2):
        m, n = len(str1) + 1, len(str2) + 1
    
        # 初始化矩阵
        matrix = [[0] * n for i in range(m)]
        matrix[0][0] = 0
    
        for i in range(1, m):
            matrix[i][0] = matrix[i - 1][0] + 1
        for j in range(1, n):
            matrix[0][j] = matrix[0][j - 1] + 1
    
        for i in range(1, m):
            for j in range(1, n):
                if str1[i - 1] == str2[j - 1]:
                    matrix[i][j] = min(matrix[i - 1][j - 1], matrix[i-1][j]+1, matrix[i][j-1]+1)
                else:
                    matrix[i][j] = min(matrix[i - 1][j - 1]+1, matrix[i - 1][j]+1, matrix[i][j - 1]+1)
    
        return matrix[m - 1][n - 1]
    
    
    if __name__ == '__main__':
        str1 = "abcde"
        str2 = "abv"
        print(levenshtein_distance(str1, str2))
    

    当然,时间复杂度为O(m*n)。

    其实呢,已经有大神,帮我们做了一个包,直接拿来用就可以。

    先pip安装包

    pip install python-Levenshtein
    

    然后,就可以验证自己写的算法是否正确。

    import Levenshtein
    str1 = "abcd"
    str2 = "abc"
    print(Levenshtein.distance(str1, str2))
    
    展开全文
  • 编辑距离语音识别领域和NLP领域都会接触到WER(字错率)和CER(字符错误率),但两者的计算都离不开字符串编辑距离。字符串编辑距离(Edit Distance),是俄罗斯科学家Vladimir Levenshtein提出的概念。两个字符串之间的...

    d79b37f267590567e82f57e4e594b637.png

    编辑距离

    语音识别领域和NLP领域都会接触到WER(字错率)和CER(字符错误率),但两者的计算都离不开字符串编辑距离。

    字符串编辑距离(Edit Distance),是俄罗斯科学家Vladimir Levenshtein提出的概念。两个字符串之间的最小距离就是指把一个字符串转换为另一个字符串时,所需要的最小编辑操作的次数。编辑操作包含以下3种:

    • 替换(substitution),将一个字符替换为另一个字符
    • 插入(insertion),插入一个字符
    • 删除(deletion),删除一个字符

    那么如何求两个字符串的编辑距离呢?

    最小编辑距离使用动态规划来计算。从直觉上来说,动态规划问题就是把一个大的问题化解为不同的子问题来求解,再把这些子问题的解适当地结合起来,就可以实现对大问题的求解。

    举个简单的例子:求字符abc和字符abcd之间的编辑距离,很明显,字符abcd相当于是在字符abc的基础上插入字符d,所以两个字符串之间的编辑距离为1。

    从最后一个字符考虑

    假设源字符串为S,目标字符串为T,则S和T的最后一个字符s[i]和t[j]对应四种情况:

    1. 字符--字符
    2. 字符--空白
    3. 空白--字符
    4. 空白--空白

    显然第四种情况是多余的编辑操作。下面来逐个分析以上3种情况。

    第一种情况

    • S+空白
    • T+字符X

    S变成T,最后,在S的末尾插入“字符X”,若以dp矩阵来表示两个字符串之间的距离,则dp[i, j]=dp[i, j-1]+1。

    第二种情况:

    • S+字符X
    • T+字符Y

    S变成T,最后,把X修改成Y,如果X==Y,说明不需要操作变化,dp[i, j]=dp[i-1, j-1],否则,需要在原来的基础上加1,dp[i, j]=dp[i-1, j-1]+1。

    第三种情况:

    • S+字符X
    • T+空白

    S变成T,最后,X被删除。dp[i, j]=dp[i-1, j]+1。

    综合以上三种情况:

    具体用矩阵表示,可以看下面的一个示例:

    7e30dcb50162755277736e5cbe0bbc27.png
    图1,编辑距离示意图

    初始化dp[0][0]=0,矩阵中每一个位置编辑距离的大小,由其左侧、右侧和左对角侧三者中最小值决定。然后依次计算,最右下角位置处的值,即为两个字符串的最小编辑距离。

    Python程序实现如下:

    # -*- coding: utf-8 -*-
    # @Time    : 2019/8/24 20:56
    # @Author  : qszhu
    
    
    def levenshtein_distance(str1, str2):
        m, n = len(str1) + 1, len(str2) + 1
    
        # 初始化矩阵
        matrix = [[0] * n for i in range(m)]
        matrix[0][0] = 0
    
        for i in range(1, m):
            matrix[i][0] = matrix[i - 1][0] + 1
        for j in range(1, n):
            matrix[0][j] = matrix[0][j - 1] + 1
    
        for i in range(1, m):
            for j in range(1, n):
                if str1[i - 1] == str2[j - 1]:
                    matrix[i][j] = min(matrix[i - 1][j - 1], matrix[i-1][j]+1, matrix[i][j-1]+1)
                else:
                    matrix[i][j] = min(matrix[i - 1][j - 1]+1, matrix[i - 1][j]+1, matrix[i][j - 1]+1)
    
        return matrix[m - 1][n - 1]
    
    
    if __name__ == '__main__':
        str1 = "abcd"
        str2 = "abc"
        print(levenshtein_distance(str1, str2))

    当然,时间复杂度为O(m*n)。

    其实呢,已经有大神,帮我们做了一个包,直接拿来用就可以。

    先pip安装包

    pip install python-Levenshtein

    然后,就可以验证自己写的算法是否正确。

    import Levenshtein
    str1 = "abcd"
    str2 = "abc"
    print(Levenshtein.distance(str1, str2))
    展开全文
  • 编辑距离语音识别领域和NLP领域都会接触到WER(字错率)和CER(字符错误率),但两者的计算都离不开字符串编辑距离。字符串编辑距离(Edit Distance),是俄罗斯科学家Vladimir Levenshtein提出的概念。两个字符串之间的...
  • Kaldi语音识别的流程(GMM+HMM,DBN+HMM) TSP问题(BFS (100个点)/ 遗传算法等随机算法 (10000个点)) BP当中梯度下降和LBFGS的区别 二面+电面(同一个面试官): 声纹识别电子欺诈检测项目+ASV2017 wer...
  • 以下用字错误率CER来衡量模型的表现,CER = 编辑距离 / 句子长度,越低越好,大致可以理解为 1 - CER 就是识别准确率。 安装环境 执行requirements.txt安装依赖环境,在安装过程中出现Pyaudio安装错误,可以先执行su
  • 以下用字错误率CER来衡量模型的表现,CER = 编辑距离 / 句子长度,越低越好,大致可以理解为 1 - CER 就是识别准确率。 安装环境 执行requirements.txt安装依赖环境,在安装过程中出现Pyaudio安装错误,可以先执行...
  • 详解编辑距离算法-Levenshtein Distance

    万次阅读 2020-02-06 18:19:03
    编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。最简单的方法是检查所有可能的编辑序列,从中找出最短的一条。但这个序列总数可能达到指数级,但完全不需要这么多,因为我们只要...
  • 72. 编辑距离

    2020-04-06 14:44:01
    编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。一般来说,编辑距离越小,两个串的相似度越大。 相似题目: 题目描述 解题思路 经典动态规划题 public int minDistance(String ...
  • 定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等。 编辑距离 两个字符串之间有多相似? 在搜索引擎中,我们总会有偶尔拼错单词的情况,但我们会发现,即便我们拼错了,搜索...
  • 最小编辑距离

    2019-06-10 20:11:38
    最近在学算法,这个动态规划题目比较有意思,似乎现在的机器翻译和语音识别也会用到它。也有一定的难度,在leetcode上是困难难度。 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少...
  • 谈及了语音识别中的字符串编辑距离编辑距离: 就是一个字符串经过一些操作变成与另一个字符串相同的代价。概念有点像推土距离,不过推土距离没有字符串中的顺序问题。编辑操作包括将一个字符替换成另一个字符,...
  • 前几天交接跟问新同事知道编辑距离吗,同事轻描淡写的就说知道啊,动态规划,给我讲了讲,我心想,卧槽,工大的本硕就是不一样。。。 今天有空赶紧恶补下,之前一直听说动态规划动态规划,也没静下心看,今天终于是...
  • 定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等。 编辑距离就是指将一个字符串通过的包括插入(insertion),删除(deletion),替换(substitution)的编辑操作转变为另一个...
  • 解码时声学特性最优的路径蕴含了揭示当前路径是否正确的重要参考信息,...在“863-test”测试集上进行的连续语音识别实验显示汉语字的相对错误率下降了8.1%。实验结果表明了将音素串编辑距离应用到随机段模型的可行性。
  • 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。 2、动态规划 我们用dp[ i ][ j ] 表示word1 中【1…i】变为 word2 中【1…j】需要的步数。 第一张图: 第二张图: 接下来要...
  • 定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等。 编辑距离就是指将一个字符串通过的包括插入(insertion),删除(deletion),替换(substitution)的编辑操作转变为另一...
  • 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。 最直观的方法是暴力检查所有可能的编辑方法,取最短的一个。所有可能的编辑方法达到指数级,但我们不需要进行这么多计算,因为...
  • 编辑距离WER/CER计算的一种python实现

    千次阅读 2020-07-16 14:17:45
    WER(word error rate)经常作为语音识别任务的性能评测指标,WER的计算公式,直接从网上粘贴过来了。 一些语音识别框架(如:Kaldi、ESPNet等)中,都会包含wer的计算方法,其中ESPNet的结果展示如下: 我们希望用...
  • 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。 给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入...
  • 语音形式分层 命令 每下达一次命令,就相当于触发一次事件。 如何提高语音命令转化文字的准确性? 提供上下文 例如:表单重置就比重置的识别率高。...通过(文本编辑距离/文字个数)函数,设定一个临界值。 其中0...
  • 1,基于最优路径搜索的度量:①贝尔曼最优性原则和动态编程②编辑距离(The Edit Distance)③在语音识别动态时间扭曲(DTW), speaker-dependentrecognition. speaker-independentrecognition. 2
  • 语音识别方面,同样的话...1,基于最优路径搜索的度量:①贝尔曼最优性原则和动态编程②编辑距离(The Edit Distance)③在语音识别动态时间扭曲(DTW), speaker-dependentrecognition. speaker-independentrecog...
  • 自然语言使用的算法

    千次阅读 2013-02-17 17:19:53
    在拼音错误更正中使用最小编辑距离算法,在语音识别和机器翻译中使用的Viterbi(算法 Viterbi algorihm)和向前算法(forward algorithm),在句法剖析中使用CYK算法(CYK algorithm)和Earley算法(Earley algorithm...
  • autojs说啥画啥

    2021-05-12 23:11:39
    百度语音识别 百度通用物体和场景识别高级版 百度图像主体识别 爬取百度图片 编辑距离 录音 canvas画图片 按钮触摸事件监听 申请录音权限, 以及获取申请结果 canvas画图片时, 图片居中 图片回收 检查是否有录音权限 ...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

编辑距离语音识别