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 => (a, ())) s))
1.2.2 Choose
val choose : 'a hist -> real -> 'a
函数功能:
对于给定的频率p,函数返回hist中出现频率等于p或者大于且最接近p的元素
实现思路:
先通过PerCentage函数将每个元素出现的频次转化为累加频率,其后通过二分查找法搜索即可,例如:
h = 〈(“a”,3),(“b”,5),(“c”,2)〉.
“a” 0.3
“b” 0.8
“c” 1.0
函数代码:
fun PerCentage hist =
let

本文介绍了如何设计一个算法使机器通过图灵测试,该算法基于莎士比亚作品,通过对文本分析预测下一个词,实现类似“写诗”的效果。实验详细讨论了SEQUENCE_UTIL模块,包括字符串处理和直方图计算,以及K-Gram Stats部分的统计方法和随机句子生成。
最低0.47元/天 解锁文章
3924

被折叠的 条评论
为什么被折叠?



