Joblib and multiprocessing

Joblib and multiprocessing

Joblib

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from joblib import Parallel, delayed
import numpy as np

def square(x):
"""Return the square of a number."""
return x ** 2

if __name__ == '__main__':
# Create an array of numbers
numbers = np.arange(10)
# use all available cores
n_jobs = -1
jobs = len(numbers)

# Use joblib to parallelize the square function
tasks = (delayed(square)(i) for i in numbers)
batch_size = max(1, (jobs + n_jobs - 1) // n_jobs)
results = Parallel(n_jobs=n_jobs, batch_size=batch_size)(tasks)

print(results)

这里的batch_size是指每个任务的大小. 如果任务太少, 那么batch_size至少为1, 如果任务太多, 那么batch_size就是任务数除以核数, 向上取整.

Multiprocessing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import multiprocessing as mp
import numpy as np

def square(x):
"""Return the square of a number."""
return x ** 2

if __name__ == '__main__':
# Create an array of numbers
numbers = np.arange(10)
# use all available cores
n_jobs = -1
jobs = len(numbers)

# Use multiprocessing to parallelize the square function
pool = mp.Pool(processes=n_jobs)
results = pool.map(square, numbers)

print(results)

用pool.map来并行化任务.

sparse.csr_matrix

sparse.csr_matrix

1
2
3
4
5
6
from scipy import sparse
data = np.array([1, 2, 3, 4, 5, 6]) #所有非零数值
indices = np.array([0, 2, 2, 0, 1, 2]) #所有值的列索引
indptr = np.array([0, 2, 3, 6]) #每行的非零数据 data[i:i+1]
mtx = sparse.csr_matrix((data,indices,indptr),shape=(3,3))
mtx.todense()
1
2
3
matrix([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
  • data:所有非零数值
  • indptr:每行的非零数据 data[i:i+1] : 相当于每行的非零数值的个数, 把data的值做分组, 每组的开头结尾索引
  • indices:所有值的列索引

umount disks

umount disks

  • If 占用
    • df -lh
    • sudo umount /dev/**
    • sudo kill ***

$$\mu_{fg} = \mu_g - \mu_f$$
$$\Sigma_{fg} = \Sigma_f + \Sigma_g$$
$$\mu_{fg}^T \Sigma_{fg}^{-1} \mu_{fg}$$
$$\det(\Sigma_{fg})$$
$$\Sigma_{fg}^{-1}$$
$$\frac{1}{\sqrt{\det(\Sigma_{fg})}}$$
$$\frac{1}{\sqrt{\det(\Sigma_{fg})}}$$

一周计划

一周计划

  1. Canada Court 强制令
    1. 问香港IRCC no reason的对应编号是不是改过的
    2. 强制令第二步
  2. 两个gradient能否分到一类
  3. 做初步实验
  4. 游泳
  5. 门诊开💊

共现概率

共现概率

这个式子是约束信息理论共聚类(CITCC)中用来逼近 $p(d_m, v_i)$ 的函数 $q(d_m, v_i)$ 的定义。其中,$\hat{d}{k_d}$ 和 $\hat{v}{k_v}$ 是文档和单词的聚类标签(即属于哪个聚类),$k_d$ 和 $k_v$ 分别表示文档和单词的聚类索引。$p\left(\hat{d}{k_d}, \hat{v}{k_v}\right)$ 表示文档和单词的聚类的联合概率。$p(d_m \mid \hat{d}{k_d})$ 表示给定文档聚类标签 $\hat{d}{k_d}$ 的条件下,文档 $d_m$ 出现的条件概率。$p(v_i \mid \hat{v}{k_v})$ 表示给定单词聚类标签 $\hat{v}{k_v}$ 的条件下,单词 $v_i$ 出现的条件概率。该式子的含义是:通过联合文档和单词的聚类标签来计算文档 $d_m$ 和单词 $v_i$ 的共现概率,从而逼近真实的概率分布 $p(d_m, v_i)$。

Problem Formulation
Denote the document set and word set as $\mathcal{D}=$ $\left{d_1, d_2, \ldots, d_M\right}$ and $\mathcal{V}=\left{v_1, v_2, \ldots, v_V\right}$. Then the joint probability of $p\left(d_m, v_i\right)$ can be computed based on the cooccurrence count of $d_m$ and $v_i$. For hard clustering problems, shown by Dhillon, Mallela, and Modha (2003), a function
$$
q\left(d_m, v_i\right)=p\left(\hat{d}{k_d}, \hat{v}{k_v}\right) p\left(d_m \mid \hat{d}{k_d}\right) p\left(v_i \mid \hat{v}{k_v}\right)
$$
where $\hat{d}{k_d}$ and $\hat{v}{k_v}$ are cluster indicators, $k_d$ and $k_v$ are the cluster indices, is used to approximate $p\left(d_m, v_i\right)$ by minimizing the Kullback-Leibler (KL) divergence:
$$
\begin{aligned}
& D_{K L}(p(\mathcal{D}, \mathcal{V}) | q(\mathcal{D}, \mathcal{V})) \
= & D_{K L}(p(\mathcal{D}, \mathcal{V}, \hat{\mathcal{D}}, \hat{\mathcal{V}}) | q(\mathcal{D}, \mathcal{V}, \hat{\mathcal{D}}, \hat{\mathcal{V}})) \
= & \sum_{k_d}^{K_d} \sum_{d_m: l_{d_m}=k_d} p\left(d_m\right) D_{K L}\left(p\left(\mathcal{V} \mid d_m\right) | p\left(\mathcal{V} \mid \hat{d}{k_d}\right)\right) \
= & \sum
{k_v}^{K_v} \sum_{v_i: l_{v_i}=k_v} p\left(v_i\right) D_{K L}\left(p\left(\mathcal{D} \mid v_i\right) | p\left(\mathcal{D} \mid \hat{v}{k_v}\right)\right)
\end{aligned}
$$
where $\hat{\mathcal{D}}$ and $\hat{\mathcal{V}}$ are the cluster sets, $p\left(\mathcal{V} \mid \hat{d}
{k_d}\right)$ denotes a multinomial distribution based on the probabilities $\left.\left(p\left(v_1 \mid \hat{d}{k_d}\right), \ldots, p\left(v_V \mid \hat{d}{k_d}\right)\right)^T, \quad p\left(v_i \mid \hat{d}{k_d}\right)\right)=$ $p\left(v_i \mid \hat{v}{k_v}\right) p\left(\hat{v}{k_v} \mid \hat{d}{k_d}\right)$ and $p\left(v_i \mid \hat{v}{k_v}\right)=p\left(v_i\right) / p\left(l{v_i}=\hat{v}{k_v}\right)$ due to hard clustering labels. Symmetrically we can define the probability for words: $p\left(\mathcal{D} \mid \hat{v}{k_v}\right)$ denotes a multinomial distribution based on the probabilities $\left.\left(p\left(d_1 \mid \hat{v}{k_v}\right), \ldots, p\left(d_V \mid \hat{v}{k_v}\right)\right)^T, \quad p\left(d_i \mid \hat{v}{k_v}\right)\right)=$ $p\left(d_i \mid \hat{d}{k_d}\right) p\left(\hat{d}{k_d} \mid \hat{v}{k_v}\right)$ and $p\left(d_i \mid \hat{d}{k_d}\right)=p\left(d_i\right) / p\left(l{d_i}=\hat{d}_{k_d}\right)$.

这里 $\hat{d}{k_d}$ 和 $\hat{v}{k_v}$ 都是指示器变量,用于表示文档和词汇所属的簇。具体来说,$\hat{d}{k_d}$ 表示第 $k_d$ 个簇,$\hat{v}{k_v}$ 表示第 $k_v$ 个簇。因此,$\hat{d}{k_d}$ 和 $\hat{v}{k_v}$ 的取值为 ${0,1}$,其中 $\hat{d}{k_d} = 1$ 表示文档 $d_m$ 属于第 $k_d$ 个簇,$\hat{v}{k_v} = 1$ 表示词汇 $v_i$ 属于第 $k_v$ 个簇。而 $p(\hat{d}{k_d}, \hat{v}{k_v})$ 则表示簇 $\hat{d}{k_d}$ 和 $\hat{v}{k_v}$ 同时出现的概率。

假设我们有两个文档和三个词汇,它们的共现情况如下表所示:

Word 1 Word 2 Word 3
Doc 1 2 3 1
Doc 2 0 1 3

现在我们要将这些文档和词汇聚类成两个簇。我们可以将 $\hat{d}{k_d}$ 和 $\hat{v}{k_v}$ 初始化为随机值。例如,我们可以假设第一个文档属于第一个簇,第二个文档属于第二个簇,第一个词汇属于第一个簇,第二个词汇和第三个词汇属于第二个簇,即:

$$
\hat{d}{1}=1, \hat{d}{2}=0, \hat{v}{1}=1, \hat{v}{2}=0, \hat{v}_{3}=0 $$

然后,我们可以使用公式 $q(d_m, v_i) = p(\hat{d}{k_d}, \hat{v}{k_v}) p(d_m \mid \hat{d}{k_d}) p(v_i \mid \hat{v}{k_v})$ 来计算每个文档和词汇属于每个簇的概率。例如,对于第一个文档和第一个词汇,它们属于第一个簇的概率为:

$$\begin{aligned} q(d_1, v_1) &= p(\hat{d}{k_d}, \hat{v}{k_v}) p(d_m \mid \hat{d}{k_d}) p(v_i \mid \hat{v}{k_v}) \ &= p(\hat{d}{1}, \hat{v}{1}) p(d_1 \mid \hat{d}{1}) p(v_1 \mid \hat{v}{1}) \ &= p(\hat{d}{1}=1, \hat{v}{1}=1) p(d_1 \mid \hat{d}{1}=1) p(v_1 \mid \hat{v}{1}=1) \ &= ? \times ? \times ? \end{aligned}$$
其中,$p(\hat{d}{1}, \hat{v}{1})$ 表示第一个文档和第一个词汇同时属于第一个簇的概率,$p(d_1 \mid \hat{d}{1})$ 表示第一个文档属于第一个簇的条件概率,$p(v_1 \mid \hat{v}{1})$ 表示第一个词汇属于第一个簇的条件概率。这些概率需要根据先前的簇标签和统计信息来计算。

这段文字描述了一种基于硬聚类的文档和词汇聚类方法。文档集合和词汇集合分别用$\mathcal{D}$和$\mathcal{V}$表示。根据文档$d_m$和词汇$v_i$的共现次数计算它们的联合概率$p\left(d_m, v_i\right)$。为了解决硬聚类问题,Dhillon, Mallela和Modha(2003)提出了一个函数$q\left(d_m, v_i\right)$来近似$p\left(d_m, v_i\right)$,并通过最小化Kullback-Leibler(KL)散度实现。

在这个函数中,$\hat{d}{k_d}$和$\hat{v}{k_v}$是聚类指示器,而$k_d$和$k_v$是聚类索引。$\hat{\mathcal{D}}$和$\hat{\mathcal{V}}$表示聚类集合。$p\left(\mathcal{V} \mid \hat{d}{k_d}\right)$表示一个基于概率的多项分布,这些概率由硬聚类标签得出。对于词汇,我们可以对称地定义概率:$p\left(\mathcal{D} \mid \hat{v}{k_v}\right)$表示一个基于概率的多项分布。

单词

单词

  • clutch 抓紧 clutch a stuffed animal
  • twirl 旋转
  • reciprocal 相互的
  • veteran 老手
  • chortle 咯咯笑
  • savoir faire 鬼崇玲珑
  • rinse 漂洗
  • shack 棚屋
  • rebuke 指责
  • adolescence 青春期
  • indulge 放纵
  • stoop 门廊 门槛
  • bodegas 酒窖
  • retrospect 追溯
  • avert 防止 避免
  • disinclination 不情愿
  • adhere 坚持 粘着 依附
  • peck 啄食
  • status quo 现有状态
  • surmise 推测才得
  • in drag 性别变装
  • intrepid 无畏的 勇敢的
  • contestant 竞赛者
  • introspective 内省
  • stunt 噱头
  • loath 不情愿的
  • frill 褶边
  • ranch hand 牧场工人
  • diaper 尿布
  • clarinet 单簧管
  • covet 垂涎
  • cane 手杖
  • scamper 蹦蹦跳跳
  • lurk 潜伏
  • swindle 诈骗
  • malingerer 装病者
  • pushover 容易被说服的人
  • labyrinth 迷宫
  • cortex 皮层
  • phasmid 竹节虫
  • remuneration 酬金
  • mitigate 减轻
  • partake 参与

写一个transformer

写一个transformer

wsl vscode tab 变成移动焦点了,似乎关闭了tab的vim绑定解决了?
https://blog.csdn.net/mrbone11/article/details/100037354

  1. wget <https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin>
  2. sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
  3. wget <https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb>
  4. sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
  5. sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
  6. sudo apt-get update
  7. sudo apt-get -y install cuda