Babblelab
实验背景
“图灵测试”是指测试者在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。
本实验设计了一个算法,使得机器能够通过图灵测试。即通过对所提供的文本进行分析,根据每个词之后的一定词数范围内的词出现的频率决定机器所给出的一句话之中下一个词是什么。本实验中提供了莎士比亚的作品,以达到机器能够“写诗”的目的。
实验细节
1.SEQUENCE_UTIL
1.1String Tokens
tokens : (char -> bool) -> string -> string seq
函数功能:
返回所给字符串当中的不含给定字符的全部最大非空子串
函数代码:
val cp=not o Char.isAlphaNum
fun tokens (cp : char -> bool) (str : string) : string seq =
let
val n = String.size str
val chars = tabulate (fn i => (i, String.sub (str, i))) n
val idx = map (fn (i,_) => i) (filter (fn (_,c) => cp c) chars)
(* grab substrings in between delimiters *)
val subs = map2 (fn (i,i') => String.substring (str, i, i' - i))
(append (singleton 0, map (fn i => i + 1) idx))
(append (idx, singleton n))
in filter (fn s => size s > 0) subs
end
1.2Histograms
1.2.1 histograms
type 'a hist = ('a * int) seq
val histogram : 'a ord -> 'a seq -> 'a hist
函数功能:
返回一个(key,num)二元组构成的串,其中num为key在所给seq中出现的频次
函数代码:
fun histogram (cmp : 'a ord) (s : 'a seq) : 'a hist =
map (fn (a, c) => (a, length c))
(collect cmp (map (fn a =