首页 AI Studio教育版 帖子详情
作业帖 | NLP+推荐-深度学习集训营
收藏
快速回复
AI Studio教育版 其他课程答疑 17675 149
作业帖 | NLP+推荐-深度学习集训营
收藏
快速回复
AI Studio教育版 其他课程答疑 17675 149

百度深度学习集训营第二阶段的NLP+推荐系统内容开讲啦,每个阶段的作业都将有各自的奖励,欢迎大家学习~

PS:如遇帖子过期、审核不通过的情况,请先复制内容保存在word文档,然后根据提示,完成个人实名验证,刷新后重新粘贴复制的内容,即可提交~

欢迎大家报名参加~

请大家按照作业格式将作业回帖在下面,并备注自己的AI Studio用户名~

 

2月27日第二次作业

作业奖励:3月2日中午12点之前完成,会从中挑选10位回答优秀的同学获得飞桨定制数据线+本

实践作业:(必做)

路径:AI Studio课程-作业-NLP作业2

•请尝试用飞桨实现一个CBOW模型,并使用text8语料进行训练(或尝试提高skip-gram的训练速度)

附加题:(选做,答案回复在作业帖下)

•打开你的脑洞,尝试embedding的各种花样玩法,比如计算同义词,进行推理,将embedding进行聚类,或者用t-sne进行可视化。

附加题回复格式:

AI Studio用户名:XXXX

作业2-1附加题:XXX

 

2月25日第一次作业

作业奖励: 3月2日中午12点之前完成,会从中挑选10位幸运的同学获得飞桨定制数据线+本

作业1-1

(1)下载飞桨本地并安装成功,将截图发给班主任
(2)学习使用PaddleNLP下面的LAC模型或Jieba分词
LAC模型地址:https://github.com/PaddlePaddle/models/tree/release/1.6/PaddleNLP/lexical_analysis
Jieba模型:https://github.com/fxsjy/jieba
(3)对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
语料地址:https://github.com/fangj/rmrb/tree/master/example/1946%E5%B9%B405%E6%9C%88

作业1-2

(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。

回复作业格式:

AI Studio用户名:XXXX

作业1-1:XXX

作业1-2:

(1)XXX

(2)XXX

 

报名流程:

1.加入QQ群:677320960,班主任会在QQ群里进行学习资料、答疑、奖品等活动

2.点此链接,加入课程报名并实践:https://aistudio.baidu.com/aistudio/course/introduce/888

温馨提示:课程的录播会在3个工作日内上传到AI studio《百度架构师手把手教深度学习》课程上

8
收藏
回复
全部评论(149)
时间顺序
AIStudio810258
#142 回复于2020-03
AI Studio用户名:FutureSI 作业2 附加题 打开脑洞,尝试各种embedding花样玩法 家里有小度智能音箱.孩子平时挺喜欢玩.我也写技能给孩子用.dueros能将语音信息转换为文本资料.我想能不能用word2vector的模型做评价幼儿词汇丰富程度的技能,甚至可以进而评价幼儿的语言能力.
展开

可以通过音箱的连续对话模式,诱导幼儿对某一特定话题进行对话,从而考察期词汇量。

0
回复
zhangyankun
#143 回复于2020-03

AI Studio  用户名:zhangyabkun

作业1-1:(1)(2)如图片所示,使用LAC分词

                                        

(3)

import jieba
import math
string=''
fin=open('report','rt')
while True:
     line=fin.readline()
     if not line:
         break
     string+=line
fin.close()
word_fre=dict()
jieba.enable_paddle()# 启动paddle模式。 0.40版之后开始支持,早期版本不支持
seg_list=jieba.cut(string,use_paddle=True)
for word in seg_list:#对每个词的数量进行统计
     if word not in word_fre:
         word_fre[word]=0
     word_fre[word]+=1
word_num=len(word_fre)
entropy=0
for i in word_fre:
     p=word_fre[i]/word_num#统计概率
     entropy+=-p*math.log(p,2)
print(entropy)

对1946-05-15进行分词得到其信息熵为11.650444730765923

作业1-2:

(1)假设最大匹配的词的长度为max,则算法复杂度为O(max*M)

(2)str='南京市长江大桥'

l=jieba.lcut(str,cut_all=True)

num=len(l)

(3)基于HMM的分词  基于CRF的分词  基于深度学习的分词

0
回复
alchemy
#144 回复于2020-03

AI Studio用户名:夕岚

作业1-1

(1)

(2)

(3)

 

作业1-2:

(1)O(MaxLen(word) * N)

每次从词表的最长词长开始,最大前向匹配最坏的情况:句子分词结果为单个字,并且每个字都需要遍历词表全部。

(2)
import jieba
seg = jieba.cut("干一行行一行,一行不行行行不行", cut_all=True)
seg_list = list(seg)
print('分词个数: ', len(seg_list), '\n候选分词: ', seg_list)分词个数: 13
候选分词: ['干一行', '一行', '一行行', '行行', '一行', ',', '一行', '行不行', '不行', '行行', '行行', '行不行', '不行']

(3)

1 隐马尔可夫模型:HMM模型认为在解决序列标注问题时存在两种序列,一种是观测序列,即人们显性观察到的句子,而序列标签是隐状态序列,即观测序列为X,隐状态序列是Y,因果关系为Y->X。因此要得到标注结果Y,必须对X的概率、Y的概率、P(X|Y)进行计算,即建立P(X,Y)的概率分布模型。

2. CRF算法: 对语料采用BIO/BI/BIOE任意一种标注,作为训练语料,一些分词器在早些时候采用这种方式和规则训练分词模型

0
回复
M
Mr. Zhou
#145 回复于2020-03

AI Studio用户名:东南林美

作业1-1

(1)已发班主任

(2)

(3)

作业1-2:
(1)以完成一次词表遍历为单位时间,则t=O(N*(M+M-1+M-2+…+1))=O(N*M^2) 。
(2)参照其他同学的思想,关键在于找出这个句子有多少种拆分方法。
(3)基于词典的方法除了前向最大匹配算法MM还有:逆向最大匹配算法RMM和双向最大匹配法BMM。
基于统计的方法除了N-gram还有HMM。
RMM:该算法是正向最大匹配的逆向思维,匹配不成功,将匹配字段的最前一个字去掉,实验表明,逆向最大匹配算法要优于正向最大匹配算法。
BMM:双向最大匹配法是将正向最大匹配法得到的分词结果和逆向最大匹配法的到的结果进行比较,从而决定正确的分词方法。
HMM:是关于时序的概率模型, 描述由一个隐藏的马尔可夫链随机生成不可观察的状态序列,再有状态序列生成一个观测序列的过程。

 

0
回复
DevF
#146 回复于2020-03

Ai Studio 用户名: DevF

1-1

1

2

3

1-2

1

O(N×M2)

2

3

HMM方法

端到端的方法

0
回复
a220赵航
#147 回复于2020-03

 

1-1   .1  已发截图

1-1 .2

 

1-1.3

 

1-2.1  计算复杂度为O(NM^2)

1-2   .2 给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?

窃取:

str = '中国人民万岁'
dict=['中','国','人','民','万','岁','中国','国民','中国人','万岁','中国人民']
def text_count(text, word, dict):
    if len(word) == 0:
        print('/'.join(text))
        return 1
    count = 0
   
    for i in range(1, len(word) + 1):
        if word[:i] not in dict:
            continue
        count += text_count(text + [word[:i]], word[i:], dict)
    return count

candidate = text_count([], str, dict)

print("候选:", candidate)

 

1-2 .3 HMM,朴素贝叶斯、SVM支持向量机、CRF条件随机场

0
回复
a220赵航
#148 回复于2020-03

 

1-1   .1  已发截图

1-1 .2

1-1.3

1-2.1  计算复杂度为O(NM^2)

1-2   .2 给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?

窃取:

str = '中国人民万岁'
dict=['中','国','人','民','万','岁','中国','国民','中国人','万岁','中国人民']
def text_count(text, word, dict):
    if len(word) == 0:
        print('/'.join(text))
        return 1
    count = 0
   
    for i in range(1, len(word) + 1):
        if word[:i] not in dict:
            continue
        count += text_count(text + [word[:i]], word[i:], dict)
    return count

candidate = text_count([], str, dict)

print("候选:", candidate)

 

1-2 .3 HMM,朴素贝叶斯、SVM支持向量机、CRF条件随机场

0
回复
寂寞你快进去
#149 回复于2020-03

AI Studio用户名:寂寞你快进去

作业1-1:

(1)截图已发给班主任

(2)

import paddlehub as hub
import jieba
jieba.enable_paddle()

lac = hub.Module(name="lac")
test_text = [您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例]

for str in test_text:

    result = lac.lexical_analysis(data={"text": [str]})
    print('/'.join(list(result[0]['word'])))

    seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
    print('/'.join(list(seg_list)))
    
    seg_list = jieba.cut(str)
    print('/'.join(list(seg_list)))  # 默认是精确模式

(3)使用jieba分词全模式

import os
import math
import jieba


dir_path = "/Users/luolvgen/project/nlp_course/datas/rmrb"

word_dict = dict()
total = 0

for exapmle_file in os.listdir(dir_path):
with open(os.path.join(dir_path, exapmle_file), "r") as file:
content = file.read()
seg_list = jieba.cut(content, cut_all=True)
for word in seg_list:
if len(word) == 0:
continue
if word not in word_dict:
word_dict[word] = 0
word_dict[word] += 1
total += 1


def cal_entropy(words_p, total):
entropy = 0
for word, p in words_p.iteritems():
p = p * 1.0 / total
entropy -= p * math.log(p)
return entropy


print("信息熵: %s" % cal_entropy(word_dict, total))

 信息熵:8.038373285989232

 

作业1-2:

(1)时间复杂度为O(N*M^2)

(2)

import jieba

seg_list = jieba.cut_for_search("在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句") 

print(", ".join(seg_list))

(3)
  1.LSTM
  2.隐马尔可夫模型
  3.Bert
  4.ERNIE

0
回复
AIStudio810258
#150 回复于2020-04

NLP及推荐课程总结

AI Studio用户名:FutureSI

  • NLP课程中,我学习了如何使用CBOW算法和skip-gram算法把word给embedding成vector,即把词嵌入成特定维度的向量。开始自己手写的模型始终运行不是很理想(当时真的不开心),与用ERNIE预训练模型的效果差太多了(也很正常)。后来我甚至想抽取小规模(比如十来个常用词)的高频词组成小批语料在“可控、可理解”的场景下测试调整手写模型。但后来,我觉得要理解模型,还是应该从弄清每一个理论细节着手,然后由简入繁进行试验。这是深度学习课,不是编程课。即使每行代码都能读明白,不了解理论的话还是睁眼瞎。当然,只要理论理解透彻,数据分布没有问题,结果是一定能复现的。至此我才觉得云开雾散,前路豁然开朗。在实现CBOW算法时,我做余弦相似度计算的过程走了一些弯路。开始我用scikit-learn库算计算两个向量的余弦相似度时,程序执行两、三个batch就会报错。然后,我又直接用python按公式手写函数计算余弦相似度,程序可以执行,但是速度超级慢。后来听推荐课时,我发现原来paddle自带余弦相似度计算函数。以后要用什么函数,我还是先查paddle手册吧,能节省不少时间。(后来我在文档上查kmeans聚类功能,没有找到,还是用的scikit-learn库。要是paddle把这些机器学习中常用的基本算法都集成就更美好了。)
  • 这次的标题文本分类比赛,由于nlp初学,我主要熟悉了下paddle hub的使用,了解了下联合训练,而且头一次发现用大量的数据训练一轮就得半天,跑模型一天也就训练两轮。这时就用得让paddle slim帮忙了。因为忙于写作业、学习理论细节,比赛我就站在场内捧着油瓶给大佬们加油了。在此要向吕坤大佬致敬,赞赏他在上次“AI识虫”比赛的出色表现和开源精神。
  • 在个性化推荐课程里,我发现毕老师讲课更风趣了。尤其是课程中毕老师津津乐道的万物embedding的思想(把各种feature给embedding到模型中,然后为所欲为)让我大开脑回路,yy了好多有趣的玩法。而且,原来在cv课上学习yolo v3目标检测模型时,我对将图片的分类feature和选择锚框的回归的feature给拼接在一起的操作感到很突兀。尤其是,loss也被这样“硬给”加和在了一起用来优化模型更是让我满头问号,觉得:“这也能行?为啥能行?”学了毕老师的推荐课我领会到,原来这个是老司机们玩儿深度学习的标准操作——把一切问题“翻译”成标准的向量,然后再让模型去解决这些标准向量的分类、回归等问题。
  • 总体感觉这次的NLP及推荐课程是作业多多(可能是个人初学,所以作业写得慢)、收获满满。NLP和推荐系统几个作业程序写下来,我感觉自己炼丹大法的修为又精进了一重——进入了embedding境界。其实CV和NLP没有我原来想象的那么不同。现在,我理解CV使用的卷积网络本质上也就是一种把图像、视频信息给转换为向量的Embedding操作。所以无论CV问题还是NLP或是其他问题,我们都是将数据embedding到向量,然后就通过标准的分类、回归算法训练网络参数了。通过这期课程,我也进一步熟悉了paddle hub以及ERNIE预训练模型的使用。如果越用越上手,希望自己不会越来越懒哈。我还是希望能像吕坤大佬那样开心的玩耍模型。
  • 最后诚挚感谢各位老师们、班主任、运维等伙伴们,还有我自己(是的,自己也要感谢一下)的辛苦努力。希望paddle框架闪闪发光,AI Studio平台、社区越来越强。
0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户