48
社区成员
本文由集智小仙女发表在集智AI学园公众号上,欢迎关注集智AI学园微信公众号:swarmAI。
在使用语音搜索时,用户的输入语音常常含糊其词。比如 “daiyugang” 到底是 “戴玉刚” 还是 “带浴缸” ,仅凭声学根本无法判断。这时候就需要使用以往的大量历史搜索数据训练一个 N-gram 模型,依靠模型来估计出用户更可能的输入。
N-gram 是计算机语言学和概率论范畴内的概念,是指给定的一段文本或语音中N个项目(item)的序列。项目(item)可以是音节、字母、单词。
N=1 时 N-gram 又称为 unigram,N=2 称为 bigram,N=3 称为 trigram,以此类推。实际应用通常采用 bigram 和 trigram 进行计算。
举例来说:“你今天休假了吗”
它的 bigram 依次为:
你今,今天,天休,休假,假了,了吗
制造这种语言模型的原因是基于这么一种思想:在整个语言环境中,句子T的出现概率是由组成T的N个item的出现概率组成的,如下公式所示:
P(T)=P(W1W2W3Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
以上公式难以实际应用。
此时出现马尔科夫模型,该模型认为,一个词的出现仅仅依赖于它前面出现的几个词。这就大大简化了上述公式:
P(T)≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)
输入法
用前几个字预测后几个字,这个功能在我们每天都在用的输入法里及其重要。比如,我们曾经最爱用的“智能ABC”,据说就使用了 N-gram 技术。
同样的用途,N-gram 模型也被应用在语音识别领域。比如用户在使用语音搜索的时候,输入的语音常常含糊其词。比如语音“daiyugang”到底是“戴玉刚”还是“带浴缸”,仅凭声学模型根本无法判断用户到底说的是什么词。这时候厂商就需要通过以往的大量历史搜索数据训练一个 N-gram 模型,依靠模型来估计出用户更可能的输入。
你可能会疑惑,哎之前不是讲了用 Word2Vec 和 GloVe 做词嵌入吗?怎么 N-gram 模型也来插一腿?
是这样子滴,通常在使用 N-gram 模型时,模型的输入是每个词的独热编码向量,而每个向量的长度正是“词典”的大小。这么一来,在 N-gram 模型得到良好的训练后,可以使用模型输入层的每个神经元(代表每个词)所对应的权重参数,作为这个词的词向量。经过 N-gram 模型嵌入得到的词向量不同于 Word2Vec 和 GloVe,在自然语言处理领域有其独特的价值。
在前面的资料中,有讲到马尔科夫模型,即认为一个词的出现仅仅依赖于它前面出现的几个词。
我们今天就打造一个用前两个词预测第三个词的 N-gram 模型。我们准备了一篇莎士比亚的14行诗作为文本,并按顺序将整首诗拆成一个一个的单词。将前两个词作为训练数据,将第三个词作为目标数据,以此类推整个文本,生成训练数据集。
然后我们把训练数据(前两个词)传入到我们的 N-gram 模型(也就是我们的神经网络)中,让 N-gram 模型学习去预测第三个词。