- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用自己的数据集重新创建了一个情感分析机器学习项目,并进行了一些小的修改以提高其完成时间,我可以创建良好的模型,编译它,拟合它并测试它,没有任何问题,但问题在于如何向模型传递一个新的字符串/文章,然后它返回对字符串评论是正面还是负面的预测,并希望有人可以帮助我。
我在下面发布了我的代码供您审阅。
class tensor_rnn():
def __init__(self, corp_paths, hidden_layers=3, loadfile=True):
self.h_layers = hidden_layers
self.num_words = []
if loadfile == False:
data_set = pd.DataFrame(columns=['Article', 'Polarity'])
craptopass = []
for files in os.listdir(corp_paths[0]):
with open(corp_paths[0] + '\\' + files, 'r', errors='replace') as text_file:
line = text_file.readline().replace('|', '')
text_file.close()
if len(line.split(' ')) > 3:
line = ''.join([i if ord(i) < 128 else ' ' for i in line])
craptopass.append([line, 1])
good = data_set.append(pd.DataFrame(craptopass, columns=['Article', 'Polarity']), ignore_index=True)
data_set = pd.DataFrame(columns=['Article', 'Polarity'])
craptopass = []
for files in os.listdir(corp_paths[1]):
with open(corp_paths[1] + '\\' + files, 'r', errors='replace') as text_file:
line = text_file.readline().replace('|', '')
text_file.close()
if len(line.split(' ')) > 3:
line = ''.join([i if ord(i) < 128 else ' ' for i in line])
craptopass.append([line, -1])
bad = data_set .append(pd.DataFrame(craptopass, columns=['Article', 'Polarity']), ignore_index=True)
for line in good['Article'].tolist():
counter = len(line.split())
self.num_words.append(counter)
for line in bad['Article'].tolist():
counter = len(line.split())
self.num_words.append(counter)
self.features = pd.concat([good, bad]).reset_index(drop=True)
# self.features = self.features.str.replace(',', '')
self.features.to_csv('Headlines.csv', sep='|')
else:
self.features = pd.read_csv('Headlines.csv', sep='|')
self.features['totalwords'] = self.features['Article'].str.count(' ') + 1
self.num_words.extend(self.features['totalwords'].tolist())
self.features = shuffle(self.features)
self.max_len = len(max(self.features['Article'].tolist()))
tokenizer = self.tok = preprocessing.text.Tokenizer(num_words=len(self.num_words), split=' ')
self.tok.fit_on_texts(self.features['Article'].values)
X = tokenizer.texts_to_sequences(self.features['Article'].values)
self.X = preprocessing.sequence.pad_sequences(X)
self.Y = pd.get_dummies(self.features['Polarity']).values
self.X_train, self.X_test, self.Y_train, self.Y_test = train_test_split(self.X, self.Y,
test_size=0.20, random_state=36)
def RNN(self):
embed_dim = 128
lstm_out = 128
model = Sequential()
model.add(Embedding(len(self.num_words), embed_dim, input_length=self.X.shape[1]))
model.add(Bidirectional(CuDNNLSTM(lstm_out)))
model.add(Dropout(0.2))
model.add(Dense(2, activation='softmax'))
opt = Adam(lr=0.0001, decay=1e-4) #1e-3
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
return model
def model_train(self):
self.model = self.RNN()
def model_test(self):
batch_size = 128
self.model.fit(self.X_train, self.Y_train, epochs=4, batch_size=batch_size, verbose=2,
callbacks=[EarlyStopping(monitor='val_loss', min_delta=0.0001,
patience=5, verbose=2, mode='auto')], validation_split=0.2)
if __name__ == "__main__":
paths = 'PATHS TO ARTICLES'
a = tensor_rnn([paths + '\\pos', paths + '\\neg'])
a.model_train()
a.model_test()
a.model.save('RNNModelArticles.h5', include_optimizer=True)
最佳答案
您所需要做的就是预处理要提供给模型的新文本,就像预处理训练文本一样。之后,您应该有一个预测方法,该方法将以与模型在训练中输出预测相同的方式输出其预测。因此,在预测方法中,您应该编写如下内容:
def predict(self, sequence):
presprocessed = preprocess(sequence)
prediction = self.model.predict(preprocessed, batch_size=None, verbose=0, steps=None)
这是否让你明白了一些事情?
关于python - 如何将字符串值传递给情感分析 RNN 序列模型并获取预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942038/
Github:https://github.com/jjvang/PassIntentDemo 我一直在关注有关按 Intent 传递对象的教程:https://www.javacodegeeks.c
我有一个 View ,其中包含自动生成的 text 类型的 input 框。当我单击“通过电子邮件发送结果”按钮时,代码会将您带到 CalculatedResults Controller 中的 Em
我有一个基本的docker镜像,我将以此为基础构建自己的镜像。我没有基础镜像的Dockerfile。 基本上,基本镜像使用两个--env arg,一个接受其许可证,一个选择在容器中激活哪个框架。我可以
假设我想计算 2^n 的总和,n 范围从 0 到 100。我可以编写以下内容: seq { 0 .. 100 } |> Seq.sumBy ((**) 2I) 但是,这与 (*) 或其他运算符/函数不
我有这个网址: http://www.example.com/get_url.php?ID=100&Link=http://www.test.com/page.php?l=1&m=7 当我打印 $_G
我想将 window.URL.createObjectURL(file) 创建的地址传递给 dancer.js 但我得到 GET blob:http%3A//localhost/b847c5cd-aa
我想知道如何将 typedef 传递给函数。例如: typedef int box[3][3]; box empty, *board[3][3]; 我如何将 board 传递给函数?我
我正在将一些代码从我的 Controller 移动到核心数据应用程序中的模型。 我编写了一个方法,该方法为我定期发出的特定获取请求返回 NSManagedObjectID。 + (NSManagedO
为什么我不能将类型化数组传递到采用 any[] 的函数/构造函数中? typedArray = new MyType[ ... ]; items = new ko.observableArray(ty
我是一名新的 Web 开发人员,正在学习 html5 和 javascript。 我有一个带有“选项卡”的网页,可以使网页的某些部分消失并重新出现。 链接如下: HOME 和 JavaScript 函
我试图将对函数的引用作为参数传递 很难解释 我会写一些伪代码示例 (calling function) function(hello()); function(pass) { if this =
我在尝试调用我正在创建的 C# 项目中的函数时遇到以下错误: System.Runtime.InteropServices.COMException: Operation is not allowed
使用 ksh。尝试重用当前脚本而不修改它,基本上可以归结为如下内容: `expr 5 $1 $2` 如何将乘法命令 (*) 作为参数 $1 传递? 我首先尝试使用“*”,甚至是\*,但没有用。我尝试
我一直在研究“Play for Java”这本书,这本书非常棒。我对 Java 还是很陌生,但我一直在关注这些示例,我有点卡在第 3 章上了。可以在此处找到代码:Play for Java on Gi
我知道 Javascript 中的对象是通过引用复制/传递的。但是函数呢? 当我跳到一些令人困惑的地方时,我正在尝试这段代码。这是代码片段: x = function() { console.log(
我希望能够像这样传递参数: fn(a>=b) or fn(a!=b) 我在 DjangoORM 和 SQLAlchemy 中看到了这种行为,但我不知道如何实现它。 最佳答案 ORM 使用 specia
在我的 Angular 项目中,我最近将 rxjs 升级到版本 6。现在,来自 npm 的模块(在 node_modules 文件夹内)由于一些破坏性更改而失败(旧的进口不再有效)。我为我的代码调整了
这个问题在这里已经有了答案: The issue of * in Command line argument (6 个答案) 关闭 3 年前。 我正在编写一个关于反向波兰表示法的 C 程序,它通过命
$(document).ready(function() { function GetDeals() { alert($(this).attr("id")); } $('.filter
下面是一个例子: 复制代码 代码如下: use strict; #这里是两个数组 my @i =('1','2','3'); my @j =('a','b','c'); &n
我是一名优秀的程序员,十分优秀!