Комментарии 9
На Rust написаны токенизаторы из популярной ныне библиотеки Transformers от HuggingFace. Для меня это отличный пруф того, что совмещение Python и Rust может стать стандартом в ML-библиотеках.
О, я видел эту библиотеку, говнокода там хватает.
Неужели Питер планирует издать какую-то книгу по Rust'у?
Думаю, года с 2015)
увидев код, что-то вызвало у меня сомнение в честности результатов.
Итог:
отличия ну точно не в сотни раз.
Увы, повторить эксперимент с рустовской библиотекой я так и не смог. Но, что то мне подсказывает, что цифры будут не столь оптимистичны.
import math
def compute_entropy_pure_python(data):
"""Compute entropy on bytearray `data`."""
counts = [0] * 256
entropy = 0.0
length = len(data)
for byte in data:
counts[byte] += 1
for count in counts:
if count != 0:
probability = float(count) / length
entropy -= probability * math.log(probability, 2)
return entropy
from math import log
from collections import Counter
def compute_entropy_my_python(data):
"""Compute entropy on bytearray `data`."""
length = float(len(data))
counts = (count / length for count in Counter(bytes(data)).values())
return sum(-pro * log(pro, 2) for pro in counts)
from numpy import bincount, random, uint8
from scipy.stats import entropy
def compute_entropy_scipy_numpy(data):
"""Вычисляем энтропию bytearray `data` с SciPy и NumPy."""
counts = bincount(bytearray(data))
return entropy(counts, base=2)
from time import process_time
NUM = 1000000
VAL = random.randint(0, 256, size=(NUM, ), dtype=uint8)
if __name__ == '__main__':
start = process_time()
print(compute_entropy_pure_python(VAL))
print(process_time() - start)
start = process_time()
print(compute_entropy_my_python(VAL))
print(process_time() - start)
start = process_time()
print(compute_entropy_scipy_numpy(VAL))
print(process_time() - start)
Итог:
(projects) C:\projects>python pure_python.py 7.999802815300323 - стат энтропия
0.390625 - это скорость кода из статьи
7.999802815300329 - стат энтропия
0.09375 - это скорость нормального python кода
7.999802815300324 - стат энтропия
0.015625 - это скорость c nympy
отличия ну точно не в сотни раз.
Увы, повторить эксперимент с рустовской библиотекой я так и не смог. Но, что то мне подсказывает, что цифры будут не столь оптимистичны.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
О нет! Моя Data Science ржавеет