CryptGPT: A Simple Approach to Privacy-Preserving LLMs Using Vigenere Cipher
huggingface.co
huggingface.co
Can someone smarter than me explain why an embedding is or isn't a poor man's form of encryption? You can retrieve the closeness to something using cosine similarity, but you can't go back to the original source (unless you store the embedding side by side, which is what most people do with those vectors).
But, isn't using an embedding model a good way to cloak your original data and still make it comparable?
Given a set of vectors resulting from an embedding model, it’s cheap & easy to check if a certain document is similar to the original source, as you just run the embedding on the comparison document and choose your favorite similarity metric.
However it’s very hard to recreate the source itself — as far as I can tell, you’d basically have to run a very expensive form of blind gradient descent: generate multiple texts, run embedding on them, check similarity, pick the closest one, and repeat with that text as the starting point.
Maybe someone can correct me if there exists an efficient way of reconstructing the original text. I would be very interested to know.
Edit: I appear to have just described a super naive and slow implementation of vec2text (see sibling comment). Will have to read that paper in more detail but it looks really cool.
Computing output embeddings is different.
I suspect it wouldn't work with anything that actually prevents people from "decrypting" it.
Now that the approach is clearly viable, I am going to extend it to use a modern cipher like XChacha20 which is a gold standard.
It preserves privacy by essentially making the inputs and outputs unreadable.