百度深度学习集训营第二阶段的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《百度架构师手把手教深度学习》课程上
AI Studio用户名:Hazelnut
作业1-1:
下载飞桨本地并安装成功
对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
代码:
运行结果
各个词出现次数存储在文件 seg_count.txt 中,部分结果如下:
作业1-2
思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
最坏情况下,即每个字对应一个词,单词最大长度为M,则每次取词需要配对M×N次 ,一共需要配对M次,复杂度为O(MMN)
给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
代码如下:
除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
后向最大匹配算法
与前向最大匹配算法类似,但是方向相反,从后向前寻找词典中存在的词并输出。
例如最大单词长度为3,对句子:“百度飞桨好”
第一轮:
取子串 “飞桨好”,扫描词典中单词,没有匹配,子串长度减 1 变为“桨好”。
取子串 “桨好”,扫描词典中单词,没有匹配,子串长度减 1 变为“好”。
取子串 “好”,扫描词典中单词,匹配。
第二轮:
取子串 “度飞桨”,扫描词典中单词,没有匹配,子串长度减 1 变为“飞桨”。
取子串 “飞桨”,扫描词典中单词,匹配。
第三轮:
取子串 “百度”,扫描词典中单词,匹配。
得出结果为:百度 / 飞桨 / 好
AI Studio用户名:相依相守
作业1-1:
(1):已截图给班主任
(2):
jieba模型学习:
LAC模型学习:
(3) 对人名日报分词
结果:
作业1-2:
(1) 答:N*(M+M-1+M-2+....+2+1)=(N+NM)/2 , 计算复杂度为O(NM^2)
(2) 自己没有想出来结果. 看帖子回复,已经有答案了.自己跟着练习了,就不贴重复答案了
(3)
a.逆向最大匹配法(BMM),对于输入的一个文本序列从右至左,以贪心的算法切分出当前位置上长度最大的词
b.基于序列标注的分词算法,如基于HMM的分词方法,其属于由字构词的分词方法,由字构词的分词方法思想并不复杂,它是将分词问题转化为字的分类问题(序列标注问题)。从某些层面讲,由字构词的方法并不依赖于事先编制好的词表,但仍然需要分好词的训练预料
AI Studio用户名:慕蟾宫
作业1-1:
(1)作业已发送班主任。其中遇到的问题是:python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple失败,如图所示
随后知道,问题在于命令提示符未获得管理员权限
解决办法:命令提示符—右键—以管理员身份运行
随后飞桨本地安装成功,如图
(2)jieba学习
运行结果:
(3)人民日报语料切词,通过统计每个词出现的概率,计算信息熵
计算结果:
作业1-2:
(1)Q:思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
A:最大前向匹配计算复杂度为 N*M^2
(2) Q:给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
A:
结果:
(3) Q:除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
A:最大前向匹配属于基于词表的分词算法,N-gram属于基于统计模型的分析算法,此外:
1.基于词表的分词算法
a)逆向最大匹配法(BMM):类比前向匹配法,顺序相反
b)双向最大匹配法:正向与逆向结合
2.基于序列标注的分词算法
基于HMM的分词方法:将分词问题转化为字的分类问题
作业1-1
(1)
已发给班主任
(2)
import jieba
import jieba.posseg as pseg
import paddlehub as hub
module = hub.Module(name="lac")
test_text = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"]
inputs = {"text": test_text}
results = module.lexical_analysis(data=inputs)
for result in results:
print('LAC分词')
print(result)
results = []
for text in test_text:
words = pseg.cut(text)
d = {}
word = []
tag = []
for w, t in words:
word.append(w)
tag.append(t)
d['word'] = word
d['tag'] = tag
results.append(d)
for result in results:
print('jieba分词,默认模式')
print(result)
results = []
for text in test_text:
# jieba.enable_paddle() # 启动paddle模式
words = pseg.cut(text, use_paddle=True)
d = {}
word = []
tag = []
for w, t in words:
word.append(w)
tag.append(t)
d['word'] = word
d['tag'] = tag
results.append(d)
for result in results:
print('jieba分词,启动paddle模式')
print(result)
(3)该题读取文件预处理部分有借鉴别人的做法, 之后字典的生成方法采用了get()函数简化了代码,另外还看到一个问题最后输出排行前几的词的时候有索引值问题,做了修改
作业1-2
(1)采用最大前向匹配最坏的情况意味着句子分词结果为一个字一个字,并且每个字都需要遍历词表全部,第一次为N次匹配,第二次为2N次匹配,…第k次为kN次匹配,…。所以最后的匹配结果次数为N * (M + M-1 + … + 2 + 1),得到最后的复杂度为O(N * M^2)
(2)
(3)查阅资料知道的一种算法
联想—回溯法
这种方法要求建立三个知识库——特征词词库、实词词库和规则库。首先将待切分的汉字字符串序列按特征词词库分割为若干子串,子串可以是词,也可以是 由几个词组合而成的词群;然后,再利用实词词库和规则库将词群再细分为词。切词时,要利用一定的语法知识,建立联想机制和回溯机制。联想机制由联想网络和 联想推理构成,联想网络描述每个虚词的构词能力,联想推理利用相应的联想网络来判定所描述的虚词究竟是单独成词还是作为其他词中的构词成分。回溯机制主要 用于处理歧义句子的切分。联想—回溯法虽然增加了算法的时间复杂度和空间复杂度,但这种方法的切词正确率较高,是一种行之有效的方法。
AI Studio用户名: 晓飞好
作业1-1:
(1) 截图已发送
(2)![](https://ai.bdstatic.com/file/53FE423D504A4B94A4FC82FA7A9F0BBE)
(3)
1-2
(1)比较次数是N*(m(m+1)/2),时间复杂度是O(N*M^2)
(2)
(3)
基于模型的分词:HMM,朴素贝叶斯
基于判别式模型分词算法:判别式模型主要有感知机、SVM支持向量机、CRF条件随机场、最大熵模型
AI Studio用户名:18801936053
作业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
学习jieba模型:
jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:
支持 3 种分词模式:
使用jieba进行分词练习:
with open(os.path.abspath(path), “r”, encoding=’utf-8’) as file:
filecontext = file.read();
print(filecontext)
分词
seg_list = jieba.cut(filecontext, cut_all=True)
print(“[精确模式]:” + “/“.join(seg_list))
(3)对人民日报语料完成切词,并通过统计每个词出现的概率TF,计算信息熵 语料地址:
https://github.com/fangj/rmrb/tree/master/example/1946%E5%B9%B405%E6%9C%88
3.1 计算每个词的TF以及信息熵
构造词典,统计每个词的频率,并计算信息熵
def calc_tf(corpus):
统计每个词出现的频率
word_freq_dict = dict()
for word in corpus:
if word not in word_freq_dict:
word_freq_dict[word] = 1
word_freq_dict[word] += 1
将这个词典中的词,按照出现次数排序,出现次数越高,排序越靠前
word_freq_dict = sorted(word_freq_dict.items(), key=lambda x:x[1], reverse=True)
计算TF概率
word_tf = dict()
信息熵
shannoEnt = 0.0
按照频率,从高到低,开始遍历,并未每个词构造一个id
for word, freq in word_freq_dict:
计算p(xi)
prob = freq / len(corpus)
word_tf[word] = prob
shannoEnt -= prob*log(prob, 2)
print(len(word_freq_dict))
return word_tf, shannoEnt
输出结果:
作业1-2
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
O(N*M^2)
for index in range(M):
for i in range(index+1):
判断词典中有没有这个词,时间复杂度是N
所以总复杂度: O(N*M^2)
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
2^(n-1)
n为句子长度
def cut_num(input_str_len):
‘’’
:param input_str_len: 句子长度
:return:
‘’’
if(input_str_len == 1):
return 1
elif(input_str_len == 2):
return 2
else:
return 2 * cut_num(input_str_len-1)
print(str(cut_num(4)))
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
1-1
(1)截图已发送给班主任
(2) 学习使用Jieba分词
(3) 对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
作业1-2
(1)
采用最大前向匹配最坏的情况意味着句子分词结果为一个字一个字,并且每个字都需要遍历词表全部。所以最后的匹配结果次数为N * (M + M-1 + … + 2 + 1),得到最后的复杂度为O(N * M^2)
(2)
(3)
最大前向匹配属于基于词表的分词算法,N-gram属于基于统计模型的分析算法,此外:
1.基于词表
a)逆向最大匹配法(BMM):类比前向匹配法,顺序相反
b)双向最大匹配法:正向与逆向结合
2.基于统计模型
a)隐马尔可夫模型:HMM模型认为在解决序列标注问题时存在两种序列,一种是观测序列,即人们显性观察到的句子,而序列标签是隐状态序列,即观测序列为X,隐状态序列是Y,因果关系为Y->X。因此要得到标注结果Y,必须对X的概率、Y的概率、P(X|Y)进行计算,即建立P(X,Y)的概率分布模型。
b)CRF分词算法:CRF可以看作一个无向图模型,对于给定的标注序列Y和观测序列X,对条件概率P(Y|X)进行定义,而不是对联合概率建模。CRF可以说是目前最常用的分词、词性标注和实体识别算法,它对未登陆词有很好的识别能力,但开销较大
AI Studio用户名:WangHiro
作业1-1
(1)截图已发送给班主任
(2) 学习使用Jieba分词
(3) 对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
作业1-2
(1)
采用最大前向匹配最坏的情况意味着句子分词结果为一个字一个字,并且每个字都需要遍历词表全部。所以最后的匹配结果次数为N * (M + M-1 + … + 2 + 1),得到最后的复杂度为O(N * M^2)
(2)
(3)
最大前向匹配属于基于词表的分词算法,N-gram属于基于统计模型的分析算法,此外:
1.基于词表
a)逆向最大匹配法(BMM):类比前向匹配法,顺序相反
b)双向最大匹配法:正向与逆向结合
2.基于统计模型
a)隐马尔可夫模型:HMM模型认为在解决序列标注问题时存在两种序列,一种是观测序列,即人们显性观察到的句子,而序列标签是隐状态序列,即观测序列为X,隐状态序列是Y,因果关系为Y->X。因此要得到标注结果Y,必须对X的概率、Y的概率、P(X|Y)进行计算,即建立P(X,Y)的概率分布模型。
b)CRF分词算法:CRF可以看作一个无向图模型,对于给定的标注序列Y和观测序列X,对条件概率P(Y|X)进行定义,而不是对联合概率建模。CRF可以说是目前最常用的分词、词性标注和实体识别算法,它对未登陆词有很好的识别能力,但开销较大
之前还没打完,手误不小心发送了····重新发一遍(老是喜欢按Tab,就跑到“提交回复”Button那里去了)
AI Studio用户名:CF_FC
作业1-1:
(1) 之前已经安装过1.6.3版本的Paddlepaddle,已发截图给班主任。
(2) 学习使用Jieba分词:(分析《背影》一文的词频排行)
结果如下:
(3)对人民日报进行切词:
结果如下:(未添加停用词)
计算概率:
计算信息熵:
结果如下:
作业1-2:
(1)O(NM^2)
(2)Jieba分词当中,全模式就会给出全部的分词候选。
(3)后向最大匹配法,双向最大匹配法
PS: 上一个回复无效。
AI Studio用户名:18801936053
作业1-1
(1)下载飞桨本地并安装成功,将截图发给班主任
已经把安装图片发给班主任。
(2)学习使用PaddleNLP下面的LAC模型或Jieba分词
学习jieba模型:
jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:
支持 3 种分词模式:
使用jieba进行分词练习,获取人民日报1946年05月的全部分词结果:
(3)对人民日报语料完成切词,并通过统计每个词出现的概率TF,计算信息熵 语料地址:
https://github.com/fangj/rmrb/tree/master/example/1946%E5%B9%B405%E6%9C%88
3.1 计算每个词的TF以及信息熵
输出结果:
作业1-2
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
所以总复杂度: O(N*M^2)
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
2^(n-1)
n为句子长度
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
AI Studio用户名: 凌烟阁主人
作业1-1:
(1) 截图已发送
(2)学习jieba分词
(3)对人民日报语料example中语料进行分词,统计词个数,及信息熵
AI Studio用户名: 凌烟阁主人
作业1-2:
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
最坏情况,每个字都再词表中,那么每个都需要比较,从后向前,依次和词表里N个词进行比较,那么应该是N*(m(m+1)/2)
复杂度为o(N*M^2)
# (2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
# 最多的分词候选,那么基于最大前向匹配算法,从后到前,每匹配上1词,算1个。通过递归实现
input_str_len = 4
def cut_num(input_str_len):
if(input_str_len == 1):
return 1
elif(input_str_len == 2):
return 2
else:
return 2 * cut_num(input_str_len-1)
print(str(cut_num(input_str_len)))
jieba中采用全搜索模式即可
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
基于词表的分词方法
正向最大匹配法(forward maximum matching method, FMM)
逆向最大匹配法(backward maximum matching method, BMM)
N-最短路径方法
基于统计模型的分词方法
基于N-gram语言模型的分词方法
基于序列标注的分词方法
基于HMM的分词方法
基于CRF的分词方法
基于词感知机的分词方法
基于深度学习的端到端的分词方法
AI Studio用户名:vortual
作业2-1附加题:使用词库进行推理,代码如下
运行结果:
AI Studio用户名:huahua
作业1-1
(1)![](https://ai.bdstatic.com/file/F7D037DF7B474726B0733A3BD1C30E50)
(2)![](https://ai.bdstatic.com/file/F4EE2AF27F084550881DA3695E5C3AB2)
(3)![](https://ai.bdstatic.com/file/190A2A8A88B84043834A9BC0AB44BFE5)
作业1-2
(1)和(2)![](https://ai.bdstatic.com/file/D91EDF1FEA5E4D70B2C06B6DA66C8728)
(3)![](https://ai.bdstatic.com/file/365C94937E984CD0809C1C8FEFFD248B)
AI Studio用户名:多佛朗mingle
作业2-1附加题:对embedding进行降维聚类可视化分析
代码如下:
效果如下
可以看到one,two,three等这些数字聚到一起,mouse,desktop,windows,chip这些电脑相关的词聚到一起,desk,chairs这些家具相关的词聚到一起,he,she,they这些人称代词聚到一起
2月25日第一次作业
AI Studio用户名:赵杭天
此回答也放在个人网站上https://willtian.cn/?p=864
(因github账号只能登入aistudio而无法登入社区论坛,所以回答使用的是百度账号)
作业1-1:
(1)下载飞桨本地并安装成功,将截图发给班主任:
(2)学习使用PaddleNLP下面的LAC模型或Jieba分词
LAC模型,安装并测试成功:
(3)对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
使用Jieba分词:
删除因.MD格式而出现的符号,并使用/作为分隔符以实现并行处理,最终结果:
文本文件数:447,不同词的数量:21758,总词数:172731,信息熵:7.467906
作业1-2
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
最坏的情况:词表所有的词都没有出现在句子里,句子被判定为当前未处理句子长度(记为S1_len)个单字,图解如下:
所以,总的比较次数=N*(M-1+2)*(M-1)/2=N*(M^2-1)/2,复杂度为O(N*M^2) 。
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
【基于深度学习的端到端的分词方法】
最近,基于深度神经网络的序列标注算法在词性标注、命名实体识别问题上取得了优秀的进展。词性标注、命名实体识别都属于序列标注问题,这些端到端的方法可以迁移到分词问题上,免去CRF的特征模板配置问题。但与所有深度学习的方法一样,它需要较大的训练语料才能体现优势。
BiLSTM-CRF的网络结构如上图所示,输入层是一个embedding层,经过双向LSTM网络编码,输出层是一个CRF层。下图是BiLSTM-CRF各层的物理含义,可以看见经过双向LSTM网络输出的实际上是当前位置对于各词性的得分,CRF层的意义是对词性得分加上前一位置的词性概率转移的约束,其好处是引入一些语法规则的先验信息。
从数学公式的角度上看:
其中,A是词性的转移矩阵,P是BiLSTM网络的判别得分。
因此,训练过程就是最大化正确词性序列的条件概率P(y|X),似的工作还有LSTM-CNNs-CRF:
在后续的课程中我们可能还会遇到。
AI Studio用户名:取个啥好的名字
作业1-1:
(1)python3.8目前无法安装paddlepaddle,安装3.7后可以通过pip安装,已经将图发给班主任
(2)LAC分词模型学习
输出结果为:
jieba分词学习代码为:
结果为:
(3)语料分析代码
输出结果分别为分词信息熵和类型信息熵
作业1-2:
(1)最大前向匹配,按照最坏打算,单个字才能匹配成功,则第一个字的匹配成功最坏所需次数为NM,第二个字为N(M-1),一次类推总共需要N*(M+M-1+M-2+...+2+1)=N*(M*(M+1)/2), 时间复杂度为O(N*M^2)
(2)假设测试的句子为“我今天想学习一下深度学习课程”,可能存在的候选词有[我,今,天,今天,想,学,习,学习,一,一下,深度,课,课程],则代码为:
结果为:
(3)对于分词算法,搜索知识之前并不清楚相关的分词算法,通过网络学习,个人认为分词算法可以分为两大类:
一、通过构建词典,最够依据匹配进行分词主要的算法有:
最大匹配分词:就是先构建词树,然后通过最长分词对句子一次进行分割判断,然后比对
最短路径分词:先将句子中所有可能存在的词进行标注,然后利用两点之间的最短路径也包含了路径上其他顶点间的最短路径,这一性质,通过贪心算法或动态规划,选出最佳的分词方案
N-gram算法:主要是将词出现的频率加入其中,也就是首先对各个分词出现的概率进行建模,加入到最短路径分词的算法中。
二、基于字的分词,主要是将分词看作,每个字的标注问题,将一个字标记成B(Begin), I(Inside), O(Outside), E(End), S(Single)。这样可以利用机器学习和深度学习,通过输入值当前字和其上下文,判断该字所属分类。其下有很多分类还在学习,大家有兴趣可以搜搜看,我也不知道作业让不让补外链
AI Studio用户名:你还说不想我吗
作业1-1:
1.paddle安装
2 paddle hub 和jieba安装
3 人民日报语料切词,计算信息熵
作业1-2
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
假设词典中词的最大长度也为M,从句子M开始匹配,匹配N次,未找到,从[0,M-1]开始匹配,匹配N次,最坏情况下,单字匹配,(M+(M-1)+(M-2),……3+2+1)N=M(M+1)N/2,复杂度为O(NM^2)
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
给定包括该句子所有可能的词的词典,进行最大前向遍历;
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
分词算法可分为三类,基于词典的匹配算法,基于标注数据的机器学习算法,基于深度学习的算法。
1. 基于词典的匹配算法,有最大前向匹配,最大逆向匹配,双向匹配等,速度相对标注模型快,缺点是不能发现新词;
2. 基于标注数据的机器学习算法有隐马尔可夫模型和条件随机场模型,这两种算法都能发现新词;
3. 基于深度学习的算法,端到端的分词模型,使用WordEmbedding,LSTM,及CRF构造网络,基于大量标注语料训练而来,准确度相比传统算法更高。
一些开源算法的性能比较 https://github.com/thunlp/THULAC-Python,ltp,ICTCLAS,jieba,thulp中 jieba速度最快。
AI Studio用户名:lzytucker
作业1-1
(1)截图发班主任
(2)![](https://ai.bdstatic.com/file/5FA9BA80E9A04B9D80C88B30D11C28B4)
(3)![](https://ai.bdstatic.com/file/5732E65EEC73409597D269F23FDD10C6)
作业1-2
(1)使用最大向前匹配算法切词时,词表里面含有N个词则进行N轮循环,而一轮循环下又有循环,最大循环次数为M(句子长度),因此时间复杂度用大O表示法可以表示为O(NM)。
(2)采用结巴切词的搜索引擎模式。
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
(3)前向最大匹配算法:从前向后寻找在词典中存在的词。
后向最大匹配算法:与前向最大匹配算法类似,只是方向相反,即从后向前寻找词典中存在的词并输出。
双向最大匹配算法:双向最大匹配算法的原理就是将正向最大匹配算法和逆向最大匹配算法进行比较,从而确定正确的分词方法。
AI Studio用户名:Action
作业1-1
(1)下载飞桨本地并安装成功,将截图发给班主任
(2)学习使用PaddleNLP下面的LAC模型或Jieba分词
(3)对人民日报语料完成切词,并通过统计每个词出现的概率,计算信息熵
作业1-2
(1)思考一下,假设输入一个词表里面含有N个词,输入一个长度为M的句子,那么最大前向匹配的计算复杂度是多少?
O(N*M^2)
(2)给定一个句子,如何计算里面有多少种分词候选,你能给出代码实现吗?
(3)除了最大前向匹配和N-gram算法,你还知道其他分词算法吗,请给出一段小描述。
基于深度学习的端到端的分词方法:输入层是一个embedding层,经过双向LSTM网络编码,输出层是一个CRF层