深度学习新手必学:使用Pytorch搭建一个N-Gram模型

LCNews 2023-05-02 20:10:49
本文由集智小仙女发表在集智AI学园公众号上,欢迎关注集智AI学园微信公众号:swarmAI。

前言

在使用语音搜索时,用户的输入语音常常含糊其词。比如 “daiyugang” 到底是 “戴玉刚” 还是 “带浴缸” ,仅凭声学根本无法判断。这时候就需要使用以往的大量历史搜索数据训练一个 N-gram 模型,依靠模型来估计出用户更可能的输入。

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)

N-gram 的用途

输入法

用前几个字预测后几个字,这个功能在我们每天都在用的输入法里及其重要。比如,我们曾经最爱用的“智能ABC”,据说就使用了 N-gram 技术。

语音识别

同样的用途,N-gram 模型也被应用在语音识别领域。比如用户在使用语音搜索的时候,输入的语音常常含糊其词。比如语音“daiyugang”到底是“戴玉刚”还是“带浴缸”,仅凭声学模型根本无法判断用户到底说的是什么词。这时候厂商就需要通过以往的大量历史搜索数据训练一个 N-gram 模型,依靠模型来估计出用户更可能的输入。

词嵌入

你可能会疑惑,哎之前不是讲了用 Word2Vec 和 GloVe 做词嵌入吗?怎么 N-gram 模型也来插一腿?

是这样子滴,通常在使用 N-gram 模型时,模型的输入是每个词的独热编码向量,而每个向量的长度正是“词典”的大小。这么一来,在 N-gram 模型得到良好的训练后,可以使用模型输入层的每个神经元(代表每个词)所对应的权重参数,作为这个词的词向量。经过 N-gram 模型嵌入得到的词向量不同于 Word2Vec 和 GloVe,在自然语言处理领域有其独特的价值。

使用 PyTorch 实现简单 N-gram 语言模型

在前面的资料中,有讲到马尔科夫模型,即认为一个词的出现仅仅依赖于它前面出现的几个词

我们今天就打造一个用前两个词预测第三个词的 N-gram 模型。我们准备了一篇莎士比亚的14行诗作为文本,并按顺序将整首诗拆成一个一个的单词。将前两个词作为训练数据,将第三个词作为目标数据,以此类推整个文本,生成训练数据集。

然后我们把训练数据(前两个词)传入到我们的 N-gram 模型(也就是我们的神经网络)中,让 N-gram 模型学习去预测第三个词。

 

...全文
91 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

48

社区成员

发帖
与我相关
我的任务
社区描述
BSV区块链(BSV Blockchain)是唯一遵从2008年发布的比特币白皮书宗旨的全球公有链,具有稳定性、可拓展性、安全性、支持安全即时交易四大核心特性。
区块链 技术论坛(原bbs)
社区管理员
  • BitcoinSV社区
  • m0_61093267
  • 吴小花❀
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧