句子长度递减:大模型生成文本的有趣发现
我们在最近的一项工作中发现,大模型生成文本的长度有随句子位置递减的趋势——且这一趋势与人类文本有所不同。
简单来说,在文档(wiki)、新闻(news)这类“正经”的文本上,人类“手写”文本的句子长度变化比较平缓,模型生成文本的句子长度的变化则较陡峭。
但是在小说(novel)类文本上,人类与模型没有明显差别:句子长度均呈陡峭的下降趋势。
或许,对撰写 wiki 文档这种知识专业性较强的写作任务,大脑的工作负荷较为均衡,因而句子长度更加一致;而在小说创作这种需要创意的“轻松”的任务,我们更倾向于偷懒——越写越短 :-)
…傅里叶分析(Fourier analysis)基础(2)——Python实现
接着上一篇《傅里叶分析(Fourier analysis)基础(1)——理论》,我们选取scipy.fft)来进行傅里叶分析。
使用 scipy.fft
做傅里叶分析
为了统一符号,接下来我们在notebook中都使用小写变量 $x$ 表示时域信号(函数),大写变量 $X$ 表示频域表征。
首先定义一段时域长度为 $N$ 的时域信号($N=12$):
>>> import numpy as np
>>> N = 12
>>> x = np.arange(N)
>>> x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
接下来,使用scipy.fft
进行离散傅里叶转换:
>>> from scipy.fft import fft
>>> X = fft(x)
>>> X
array([66. -0.j , -6.+22.39230485j, -6.+10.39230485j,
-6. +6.j , -6. +3.46410162j, -6. +1.60769515j,
-6. -0.j , -6. -1.60769515j, -6. -3.46410162j,
-6. -6.j , -6.-10.39230485j, -6.-22.39230485j])
>>> len(X)
12
可见,离散傅里叶变换得到的频域表征 $X$ 与时域信号 $x$ 长度相等,$N=12$。每个频率分量 $X_k$ 都是复数,可表示成 $X_k=a+b\cdot j$ 的形式($k=0,2\dots 11$)。例如,$X_1=-6+22.39j$。
…傅里叶分析(Fourier analysis)基础(1)——理论
傅里叶分析的主要功能是把时域(time domain)信号转换到频域(frequency domain)。翻开高等数学或信号处理的教科书,或者在维基百科搜索“Fourier transform”,很容易找到这样的公式:
$$ {\hat {f}}(\xi )=\int _{-\infty }^{\infty }f(x)\ e^{-i2\pi \xi x}\ dx.\label{eq:1}\tag{1} $$
$f(x)$ 是时域信号,$\hat f(\xi)$描述对应的频域分量。$x$表示时间,$\xi$表示频率;若前者单位为秒 sec,则后者单位为赫兹 Hz。
但是这里 $f(x)$ 的定义域是无限的连续域,我们很难直接上手研究它。在全民 Jupyter Notebook 的时代,我们希望 $f(x)$是长成这样的:
f = [1.2, 1.3, 2.0, ..., 0.8, 0.9]
这样我们就可以把段有限长度的数组作为时域信号,输入给某个实现了傅里叶转换的软件包,就能得到想要的频率分量了——简单而美好。但是为了实现这个美好的愿望,我们必须把问题定义得更明确:用有限领取代 $(-\infty,\infty)$;用加和$\Sigma$取代积分$\int$;… 所以最终我们要采用的方法,并非原本的傅里叶变换,而是其离散模式 Descrete Fourier Transform (DFT)。
关于为何选取DFT,斯坦福大学音乐与声学计算研究中心 Julius O. Smith III 教授编写的《频谱音频信号处理》(SPECTRAL AUDIO SIGNAL PROCESSING)在线教科书中,提供了非常清晰的指导(原文链接):
表中左上角象限是适用于我们的需求的——时域和频域均为离散且有限。其中,$x(n)$对应 Eq.(1) 中的时域信号$f(x)$,$X(k)$对应频域表征$\hat{f}(\xi)$。这个公式和维基百科“离散傅里叶变换”页面给出的公式 Eq.1 也是一致的:
$$ X_{k}=\sum _{n=0}^{N-1}x_n\cdot e^{-\frac{i2\pi}{N}kn}\label{eq:2}\tag{2} $$
…AI与中小学教育讲座 - 2023年7月
Read more ⟶
使用ssh钥匙远程登录Linux服务器
第1步:生成ssh公钥和私钥
在本地电脑(MacOS 或者 Linux)的命令行中使用:
ssh-keygen
这样就生成了一对私钥和公钥,其默认存储位置为~/.ssh
。该目录下的id_rsa
为私钥,id_rsa.pub
为公钥。此公钥就是用来远程登录的“钥匙”。
第2步:将公钥拷贝到远程服务器
参考此教程 Digital Ocean: How To Configure SSH Key-Based Authentication on a Linux Server。几种方法均可行:
- 自动拷贝:
$ ssh-copy-id username@server_address
将直接把你的 id_rsa.pub 文件内容拷贝到服务器的 ~/.ssh/authorized_keys 文件中。 - 半自动拷贝:
cat ~/.ssh/id_rsa.pub | ssh username@server_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
- 手动拷贝:在本地打开 id_rsa.pub 拷贝其内容,用 ssh 远程登录后用文本编辑器新建或者编辑 ~/.ssh/auhtorized_keys,将拷贝内容添加进去。
第3步:登录
此时在本地打开命令行,远程登录服务器:
ssh username@server_address
现在不需要手动输入密码就能直接登录了!
…