当前位置:   article > 正文

更强大的双语对话模型——ChatGLM3

chatglm3

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

1、更强大的基础模型:ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能。

2、更完整的功能支持:ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。

3、更全面的开源序列:除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

这里我们使用ChatGLM3-6B来进行测试,两种方式,一种是单独的web测试,另外一种是用Text-generation-webui

首先我们clone一下https://github.com/THUDM/ChatGLM3.git,然后创建虚拟环境python -m venv venv,激活虚拟环境venv\Scripts\activate ,然后安装相应的依赖包

pip install -r requirements -i https://pypi.tuna.tsinghua.edu.cn/simple

最后下载模型,不方便使用huggingface的同学,可以在modelscope中来进行下载:

  1. from modelscope import snapshot_download
  2. model_dir = snapshot_download("chatglm3-6b", revision = "v1.0.0",cahe_dir="your model path")

修改web_demo.py的代码如下:

tokenizer = AutoTokenizer.from_pretrained("your model path", trust_remote_code=True)

model = AutoModel.from_pretrained("your model path", trust_remote_code=True).cuda()

接着就可以启动python web_demo.py:

c170c0bade919da91d6aa7bed7b29570.png

由于显卡限制,生成的速度稍慢,但生成的内容和Claude2比起来还是详细不少。下面的内容是Claude2生成的

  1. 好的,这里是一个基于LSTM和PyTorch实现的简单天气预报神经网络的代码示例:
  2. ```python
  3. import torch
  4. import torch.nn as nn
  5. from torch.utils.data import Dataset, DataLoader
  6. # 创建Dataset加载天气数据
  7. class WeatherDataset(Dataset):
  8. def __init__(self, x, y):
  9. self.x = x
  10. self.y = y
  11. def __len__(self):
  12. return len(self.x)
  13. def __getitem__(self, idx):
  14. return self.x[idx], self.y[idx]
  15. # 定义LSTM模型
  16. class WeatherForecastLSTM(nn.Module):
  17. def __init__(self, input_size, hidden_size, num_layers, output_size):
  18. super(WeatherForecastLSTM, self).__init__()
  19. self.lstm = nn.LSTM(input_size, hidden_size, num_layers)
  20. self.fc = nn.Linear(hidden_size, output_size)
  21. def forward(self, x):
  22. out, _ = self.lstm(x)
  23. out = out[-1, :, :]
  24. out = self.fc(out)
  25. return out
  26. # 准备训练数据
  27. train_x = # 过去7天气温数据
  28. train_y = # 第8天气温
  29. train_data = WeatherDataset(train_x, train_y)
  30. train_loader = DataLoader(train_data, batch_size=64, shuffle=True)
  31. # 创建LSTM模型
  32. input_size = 1 # 气温数据
  33. seq_length = 7 # 7天数据
  34. num_layers = 1
  35. hidden_size = 32
  36. output_size = 1 # 预测第8天气温
  37. model = WeatherForecastLSTM(input_size, hidden_size, num_layers, output_size)
  38. # 定义损失函数和优化器
  39. criterion = nn.MSELoss()
  40. optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
  41. # 训练
  42. num_epochs = 100
  43. for epoch in range(num_epochs):
  44. for batch_x, batch_y in train_loader:
  45. outputs = model(batch_x)
  46. loss = criterion(outputs, batch_y)
  47. optimizer.zero_grad()
  48. loss.backward()
  49. optimizer.step()
  50. print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
  51. ```
  52. 这个模型利用LSTM网络学习天气时间序列数据的长期依赖关系,可以用于预测未来天气。我们可以根据不同的实际天气数据调整模型结构,添加更多特征,进一步提升预报精度。

下面是ChatGLM3生成的内容

  1. 要使用 LSTM 和 PyTorch 实现一个天气预报的神经网络,你需要完成以下步骤:
  2. 1. 准备数据:首先,你需要准备一个包含日期和对应的温度、湿度、风速等气象数据的数据集。数据集可以是 CSV 文件、Excel 文件或其他格式。确保数据集中的每个日期都有对应的温度、湿度、风速等气象数据。
  3. 2. 数据预处理:将数据集按日期排序,将日期转换为 PyTorch 中的 Tensor。将温度、湿度、风速等气象数据 corresponding_to 字段添加到每个样本的 Tensor 中。
  4. 3. 定义模型:定义一个包含 LSTM 层的神经网络模型。LSTM 是一种适合处理时间序列数据的神经网络。在模型中添加一个全连接层,将 LSTM 层的输出传递给全连接层,并使用 softmax 函数输出预测的天气状况(如多云、晴、雨等)。
  5. 4. 训练模型:将准备好的数据输入到模型中,使用交叉熵损失函数和随机梯度下降法(SGD)优化器进行训练。在训练过程中,你需要设置一些超参数,如学习率、批次大小、迭代次数等。
  6. 5. 验证模型:使用验证集来评估模型的性能。计算模型在验证集上的准确率、损失函数值等指标,以确定模型是否过拟合或欠拟合。
  7. 6. 预测:使用训练好的模型对新的日期进行预测。将新的日期转换为 Tensor,然后将 Tensor 输入到模型中,得到预测的天气状况。
  8. 下面是一个简单的示例代码:
  9. import torch
  10. import torch.nn as nn
  11. import torch.optim as optim
  12. from sklearn.preprocessing import LabelEncoder
  13. from torch.utils.data import Dataset, DataLoader
  14. import pandas as pd
  15. # 数据预处理
  16. def preprocess_data(data):
  17. data['date'] = pd.to_datetime(data['date'])
  18. data['temperature'] = data['temperature'].astype('float32')
  19. data['humidity'] = data['humidity'].astype('float32')
  20. data['wind_speed'] = data['wind_speed'].astype('float32')
  21. encoder = LabelEncoder()
  22. data['weather'] = encoder.fit_transform(data['weather'])
  23. data = data.drop(['weather', 'date'], axis=1)
  24. return data
  25. class WeatherDataset(Dataset):
  26. def __init__(self, data):
  27. self.data = data
  28. def __len__(self):
  29. return len(self.data)
  30. def __getitem__(self, index):
  31. return self.data.iloc[index]
  32. # 定义模型
  33. class WeatherModel(nn.Module):
  34. def __init__(self, input_size, hidden_size, output_size):
  35. super(WeatherModel, self).__init__()
  36. self.hidden_size = hidden_size
  37. self.lstm = nn.LSTM(input_size, hidden_size)
  38. self.fc = nn.Linear(hidden_size, output_size)
  39. def forward(self, x):
  40. lstm_out, _ = self.lstm(x)
  41. out = self.fc(lstm_out[:, -1, :])
  42. return out
  43. # 训练模型
  44. def train_model(model, device, train_loader, val_loader, optimizer, epochs, lr):
  45. model.to(device)
  46. criterion = nn.CrossEntropyLoss()
  47. optimizer = optim.Adam(model.parameters(), lr=lr)
  48. for epoch in range(epochs):
  49. model.train()
  50. for batch_idx, (data, target) in enumerate(train_loader):
  51. data, target = data.to(device), target.to(device)
  52. optimizer.zero_grad()
  53. output = model(data)
  54. loss = criterion(output, target)
  55. loss.backward()
  56. optimizer.step()
  57. model.eval()
  58. with torch.no_grad():
  59. total_correct = 0
  60. total_samples = 0
  61. for data, target in val_loader:
  62. data, target = data.to(device), target.to(device)
  63. output = model(data)
  64. _, predicted = torch.max(output.data, 1)
  65. total_correct += (predicted == target).sum().item()
  66. total_samples += target.size(0)
  67. accuracy = total_correct / total_samples
  68. print(f'Epoch {epoch + 1}, Validation Accuracy: {accuracy}')
  69. # 预测
  70. def predict_weather(model, device, test_loader):
  71. model.eval()
  72. predictions = []
  73. with torch.no_grad():
  74. for data, _ in test_loader:
  75. data = data.to(device)
  76. output = model(data)
  77. _, predicted = torch.max(output.data, 1)
  78. predictions.extend(predicted.cpu().numpy())
  79. return predictions
  80. # 主函数
  81. def main():
  82. # 读取数据
  83. data = pd.read_csv('weather_data.csv')
  84. train_data = preprocess_data(data)
  85. train_dataset = WeatherDataset(train_data)
  86. val_data = preprocess_data(data)
  87. val_dataset = WeatherDataset(val_data)
  88. test_data = preprocess_data(data)
  89. test_dataset = WeatherDataset(test_data)
  90. # 定义模型
  91. input_size = train_data.shape[1]
  92. hidden_size = 128
  93. output_size = len(train_data['weather'].unique())
  94. model = WeatherModel(input_size, hidden_size, output_size)
  95. # 设备
  96. device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
  97. # 数据加载
  98. train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
  99. val_loader = DataLoader(val_dataset, batch_size=32, shuffle=True)
  100. test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
  101. # 训练模型
  102. optimizer = optim.Adam(model.parameters(), lr=0.001)
  103. train_model(model, device, train_loader, val_loader, optimizer, 10, 0.001)
  104. # 预测
  105. predictions = predict_weather(model, device, test_loader)
  106. print(predictions)
  107. if __name__ == '__main__':
  108. main()
  109. 这个示例代码只是一个基本的框架,你需要根据你的数据集和需求进行相应的调整。

然后我们在text-generation-webui中调用这个模型,可以参考我前面的图文如何优雅的使用各类LLM来进行配置,我们将下载的模型放到models文件夹,然后启动python server.py --trust-remote-code

1a64173f8a78b81644668f8ae880b5b6.png

d012944a0ffbc5e4cd8360eeaf6b96e1.png

整体来说,使用的结果符合预期

38e09e1b829bd54505a031708fcee0f7.png

感兴趣的同学可以自行体验。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/254593
推荐阅读
相关标签
  

闽ICP备14008679号