NLP课程-笔记-01

Lesson-01

课前TIPS

  • 善于发现问题,找到应用场景
  • AI其实发展是一步一步的,架构要学好,基础要打好,学精不贪多

AI Paradigm

  1. Rule Based(语言生成-Lesson-01)
  2. Probability based(语言模型-Lesson-01)
  3. Problem Solving : Search Based(搜索地图-Lesson-02)
  4. Mathematical or Analytic Based(Lesson-03)
  5. Machine Learning (deep learning) Based

Graph

1.根据语法结构随机生成句子
2.获取大量文本数据建立语言模型2-GRAM
3.运用2中所得模型对1生成的句子进行合理性预测

1.Rule Based Model

任务要求:

根据定义的语法结构随机生成句子

STEP1:

语言的语法是有结构,我们可以根据一些定义好的结构来创建一个句子。首先我们定义以下规则:

simple_grammar_frame = """
sentence => noun_phrase verb_phrase
noun_phrase => Article Adj* noun
Adj* => null | Adj Adj*
verb_phrase => verb noun_phrase
Article =>  一个 | 这个
noun =>   女人 |  篮球 | 桌子 | 小猫
verb => 看着   |  坐在 |  听着 | 看见
Adj =>  蓝色的 | 好看的 | 小小的
"""
STEP2:

我们用代码把STEP1的结构解析写入到python字典中,代码如下:

def Create_Grammer(gram_frame, split = '=>'):
    grammer = {
   }
    for line in gram_frame.split('\n'):
        if not line.strip(): continue
        exp, stmt = line.split(split)
        grammer[exp.strip()] = [word.split() for word in stmt.split('|')] #word.split()也可以去掉空格
    return grammer
STEP3:

把STEP1的结构simple_grammar_frame传入STEP2中定义的函数,我们得到如下语法的字典

{
   'sentence': [['noun_phrase', 'verb_phrase']],
 'noun_phrase': [['Article', 'Adj*', 'noun']],
 'Adj*': [['null'], ['Adj', 'Adj*']],
 'verb_phrase': [['verb', 'noun_phrase']],
 'Article': [['一个'], ['这个']],
 'noun': [['女人'], ['篮球'], ['桌子'], ['小猫']],
 'verb': [['看着'], ['坐在'], ['听着'], ['看见']],
 'Adj': [['蓝色的'], ['好看的'], ['小小的']]}
STEP4:

根据STEP3得到的语法结构字典,我们随机生成句子,代码如下:
target参数:表示我们要生成语法结构的哪一项,默认是sentence

def Create_Sentence(gram, target = 'sentence'):
    if target not in gram: return target
    
    expanded = random.choice(gram[target])
    return ''.join(Create_Sentence(gram, target=r) for r in expanded if r!='null')
STEP5

我们现在可以运用以上函数随机生成句子啦,而且STEP1中的语法结构可以根据自己要求来定义例如:

#在西部世界里,一个”人类“的语言可以定义为:
human = """
human = 自己 寻找 活动
自己 = 我 | 俺 | 我们 
寻找 = 找找 | 想找点 
活动 = 乐子 | 玩的
"""

#一个“接待员”的语言可以定义为
host = """
host = 寒暄 报数 询问 业务相关 结尾 
报数 = 我是 数字 号 ,
数字 = 单个数字 | 数字 单个数字 
单个数字 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
寒暄 = 称谓 打招呼 | 打招呼
称谓 = 人称 ,
人称 = 先生 | 女士 | 小朋友
打招呼 = 你好 | 您好 
询问 = 请问你要 | 您需要
业务相关 = 玩玩 具体业务
玩玩 = null
具体业务 = 喝酒 | 打牌 | 打猎 | 赌博
结尾 = 吗?
"""
STEP6:

假设我们运用以上学习的内容来随机生成来一些句子,如下:

['一个好看的蓝色的篮球听着一个篮球',
 '这个桌子坐在一个蓝色的女人',
 '一个篮球听着一个女人',
 '一个桌子看见一个小小的篮球',
 '一个小猫坐在一个小小的小猫',
 '这个小小的桌子坐在这个小小的好看的桌子',
 '一个女人听着这个篮球',
 '一个小小的好看的女人看见一个好看的女人',
 '这个女人看见一个桌子',
 '这个好看的好看的小猫坐在一个女人']

我们可以发现这些句子里像人话,而另一些则不像人话,比如: ‘一个桌子看见一个小小的篮球’,呵,这桌子怕是要成精了。如何让机器自动判断句子的合理性呢?这就要用到我们接下来要学的Probability based Language model

2.Probability Based Language Model

任务要求:

实现一个能对一个句子出现的几率进行预测的模型

PRE:

我们把一条句子切分为多个词,因为每一个词出现的频率我们可以在大量的文本素材中获取,整个句子出现的可能性可以根据贝叶斯概率进行转换:例如
今晚去吃大餐 切分为**‘今晚’, ‘去’, ‘吃’, ‘大餐’**
(2.1) P r o ( w 1 w 2 w 3 w 4 ) = P r ( w 1 ∣ w 2 w 3 w 4 ) ∗ P ( w 2 ∣ w 3 w 4 ) ∗ P r ( w 3 ∣ w 4 ) ∗ P r ( w 4 ) 或   P r o ( w 1 w 2 w 3 w 4 ) = P r ( w 4 ∣ w 1 w 2 w 3 ) ∗ P ( w 3 ∣ w 1 w 2 ) ∗ P r ( w 2 ∣ w 1 ) ∗ P r ( w 1 ) Pro(w_1 w_2 w_3 w_4) = Pr(w_1 | w_2 w_3 w_ 4) * P(w2 | w_3 w_4) * Pr(w_3 | w_4) * Pr(w_4) \\ 或 \ Pro(w_1 w_2 w_3 w_4) = Pr(w_4 | w_1 w_2 w_ 3) * P(w3 | w_1 w_2) * Pr(w_2 | w_1) * Pr(w_1)\tag{2.1} Pro(w1w2w3w4)=Pr(w1w2w3w4)P(w2w3w4)Pr(<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值