gpt4 book ai didi

ruby - NLP对句子的内容进行分类/标注(需要Ruby绑定(bind))

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:15 25 4
gpt4 key购买 nike

我正在分析几百万封电子邮件。我的目标是能够分类然后分组。组可以是例如:

  • 交付问题(交付缓慢、发货前处理缓慢、可用性信息不正确等)
  • 客户服务问题(电子邮件回复速度慢、回复不礼貌等)
  • 返回问题(返回请求处理缓慢、客户服务缺乏帮助等)
  • 定价投诉(发现隐藏费用等)

为了执行此分类,我需要一个可以识别词组组合的 NLP,例如:

  • [他们|公司|公司|网站|商家]”
  • [没有|没有|没有]”
  • [回应|响应|回答|回复]”
  • [第二天之前|足够快|完全]”
  • 等等

这些示例组中的一些组合应该匹配如下句子:

  • “他们没有回应”
  • “他们根本没有回应”
  • “完全没有反应”
  • “我没有收到网站的回复”

然后将句子归类为客户服务问题

哪个 NLP 能够处理这样的任务?根据我的阅读,这些是最相关的:

  • 斯坦福 CoreNLP
  • 开放自然语言处理

同时检查 these suggested NLP's .

最佳答案

使用 OpenNLP doccat api,您可以创建训练数据,然后根据训练数据创建模型。与朴素贝叶斯分类器之类的东西相比,它的优势在于它会返回类别集的概率分布。

因此,如果您创建一个具有这种格式的文件:

customerserviceproblems They did not respond
customerserviceproblems They didn't respond
customerserviceproblems They didn't respond at all
customerserviceproblems They did not respond at all
customerserviceproblems I received no response from the website
customerserviceproblems I did not receive response from the website

etc.... 提供尽可能多的示例并确保每行以\n 换行符结尾

使用此方法,您可以添加任何您想要的表示“客户服务问题”的内容,您还可以添加任何其他类别,因此您不必过于确定哪些数据属于哪些类别

这是 java 构建模型的样子

DoccatModel model = null;
InputStream dataIn = new FileInputStream(yourFileOfSamplesLikeAbove);
try {

ObjectStream<String> lineStream =
new PlainTextByLineStream(dataIn, "UTF-8");

ObjectStream<DocumentSample> sampleStream = new DocumentSampleStream(lineStream);
model = DocumentCategorizerME.train("en", sampleStream);
OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelOutFile));
model.serialize(modelOut);
System.out.println("Model complete!");
} catch (IOException e) {
// Failed to read or parse training data, training failed
e.printStackTrace();
}

一旦你有了模型,你就可以像这样使用它:

DocumentCategorizerME documentCategorizerME;
DoccatModel doccatModel;

doccatModel = new DoccatModel(new File(pathToModelYouJustMade));
documentCategorizerME = new DocumentCategorizerME(doccatModel);
/**
* returns a map of a category to a score
* @param text
* @return
* @throws Exception
*/
private Map<String, Double> getScore(String text) throws Exception {
Map<String, Double> scoreMap = new HashMap<>();
double[] categorize = documentCategorizerME.categorize(text);
int catSize = documentCategorizerME.getNumberOfCategories();
for (int i = 0; i < catSize; i++) {
String category = documentCategorizerME.getCategory(i);
scoreMap.put(category, categorize[documentCategorizerME.getIndex(category)]);
}
return scoreMap;

}

然后在返回的 hashmap 中你有你建模的每个类别和一个分数,你可以使用分数来决定输入文本属于哪个类别。

关于ruby - NLP对句子的内容进行分类/标注(需要Ruby绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com