前言
今天学了自然语言处理相关的内容,是用AI来写宋词。我觉得写的非常一般,但是该方法提供了一种思路,可借鉴一下,最后也会讲一下该方法的缺点。
主体思路
- 获取到大量宋词的数据集。
这里我们假设机器学习拿到了2千首宋词。
相思::王维::红豆生南国,春来发几枝。愿君多采撷,此物最相思。 贾生::李商隐::宣室求贤访逐臣,贾生才调更无伦。可怜夜半虚前席,不问苍生问鬼神。 ... ...
- 提取出宋词的主体部分
红豆生南国,春来发几枝。愿君多采撷,此物最相思。 宣室求贤访逐臣,贾生才调更无伦。可怜夜半虚前席,不问苍生问鬼神。 ...
- 把文字转换成数字,方便计算机处理深度学习。
这一步内容多点,首先,我们把2千首宋词里所有出现过的字符,包括汉字、逗号和句号,组成一个词汇表。
第一首词《相思》也许会变成这种序列:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21, 22, 12]
其中 的对应关系深度学习
{ 1: 红 2: 豆 3: 生 4: 南 5: 国 6: , 7: 春 8: 来 9: 发 10: 几 11: 枝 12: 。 13: 愿 14: 君 15: 多 16: 采 17: 撷 6: , 18: 此 19: 物 20: 最 21: 相 22: 思 12: 。 }
- 把序列处理为 字深度学习符串 和 标签的集合
1, 2 1, 2, 3 1, 2, 3, 4 1, 2, 3, 4, 5 1, 2, 3, 4, 5, 6 1, 2, 3, 4, 5, 6, 7 1, 2, 3, 4, 5, 6, 7, 8 1, 2, 3, 4, 5, 6, 7, 8, 9 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21, 22 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21, 22, 12 ... (以上是第一首词的序列,) ... (第2-n首词的序列)
转换成这个序列是什么意思呢机器学习。
我们最后是要得到一个比较“智能”的模型。这个模型能做什么事情呢?
假设序号给一个序号为1的汉字,模型可能会给出序号为2的字符。
我们表示为
1 -> 2
第一行和后面所有行的的含义:
1, 2 -> 3 1, 2, 3 -> 4 1, 2, 3, 4 -> 5 1, 2, 3, 4, 5 -> 6 1, 2, 3, 4, 5, 6 -> 7 1, 2, 3, 4, 5, 6, 7 -> 8 1, 2, 3, 4, 5, 6, 7, 8 -> 9 1, 2, 3, 4, 5, 6, 7, 8, 9 -> 10 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 11 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 -> 12 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 -> 13 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 -> 14 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 -> 15 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -> 16 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 -> 17 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 -> 6 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6 -> 19 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19 -> 20 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20 -> 21 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21 -> 22 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21, 22 -> 12
为了统计方便,我们会把所有深度学习的行深度学习,变成统一的长度,方便我们取最后一个列作为 标签label。深度学习
得到如下结果:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2 -> 3 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 -> 4 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4 -> 5 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5 -> 6 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6 -> 7 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7 -> 8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8 -> 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -> 10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 11 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 -> 12 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 -> 13 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 -> 14 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 -> 15 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -> 16 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 -> 17 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 -> 6 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6 -> 19 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19 -> 20 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20 -> 21 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21 -> 22 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 19, 20, 21, 22 -> 12
这里我们大机器学习概可以看出一些规律,就是模型在给出指定的n个字符的情况下,会通过一定的规律,得到下一个字深度学习符,箭头后面的一个字符,就是模型给出的。
当然,也许并不机器学习一定都要从1 开始 也许我们还可以处理为:
1, 2 -> 3 2, 3 -> 4 ... n, m -> o
- 构建模型和训练模型
通过上述方法,已经对数据进行了预处理了,得到了相应的data 和 label。
模型学习到data 和 label 之间的关联。就可以通过给出的n个字符,得到下一个字符。
(个人感觉感觉是在统计字符出现的可能性。)
- 预测
最后机器学习,我们可以给模型开头的n个字符,让模型自己写完剩下的部分。
方法评价
通过序列进行预测的方法,用在了很多地方,但是感觉在很多场景都不完善。使用该方法来写宋词机器学习,本质上就是在统计字符出现的可能性。然后依次逐字写完剩下的部分。
个人感觉该方法的缺陷:
1,最后得到的结果,大都是看不太懂。相邻的字符生硬的拼凑在一起,可能都不组成正常的词语机器学习,就是单个字符强行前后拼接。
2,正因为是声音的拼接,写出来的诗词,看不出任何感情色彩,也无法表达深度学习出任何感情色彩。 在面对抽象的情深度学习感表达的时候深度学习,机器学习很多时候也是束手无策的。
但是我们依然从中学到了一点点思深度学习路,就是把诗词处理为机器学习可以使用的数据集,把我们了解的机器学习或深度学习方法带入该场景中。
本文暂未给出任何代码,如果有同学对该方法感兴趣,可留言或私信机器学习,可提供详细代码。
评论(0)