文章目录
Lesson-01
课前TIPS
- 善于发现问题,找到应用场景
- AI其实发展是一步一步的,架构要学好,基础要打好,学精不贪多
AI Paradigm
- Rule Based(语言生成-Lesson-01)
- Probability based(语言模型-Lesson-01)
- Problem Solving : Search Based(搜索地图-Lesson-02)
- Mathematical or Analytic Based(Lesson-03)
- Machine Learning (deep learning) Based
Graph
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(w1∣w2w3w4)∗P(w2∣w3w4)∗Pr(<