优化散布操作的pytorch扩展库
flexi-hash-embedding的Python项目详细描述
这个PyTorch模块对 将功能嵌入到单个固定大小的嵌入中。 特性键是散列的,它 是流媒体环境和在线学习的理想选择 这样我们就不必记住 特征键和索引之间的映射。 多个可变长度特征按示例分组 然后总结特征嵌入按其 值,启用线性功能而不仅仅是一个 特征。
使用美妙的torch scatter library和sklearn的特性散列在引擎盖下。
例如:
>>>fromflexi_hash_embeddingimportFlexiHashEmbedding>>>X=[{'dog':1,'cat':2,'elephant':4},{'dog':2,'run':5}]>>>embed=FlexiHashEmbedding(dim=5)>>>embed(X)tensor([[1.0753,-5.3999,2.6890,2.4224,-2.8352],[2.9265,5.1440,-4.1737,-12.3070,-8.2725]],grad_fn=<ScatterAddBackward>)
示例
通常,我们会有单个事件或用户的数据 例如,在json blob格式中 可能丢失、不完整或从未见过的特征。 此外,可能定义了数量可变的特征。 这个用例非常适合于特性散列和groupby求和。 特征嵌入
在这个例子中,我们在整个数据集中总共有六个特性, 但是我们计算三个向量,每个输入行一个:
在上面的例子中,我们一共有六个特性,但是
分布在三个客户身上第一个客户端有三个活动的
功能,第二个客户端两个功能
(并且只有一个特性与第一个客户机重叠)
第三个客户端有一个活动的特性。
Flexi Hash Embeddings
返回三个向量,每个客户机一个,
即使有六个特征,也不是六个向量。
第一个客户的向量是三个特征向量的和
(加国旗、年龄、豪华国旗)
而第二个客户的向量只是两个特征向量的和
(lppish,豪华旗子)
第三个客户的向量只是一个单一的特征。
速度
在线功能hasing和groupby相对较快。 对于大批量4096,平均每行5个功能 等于20000个功能。这个模块将散列许多特性 在现代MacBook Pro上大约20毫秒。
安装
从pypi dopip install flexi-hash-embedding
通过执行git@github.com:cemoody/flexi_hash_embedding.git
在本地安装。
测试
>>> pip install -e . >>> py.test
要发布新的包版本,请执行以下操作:
python3 setup.py sdist bdist_wheel twine upload dist/* pip install --index-url https://pypi.org/simple/ --no-deps flexi_hash_embedding