- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点.
那么,假设你有一堆单词,它可以只是一个简单的字符串数组.
animals = ["cat", "dog", "rat", "pig"] 。
你没法直接用单词进行数学运算,所以必须先把它们转换成数字。最简单的方法就是用它们在数组中的索引值.
animal_to_idx = {animal: idx for idx, animal in enumerate(animals)} 。
animal_to_idx 。
当然,等你把数学运算做完,你还需要把索引转换回对应的单词。可以这样做:
idx_to_animal = {idx: animal for animal, idx in animal_to_idx.items()} 。
idx_to_animal 。
用索引来表示单词,在自然语言处理中一般不是个好主意。问题在于,索引会暗示单词之间存在某种顺序关系,而实际上并没有.
比如,我们的数据里,猫和猪之间并没有固有的关系,狗和老鼠之间也没有。但是,使用索引后,看起来猫离猪“很远”,而狗似乎“更接近”老鼠,仅仅因为它们在数组中的位置不同。这些数值上的距离可能会暗示一些实际上并不存在的模式。同样,它们可能会让人误以为这些动物之间存在基于大小或相似度的关系,而这在这里完全没有意义.
一个更好的方法是使用独热编码(one-hot encoding)。独热向量是一个数组,其中只有一个元素是 1(表示“激活”),其他所有元素都是 0。这种表示方式可以完全消除单词之间的错误排序关系.
让我们把单词转换成独热向量:
import numpy as np 。
n_animals = len(animals) 。
animal_to_onehot = {} 。
for idx, animal in enumerate(animals)
one_hot = np.zeros(n_animals, dtype=int) 。
one_hot[idx] = 1 。
animal_to_onehot[animal] = one_hot 。
animal_to_onehot 。
可以看到,现在单词之间没有任何隐含的关系了.
独热编码的缺点是,它是一种非常稀疏的表示,只适用于单词数量较少的情况。想象一下,如果你有 10,000 个单词,每个编码都会有 9,999 个零和一个 1,太浪费内存了,存那么多零干嘛…… 。
是时候创建更密集的向量表示了。换句话说,我们现在要做词向量(word embeddings)了.
词向量是一种密集向量(dense vector),其中大多数(甚至所有)值都不是零。在机器学习,尤其是自然语言处理和推荐系统中,密集向量可以用来紧凑而有意义地表示单词(或句子、或其他实体)的特征。更重要的是,它们可以捕捉这些特征之间的有意义关系.
举个例子,我们创建一个词向量,其中每个单词用 2 个特征表示,而总共有 4 个单词.
用 PyTorch 创建词向量非常简单。我们只需要使用 nn.Embedding 层。你可以把它想象成一个查找表,其中行代表每个唯一单词,而列代表该单词的特征(即单词的密集向量).
import torch 。
import torch.nn as nn 。
embedding_layer = nn.Embedding(num_embeddings=4, embedding_dim=2) 。
好,现在我们把单词的索引转换成词向量。这几乎不费吹灰之力,因为我们只需要把索引传给 nn.Embedding 层就行了.
indices = torch.tensor(np.arange(0, len(animals))) 。
indices 。
Đầu ra:
embeddings = embedding_layer(indices) 。
embeddings 。
现在,我们可以用索引查看每个单词的词向量了.
for animal, _ in animal_to_idx.items()
print(f"{animal}'s embedding is {embeddings[animal_to_idx[animal]]}") 。
Đầu ra:
每个单词都有两个特征——正是我们想要的结果.
目前这些数值没啥实际意义,因为 nn.Embedding 层还没有经过训练。但一旦它被适当地训练了,这些特征就会变得有意义.
Để ý:
这些特征对模型来说非常关键,但对人类来说可能永远不会“有意义”。它们代表的是通过训练学到的抽象特征。对我们来说,这些特征看起来可能是随机的、毫无意义的,但对一个训练好的模型来说,它们能够捕捉到重要的模式和关系,使其能够有效地理解和处理数据.
在本系列的下一篇文章中,我们将学习如何训练词向量模型.
最后此篇关于在PyTorch中理解词向量,将单词转换为有用的向量表示的文章就讲到这里了,如果你想了解更多关于在PyTorch中理解词向量,将单词转换为有用的向量表示的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Byte byte1=10; Short short1=20; Integer integer=30; Trong đoạn mã trên, autoboxing thành công ở đây, hãy xem đoạn mã bên dưới, tôi đang viết hoa một cách rõ ràng vì theo mặc định nó sẽ như vậy
Có một số câu hỏi liên quan ở đây. Theo tiêu đề, nếu chúng ta chỉ định kiểu biến là long hoặc float, double, tại sao lại là yêu cầu bắt buộc? Trình biên dịch không đánh giá kiểu biến tại thời điểm biên dịch sao? Java xử lý tất cả các số nguyên theo nghĩa đen là int −
Gần đây tôi đã làm việc với một số tập lệnh bash và đã duyệt qua các trang hướng dẫn. Theo những gì tôi thu thập được, $(( )) có nghĩa là expr và [] có nghĩa là test không? Đối với $(( )): echo $(( 5 + 3
Tôi có UILabel trong đó giá trị int được hiển thị và tôi muốn nếu giá trị tính bằng nghìn, ví dụ 1000, thì nhãn sẽ hiển thị 1k và 2k trong 2000 trở lên. Làm thế nào để đạt được điều đó? Câu trả lời hay nhất Thế này thì sao? int số của tôi =
Tôi đang tự học Verilog và cố gắng viết một mô hình lỗi. Tôi đã tìm thấy mô hình sau về cung trễ ck->q trong phần được chỉ định nhưng không hiểu chính xác nó có tác dụng gì. (posege CK => (Q : 1'b1))=(0, 0); Ai có thể
Hãy xem xét một câu như thế này: John Smith đã đi đến Washington. Vào một ngày đẹp trời, người gắn thẻ tên sẽ xác định "John Smith" là một người và "Washington" là một địa điểm. Tuy nhiên, nếu không có bằng chứng nào khác
Có cách nào để cho JavaScript biết, thông qua một số siêu xử lý hoặc tiền xử lý, rằng từ AND tương đương với && và từ OR tương đương với || và <> tương đương với !===? Có thể coi THEN tương đương với { kết thúc bằng Don't! Câu trả lời hay nhất
Tôi đang làm việc với một đồ thị rất lớn có 500 triệu nút và bậc trung bình là 100. Vậy đây là đồ thị thưa thớt. Tôi cũng phải lưu trữ trọng lượng của mỗi cạnh. Hiện tại tôi đang sử dụng hai vectơ như sau // V có thể là 100 m
Tôi muốn sử dụng Python để biểu diễn một tập hợp các phạm vi số nguyên trong đó tập hợp đó có thể được sửa đổi động và được kiểm tra để đưa vào. Cụ thể hơn, tôi muốn áp dụng nó cho một dải địa chỉ hoặc số dòng trong một tệp. Tôi có thể xác định phạm vi địa chỉ mà tôi quan tâm: 200 - 400 450 -
>>> x = -4 >>> in("{} {:b}".format(x, x)) -4 -100 >>> mặt nạ = 0xFFFFFFFF >>> in("{} {:b}".format(x, x))
Mặc dù mã ngắn nhưng lại đơn giản và rõ ràng. Sao chép mã như sau: preg_match('/^(?!string)/', 'aa') === true Mã này được sử dụng để xác minh xem một chuỗi có bắt đầu bằng 'string' hay không.
Tôi đang cố gắng tạo một số mô hình SQLAlchemy và đang gặp khó khăn trong việc áp dụng timedelta một cách chính xác cho các cột cụ thể. timedelta (được chỉ định theo ngày) được lưu trữ dưới dạng số nguyên trong một bảng riêng (Shifts).
Tiêu đề “Range: bytes=0-” có nghĩa là gì? Đây có phải là toàn bộ tập tin không? Tôi đã thử gửi lại 0 byte nhưng không thành công, khi tôi gửi toàn bộ tệp thì hoạt động bình thường nhưng tôi nhận được yêu cầu này nhiều lần trong ngữ cảnh phát trực tuyến và có vẻ không ổn.
Để tạo biểu diễn SAX của một chuỗi thời gian, trước tiên bạn cần tính toán PAA (xấp xỉ tổng hợp từng phần) của dữ liệu và sau đó ánh xạ câu trả lời vào một bảng biểu tượng. Tuy nhiên, trước khi tính toán PAA, bạn cần chuẩn hóa dữ liệu. Tôi đang chuẩn hóa dữ liệu của mình nhưng tôi không biết cách tính toán
Giả sử tôi có một dịch vụ RESTful, dựa trên siêu văn bản mô phỏng một cửa hàng kem. Để quản lý cửa hàng tốt hơn, tôi muốn có thể hiển thị báo cáo hàng ngày liệt kê số lượng và giá trị bằng đô la của mỗi loại kem đã bán. Khả năng báo cáo này dường như có sẵn dưới dạng dịch vụ có tên là Dai
Tôi cần biểu diễn câu theo định dạng RDF. Nói cách khác, "John thích Coke" sẽ tự động được biểu thị như sau: Chủ ngữ: John Vị ngữ: Thích Tân ngữ: Coke Có ai biết tôi nên bắt đầu từ đâu không? liệu
Tôi sắp viết một trình phân tích cú pháp đọc từng dòng một tệp văn bản thành các cấu trúc có nhiều kiểu khác nhau và đưa các cấu trúc đó vào các lệnh gọi lại (người theo dõi hoặc người truy cập - chưa chắc chắn). Tệp văn bản chứa dữ liệu cho MT-940 - sao kê ngân hàng SWIFT. Các hàng này được biểu diễn bởi một lớp được chỉ định
Tôi chủ yếu là một nhà phát triển C++, nhưng tôi thường xuyên viết các tập lệnh Python. Hiện tại tôi đang viết một trình mô phỏng xúc xắc cho một trò chơi, nhưng tôi không chắc cách tốt nhất để giải quyết vấn đề của mình trong Python. Tổng cộng có ba kỹ năng của người chơi, một mạnh, một trung bình và một yếu cho mỗi người chơi.
Tôi đã tìm kiếm câu trả lời trong suốt 5 giờ qua. Mặc dù tôi đã tìm được rất nhiều câu trả lời nhưng chúng không giúp ích được gì. Về cơ bản, điều tôi đang tìm kiếm là biểu diễn duy nhất về mặt toán học và số học của toán tử XOR bitwise cho bất kỳ số nguyên không dấu 32 bit nào. Mặc dù nghe có vẻ đơn giản,
Tôi cần lưu trữ các phụ thuộc trong DAG. (Chúng tôi đang lập kế hoạch cho các lớp học mới ở mức độ chi tiết) Chúng tôi đang sử dụng rails 3. Lưu ý rằng chiều rộng lớn hơn nhiều so với chiều sâu. Tôi ước tính 5-10 liên kết cho mỗi nút. Khi hệ thống phát triển, điều này sẽ tăng lên
Tôi là một lập trình viên xuất sắc, rất giỏi!