如果我对您的理解正确,您的问题是如何将您的数据放入模型中?这是一个使用 R 的简短示例。该图显示了当我将数据读入 R 时数据的格式。它是一列,包含(这label将是你的y)和一列包含event做一个词袋)。确保文本为小写且不包含特殊字符。也许删除停用词,做词干或修剪你的词汇。我的文本格式适合我的任务。

在 R 中,您可以将列声明type为一个因子并将该因子插入回归模型中。或者,您可以简单地将类型“重新编码”为数字,例如0=accident和1=crash(等)。任何模型都应该能够消化这些数字,这些数字表明您要预测的“类别”。不要忘记将数据拆分为训练集和测试集。
下一步是生成一袋单词或 n-gram event(我认为根据在线示例这对您来说应该是可行的)。
一旦你有了你的标签 ( y) 和你的词袋 ( x),你就可以从一些模型开始。在另一个答案中,提出了一个 Keras 模型。我认为这是一种选择,但可能是一个设计过度的解决方案。另一种方法是使用带有正则化(套索或山脊)的“正常”Logit。套索/岭的原因是,如果特征(也就是你的词袋中的列)对良好的预测贡献不大,它们会自动“缩小”。这通常会提高合身性。
估计很简单,使用glmnet:
library(glmnet)
# Fit model to training set
cv_fit <- cv.glmnet(x = dtm_train, y = train[['type']],
nfolds = 5,
type.measure = "class",
alpha=1, # 1=Lasso / 0=Ridge
grouped = FALSE,
family = "multinomial") # I have 4 classes
# Plot CV results for parameter lambda
plot(cv_fit)
# Get best lambda
bestlam = cv_fit$lambda.min
# Predict classes
classes = predict(cv_fit, newx=dtm_test, s=bestlam, type="class")
# Look at results
table(classes, test[['type']])
您首先“调整”参数 lamda CV。你得到的是一个不错的数字和一个最佳的 lambda。

接下来,您可以预测类并查看结果:
classes Accident Crash Incident Report
Accident 142 5 23 5
Crash 2 9 0 0
Incident 64 5 1697 29
Report 8 1 11 1
好吧,这只是我的一个疯狂的例子(没有微调)。但是,如果您检查不同的 alpha 值[0,1],您的任务可能会得到不错的结果。
这是 R 的一个很好的指南glmnet和一些文档。顺便说一下,你可以在Python中做同样的事情。