情感分析的最佳预处理技术是什么?
What are the best Pre-Processing techniques for Sentiment Analysis.?
我正在尝试class将评论数据集分成两个 classes 说 class A 和 class B。我正在使用 LightGBM
到 class 化。
我已经多次更改 classifier 的参数,但结果并没有太大的不同。
我认为问题出在预处理步骤上。我定义了一个如下所示的函数来处理预处理。我使用了 Stemming
并删除了 stopwords
。我不知道我错过了什么。我试过 LancasterStemmer
和 PorterStemmer
stops = set(stopwords.words("english"))
def cleanData(text, lowercase = False, remove_stops = False, stemming = False, lemm = False):
txt = str(text)
txt = re.sub(r'[^A-Za-z0-9\s]',r'',txt)
txt = re.sub(r'\n',r' ',txt)
if lowercase:
txt = " ".join([w.lower() for w in txt.split()])
if remove_stops:
txt = " ".join([w for w in txt.split() if w not in stops])
if stemming:
st = PorterStemmer()
txt = " ".join([st.stem(w) for w in txt.split()])
if lemm:
wordnet_lemmatizer = WordNetLemmatizer()
txt = " ".join([wordnet_lemmatizer.lemmatize(w) for w in txt.split()])
return txt
是否需要进行更多的预处理步骤以获得更好的准确度?
URL 数据集:Dataset
编辑:
我使用的参数如下。
params = {'task': 'train',
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'learning_rate': 0.01,
'max_depth': 22,
'num_leaves': 78,
'feature_fraction': 0.1,
'bagging_fraction': 0.4,
'bagging_freq': 1}
我已经更改了 depth
和 num_leaves
参数以及其他参数。但是准确率有点卡在某个水平..
有几件事需要考虑。首先,您的训练集不平衡 - class 分布约为 70%/30%。你需要在训练中考虑这个事实。您使用什么类型的功能?使用正确的功能集可以提高您的性能。
我正在尝试class将评论数据集分成两个 classes 说 class A 和 class B。我正在使用 LightGBM
到 class 化。
我已经多次更改 classifier 的参数,但结果并没有太大的不同。
我认为问题出在预处理步骤上。我定义了一个如下所示的函数来处理预处理。我使用了 Stemming
并删除了 stopwords
。我不知道我错过了什么。我试过 LancasterStemmer
和 PorterStemmer
stops = set(stopwords.words("english"))
def cleanData(text, lowercase = False, remove_stops = False, stemming = False, lemm = False):
txt = str(text)
txt = re.sub(r'[^A-Za-z0-9\s]',r'',txt)
txt = re.sub(r'\n',r' ',txt)
if lowercase:
txt = " ".join([w.lower() for w in txt.split()])
if remove_stops:
txt = " ".join([w for w in txt.split() if w not in stops])
if stemming:
st = PorterStemmer()
txt = " ".join([st.stem(w) for w in txt.split()])
if lemm:
wordnet_lemmatizer = WordNetLemmatizer()
txt = " ".join([wordnet_lemmatizer.lemmatize(w) for w in txt.split()])
return txt
是否需要进行更多的预处理步骤以获得更好的准确度?
URL 数据集:Dataset
编辑:
我使用的参数如下。
params = {'task': 'train',
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'learning_rate': 0.01,
'max_depth': 22,
'num_leaves': 78,
'feature_fraction': 0.1,
'bagging_fraction': 0.4,
'bagging_freq': 1}
我已经更改了 depth
和 num_leaves
参数以及其他参数。但是准确率有点卡在某个水平..
有几件事需要考虑。首先,您的训练集不平衡 - class 分布约为 70%/30%。你需要在训练中考虑这个事实。您使用什么类型的功能?使用正确的功能集可以提高您的性能。