A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
1–10 of 17 posts
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#2Learning what it stands for* wasn't particularly helpful in this case, but defining the term would've kept me on your page.
*K-Singular Value Decomposition
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#3Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#4To the authors: Please expand your acronyms at least once! I had to stop reading to figure out what "KSVD" stands for. Learning what it stands for* wasn't particularly helpful in this case, but defining the term would've kept me on your page. *K-Singular Value Decomposition
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#5To the authors: Please expand your acronyms at least once! I had to stop reading to figure out what "KSVD" stands for. Learning what it stands for* wasn't particularly helpful in this case, but defining the term would've kept me on your page. *K-Singular Value Decomposition
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#6Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#7KSVD Algorithm: https://legacy.sites.fas.harvard.edu/~cs278/papers/ksvd.pdf
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#8https://www.youtube.com/watch?v=Z6s7PrfJlQ0&t=3084s
It's 4 years old and seems to be a bit of a hidden gem. Someone even pipes up at 1:26 to say "This is really cool. Is this written up somewhere?"
[snapshot of the code shown]
%%time
cooc = vectorizers.TokenCooccurrenceVectorizer(
window_orientation="after",
kernel_function="harmonic",
min_document_occurrences=5,
window_radius=20,
).fit(tokenized_news)
context_after_matrix = cooc.transform(tokenized_news)
context_before_matrix = context_after_matrix.transpose()
cooc_matrix = scipy.sparse.hstack([context_before_matrix, context_after_matrix])
cooc_matrix = sklearn.preprocessing.normalize(cooc_matrix, norm="max", axis=0)
cooc_matrix = sklearn.preprocessing.normalize(cooc_matrix, norm="l1", axis=1)
cooc_matrix.data = np.power(cooc_matrix.data, 0.25)
u, s, v = scipy.sparse.linalg.svds(cooc_matrix, k=160)
word_vectors = u @ scipy.sparse.diags(np.sqrt(s))
CPU times: user 3min 5s, sys: 20.2 s, total: 3min 25sWall time: 1min 26s
Re: A 20-Year-Old Algorithm Can Help Us Understand Transformer Embeddings
#9Basically find the primary eigenvectors.
In sparse coding, you're generally using an over-complete set of vectors which decompose the data into sparse activations.
So, if you have a dataset of hundred dimensional vectors, you want to find a set of vectors where each vector is well described as a combination of ~4 of the "basis" vectors.