1. 循环:神经网络前一次的输出,将作为同一个神经网络下一次的输入。所以,LSTM 是处理序列的利器,语句就是序列的一种,序列的例子还包括,股票价格波动,心电图脑电图,音频视频等等。 2. 遗忘:语句中每个词汇的重要性不同,记住重要的词汇,忘记冗词。人类记忆有限,听演讲往往要做笔记,记住要点。电脑的记忆无限,但是也要取舍,避免噪音淹没了要点。 人类听演讲时,把要点写在笔记本里。LSTM 处理序列时,把要点存储在隐状态里。 隐状态(Hidden State)也是数字向量,隐状态数字向量的维度,往往比词向量的维度高。就像笔记本里能够写下很多词汇。 但是隐状态向量并非词向量的简单积累。隐状态向量是前后文词向量的剪接,如同基因剪接一样。 LSTM 的隐状态向量,胜任前后文语义向量的职能。但是隐状态向量的软肋,在于含义晦涩,如同基因不易读解。 好的隐状态向量,容易识别。如果用 Autoencoder [5] 把隐状态向量复原成原文,开奖,复原后的原文,与真正的原文越相近,说明隐状态向量的质量越好。 但是坏的隐状态向量,坏在哪里,很难甄别。因为,隐状态向量的含义晦涩难懂。这是需要研究解决的难题。 除了提炼前后文语义,LSTM 还可以做很多事情,譬如给文章中每个词汇标注词性,识别文章中地址名称等等词组。 作为神经网络的一种,LSTM 也需要训练,训练就需要语料。不同的任务,譬如词性标注,词组识别,需要不同的训练语料。 获得大量语料,也是难题。譬如有人提议,收集文章及其标题,作为文本摘要的训练语料。但是遇到标题党,这个办法就失效。 解码的实现原理 解码的理想境界,与翻译的理想境界相似, 1. “信”:语义要正确,不要曲解。 2. “达”:措辞要恰当,即便语义相同,如果措辞不同,那么语气迥异。 3. “雅”:行文要流畅。 解码器的实现原理,与词向量的实现原理相似,依赖语言模型,根据前文,预测下一个词,最可能是词库中的哪一个词汇? 不要忘记,估算词库中所有词出现的概率,atv,计算量往往大得惊人。 要达到“信”的境界,对于机器翻译而言,难度较低,因为翻译基本上是逐个词汇一对一翻译。 对于文本摘要而言,“信”的难度较高。如何摘录重点?人类做摘要,往往摘录论点,不摘录论据,往往摘录故事结局,不摘录故事过程。 如何让电脑辨别论点与论据,结局与过程?这是需要研究的难题。 所以,对于机器翻译而言,解码器的输入,只需要原文中的词向量和语义向量,就可以翻译得相当精准。 但是,对于文本摘要而已,除了词向量和语义向量,还需要词性标注、词组识别、TF-IDF,信息越丰富,摘要越简洁。 简单暴力的办法,是摘录原文中每个段落的起首一两句,遇到两个段落的起首句的语义相同,就忽略其中一个。 要达到“达”的境界,对于机器翻译而言,难度较高,每种语言都有同义词,但是同义词之间的语气差别,往往难以界定。 对于文本摘要而言,“达”的难度较低,简单粗暴但是行之有效的办法,是直接引用原文中的词汇。 引用原文词汇,还有一个好处,是大大降低了计算量。说得学术点,这叫 LVT,Large Vocabulary Tricks [6]。 麻烦在于,原文中出现的词汇很多,下一个词应该引用原文中的哪一个词汇? 解决办法是先用语言模型,根据当前的词向量、语义向量,预测下一个词的词向量。然后再去原文中,寻找最贴切的词汇。 寻找的办法,说得学术点,叫 Attention [1]。 大意是根据原文中每一个词汇本身的语义、语法词性、词组标注、TF-IDF 统计信息,以及前后文的语义等等尽可能多的信息,评估原文中的每一个词汇,与下一个词的词向量的相关性。 但是 Attention 的办法,也会导致巨大的计算量。[2] 提议了一个减少计算量的办法,先评估每个语句的相关性,找到相关语句后,再评估这个语句中每个词汇的相关性。 要达到“雅”的境界,无论机器翻译还是文本摘要,都必须做到下一个词的选择,必须与前文词汇保持流畅。 对于文本摘要而言,下一个词的选择,不能全部选用原文中词汇。实现方式有两个要素。 1. 预先从训练语料中,构建摘要的词库。 2. 实现一个开关函数,决定从词库中选词,还是从原文词汇中摘录。 开关函数可以用 sigmoid 函数,输入有三项,前文的词汇、预测出的下一个词的词向量、Attention 找到的原文中最贴切的词汇。 未来有待解决的问题 除了进一步降低语言模型的计算量,除了识别原文中各个语句及词汇的重要性,未来最大的挑战,可能是如何引用外援知识。 人类阅读的时候,经常需要查字典,查参考文献。 引用外援知识的目的,是扩大读者现有的知识结构,消除现有知识结构与文章内容之间的落差。 阅读结束后,进一步扩大现有知识结构。这就是人类通过阅读,不断学习知识的过程。 知识结构的表达方式有多种,“一图胜千言”,自然语言似乎不是最高效的表达方式。 知识图谱由点和边组成,点表达概念,边表达一个概念与另一个概念之间的关系。 譬如 “发烧” 和 “炎症” 是两个概念,在知识图谱中用两个点来表达。“炎症”导致“发烧”,在知识图谱中用有向边来表达。 当阅读一篇文章时,如果文章中出现的概念,没有出现在现有知识图谱中,那么阅读就会出现困难,这就是知识的落差。 消除知识落差的办法,是查字典,查参考文献,扩大阅读,直到文章中出现的新概念,与现有知识图谱相连接。 如何把文章转换为知识图谱?不妨沿用机器翻译和文本摘要的工作原理,把文章从自然语言,转换成知识图谱。 换而言之,机器阅读其实就是自然文本的结构化。 参考文献 [1] Neural Machine Translation by Jointly Learning to Align and Translate https://arxiv.org/abs/1409.0473 [2] Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond https://arxiv.org/abs/1602.06023 [3] Distributed Representations of Words and Phrases and their Compositionality https://arxiv.org/abs/1310.4546 [4] Understanding LSTM Networks
[5] Autoencoders tutorial
[6] On using very large target vocabulary for neural machine translation https://arxiv.org/abs/1412.2007 【寻找AI独角兽】新智元联手10大资本 启动2017创业大赛 (责任编辑:本港台直播) |