2.3.0
版本发布时间: 2023-06-22 23:21:05
xenova/transformers.js最新发布版本:2.17.2(2024-05-29 22:36:30)
What's new?
Improved 🤗 Hub integration and model discoverability!
All Transformers.js-compatible models are now displayed with a super cool tag! To indicate your model is compatible with the library, simply add the "transformers.js" library tag in your README (example).
This also means you can now search for and filter these models by task!
For example,
- https://huggingface.co/models?library=transformers.js lists all Transformers.js models
-
https://huggingface.co/models?library=transformers.js&pipeline_tag=feature-extraction lists all models which can be used in the
feature-extraction
pipeline!
And lastly, clicking the "Use in Transformers.js" button will show some sample code for how to use the model!
Chroma 🤝 Transformers.js
You can now use all Transformers.js-compatible feature-extraction models for embeddings computation directly in Chroma! For example:
const {ChromaClient, TransformersEmbeddingFunction} = require('chromadb');
const client = new ChromaClient();
// Create the embedder. In this case, I just use the defaults, but you can change the model,
// quantization, revision, or add a progress callback, if desired.
const embedder = new TransformersEmbeddingFunction({ /* Configuration goes here */ });
const main = async () => {
// Empties and completely resets the database.
await client.reset()
// Create the collection
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})
// Add some data to the collection
await collection.add({
ids: ["id1", "id2", "id3"],
metadatas: [{"source": "my_source"}, {"source": "my_source"}, {"source": "my_source"}],
documents: ["I love walking my dog", "This is another document", "This is a legal document"],
})
// Query the collection
const results = await collection.query({
nResults: 2,
queryTexts: ["This is a query document"]
})
console.log(results)
// {
// ids: [ [ 'id2', 'id3' ] ],
// embeddings: null,
// documents: [ [ 'This is another document', 'This is a legal document' ] ],
// metadatas: [ [ [Object], [Object] ] ],
// distances: [ [ 1.0109775066375732, 1.0756263732910156 ] ]
// }
}
main();
Other links:
Better alignment with python library for calling decoder-only models
You can now call decoder-only models loaded via AutoModel.from_pretrained(...)
:
import { AutoModel, AutoTokenizer } from '@xenova/transformers';
// Choose model to use
let model_id = "Xenova/gpt2";
// Load model and tokenizer
let tokenizer = await AutoTokenizer.from_pretrained(model_id);
let model = await AutoModel.from_pretrained(model_id);
// Tokenize text and call
let model_inputs = await tokenizer('Once upon a time');
let output = await model(model_inputs);
console.log(output);
// {
// logits: Tensor {
// dims: [ 1, 4, 50257 ],
// type: 'float32',
// data: Float32Array(201028) [
// -20.166624069213867, -19.662782669067383, -23.189680099487305,
// ...
// ],
// size: 201028
// },
// past_key_values: { ... }
// }
Examples for computing perplexity: https://github.com/xenova/transformers.js/issues/137#issuecomment-1595496161
More accurate quantization parameters for whisper models
We've updated the quantization parameters used for the pre-converted whisper models on the hub. You can test them out with whisper web! Thanks to @jozefchutka for reporting this issue.
Thanks to @jozefchutka for reporting this issue!
Misc bug fixes and improvements
- Do not use spread operator to concatenate large arrays (https://github.com/xenova/transformers.js/pull/154)
- Set chunk timestamp to rounded time by @PushpenderSaini0 (https://github.com/xenova/transformers.js/pull/160)