金融市场中的NLP——情感分析( 二 )


## 输入文本示例positive "Finnish steel maker Rautaruukki Oyj ( Ruukki ) said on July 7 , 2008 that it won a 9.0 mln euro ( $ 14.1 mln ) contract to supply and install steel superstructures for Partihallsforbindelsen bridge project in Gothenburg , western Sweden."neutral "In 2008 , the steel industry accounted for 64 percent of the cargo volumes transported , whereas the energy industry accounted for 28 percent and other industries for 8 percent."negative "The period-end cash and cash equivalents totaled EUR6 .5 m , compared to EUR10 .5 m in the previous year."
金融市场中的NLP——情感分析文章插图
请注意 , 所有数据都属于来源 , 用户必须遵守其版权和许可条款 。
模型下面是我比较了四款模型的性能 。
金融市场中的NLP——情感分析文章插图
A、 基于词汇的方法创建特定于领域的词典是一种传统的方法 , 在某些情况下 , 如果源代码来自特定的个人或媒体 , 则这种方法简单而强大 。 Loughran和McDonald情感词列表 。 这个列表包含超过4k个单词 , 这些单词出现在带有情绪标签的财务报表上 。 注:此数据需要许可证才能用于商业应用 。 请在使用前检查他们的网站 。
## 样本negative: ABANDONnegative: ABANDONEDconstraining: STRICTLY我用了2355个消极单词和354个积极单词 。 它包含单词形式 , 因此不要对输入执行词干分析和词干化 。 对于这种方法 , 考虑否定形式是很重要的 。 比如not , no , don , 等等 。 这些词会把否定词的意思改为肯定的 , 如果前面三个词中有否定词 , 这里我简单地把否定词的意思转换成肯定词 。
然后 , 情感得分定义如下 。
tone_score = 100 * (pos_count — neg_count) / word_count用默认参数训练14个不同的分类器 , 然后用网格搜索交叉验证法对随机森林进行超参数整定 。
classifiers = []classifiers.append(("SVC", SVC(random_state=random_state)))classifiers.append(("DecisionTree", DecisionTreeClassifier(random_state=random_state)))classifiers.append(("AdaBoost", AdaBoostClassifier(DecisionTreeClassifier(random_state=random_state),random_state=random_state,learning_rate=0.1)))classifiers.append(("RandomForest", RandomForestClassifier(random_state=random_state, n_estimators=100)))classifiers.append(("ExtraTrees", ExtraTreesClassifier(random_state=random_state)))classifiers.append(("GradientBoosting", GradientBoostingClassifier(random_state=random_state)))classifiers.append(("MultipleLayerPerceptron", MLPClassifier(random_state=random_state)))classifiers.append(("KNeighboors", KNeighborsClassifier(n_neighbors=3)))classifiers.append(("LogisticRegression", LogisticRegression(random_state = random_state)))classifiers.append(("LinearDiscriminantAnalysis", LinearDiscriminantAnalysis()))classifiers.append(("GaussianNB", GaussianNB()))classifiers.append(("Perceptron", Perceptron()))classifiers.append(("LinearSVC", LinearSVC()))classifiers.append(("SGD", SGDClassifier()))cv_results = []for classifier in classifiers :cv_results.append(cross_validate(classifier[1], X_train, y=Y_train, scoring=scoring, cv=kfold, n_jobs=-1))# 使用随机森林分类器rf_clf = RandomForestClassifier()# 执行网格搜索param_grid = {'n_estimators': np.linspace(1, 60, 10, dtype=int),'min_samples_split': [1, 3, 5, 10],'min_samples_leaf': [1, 2, 3, 5],'max_features': [1, 2, 3],'max_depth': [None],'criterion': ['gini'],'bootstrap': [False]}model = GridSearchCV(rf_clf, param_grid=param_grid, cv=kfold, scoring=scoring, verbose=verbose, refit=refit, n_jobs=-1, return_train_score=True)model.fit(X_train, Y_train)rf_best = model.best_estimator_


推荐阅读