赞
踩
记录
2024年4月14日15:36:28----0.1.02
有问题还需要完善,会重复生成一句话
一篇新闻:https://news.sina.com.cn/c/2024-04-12/doc-inarqiev0222543.shtml
https://blog.csdn.net/qq_19530977/article/details/120936391
# https://blog.csdn.net/qq_19530977/article/details/120936391
"""
布林肯国务卿
布林肯国务卿同王毅
布林肯国务卿同王毅主任
布林肯国务卿同王毅主任以及
布林肯国务卿同王毅主任以及其他
布林肯国务卿同王毅主任以及其他国家
布林肯国务卿同王毅主任以及其他国家敦促
布林肯国务卿同王毅主任以及其他国家敦促伊朗
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,布
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,布林肯
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,布林肯国务卿
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,布林肯国务卿同王毅
布林肯国务卿同王毅主任以及其他国家敦促伊朗驻叙利亚使馆的安全不容侵犯,布林肯国务卿同王毅主任
"""
导入包
import torch
import torch.nn as nn
import torch.optim as optim
import torch.utils.data as Data
from torch.autograd import Variable
import jieba
复制文章到txt文档
allarray=[]
with open("./howtousercbow/data/news.txt",encoding="utf-8") as afterjieba:
lines=afterjieba.readlines()
print(lines)
for line in lines:
result=list(jieba.cut(line,False))
for r in result:
allarray.append(r.replace("\n",""))
allarray,len(allarray)
word2index={one:i for i,one in enumerate(allarray)}
index2word={i:one for i,one in enumerate(allarray)}
word2index[" "]=len(allarray)-1
index2word[len(allarray)-1]=" "
word2index[" "]
from collections import Counter
Counter(allarray)
vocab_size = len(allarray)
vocab_size
# 生成输入数据
batch_x = []
batch_y = []
window=1
seq_length=vocab_size
for i in range(seq_length - window + 1):
x = word2index[allarray[i]]
if i + window >= seq_length:
y = word2index[" "]
else:
y = word2index[allarray[i + 1]]
batch_x.append([x])
batch_y.append(y)
# 训练数据
batch_x, batch_y = Variable(torch.LongTensor(batch_x)), Variable(torch.LongTensor(batch_y))
# 参数
embedding_size = 100
n_hidden = 32
batch_size = 10
num_classes = vocab_size
dataset = Data.TensorDataset(batch_x, batch_y)
loader = Data.DataLoader(dataset, batch_size, shuffle=True)
# 建立模型
class BiLSTM(nn.Module):
def __init__(self):
super(BiLSTM, self).__init__()
self.word_vec = nn.Embedding(vocab_size, embedding_size)
# bidirectional双向LSTM
self.bilstm = nn.LSTM(embedding_size, n_hidden, 1, bidirectional=True)
self.lstm = nn.LSTM(2 * n_hidden, 2 * n_hidden, 1, bidirectional=False)
self.fc = nn.Linear(n_hidden * 2, num_classes)
def forward(self, input):
# embedding_input是10x1x100
embedding_input = self.word_vec(input)
# embedding_input调换后的size是1x10x100
embedding_input = embedding_input.permute(1, 0, 2)
bilstm_output, (h_n1, c_n1) = self.bilstm(embedding_input)
lstm_output, (h_n2, c_n2)= self.lstm(bilstm_output)
fc_out = self.fc(lstm_output[-1])
return fc_out
model = BiLSTM()
print(model)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练
for epoch in range(300):
cost = 0
for input_batch, target_batch in loader:
pred = model(input_batch)
# print("pred",pred)
# print("target_batch",target_batch)
loss = criterion(pred, target_batch)
cost += loss.item()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print("Epoch: %d, loss: %.5f " % (epoch, cost))
def test(str):
test_text =str
test_batch = [word2index[str]]
# print(test_batch)
test_batch = torch.LongTensor([test_batch])
# print("test_batch",test_batch)
# print(test_batch)
out = model(test_batch)
predict = torch.max(out, 1)[1].item()
# print(test_text,"后一个字母为:", index2word[predict])
return index2word[predict]
import time
s="布林肯"
while True:
fenci=jieba.cut(s,False)
fenciList=list(fenci)
s=s+test(fenciList[-1:][0])
time.sleep(1)
print(s)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。