3
  • TARGET是一组我希望被说出的字符串。
  • SOURCE是语音识别器返回的字符串集(即它听到的可能句子)。

我需要一种从TARGET. 我阅读了Levenshtein distanceDamerau-Levenshtein distance,它基本上返回源字符串和目标字符串之间的距离,即将源字符串转换为目标字符串所需的更改次数。

但是,如何将此算法应用于一组目标字符串?

我想我会使用以下方法:

  1. 对于属于 的每个字符串TARGET,我计算与 中每个字符串的距离SOURCE。通过这种方式,我们获得了一个m×n矩阵,其中 n 是 的基数,SOURCEn 是 的基数TARGET。我们可以说第 i 行表示语音识别器检测到的句子相对于第 i 个目标的相似度。
  2. 计算每一行上的值的平均值,可以得到第i个目标与语音识别器输出的平均距离。我们称之为,行索引average_on_row(i)在哪里。i
  3. 最后,对于每一行,我计算该行中所有值的标准差。对于每一行,我还执行所有标准差的总和。结果是一个列向量,其中每个元素(我们称之为stadard_deviation_sum(i))引用一个字符串TARGET

与最短关联的字符串stadard_deviation_sum可以是用户发音的句子。可以认为是我使用的正确方法吗?或者还有其他方法吗?显然,过高的值表明用户发音的句子很可能不属于TARGET.

4

2 回答 2

4

我不是专家,但你的建议没有意义。首先,在实践中,如果不是无限的话,我希望 TARGET 的基数非常大。其次,我不相信 Levensthein 距离或一些类似的相似性度量会有用。

如果 :

  • 你真的可以定义 SOURCE 和 TARGET 集,
  • SOURCE 中的所有字符串都是同样可能的,
  • TARGET 中的所有字符串都是同样可能的,
  • SOURCE 和 TARGET 中的字符串不是字符而是音素,

那么我相信你最好的选择是在 SOURCE 中找到一对 p,在 TARGET 中找到 q,这样距离(p,q)是最小的。特别是因为你不能保证等概率部分,我认为你应该从头开始考虑问题,做一些研究并做出完全不同的设计。语音识别的常用方法是使用隐马尔可夫模型。我会从那里开始。

回答您的评论:选择更可能的。如果不考虑概率,那是没有希望的。

[假设以下示例是关于音素,而不是字符]

假设识别的单词是“chees”。目标集是“奶酪”、“国际象棋”。您必须计算 P(cheese|chees) 和 P(chess|chees) 我想说的是,并非每个替换都是等概率的。如果您将概率建模为字符串之间的距离,那么至少您必须允许例如 d("c","s") < d("c","q") 。(混淆 c 和 s 字母很常见,但混淆 c 和 q 并不常见)调整距离计算算法很容易,但很难为所有对提供好的值。

此外,您必须以某种方式估计 P(cheese|context) 和 P(chess|context) 如果我们谈论的是棋盘游戏,国际象棋更有可能。如果我们谈论的是乳制品,奶酪更有可能。这就是为什么您需要大量数据来得出这样的估计。这也是为什么隐马尔可夫模型可以很好地解决这类问题。

于 2012-04-30T20:14:28.937 回答
1

您需要首先计算这些概率:插入、删除和替换的概率。然后使用这些概率的日志作为每次操作的惩罚。

在“上下文无关”的情况下,如果 pi 是插入概率,pd 是删除概率,ps 是替换概率,则观察到相同符号的概率是 pp=1-ps-pd。

在这种情况下,分别使用 log(pi/pp/k)、log(pd/pp) 和 log(ps/pp/(k-1)) 作为插入、删除和替换的惩罚,其中 k 是系统。

本质上,如果您在源和目标之间使用这种距离度量,您将获得在给定源的情况下观察该目标的对数概率。如果您有一堆训练数据(即源-目标对),请为这些概率选择一些初始估计,对齐源-目标对并重新估计这些概率(AKA EM 策略)。

您可以从一组概率开始并假设上下文独立。稍后您可以假设上下文之间存在某种聚类(例如,假设有 k 组不同的字母,其替换率不同......)。

于 2012-04-30T20:50:00.793 回答