News for hackers. Stuff that matters.
Re:You Should Probably Pay Attention to Tokenizers by kelseyfrog on Wednesday October 23, 2024 @12:45PM (#41926790)
Tokenizers aren't considered the "sexy" part of LLMs, but where others see boring, I see opportunity. Papers like xVal[1], point toward specialization strategies in tokenization. Spelling and letter tasks are another problem that could benefit from innovation on the tokenization.

LLMs are notoriously bad at counting letters in words or performing simply oulipos of letter omission. GPT-4o, for example, writes a small python program and executes it in order to count letter instances. We all know that tokenization effectively erases knowledge about letters in prompts and directly negatively impacts performance at these tasks, yet we haven't found a way to solve it.

1. https://ar5iv.labs.arxiv.org/html/2310.02989

Re:You Should Probably Pay Attention to Tokenizers by bunderbunder on Wednesday October 23, 2024 @04:05PM (#41928821)
This was ages ago, in the pre-transformer era, and I can't find the link anymore. But once upon a time I read a great paper that demonstrated that most of the performance differences being reported among popular embedding models of the time were better explained by text cleaning and tokenization than they were by the embedding model itself.

In other words, if you train a model using word2vec's preprocessing and GloVe's algorithm, the result looks more like a "standard-issue" word2vec model than a "standard-issue" GloVe model.

Re:You Should Probably Pay Attention to Tokenizers by authorfly on Thursday October 24, 2024 @06:04AM (#41933994)
Yes those models were sensitive to the preprocessing, far more than transformers.

However Word2Vec and GloVe were fundamentally different, when used as designed GloVe worked better pretty uniformly.

Re:You Should Probably Pay Attention to Tokenizers by screye on Wednesday October 23, 2024 @02:13PM (#41927778)
Tokenizers face an odd compute issue.

Since they're part of the pre-processing pipeline, you can't quickly test them out for effectiveness. You have to restart a pretraining run to test downstream effectiveness.

Separately,

As much as an attention module can do universal nonlinear transformations....I wonder if it makes sense to add specifuc modules for some math primitives as well. I remember that the executor paper [1] (slightly precursor to the attention is allyou need paper) created self contained modules for operations like less than, count, sum and then explicitly orchestrated them in the decoder.

I'm surprised we haven't seen such solutions produce sota results from math-ai or code-ai research communities.

[1] https://arxiv.org/abs/1705.03633

Re:You Should Probably Pay Attention to Tokenizers by IncreasePosts on Wednesday October 23, 2024 @12:50PM (#41926850)
What's the issue with character-level tokenization(I assume this would be much better at count-the-letter tasks)? The article mentions it as an option but doesn't talk about why subword tokenization is preferred by most of the big LLMs out there.
Re:You Should Probably Pay Attention to Tokenizers by stephantul on Wednesday October 23, 2024 @01:09PM (#41927079)
Using subwords makes your sequences shorter, which makes them cost less.

Besides that, for alphabetic languages, there exists almost no relation between form and meaning. I.e.: “ring” and “wing” differ by one letter but have no real common meaning. By picking the character or byte as your choice of representation, the model basically has to learn to distinguish ring and wing in context. This is a lot of work!

So, while working on the character or byte level saves you some embeddings and thus makes your model smaller, it puts all of the work of distinguishing similar sequences with divergent meanings on the model itself, which means you need a larger model.

By having subwords, a part of this distinguishing work already has been done by the vocabulary itself. As the article points out, this sometimes fails.

Re:You Should Probably Pay Attention to Tokenizers by bunderbunder on Wednesday October 23, 2024 @04:08PM (#41928842)
I suspect that the holy grail here is figuring out how to break the input into a sequence of morphemes and non-morpheme lexical units.
Re:You Should Probably Pay Attention to Tokenizers by thaumasiotes on Wednesday October 23, 2024 @08:59PM (#41930854)
What do you mean by non-morpheme lexical units? Syntactic particles, units too small to be morphemes? Lexical items that contain multiple morphemes?

In either case, isn't this something we already do well?

Re:You Should Probably Pay Attention to Tokenizers by bunderbunder on Thursday October 24, 2024 @10:37AM (#41935939)
Punctuation, for example.

And no, at least for the languages with which I'm familiar SOTA tokenizers tend to only capture the easy cases.

For example, the GPT-4 tokenizer breaks the first sentence of your post like so:

  What/ do/ you/ mean/ by/ non/-m/orp/heme/ lexical/ units/?
Notice how "morpheme" gets broken into three tokens, and none of them matches "morpheme"'s two morphemes. "Lexical" and "units" are each a single token, when they have three and two morphemes respectively.

Or in French, the word "cafetière" gets chopped willy-nilly into "c/afet/ière". The canonical breakdown is "cafe/t/ière".

Re:You Should Probably Pay Attention to Tokenizers by p1esk on Wednesday October 23, 2024 @05:17PM (#41929332)
Has anyone tried to combine a token embedding with some representation of the characters in the (sub)word? For example, use a 512 long vector to represent a token, and reserve the last 12 values to spell out the word.
Re:You Should Probably Pay Attention to Tokenizers by mattnewton on Wednesday October 23, 2024 @05:45PM (#41929537)
I'm not following - spell out the word how? Like put the actual bytes as numerical input to the transformer layer?
Re:You Should Probably Pay Attention to Tokenizers by p1esk on Wednesday October 23, 2024 @07:19PM (#41930237)
Yes
Re:You Should Probably Pay Attention to Tokenizers by stephantul on Thursday October 24, 2024 @12:09AM (#41931816)
Not that I know of, but encoding orthography in a fixed width vector usually carries the assumption that words with the same prefix are more similar. So there’s an alignment problem. You usually solve this using dynamic programming, but that doesn’t work in a vector.

For example “parent” and “parents” are aligned, they share letters in the same position, but “skew” and “askew” share no letters in the same position.

Re:You Should Probably Pay Attention to Tokenizers by p1esk on Thursday October 24, 2024 @01:12AM (#41932137)
The other 500 values in the skew/askew vectors will be similar though. The 12 character values don’t need to be aligned, their function is to provide spelling. Adding such info will probably help LLM answer questions requiring character level knowledge (e.g. counting ‘r’s in ‘strawberry’).
Re:You Should Probably Pay Attention to Tokenizers by mattnewton on Thursday October 24, 2024 @02:22PM (#41938131)
Actually adding the numerical value I think is not the right way to do it because of what happens when you matmul those values - usually the right way to do it would be to have low dimensional character embeddings that are learnable in addition to the token embeddings.

The problem with pure numerical values representing a class as input to nueral network layer is that the byte encoding number is going to be very hard for the transformer to memorize exact values especially when relatively close numbers to each other often do not share much meaning. Catagories are usually encoded somehow, like a one-hot embedding layer, or more recently a learned embedding, so that these different categories can be easily distinguished (different categories are close to orthogonal).

My prediction would be that using the numerical value directly would not work at all, and using learnable embeddings would work but You would have to reserve that part of the token embedding for each token which would hurt performance a lot on non-spelling tasks relative to just letting that whole embedding represent the token however the model sees fit.

But, IDK! It would be easy enough to try! You should on a small toy model. And then try a small learnable re-usable character embedding. And write a blog post. Would be happy to coach / offer some gpu time / answer any other questions you have while building it.

Re:You Should Probably Pay Attention to Tokenizers by kadushka on Thursday October 24, 2024 @02:32PM (#41938231)
Which tasks would you test the expected improvements on from this addition?
Re:You Should Probably Pay Attention to Tokenizers by mattnewton on Thursday October 24, 2024 @02:44PM (#41938359)
maybe make a metric of "count letter $L in work $word" - if you want to game it, you can choose words so that they are all tokenized into 1-2 tokens and each token has multiples of letter $L

And then use something like helloswag to measure how much you've lost on general text completion compared to a vanilla LLM with the same embedding size all dedicated to just the token.

Re:You Should Probably Pay Attention to Tokenizers by kadushka on Thursday October 24, 2024 @02:52PM (#41938477)
Which model would you recommend to try it on? Would you train it from scratch, or finetune an existing one?
Re:You Should Probably Pay Attention to Tokenizers by mattnewton on Thursday October 24, 2024 @03:38PM (#41938957)
You would have to train the new model from scratch since it would be all new token embeddings with whatever character encoding scheme you come up with. It would probably make sense to train the vanilla gpt from scratch with the same total embeddings size as your control. I would start with https://github.com/karpathy/nanoGPT as a baseline since you can train a toy (GPT2 sized) llm in a couple days on an a100 which are pretty easy to come by.
Re:You Should Probably Pay Attention to Tokenizers by RicoElectrico on Wednesday October 23, 2024 @05:25PM (#41929378)
Well, fastText uses character n-grams to compute embeddings for out-of-vocabulary words. This is pre-transformers work BTW.
Re:You Should Probably Pay Attention to Tokenizers by p1esk on Thursday October 24, 2024 @12:07AM (#41931809)
IIRC, overlapping ngram vectors are summed to form the token embedding - doesn’t it effectively destroy any character level representation of the token? Doesn’t really make sense to me.
Re:You Should Probably Pay Attention to Tokenizers by stephantul on Thursday October 24, 2024 @12:12AM (#41931831)
It works because they use really large ngram values, up to 6. So most character-level information is in these subwords.
Re:You Should Probably Pay Attention to Tokenizers by p1esk on Thursday October 24, 2024 @01:25AM (#41932206)
Let’s say we want to use 6-grams and build an embedding vector for the word “because”: we add integer vectors for “becaus” and “ecause”, right? For example: [1,2,3,4,5,6] + [2,3,4,5,6,2] = [3,5,7,9,11,8]. Obviously we cannot use this resulting numerical vector to spell the input word. Pretty much all character level info is lost.
Re:You Should Probably Pay Attention to Tokenizers by sundarurfriend on Wednesday October 23, 2024 @05:43PM (#41929527)
> Besides that, for alphabetic languages, there exists almost no relation between form and meaning.

Also true for Abugida-based languages, for eg. சரம் (saram = string) vs மரம் (maram = tree), and many more. I think your intention with specifying "alphabetic languages" was to say "non-logographic languages", right?

Re:You Should Probably Pay Attention to Tokenizers by bunderbunder on Wednesday October 23, 2024 @06:08PM (#41929677)
I'll do you one more and say "non-Chinese languages". Written Japanese - including the kanji portion of the script - has the same characteristic.

And even in Chinese it's a fairly weak relationship. A large portion of the meanings of individual characters come from sound loan. For example the 英 in 英雄 means "hero", in 英语 means "England", an in 精英 means "flower". The relationship there is simple homophony.

On the other hand, one thing you do get with written Chinese is that "1 character = 1 morpheme" very nearly works. So mechanistically breaking a text into a sequence of morphemes can be done pretty reliably without the aid of a semantic model or exhaustive hard-coded mapping. I think that for many other languages you can't even get close using only syntactic analysis.

Re:You Should Probably Pay Attention to Tokenizers by thaumasiotes on Wednesday October 23, 2024 @08:55PM (#41930827)
> I'll do you one more and say "non-Chinese languages". Written Japanese - including the kanji portion of the script - has the same characteristic.

Written Japanese is much more ideographic than written Chinese. Japanese spelling is determined, such as it is, by semantics. Chinese spelling is determined by sound. Thus, 女的, 娘们, and 妮子, all meaning 'girl' or 'woman', have no spelling in common because they are different words, while Japanese uses 女 for "jo" and "onna" despite a total lack of any relationship between those words.

Re:You Should Probably Pay Attention to Tokenizers by bunderbunder on Thursday October 24, 2024 @11:11AM (#41936303)
Chinese spelling is also determined by meaning. 是、事、and 式 are all pronounced shì. Which one you use depends on whether you mean the copula, an event/business/matter, or a test.

I see that your examples are getting at how character components work in Chinese, but it's oversimplistic. 女(nǚ) means "woman", but 娘 (niáng) means "mother". It's composed of the functional components 女, which is just a hint at the meaning for disambiguation purposes, and 良 (liáng), which is a hint at the pronunciation. Similar for 妮 (nī) with sound component 尼 (ní) and a similar historical meaning and development to the English word "lass". In the second and third cases the 女 is a semantic functional component, but it's still a different character with a different (if similar) meaning.

re: What I said about Kanji; I don't speak the language so perhaps I misunderstand how things work. My impression was that the mapping from character to meaning was looser in Japanese than it is in Chinese.

Re:You Should Probably Pay Attention to Tokenizers by stephantul on Thursday October 24, 2024 @12:05AM (#41931796)
I was trying to say “at least for alphabetic languages”. I don’t like to say things about languages I can’t speak or write. So, no, it wasn’t my intention to say “non-logographic languages”
Re:You Should Probably Pay Attention to Tokenizers by SEGyges on Wednesday October 23, 2024 @12:55PM (#41926909)
tokens are on average four characters and the number of residual streams (and therefore RAM) the LLM allocates to a given sequence is proportionate to the number of units of input. the flops is proportionate to their square in the attention calculation.

you can hypothetically try to ameliorate this by other means, but if you just naively drop from tokenization to character or byte level models this is what goes wrong

Re:You Should Probably Pay Attention to Tokenizers by p1esk on Thursday October 24, 2024 @01:31AM (#41932231)
4x seq length expansion doesn’t sound that bad.
Re:You Should Probably Pay Attention to Tokenizers by lechatonnoir on Thursday October 24, 2024 @05:03AM (#41933603)
I mean, it's not completely fatal, but it means an approximately 16x increase in runtime cost, if I'm not mistaken. That's probably not worth trying to solve letter counting in most applications.
Re:You Should Probably Pay Attention to Tokenizers by SEGyges on Friday October 25, 2024 @04:56PM (#41949679)
it is not necessarily 16x if you, e.g., decrease model width by a factor of 4 or so also, but yeah naively the RAM and FLOPs scale up by n^2
Re:You Should Probably Pay Attention to Tokenizers by Centigonal on Wednesday October 23, 2024 @12:56PM (#41926927)
I think it has to do with both performance (smaller tokens means more tokens per sentence read and more runs per sentence generated) and with how embeddings work. You need a token for "dog" and a token for "puppy" to represent the relationship between the two as a dimension in latent space.
Re:You Should Probably Pay Attention to Tokenizers by cma on Wednesday October 23, 2024 @03:20PM (#41928442)
Context length performance and memory scales N^2. Smaller tokens mean worse scaling, up to a point.
Re:You Should Probably Pay Attention to Tokenizers by doctorpangloss on Wednesday October 23, 2024 @03:04PM (#41928304)
> LLMs are notoriously bad at counting letters in words or performing simply oulipos of letter omission.

If it were so simple, why hasn’t this already been dealt with?

Multimodal VQA models also have had a hard time generalizing counting. Counting is not as simple as changing the tokenizer.

Re:You Should Probably Pay Attention to Tokenizers by kelseyfrog on Wednesday October 23, 2024 @03:14PM (#41928382)
I'm saying the oulipo rule is simple, not the task given current tokenization methods
Re:You Should Probably Pay Attention to Tokenizers by danielmarkbruce on Wednesday October 23, 2024 @07:56PM (#41930459)
Should the number 23 be tokenized as one token or two tokens?
Re:You Should Probably Pay Attention to Tokenizers by tomrod on Wednesday October 23, 2024 @08:06PM (#41930516)
We already solved that with binary representation ;-)
Re:You Should Probably Pay Attention to Tokenizers by thaumasiotes on Wednesday October 23, 2024 @09:02PM (#41930870)
Two. That's the reality.

You interpret the token sequence by constructing a parse tree, but that doesn't require you to forget that the tokens exist.

Re:You Should Probably Pay Attention to Tokenizers by danielmarkbruce on Wednesday October 23, 2024 @10:00PM (#41931177)
If you use standard BPE, you likely won't tokenize every number by it's digits, depending on the data set used to create the tokenizer.

The point is, you have a choice. You can do the tokenization however you like. The reason 23 is interesting is that there is a case to be made that a model will more likely understand 23 is related to Jordan if it's one token, and if it's two tokens it's more difficult. The opposite is true for math problems.

The reality is whatever we want to make it. It's likely that current schemes are... sub optimal. In practice it would be great if every token was geometrically well spaced after embedding, and preserve semantic information, among other things. The "other things" have taken precedent thus far.

Re:You Should Probably Pay Attention to Tokenizers by doctorpangloss on Wednesday October 23, 2024 @11:37PM (#41931658)
It doesn’t matter. The challenge with counting doesn’t have to do with tokenization. Why this got into the zeitgeist, I don’t know.
Re:You Should Probably Pay Attention to Tokenizers by imtringued on Thursday October 24, 2024 @03:25AM (#41932924)
No LLM struggles with two digit arithmetic. 100 digit addition is possible with the use of state of the art position encodings. Counting is not bottlenecked by arithmetic at all.

When you ask an LLM to count the number of "r" in the word Strawberry, the LLM will output a random number. If you ask it to separate the letters into S t r a w b e r r y, then each letter is tokenized independently and the attention mechanism is capable of performing the task.

What you are doing is essentially denying that the problem exists.

Re:You Should Probably Pay Attention to Tokenizers by ithkuil on Thursday October 24, 2024 @08:42AM (#41934929)
Gpt4-o correctly answered

"How many letters "r" are in the word Frurirpoprar"

And it didn't use a program execution (at least it didn't show the icon and the answer was very fast so it's unlikely it generated an executed a program to count)

Re:You Should Probably Pay Attention to Tokenizers by danielmarkbruce on Thursday October 24, 2024 @12:43PM (#41937222)
I wouldn't consider that a thing that's going to work generally. That word may tokenize to one per char and have seen relevant data, or it may be relatively close to some other word and it's seen data which gives the answer.
Re:You Should Probably Pay Attention to Tokenizers by danielmarkbruce on Thursday October 24, 2024 @09:29AM (#41935296)
Tokenization absolutely screws with math and counting.
Re:You Should Probably Pay Attention to Tokenizers by Der_Einzige on Saturday October 26, 2024 @04:23AM (#41953411)
Why would you confidently say such a lie like this? It's exactly the opposite. It's mostly due to toeknization. Show NeurIPS papers which give evidence of the opposite because I can square up with NeurIPS papers to substantiate that it is tokenization that causes these issues.
Re:You Should Probably Pay Attention to Tokenizers by smougel on Thursday October 24, 2024 @09:39AM (#41935365)
There is a paper about : https://arxiv.org/pdf/2405.18719
Re:You Should Probably Pay Attention to Tokenizers by kaycebasques on Wednesday October 23, 2024 @02:10PM (#41927742)
> but where others see boring, I see opportunity

I feel this way about embeddings

This line of thought seems related to the old wisdom of finding innovative solutions by mucking around in the layer below whatever the "tools of the trade" are for your domain

Re:You Should Probably Pay Attention to Tokenizers by Der_Einzige on Wednesday October 23, 2024 @03:56PM (#41928753)
I wrote a whole paper about this exact topic! (Syntactic, phonetic, and related constraints)

https://aclanthology.org/2022.cai-1.2/

Re:You Should Probably Pay Attention to Tokenizers by danielmarkbruce on Wednesday October 23, 2024 @07:24PM (#41930268)
And decoders.
Re:You Should Probably Pay Attention to Tokenizers by Suppafly on Thursday October 24, 2024 @12:13PM (#41936920)
>oulipos

?