ไปกอดกัน
v0.1.0
API อย่างง่ายสำหรับการดาวน์โหลด ( hub
) การแปลงโทเค็น ( tokenizers
) และ ( งานในอนาคต ) การแปลงโมเดล ( models
) ของ HuggingFace รุ่นที่ใช้ GoMLX
การทดลองและการพัฒนา : แม้ว่าแพ็คเกจ hub
จะมีเสถียรภาพ แต่ tokenizers
และ models
ในอนาคตยังอยู่ภายใต้การพัฒนาอย่างเข้มข้น
นำเข้า ("github.com/gomlx/go-huggingface/hub""github.com/gomlx/go-huggingface/tokenizers")var ( // รหัสโมเดลสำหรับการทดสอบ.hfModelIDs = []string{ "google/gemma-2 -2b-it", "ประโยค-หม้อแปลง/all-MiniLM-L6-v2", "protectai/deberta-v3-base-zeroshot-v1-onnx", "KnightsAnalytics/distilbert-base-uncased-finetuned-sst-2-english", "KnightsAnalytics/distilbert-NER", "SamLowe/roberta-base-go_emotions -onnx", } hfAuthToken = os.Getenv("HF_TOKEN") // สร้างโทเค็นการตรวจสอบสิทธิ์ HuggingFace ของคุณใน Huggingface.co เพื่ออนุญาตให้ดาวน์โหลดโมเดลต่างๆ)
สำหรับ _, modelID := range hfModelIDs { fmt.Printf("n%s:n", modelID) repo := hub.New(modelID).WithAuth(hfAuthToken) สำหรับชื่อไฟล์, ผิดพลาด := range repo.IterFileNames() { ถ้าผิดพลาด != ไม่มี { ตื่นตระหนก (ผิดพลาด) } fmt.Printf("t%sn", ชื่อไฟล์) - -
สำหรับ _, modelID := range hfModelIDs { fmt.Printf("n%s:n", modelID) repo := hub.New(modelID).WithAuth(hfAuthToken) config, err := tokenizers.GetConfig(repo) ถ้าผิดพลาด != ไม่มี { ตื่นตระหนก (ผิดพลาด) } fmt.Printf("ttokenizer_class=%sn", config.TokenizerClass) -
google/gemma-2-2b-it
ข้อความเอาต์พุต "ดาวน์โหลดแล้ว" เกิดขึ้นเฉพาะไฟล์โทเค็นที่ยังไม่ได้แคช ดังนั้นเฉพาะครั้งแรกเท่านั้น:
repo := hub.New("google/gemma-2-2b-it").WithAuth(hfAuthToken)tokenizer, err := tokenizers.New(repo)if err != nil { panic(err) }ประโยค := " หนังสืออยู่บนโต๊ะ"โทเค็น := tokenizer.Encode(ประโยค)fmt.Printf("ประโยค:t%sn", ประโยค)fmt.Printf("โทเค็น: t%vn", โทเค็น)
Downloaded 1/1 files, 4.2 MB downloaded Sentence: The book is on the table. Tokens: [651 2870 603 611 573 3037 235265]
sentence-transformers/all-MiniLM-L6-v2
มีเพียง 3 บรรทัดแรกเท่านั้นที่สาธิต go-huggingface
บรรทัดที่เหลือใช้ github.com/gomlx/onnx-gomlx
เพื่อแยกวิเคราะห์และแปลงโมเดล ONNX เป็น GoMLX จากนั้น github.com/gomlx/gomlx
เพื่อดำเนินการโมเดลที่แปลงแล้วสองสามประโยค
// รับ ONNX model.repo := hub.New("sentence-transformers/all-MiniLM-L6-v2").WithAuth(hfAuthToken)onnxFilePath, ผิดพลาด := repo.DownloadFile("onnx/model.onnx")if ผิดพลาด != ไม่มี { ตกใจ (ผิดพลาด) }onnxModel ผิดพลาด := onnx.ReadFile(onnxFilePath)if err != nil { panic(err) }// แปลงตัวแปร ONNX เป็นบริบท GoMLX (ซึ่งเก็บตัวแปร):ctx := context.New()err = onnxModel.VariablesToContext(ctx)if err ! = ไม่มี { panic(err) }// ทดสอบ input.sentences := []string{ "นี่คือ ประโยคตัวอย่าง", "แต่ละประโยคจะถูกแปลง"}inputIDs := [][]int64{ {101, 2023, 2003, 2019, 2742, 6251, 102}, { 101, 2169, 6251, 2003, 4991, 102, 0}}tokenTypeID := [] [] int64 { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}attentionMask := []int64{ {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 0}}// ดำเนินการกราฟ GoMLX ด้วย model.embeddings := context.ExecOnce( backends.New(), ctx, func (ctx *context.Context, inputs [] *graph.Node) *graph.Node { modelOutputs := onnxModel.CallGraph(ctx, inputs[0].Graph(), map[string]*graph.Node{ "input_ids": inputs[0], "attention_mask": inputs[1], "token_type_ids": inputs[2]}) ส่งคืน modelOutputs[0] - inputIDs, AttentionMask, tokenTypeIDs)fmt.Printf("ประโยค: t%qn", ประโยค)fmt.Printf("การฝัง:t%sn", การฝัง)
Sentences: ["This is an example sentence" "Each sentence is converted"] Embeddings: [2][7][384]float32{ {{0.0366, -0.0162, 0.1682, ..., 0.0554, -0.1644, -0.2967}, {0.7239, 0.6399, 0.1888, ..., 0.5946, 0.6206, 0.4897}, {0.0064, 0.0203, 0.0448, ..., 0.3464, 1.3170, -0.1670}, ..., {0.1479, -0.0643, 0.1457, ..., 0.8837, -0.3316, 0.2975}, {0.5212, 0.6563, 0.5607, ..., -0.0399, 0.0412, -1.4036}, {1.0824, 0.7140, 0.3986, ..., -0.2301, 0.3243, -1.0313}}, {{0.2802, 0.1165, -0.0418, ..., 0.2711, -0.1685, -0.2961}, {0.8729, 0.4545, -0.1091, ..., 0.1365, 0.4580, -0.2042}, {0.4752, 0.5731, 0.6304, ..., 0.6526, 0.5612, -1.3268}, ..., {0.6113, 0.7920, -0.4685, ..., 0.0854, 1.0592, -0.2983}, {0.4115, 1.0946, 0.2385, ..., 0.8984, 0.3684, -0.7333}, {0.1374, 0.5555, 0.2678, ..., 0.5426, 0.4665, -0.5284}}}