难度最大,最坑的一个方向

尤其是中文,最坑,极端情况过多

自然语言处理 - 图1

我们要做的是分析语义

自然语言处理 - 图2自然语言处理 - 图3分句子的和分词汇的API

特殊的分词api:与标点相关的分词器 punct

当前分词效果: 大写作为新词,单复数,时态都是新词

统一形式: 词干提取,词性还原

自然语言处理 - 图4

自然语言处理 - 图5 kankan 三种提取器的效果

自然语言处理 - 图6 相当于对单词实现了归一化

中文麻烦在分词,不在归一

自然语言处理 - 图7

自然语言处理 - 图8 用单词列表才能构建分类模型

构建模型: 词袋模型

自然语言处理 - 图9自然语言处理 - 图10

中文也有 词袋模型

自然语言处理 - 图11自然语言处理 - 图12

输出 的是稀疏矩阵 只有这些位置不是0

因为可能出现的词很多,但每个句子的词很少

自然语言处理 - 图13 将稀疏矩阵 转为 二维数组形式

因为本案例涉及词库很小,看起来不稀疏

自然语言处理 - 图14展示词库

如何用 词袋模型 建模,得到想要输出的y

特征的贡献度:

自然语言处理 - 图15词频削弱了冠词的贡献

每行归一化,即可得到词频

文档频率: 考虑文档之间(句子之间) 的联系

代表影响程度低,因为过于宽泛,无法区分文档

自然语言处理 - 图16

最终用逆文档 和词频一起表达: 对the等数量大的,削弱其

自然语言处理 - 图17

自然语言处理 - 图18

自动根据词袋模型,构建tdf模型

拿到的tdf是稀疏矩阵,转为二维矩阵(toarray)

自然语言处理 - 图19 非常好反映了贡献 从而进一步构建有监督模型

自然语言处理 - 图20 文当频率 2/3

tdf 无法统计前后单词的连续性,只能用深度学习解决

自然语言处理 - 图21 五个领域的样本,每个都是上百个邮件

共计几千个,作为样本

当前业务: 给新的邮件,区分邮件类别

自然语言处理 - 图22

类别编码作为输出,是分类业务

tdf 本质是提供了一种将字符串量化参与计算的方法

主题识别 案例 接上

自然语言处理 - 图23skl 提供的新api 更加直接

自然语言处理 - 图24

shuffle 打乱 但凡手动打乱,都要随机种子

看一下train:

自然语言处理 - 图25列表没有shape

自然语言处理 - 图26 全部混杂了

构建tdf 矩阵: 对每个x 样本拆分:

自然语言处理 - 图27 要得就是多个样本构成的矩阵

构成词袋模型 bow

自然语言处理 - 图28

得到这tdf 模型 即将字符串数组 数值化

自然语言处理 - 图29

tdf 有了就可以拆 测试集 训练集

样本很大时效果很好

自然语言处理 - 图30

自然语言处理 - 图31

只有分词,没有语义,一旦出现否定,则效果很差

主题分类只是涉及名词,动作,没有情感

自然语言处理 - 图32自然语言处理 - 图33

封装的更好,但train data 结构不同: 字典做样x,元组做样本,列表整个是输入集

自然语言处理 - 图34

情感分析 案例

自然语言处理 - 图35

与主题识别类似,都是每个类别下有上千样本

nltk 也有自己读取文件夹的方法:

自然语言处理 - 图36