创建训练数据

数据挖掘 nlp 数据清理 nltk 谷歌预测 API
2021-10-07 13:46:22

我的任务是对源自客户对我们产品的投诉的自由文本进行分类。

我创建了一个分类法,有大约 10 个不同的类别。我已经意识到这些类别包括关键字。

例子:

"Customer doesn't understand how to use the product".

关键词:了解,知识,知道,知道。

记录:

Training, Customer doesn't understand how to use the product

我正在使用Google 预测 API在训练模型时,我会将之前的文本归类为:“客户不了解如何使用产品”- 训练。

如何向自由文本/训练数据添加关键字以帮助模型更好地执行并提供更好的置信度?

训练集中的数据:

Training, understand knowledge know aware
Training, Customer doesn't understand how to use the product

现在,我正在将关键字添加到相同的训练数据中,但正在寻找更好的建议。

1个回答

假设您正在进行监督学习来训练一个模型,该模型在部署时将文本作为输入并输出标签(例如,主题)或类别概率,那么您可能想要做的是平衡、分层抽样假设有足够的标记数据,请确保您的最终训练集对于每个类/标签具有均衡数量的文本示例。根据您的情况,您可能需要过度/欠采样或以某种方式处理高度不平衡类的问题(请参阅8 个应对不平衡类的策略)。

使用词袋技术的最简单的 NLP 方法,简单地指示句子中某个词的存在/不存在。因此,每个句子都表示为长度为 n 的向量,其中 n = 数据集中唯一单词的数量。

data_set <- c("the big dog", "the small cat", "the big and fat cow")
words <- strsplit(data_set, split = " ") #tokenize sentences
words
##[[1]]
##[1] "the" "big" "dog"
##
##[[2]]
##[1] "the"   "small" "cat"  
##
##[[3]]
##[1] "the" "big" "and" "fat" "cow"


vec <- unique(unlist(words)) #vector representation of sentences
##[1] "the"   "big"   "dog"   "small" "cat"   "and"  
##[7] "fat"   "cow" 

m <- matrix(nrow = length(data_set), ncol = length(vec))

for (i in 1:length(words)) { #iterate the index of tokenized sentences
  vec_rep <- vec %in% words[[i]] #create binary word-feature vector
  m[i,] <- vec_rep #update matrix
}

df <- data.frame(m, row.names = NULL)
names(df) <- vec
df
##   the   big   dog small   cat   and   fat   cow
##1 TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
##2 TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
##3 TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE

有时您可以通过添加二元组和三元组功能来提高性能。

##given: "the big dog"
##unigrams <- {the, big, dog}
##bigrams <- {the big, big dog}
##trigrams <- {the big dog}

有时通过频率加权单词可以提高性能或计算tf-idf

根据我的经验,另一种提高性能的方法是自定义语言特征工程,特别是如果数据来自社交媒体源,其中充满了拼写错误、首字母缩略词、俚语和其他单词变体。标准 NLP 方法通常会删除停用词(例如,the、a/an、this/that 等)来自向量表示(因为封闭类,高频词通常无助于区分类/标签边界)。因为向量表示通常是高维的(大约是语料库/数据集中唯一单词的数量),所以降维技术可以提高性能。例如,可以计算一个单词特征在类间的分布上的 chi-sq、信息增益等——只保持这些特征/单词高于某个阈值或低于某个预先确定的 p 值)。