要用简单的Python示例来理解大语言模型(LLMs)是如何工作的,可以从以下几个基本概念开始:词嵌入(Word Embeddings)、序列建模和生成文本。我们可以逐步构建一个非常简单的语言模型来演示这些概念。
1. 词嵌入(Word Embeddings)
词嵌入是将单词转换为向量表示,使得相似的单词在向量空间中更接近。我们可以使用Python中的gensim
库来生成简单的词嵌入。
import gensim.downloader as api
# 下载预训练的词嵌入模型
word_vectors = api.load("glove-wiki-gigaword-50")
# 查找一个单词的嵌入向量
vector = word_vectors['king']
print(vector)
# 找到最相似的词
similar_words = word_vectors.most_similar('king')
print(similar_words)
2. 序列建模
序列建模是指模型学习如何从一系列输入中预测下一个单词。我们可以用一个简单的基于字符的模型来演示这个过程。
import numpy as np
import random
# 准备简单的训练数据
text = "hello world"
chars = list(set(text))
char_indices = {c: i for i, c in enumerate(chars)}
indices_char = {i: c for i, c in enumerate(chars)}
# 创建输入和输出序列
maxlen = 3
step = 1
sentences = []
next_chars = []
for i in range(0, len(text) - maxlen, step):
sentences.append(text[i: i + maxlen])
next_chars.append(text[i + maxlen])
print('训练样本:', sentences)
print('下一个字符:', next_chars)
# 向量化
X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
for i, sentence in enumerate(sentences):
for t, char in enumerate(sentence):
X[i, t, char_indices[char]] = 1
y[i, char_indices[next_chars[i]]] = 1
3. 简单的RNN模型
使用Keras构建一个简单的RNN模型来学习这些序列。
from keras.models import Sequential
from keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
model.add(Dense(len(chars), activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
# 训练模型
model.fit(X, y, batch_size=128, epochs=10)
4. 生成文本
使用训练好的模型生成新的文本。
# 随机选择一个初始文本
start_index = random.randint(0, len(text) - maxlen - 1)
generated_text = text[start_index: start_index + maxlen]
print('生成初始文本:', generated_text)
# 生成字符
for i in range(50):
sampled = np.zeros((1, maxlen, len(chars)))
for t, char in enumerate(generated_text):
sampled[0, t, char_indices[char]] = 1
preds = model.predict(sampled, verbose=0)[0]
next_index = np.argmax(preds)
next_char = indices_char[next_index]
generated_text += next_char
generated_text = generated_text[1:]
print(next_char, end='')
总结
通过这些步骤,我们用Python和简单的RNN模型展示了LLMs的基本工作原理。虽然实际的LLMs(如GPT-3)要复杂得多,但核心思想仍然类似:从大量数据中学习语言模式,并利用这些模式生成新的文本。