computational literature
如何看待文科渐渐「计算化」的趋势?
近年随着算力和数据科学的发展, 不少文科开始出现「计算 XX 学」的分支, 跟写作相关的比如, 计算文学, 计算语言学, 计算美学 . 本文大量的工作基于《人工智能写作指南 v1.0》, 结合近些年作者的实践研究及国内外行业进展, 整理而成, 主要包括知识点, 产品, 技术栈等内容.
版本记录:
- -02-14 v1.0
- -04-26 v2.0
- 背景
这是一个机器人写稿的时代, 智能写作应用的行业涉及非常广, 有新闻业, 媒体业, 广告业, 自媒体行业, 政府公文等等, 跟文字生产有关的都有所应用.
应用场景上下游 主要分为上游的生产端, 表现为创作工具 (诸如编辑器, 笔记类产品) , 中间环节主要是内容的审核, 发布, 培训 (主要产品比如文本风险, 版权检测, 多平台自动发布) , 下游主要是内容的消费, 比如广告变现, 知识付费等.
最典型的产品是 机器人记者 , 是不是意味着 "人类记者即将失业"? 其实不然, 目前, 新闻机器人主要用于以数据为基础的报道领域, 例如公司年报, 股票市场简报, 地震报道和体育报道等等数据类的新闻.
还有文学类的产品也备受关注, 例如 互动小说, 小说生成 之类的. 甚至是书籍的生成, 有一个做法是通过浏览维基百科, 算法自动生成教科书 .
- 相关概念
程序写作
Program Writing
使用计算机程序来生成文字, 包含的范围非常广.
电脑生成文学
Computer-Generated Literary Art
主要是计算机与文学方面的结合, 偏艺术创作.
智能写手
artificial intelligence writer
主要是使用机器学习, 深度学习等算法来生成文章或辅助写作. 应用有写稿机器人, 写作辅助工具, 智能写诗, 写春联等.
机器人记者
robo-journalist
主要用于写新闻报道, 甚至能够对事实进行评论. 比如在体育报道方面, 它能够充分理解 "反败为胜"" 团队努力 " 之类的专业术语, 同时根据自己的判断对体育比赛最重要的方面进行报道. 它不会单纯地复述事实, 而是会给文章加入一些不同的元素.
互动小说
Interactive Fiction
通常缩写成 IF, 指在软件模拟的环境中, 读者通过输入纯文字命令来控制人物和影响环境, 从而完成故事讲述. 通俗一点的理解, 可以将它看作是文字版的冒险或 RPG 游戏.
非线性叙事
由于是涉及到文学作品的生成, 创作, 计算机, 人工智能改变了以往的叙事逻辑, 我们可以技术的帮助下, 进行非线性的叙事创作.
计算美学
Computational Aesthetics
计算美学研究审美对象的种种量化关系. 其思想根源早在 20 世纪上半叶就已经诞生. 当时美国数学家 George D. Birkhoff 提出, 秩序与复杂度之间的比值作可以作为一种美学度量. 因此, 计算美学的主要任务就是发展新的科学方法来量化美, 并建立人类审美感知的模型.
- 人工智能写作基本能力
第一是 总结能力 , 分析大量数据, 从而总结事实;
第二是 解构重组能力 , 从大量数据中提取所需内容, 并通过排列, 组合形成文档.
第三是 美学能力 , 能够分别出成文的句子, 段落, 篇章的艺术特点, 具体表现为一套评分系统
(目前市面上还没看到一款有美学能力的智能产品, 欢迎读者提供线索)
- 典型的技术思路
使用创新的创作技巧撰写非凡的文本, 专注于新的写作方法, 而不是传统的抒情或叙事手法. 下面分别从新闻生产, 新媒体内容生成, 文学作品, 书籍内容生成来介绍.
- 新闻编码的理论
来源于《纽约时报》研究与发展实验室提出的「Particles 理论」, 这套理论核心是: 给新闻编码 .
以 "积木式" 的编辑模式改变新闻生产, 分发全部环节, 并最大限度释放媒体人的生产力.
最核心的是把可能会被重复使用的部分识别出来并加以注释, 这一过程被称为 Particles.
从而, 所有的资讯内容都被转化为了可供拼装的 "颗粒", 每个部分都被重新编码, 添加标签, 而且是可以被嵌入的.
- 算法新闻的制作方法
首先, 选定主题;
其次, 编写爬虫爬取题材对应的文章数据;
第三, 清洗数据, 整理数据, 去除无效信息;
第四, 探索数据, 发现其中有价值的信息;
最后, 编写机器学习算法完成创作.
表现形式一般是可视化的 web 页面, 这次疫情尤其凸显出此类新闻的重要性 .
机器学习可以帮助记者完成日常任务, 比如
寻找新闻;
捕捉图片和影像;
在社交媒体上编辑和发布新闻作品;
自动转录, 使用图像识别技术来识别照片中的人, 以及给视频加上字幕;
从社交媒体的海量内容中寻找特定信息;
- 机器自动生成新媒体内容
用机器完成内容的生成, 思路来源于一款叫「新闻七点钟 News at Seven」的应用, 利用现有的网络资源, 外部文本, 多媒体资料库和用户偏好, 来为用户创建个性化的音频和视频内容.
具体流程:
首先, 根据用户偏好在系统中找到相关的文本
其次, 处理文本
第三, 补充图像, 视频和相关的网友回复
第四, 输出一个在线 Flash 短片, 用卡通人物形象模仿传统的晚间新闻广播形式, 来向用户播放内容.
- 文学作品创作思路
举一个撰写「关于饮食习惯」的文学作品的例子.
首先介绍一种 量化美食 的思路, 下图是一个 美食风味网络 , 每个节 点代表一种食材, 颜色代表所归属食物种类. 节点大小反映了一种食材在菜谱中的普遍性. 如果两种配料 有显著数 量风味的化合物共享, 则表示它们之间有关联, 链接的 粗细代表两种配料之间共享化合物的数量.
美食风味网络
回到我们的文学作品的构建思路, 首先, 收集微博文本内容;
其次, 提取出用户饮食习惯等数据, 主要使用分词, 词性标注和依存句法分析等 NLP 技术. 那么如何抽取出用户饮食习惯呢? 主要是由三个条件组成的规则:
一条微博里含有词语 "吃";
与 "吃" 相关的句法关系为动宾关系;
"吃" 的宾语为名词;
就可以判断发生饮食行为, 进而提取出 "吃" 的宾语就是相关的食物, 从而形成饮食习惯数据.
最后, 重新组织语言, 把用户的饮食习惯数据书写出来.
- 情感弧线
emotional arcs
此项技术可以帮助我们 分析故事的主要高潮和低谷 .
作者使用了三种主要方法进行《哈利. 波特》的情感弧线分析: 奇异值分解(singular value decomposition); 以 Ward 的方法产生故事的分层聚类; 以及自组织映射机器学习方法来聚类情感弧线. 情感弧线是通过使用 hedonom.org 和 labMT 数据集分析滑动 10000 字窗口的情绪而构建的.
另外 hedonometer.org 网站还提供了许多其他书籍, 故事, 电影剧本以及 Twitter 的交互可视化情感弧线.
- 新型书籍的自动生成
在没有人工参与的情况下, 自动生成整本维基教科书;
这部分是来源于 Wikibook-bot 的一项技术, 是由以色列内盖夫本古里安大学的沙哈尔阿德马蒂 Shahar Admati 及其同事开发的;
主要的流程如下:
首先, 准备一组现有的维基教科书, 用作训练数据集, 数量级在 6000 本以上.
其次, 进行数据清洗, 规则是:
1 关注浏览量超过 1000 次的教科书;
2 涵盖超过十个章节
第三, 生成标题, 该标题用以描述某种概念.
第四, 文章清洗, 规则类似于 pagerank 的原理, 文章通常通过超链接指向其他文章, 在网络上搜集出通过点击超链接三次以内得到的所有文章作为优质的文章. 每本人工维基教科书都有自己的网络结构, 其决定因素包括, 引用该文的文章链接数量, 指向其他文章的链接数量, 所包含文章的页面排名列表等.
第五, 文章分类, 对所有维基百科文章进行分类;
第六, 每一个类别主题对应的文章的再次清洗, 该算法会查看每一篇给定主题筛选出来的文章, 接着判断如果将其添加到维基教科书中是否会使该书的网络结构与人工创作的书籍更相似. 如果不相似, 那么该文章就会排除在外.
第七, 将每一个类别主题对应的文章组织成章节. 主要借助聚类算法, 结合由整组文章组成的网络, 找出如何将其划分为连贯的集群.
第八, 确定文章在每个章节中的出现顺序. 使用的是枚举, 然后排序的思路, 通过给文章成对分组, 对所有文章枚举所有组合, 然后使用网络模型来计算排序逻辑, 最终计算出更为理想的文章顺序以及章节顺序.
感兴趣可以详细阅读论文:
https://arxiv.org/pdf/1812.10937v1
- 主要涉及的 NLP 技术
NLP
自然语言处理
为了实现写作类的应用, 需要对文本进行大量的处理, NLP 是一种让机器能够像我们平常那样阅读和理解语言的技术. 常常会结合知识图谱来使用, 以提升产品效果.
我们需要掌握 NLP 的常见任务及算法.
- 主要的 NLP 任务
文本分类, 情感分析, 分词, 依存句法分析, 实体识别等;
- 深度学习算法
目前深度学习有以下典型的算法, 可以一一详细了解掌握;
参考地址 https://github.com/graykode/nlp-tutorial
- GPT2
这里要举一个例子, 在大受欢迎的 reddit 社区中, 一个名为 SubSimulatorGPT2 的子讨论小组格外引人注目: 其内容完全由人工智能聊天机器人模仿各种讨论小组的风格生成后发布 .
- SubSimulatorGPT2
- https://www.reddit.com/r/SubSimulatorGPT2/
早期的 SubredditSimulator (https://www.reddit.com/r/SubredditSimulator/) 的机器人使用 马尔科夫链 , 这是一种成熟的生成序列的技术.
- 马尔可夫链和 N-gram
马尔科夫链的假设 (第一性原理) . 基于马尔可夫链的模型假定句子中的每个单词仅取决于其前面的几个单词. 因此, 给定任意句子的概率为组成该句子的所有 n-gram(n 个单词的序列) 的组合概率. 下图说明了该概念:
以 Python 语言为例, 采用字典 (Dictionary) 的数据结构.
<span>d = {key1 : value1, key2 : value2 }</span>
键名是当前的单词, 键值是一个列表 List, 存储当前单词的下一个单词.
<span>d = {word1 : [word2,word3], word2 : [word3,word4,word5] }</span>
具体的例子, 有这么两句话:
- I like to eat oranges
- You eat apples
我们希望通过 马尔科夫链 来学习以上数据, 经过计算, 模型为:
- {
- 'START': ['i','you'],
- 'i': ['like'],
- 'like': ['to'],
- 'to': ['eat'],
- 'you': ['eat'],
- 'eat': ['apples','oranges'],
- 'END': ['apples','oranges']
- }
我们不需要计算下一个单词出现的概率, 因为如果它们出现的概率较大, 那么他们会在选取下个单词的列表中出现好几次. 采用适当的数据结构, 问题也得到了简化的处理.
- 词嵌入和神经语言模型
词嵌入是当今 NLP 中任何人都必学的第一项技术: 将词投射到多维空间中 . 它的优势在于, 具有相似用法 / 含义的单词会获得相似的向量(按余弦相似度衡量). 因此, 涉及相似单词的单词向量的矩阵乘法趋于给出相似的结果.
何为余弦相似度? 在 NLP 的任务里, 会对生成两个词向量进行相似度的计算, 常常采用余弦相似度公式计算. 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小. 余弦值越接近 1, 就表明夹角越接近 0 度, 也就是两个向量越相似, 这就叫 "余弦相似性".
这是基于神经网络的语言模型的基础. 有趣的是, 神经模型不计算出现次数来确定概率, 而是学习可以为任何输入计算出它们的参数(权重矩阵和偏差). 这样, 甚至可以为我们从未见过的 n 个 语法之后的下一个单词计算一个合理的概率分布. 下图是一个最简单的神经网络: MLP (multilayer perceptron) 多层感知器.
- 递归神经网络
随着递归神经网络 (RNN) 的出现, 特别是长短期记忆 (LSTM) 的出现, 语言生成方面获得了更大进步. 与之前提到的最简单的神经网络不同, RNN 的上下文不仅限于 n 个 单词; 它甚至没有理论上的限制.
RNN 的主要改进在于保留了内部状态. 因此, RNN 可以不停地逐字读取单词, 从而更新其内部状态以反映当前上下文, 而不是只看固定的窗口( n 个 单词).
使用 RNN 的文本生成以自回归方式遵循与马尔可夫链相似的原理 .RNN 对第一个单词进行采样, 将其送到神经网络以获取下一个单词的概率, 然后再对下一个单词进行采样, 依此类推, 直到句子结束为止. 如下图所示, 依次学习 The,boys,that,came 单词的过程.
Internal State 类似于大脑(黑箱), 记录了所有复杂的文本信息.
- 注意力机制
在产生下一个输出之前, 先回顾所有先前的单词. 计算注意力本质上是指计算过去单词的某种分布, 然后将这些单词的向量与接收到的注意力成比例地进行聚合. 下图说明了该概念.
注意机制使 RNN 可以回顾先前单词的输出, 而不必将所有内容压缩为隐藏状态. 中间输出之前的压缩 RNN 块与不注意时的块相同.
- Transformer
- "这是 12:29 而我需要点饮料"
- "这是 1:00pm 而我还没有离开我的床"
- "这是 11:00pm 我终于得到了一杯咖啡."
- Is he/she overrun 0r single?
- What _a fineee thingi 4my rageaholics girls!
- The Seeker
- https://github.com/thricedotted/theseeker
来源: http://www.tuicool.com/articles/rEnEjeY