mathacker

no math, little hacker

预备知识

政治是由各种团体进行集体决策的一个过程,也是各种团体或个人为了各自的领域所结成的特定关系,尤指对于社会群体的统治,例如统治一个国家,亦指对于一国内外事务之监督与管制。狭义来说,这个词多用来指政府、政党等治理国家的行为。

从人类社会学来讲,政治是人类社会中存在的一种非常重要的社会现象,它影响到人类生活的各个方面。
政治学是专门以政治为研究对象的一门社会科学,研究政治行为的理论和考察权力的获得与行使。

”政治是由各种团体进行集体决策的一个过程“,团体有不同的构成,决策有不同的方式。但不管怎样,在现代社会,每个人都无法逃脱政治,即使你不关心它,它仍然以某种方式影响到你。

”团体“的划分,有时我们会自己归类,比如无产、中产,但社会的看不见的手则将每个人都归类了,比如”精英“和”大众“。

Read more »

Foreword by Matthew Flatt

让我们回顾1993年时的事情:

  • 为 GC 是否可作为手动内存管理的替代项而争论过(当时还没有 Java)
  • 为一等函数和闭包是否能被平均水平的程序员掌握而讨论过(当时还没有 JavaScript)
  • 我们终于确认了,静态类型系统辅以良好的保证确实物有所值(此时大部分程序员没有听说过 Haskell 和 ML,在 Java 引入泛型的几年之前)

此类技术,眼下已经属于理所应当,而彼时却会引发争论。当然,这些变化不是在一夜之间发生的。部分原因是,硬件性能和软件的scale的变化,改变了编程语言的可能性与tradeoff。部分原因是,越来越多的人尝试不同技术,然后不愿再回去了。

本书的核心是语言的可扩展性,对 Racket 来说是其中的 Macro。那么,如果宏真地这么好,为什么不是每个人都已在使用?如同 GC,宏看起来很酷,但也引入了太多 overhead(不是程序执行上,而是程序理解上)。类似于一等函数,宏在代码中引入了另一维度。

PS:应该不类似于 GC,因为GC实际上是大大减轻了程序员的心智负担。

Read more »

原文链接

Exploratory Data Analysis(探索性数据分析,EDA)是分析数据集以获取其主要特征的一种方法,通常会结合使用可视化方法。它主要是来查看,在借助于正式的模型与假设检验之外,数据还能告诉我们什么。在历史上,John Tukey是推广EDA的关键人物(1977年,出版同名书籍)。

本文通过实例讨论在NLP中的EDA。

开始之前

安装

1
2
3
4
pip install \
pandas matplotlib numpy \
nltk seaborn sklearn gensim pyldavis \
wordcloud textblob spacy textstat

数据

ABC News Headlines

文本统计

文本的可视化统计数据很简单,但能给出有效的信息。

  • 词频
  • 句长
  • 平均词长

以此了解文本数据的基本特征。对continuous data,使用histogram,对categorical data,使用bar chart。

参考:
Exploratory_data_analysis

Text Representation(文本表示)

Distributed Representations(分布式表示)

前述几种基本表示法有着明显的缺陷,比如:

  • 它们都是离散化表示,即把语言单位(词、ngrams等)视为原子单位,因此不能捕捉到词之间的关系
  • 特征向量是稀疏和高维的表示,维度与词汇表大小一致,从而导致向量的绝大部分元素为0,这一结果不利于学习,也使得计算过程颇为低效
  • 不能有效处理未登录词

因此需要能够学习到低维向量表示的新方法,这些方法在过去六七年(2013年开始)中得到了迅速发展。它们使用NN架构创建出稠密(而非稀疏)的、低维(而非高维)的词与文本的表示。了解这些方法之前,需要先了解分布语义学。

Distributional Semantics(分布语义学)

分布语义学是基于语言项(linguistic items)在大量语言数据上的分布性质,对其相关性进行量化与分类的一系列理论与方法。它的基本思想基于所谓的分布假设:具有相似分布的语言项也具有相似的语义。

Distributional Hypothesis

分布假设背后的思想是:”a word is characterized by the company it keeps“(Firth 1950s)。分布假设是统计语义学的基础。

孩子在学习语言时,对于未见过的词,仍然可以正确使用,也是基于此假设(通过已了解词的用法去泛化)。

Distributional Similarity(分布相似度)

它的要义是:词的语义可通过其上下文来理解。

可以理解为:两个词在分布上越相似,其语义即越相似。

Distributional Representation(分布表示)

获取一个词在”分布“意义上的向量表示。

村中有一个大龄单身男青年,相亲屡次失败,一家人为此都很是拿急。说起来,失败的原因不是因为太穷,或者太矮、太土,只是因为他的嘴实在有些大。

一天,村里一位大姐来家里耍,聊起了相亲的事儿,便问:“你和那些闺女一般都拉些什么?”他说,就是家常啊,不知道为什么就是不行。一次典型的聊天可能是这样的:

女:你属什么?
男:属马。
女:你喜欢吃什么?
男:吃瓜(地瓜)。
女:那你喜欢看什么?
男:看花。

大姐听了,沉吟了一会儿说:“这样,以后你就这么说:我属虎、喜欢吃红薯、喜欢看竹。”

很快,下一次相亲机会来了,在女方家里。男青年按大姐的指点一一作答,没有什么破绽,大家都挺满意的。女方留男青年在家吃午饭,吃饺子。不巧的是,家里醋没了,吃饺子可不能没有醋啊,男青年主动提出去打醋。

过了一会儿,男青年端着一碗醋回来了,奇怪的是只有小半碗儿。那个闺女问起原因,男青年说:“本来是打了满满的一碗,都洒咯。”

前几天生日时,和我娘聊起来一个人,他的有点儿戏剧性的故事,让我想起来他也算是儿时伙伴之一了。

在村子里,不止是与村外联系少,村内也是如此,当时一起耍的,也只限于邻近家同龄的孩子。其中有一个打我一岁的,小名俩字和我的是反过来的,姑且称他为 H。

H 属于对学习毫无兴趣的那种,但算是比较灵头(灵活的头脑之意)的,形貌也高于均值。很早就到市里厮混,相形之下颇有些见识,我初中时的一盘流行歌曲正版磁带,就是从他那里拿到的。多年之后回忆起来,里面还有一首《黑梦》。印象中的样子是,他见到你,露出笑容,跟你开几句玩笑,满嘴”油腔滑调“。

小学时,为解决灌溉问题,村里集资在小河流经处挖了一个大坑,人称”大湾“,号称有十米之深。这里成为当时孩子们渴望去探索的地方,虽然基本上都不会真正地游泳。听闻有一次,他带着一群孩子去游泳,一个孩子游到中间开始往下沉,呼喊救命,他赶紧跳下去,把那个孩子救了上来。后来孩子的父母送去一筐水果作为答谢。

曾跟随他偷过葡萄、海棠果、苹果之类,至于为何没偷其它水果,只是因为附近没有种的。但他还偷钱,这似乎是性质严重得多的事情。

上了高中之后,我再也没有偷过东西,和他也很少会见面。听说,有个女孩子喜欢她,趄(ju)着他不走,他不太喜欢她,不过后来他们还是结婚了。

如果他此后变得安分,也有点浪子回头的意味了,但是没有。听说,他伙同姨妈的表兄弟及邻村的一人,去绑架了当地某厂长的母亲。不知细节如何,但结果是正好一辆车过来,轧死了老太太,他不得不承担这一切。

他被带走的那个夜晚,他的儿子也出生了,我想当时应该是大雨如注吧。

从前,有一个村妇,独自抚养着两个孩子——姐姐和弟弟。

有一天,村妇领着弟弟回娘家,让姐姐在家看门儿,临走前嘱咐说,不要给其他人开门。

半路上到了一个桥头,娘俩坐下来歇息。这时,走过来一个妖精。妖精说:“大姐,我给你看看头上有没有虱子吧”,村妇同意了。妖精开始边看虱子,边与村妇闲谈,然后,就一指甲一指甲把她吃掉了。

天黑的时候,妖精找到了村妇的家门前,敲了三下门。姐姐便问:“你是谁?不是我娘的话,我可不开门。” 妖精回答说:“我是你娘啊。”姐姐说:“你声音这么粗,不是我娘。” 妖精说:”路远口渴,声音变沙哑了。“姐姐说:”你伸过脚来我看看。“ 妖精便从门下的缝隙伸过脚去。姐姐说:”你脚这么大,不是我娘。”妖精说:“脚大是走路拍的。” 姐姐说:”你再伸过手来我看看。“ 妖精便从门缝中伸过手去。姐姐说:”你手这么大,不是我娘。”妖精说:“手大是走路甩的。”于是,姐姐开了门。

晚上,“两人”通腿睡下。半夜里,姐姐醒来,听到床那头有吃东西的声音,便说:”娘,你在吃什么?“ 妖精说:”我在吃萝卜。“ 姐姐说:”我也想吃。“ 妖精就扔了一块儿过来,姐姐一看,吓了一跳,竟然是弟弟的手指,就明白妖精做了什么了。

第二天晚上,隔壁家灯火通明,很是热闹。姐姐说:”娘,快来看啊,大爷家的哥哥在结婚哩,很热闹。“妖精说:“墙那么高,看不见啊”。姐姐说:“我在树上栓了一把椅子,把你拉上去。”姐姐没说的是,她还偷偷把一个烧得很烫的鏊子放在了椅子上。妖精走出屋来,一坐上椅子,姐姐就迅速把椅子拉了上去,妖精就这样烫死了。

NLP实战

Chatbot Recurrent Pipeline

  1. Parse: tokenizer, NER, extract info., reduce dim
  2. Analyze: spelling, grammar, sentiment, humanness, CNN, GAN
  3. Generate: search, templates, FSM, RNN…
  4. Execute: generate & classify…

2013年之后,NLP和聊天机器人的应用变得日益广泛,如愈来愈智能的Google Search、智能手机的自动完成功能。Gmail的Smart Reply令作者印象深刻。

从经典的马尔科夫链(词频、ngrams、条件概率等),可以实现一些颇为有用的功能,如Peter Norvig的spelling corrector

PS:Peter的文章2016年有更新,或许会有新的启发,文章主要涉及传统的基于统计的语言模型。

接下来是隐语义分析(Latent Semantic Analysis, LSA),大致是持续跟踪那些共现的词,从而可将这些词归为topic。LSA将句子或文档的意思压缩为一个向量。

gensim库实现了Word2vec词向量,可将

第一部分 善谈的机器

1-4章

Ch01 NLP概述

Ch02 构建词汇表(Tokenizer)

Ch03 关于词的数学(TF-IDF)

Ch04 词频蕴含的意义(Semantic Analysis)

第二部分 深度学习

5-10章

Ch05 初识神经网络(感知机与反向传播)

Ch06 以词向量推理(Word2Vec)

Ch07 卷积神经网络(CNN)

Ch08 循环神经网络(RNN)

Ch09 LSTM

Ch10 Seq-to-seq模型

第三部分 来到现实世界

11-13章

Ch11 信息提取(NER与问题回答)

Ch12 对话引擎

Ch13 Scaling up

架构

spaCy的核心数据结构是DocVocabDoc对象持有token序列及其标注(annotation)信息,Vocab对象则持有一个查找表(look-up table),从而可在文档间共享信息。集中管理字符串、词向量与词法属性,避免了反复copy数据。

文本标注也是类似,Doc持有数据,SpanToken只是它的视图。DocTokenizer构建,之后通过pipeline原地修改(modified in place)。Language对象协调以上诸组件,它接受原始文本,将其送入pipeline,返回一个标注了的文档,同时也参与了模型训练和序列化过程。

容器对象

  • Doc:包含语言标注的容器
  • Span:表示Doc的一个切片
  • Token:单个token,如词、标点、空格等
  • Lexeme:词位,词汇表的一个entry,不带任何上下文信息,因此也没有POS。

Pipeline

  • Language
  • Tokenizer
  • Lemmatizer
  • Tagger
  • Matcher
  • PhraseMatcher
  • EntityRuler

其它类

  • Vocab
  • StringStore
  • Vectors

弗洛姆是德裔美籍心理学家,第一个研究“爱”和“爱的能力”的学者,除了《爱的艺术》,还有另一著作《逃避自由》。


一、爱是一门艺术吗?

爱是艺术,如绘画、木工,这意味着它需要去学习,努力学习。但也有人认为,爱不是艺术,而是一种偶然产生的令人心荡神怡的感受。如果是后者,那么爱不可学习,也不需要学习。

Read more »
0%