语音识别

语音识别: 声音-> 文本

声音本质是一种波

将波按时间段切分很多帧,如25ms一段

之后进行声学特征提取,将每一帧转化成一个向量

以声学特征提取后的向量为输入,经过声学模型,预测得到音素

音素与拼音类似,但要考虑声调

音素序列对应多条文本序列,由语言模型挑选出成句概率最高的序列

使用beam search 或维特比的方式解码

手写识别

识别模型将图片中文字转化为候选汉字,再有语言模型挑选出成句概率最高的序列

输入法

输入即为拼音序列,每个拼音自然的有多个候选汉字,根据语言模型挑选高概率序列

输入法是一个细节繁多的任务,在语言模型这一基础算法上,需要考虑常见的打字手误,常见误读,拼音缩略,中英混杂,输出符号,用户习惯等能力

手写输入法,语音输入法同理

语言模型的分类

由简单到复杂

统计语言模型(SLM)          ngram语言模型等

神经语言模型(NLM)          rnn语言模型等

预训练模型(PLM)             Bert,GPT等

大语言模型(LLM)            ChatGPT等

N-gram语言模型

用S代表句子,w代表单个字或词

S=w1w2w3w4w5..wn

P(S)=P(w1,w2,w3,w4,w5,...wn)

成句概率 -> 词W1~Wn按顺序出现的概率

P(w1,w2,w3,..wn) = P(w1)P(w2|w1)P(w3|w1,w2)...P(wn|w1,...,wn-1)

N-gram语言模型怎么计算呢

以字为单位

P(今天天气不错) = P(今)*P(天|今)*P(天|今天)*P(气|今天天)*P(不|今天天气)*P(错|今天天气不)

以词为单位

P(今天 天气 不错) = P(今天)* P(天气|今天)*P(不错|今天 天气)

N-gram的困难

句子太多了

对任意一门语言,N-gram数量都非常庞大,无法穷举,需要简化

那么有没有缓解的办法:

有个不太好的解决办法,马尔科夫假设:

P(wn|w1,...,wn-1)≈ P(wn|wn-3,wn-2,wn-1)   一般常见的是3,4,5

假设第n个词出现的概率,仅受其前面有限个词影响

P(今天天气不错) = P(今)*P(天|今)*P(天|今天) * P(气|天天) * P(不|天气) * P(错|气不)

但是马尔科夫假设的缺陷也很明显:

1.影响第n个词的因素可能出现在前面很远的地方

例如:  我过关于马尔科夫生平的

2.影响第n个词的因素可能出现在其后面

3.影响第n个词的因素可能并不在文中

但是马尔科夫假设下依然可以得到非常有效的模型

但是有个问题就是 如何给出预料中没有出现过的词或ngram概率

就比如这个预料 ,P(今天 天气 糟糕) = P(今天)*(天气|今天)*P(糟糕|天气)

但是糟糕并没有出现过,那么概率是应该是0,那么问题来了,如果是0合适吗,模型的泛化性太低了,那么模型几乎不合格

那么有什么策略可以解决

平滑策略,这个问题也被称为平滑问题

理论上,任意的词组合成的句子,概率都不应当为零

如何给没见过的词或ngram分配概率即为平滑问题,也称折扣问题

平滑方法

1.回退(backoff)

   当三元组a b c 不存在时,退而寻找b c 二元组的概率

    P(c|a b)  = P(c|b) * Bow(ab)

    Bow(ab) 称为二元组a b 的回退概率

    回退概率有很多计算方式,甚至可以设定为常数

    回退可以迭代进行,如序列 a b c d

    P(d|a b c) =P(d | b c) *Bow(abc)

    P(d|bc)  = P(d|c) * Bow(bc)

    P(d|c) = P(d) * Bow(c)

平滑方法迭代的最后会回退到单字或词,但如果没存在怎么办

加1平滑  add - one smooth

对于1gram概率P(word) =  Count(word) +1  / Count(totalword) +V

V为词表大小

对于高阶概率同意可以   PAdd-1(wi|wi-1)  = C(wi-1,wi) +1 /C(wi-1)+V

还有另一种方法

将低频词替换为<UNK>

预测中遇到的未见过的词,也用<UNK>代替

P(<UNK>|一语成)

这是一种nlp处理为的登陆词(OOV)的常见方法

语言模型的评价指标

困惑度 perplexity

神经语言模型

与n-gram相比,神经网络语言模型优势

向量化表示语义信息优化字符统计,泛化性更好

 例如: 猫和狗,两向量相似度极高,但是n-gram只是统计

输入长度不影响模型大小,长距离建模优势

  例如  n-gram 计算 今天天气不错 ,P(wn) = P(wn| wn-3,wn-2,wn-1) 根据马尔科夫假设只考虑前 n-3个词,不能考虑太多

softmax带来的自带平滑

对下游任务的适配更加方便

两类语言模型的对比

NN语言模型需要进行矩阵计算,NN语言模型慢

其他上面好像有

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐