Commit 6cc41f04 authored by Almouhannad Hafez's avatar Almouhannad Hafez

(6) Add synsets with ngrams and parsing tree atts

parent e46bb1ef
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ***Setup***"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"from nltk.corpus import wordnet as wn\n",
"\n",
"import numpy as np\n",
"\n",
"import pandas as pd\n",
"\n",
"import pickle\n",
"\n",
"from sklearn.feature_selection import SelectKBest, chi2\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.metrics import accuracy_score, classification_report\n",
"\n",
"from tabulate import tabulate"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warming up PyWSD (takes ~10 secs)... took 12.379048109054565 secs.\n"
]
}
],
"source": [
"from pywsd.lesk import simple_lesk"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"import os\n",
"parent_dir = os.path.abspath('..')\n",
"sys.path.append(parent_dir)\n",
"from constants import CONSTANTS\n",
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ***Load dataset***"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"train_df = pd.read_csv(CONSTANTS.AUGMENTED_TRAIN_SET_PATH)\n",
"test_df = pd.read_csv(CONSTANTS.AUGMENTED_TEST_SET_PATH)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ***Load dep. parsing results***\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\TOSHIBA\\AppData\\Roaming\\Python\\Python39\\site-packages\\networkx\\utils\\backends.py:135: RuntimeWarning: networkx backend defined more than once: nx-loopback\n",
" backends.update(_get_backends(\"networkx.backends\"))\n"
]
}
],
"source": [
"with open(CONSTANTS.DEP_PARSED_TEXTS_OBJECT_PATH, 'rb') as f:\n",
" loaded_data = pickle.load(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ***Helper functions***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ***Get processed text by row id***"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Each sentence in the dataset has an id, and a document contain its stanza processing\n",
"def get_doc_by_id(target_id):\n",
" for obj in loaded_data:\n",
" if obj[\"id\"] == target_id:\n",
" return obj[\"processed_text\"]\n",
" return None # Return None if not found\n",
"\n",
"def get_text_tokens(text_id):\n",
" processed_text = get_doc_by_id(text_id)\n",
" tokens = [word.text for sent in processed_text.sentences for word in sent.words]\n",
" return tokens\n",
"\n",
"def get_wsd_synsets(text_id):\n",
" words = get_text_tokens(text_id)\n",
" text = get_doc_by_id(text_id).text\n",
" synsets = []\n",
" for word in words:\n",
" syn = simple_lesk(text, word) # Disambiguate based on context\n",
" if syn:\n",
" synsets.append(syn.name())\n",
" return \" \".join(synsets)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ***Features extraction***\n",
"**Dependency Relation Tuples:** \n",
"- `(head_word, dependent_word, dependency_relation)`\n",
"- `n1 -> n2 grams`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def features_extraction(row_id, n1=1, n2=2):\n",
" doc = get_doc_by_id(row_id)\n",
" feature_tuples = set() # Use a set to avoid duplicates\n",
" \n",
" # Extract dependency relations\n",
" for sentence in doc.sentences:\n",
" for word in sentence.words:\n",
" # Dependency relation tuples\n",
" if word.head > 0: # If not root\n",
" head = sentence.words[word.head - 1] # Adjust head index\n",
" feature_tuples.add((head.lemma, word.lemma, word.deprel))\n",
" \n",
" # Extract n-grams from n1 to n2\n",
" for sentence in doc.sentences:\n",
" words = [word.lemma for word in sentence.words]\n",
" \n",
" for n in range(n1, n2 + 1): # Loop from n1 to n2 inclusive\n",
" for i in range(len(words) - n + 1):\n",
" n_gram = tuple(words[i:i+n]) # Create a tuple for the n-gram\n",
" feature_tuples.add(n_gram)\n",
" flatten_features = ['_'.join(map(str, t)) for t in feature_tuples]\n",
"\n",
" synsets = get_wsd_synsets(row_id)\n",
" flatten_features.extend(synsets.split())\n",
"\n",
" return flatten_features"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ***Features selection***\n",
"- Using `SelectKBest`"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def select_features(X_train, X_test, y_train, scorer, k_value):\n",
"\n",
" # Apply features selection\n",
" selector = SelectKBest(score_func=scorer, k=k_value)\n",
" X_train_selected = selector.fit_transform(X_train, y_train)\n",
" X_test_selected = selector.transform(X_test)\n",
" return X_train_selected, X_test_selected \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ***Plot train, and test accuracies vs number_of_features***\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def plot_accuracies(X_train, X_test, y_train, y_test, model, k_start=500, k_end=4500, step=250):\n",
" train_accuracies = []\n",
" test_accuracies = []\n",
" features_counts = []\n",
" for i in range(k_start, k_end + 1, step):\n",
" X_train_selected, X_test_selected = select_features(X_train, X_test, y_train, chi2, i)\n",
" model.fit(X_train_selected, y_train)\n",
" \n",
" # Training set acc\n",
" y_train_pred = model.predict(X_train_selected)\n",
" train_accuracy = accuracy_score(y_train, y_train_pred)\n",
" train_accuracies.append(train_accuracy)\n",
"\n",
" # Testing set acc\n",
" y_pred = model.predict(X_test_selected)\n",
" test_accuracy = accuracy_score(y_test, y_pred)\n",
" test_accuracies.append(test_accuracy)\n",
"\n",
" features_counts.append(i)\n",
"\n",
" # Plotting the accuracies\n",
" plt.figure(figsize=(10, 6))\n",
" plt.plot(features_counts, train_accuracies, label='Train Accuracy', marker='.')\n",
" plt.plot(features_counts, test_accuracies, label='Test Accuracy', marker='.')\n",
" plt.title('Train and Test Accuracy vs Number of Features')\n",
" plt.xlabel('Number of Features Selected')\n",
" plt.ylabel('Accuracy')\n",
" plt.legend()\n",
" plt.grid()\n",
"\n",
" # Finding closest points (3)\n",
" differences = np.abs(np.array(train_accuracies) - np.array(test_accuracies))\n",
" closest_indices = np.argsort(differences)[:3] # indices of the three smallest differences\n",
" colors = ['darkgreen', 'mediumseagreen', 'lightgreen']\n",
"\n",
" # Draw a rect\n",
" for i, idx in enumerate(closest_indices):\n",
" x = features_counts[idx] - 5\n",
" y_bottom = min(train_accuracies[idx], test_accuracies[idx])\n",
" y_top = max(train_accuracies[idx], test_accuracies[idx])\n",
" height = y_top - y_bottom\n",
"\n",
" plt.gca().add_patch(plt.Rectangle(\n",
" (x, y_bottom), 10, height,\n",
" color=colors[i], alpha=0.5\n",
" ))\n",
" \n",
" # Print the number of selected features for each closest point\n",
" print(f\"Closest Point {i+1}: Number of Features = {features_counts[idx]}, Train Accuracy = {train_accuracies[idx]}, Test Accuracy = {test_accuracies[idx]}\")\n",
"\n",
"\n",
" plt.show() "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ***Evaluate model***\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def print_clf_report_as_table(report):\n",
" data = []\n",
" for key, value in report.items():\n",
" if key != 'accuracy' and key != 'macro avg' and key != 'weighted avg':\n",
" data.append([key, value['precision'], value['recall'], value['f1-score'], value['support']])\n",
"\n",
" data.append(['accuracy', '', '', report['accuracy'], ''])\n",
"\n",
" data.append(['macro avg', report['macro avg']['precision'], report['macro avg']['recall'], report['macro avg']['f1-score'], ''])\n",
"\n",
" data.append(['weighted avg', report['weighted avg']['precision'], report['weighted avg']['recall'], report['weighted avg']['f1-score'], ''])\n",
"\n",
" print(tabulate(data, headers=['Class', 'Precision', 'Recall', 'F1-score', 'Support'], tablefmt='psql'))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def evaluate_model(X_train, X_test, y_train, y_test, scorer, k_value, model):\n",
" X_train_selected, X_test_selected = select_features(X_train, X_test, y_train, scorer, k_value)\n",
" model.fit(X_train_selected, y_train)\n",
" \n",
" # Training set acc\n",
" y_train_pred = model.predict(X_train_selected)\n",
" train_accuracy = accuracy_score(y_train, y_train_pred)\n",
"\n",
" # Testing set acc\n",
" y_pred = model.predict(X_test_selected)\n",
" test_accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
" print(f'Train Accuracy: {train_accuracy}')\n",
" print(f'Test Accuracy: {test_accuracy}')\n",
" print(f'Difference: {train_accuracy-test_accuracy}') \n",
" # Print classification report\n",
" report = classification_report(y_test, y_pred, output_dict=True)\n",
" print_clf_report_as_table(report)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ***Use Dependecy features with N-Grams and synsets with WSD***\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"n1 = 1\n",
"n2 = 3\n",
"def extractor(row_id):\n",
" return features_extraction(row_id, n1, n2)\n",
"\n",
"train_df[\"features\"] = train_df[\"Id\"].apply(features_extraction)\n",
"test_df[\"features\"] = test_df[\"Id\"].apply(extractor)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train set shape after features extraction: (4320, 47225)\n",
"Test set shape after features extraction: (480, 47225)\n"
]
}
],
"source": [
"\n",
"all_features_flat_train = [' '.join(features) for features in train_df[\"features\"]]\n",
"all_features_flat_test = [' '.join(features) for features in test_df[\"features\"]]\n",
"\n",
"vectorizer = TfidfVectorizer()\n",
"X_train = vectorizer.fit_transform(all_features_flat_train)\n",
"X_test = vectorizer.transform(all_features_flat_test)\n",
"print(f\"Train set shape after features extraction: {X_train.shape}\")\n",
"print(f\"Test set shape after features extraction: {X_test.shape}\")\n",
"\n",
"y_train = train_df[\"label\"]\n",
"y_test = test_df[\"label\"]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Closest Point 1: Number of Features = 500, Train Accuracy = 0.9414351851851852, Test Accuracy = 0.9229166666666667\n",
"Closest Point 2: Number of Features = 5500, Train Accuracy = 0.9962962962962963, Test Accuracy = 0.9708333333333333\n",
"Closest Point 3: Number of Features = 2500, Train Accuracy = 0.9912037037037037, Test Accuracy = 0.9625\n"
]
},
{
"data": {
"image/png": "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kys7Ue6Wq6zHXQLdqgNOzmaOioiIiIiItJhc2Ylyr3PFadiJiIiIiKyCyZWdMLrliskVEREREZFFMbmyE0YnV56czIKIiIiIyJKYXNkBtUZAZp44SYWXoqxugdqWqwAzR0VERERERIUxubIDmXlK3e3ydwtkyxURERERkSUxubID2i6BrnIZnJ3KeMmy2HJFRERERGQNTK7sQLnHWwFPZgvkmCsiIiIiIoticmUHjEqustLE3+wWSERERERkUUyu7EBGrjiZRZnJVUE2UJAp3ma3QCIiIiIii2JyZQfKvYCwdryV3A1w8TRzVEREREREVBiTKztQ7m6Bhadhl0jMHBURERERERXG5MoOlH8B4ceTWXC8FRERERGRxTG5sgPlT64eT2bhGWjmiIiIiIiIqCgmV3YgQ5dcOZW+o3Yadg8mV0RERERElsbkyg7oWq7cytlyxeSKiIiIiMjimFzZAePHXDG5IiIiIiKyNCZXdsDo2QI9OaEFEREREZGlMbmyA+VvudJOxc6WKyIiIiIiS2NyZeM0GgEZeeVYRFitArLvireZXBERERERWRyTKxuXma+CIIi3vRSlJFc59wAIgEQKuPtZJDYiIiIiInqCyZWN007D7uIkhUIuK3lH7TTs7v6AtJT9iIiIiIjILJhc2TiOtyIiIiIisg9Mrmyc0ckVZwokIiIiIrIKJlc2LsPYadg9AswcERERERERGcLkysYZ3y2QLVdERERERNbA5MrG3XiQAwCQy8p4qbIeT2jBMVdERERERFbB5MqGrT96HV/tuQwA2HnmDtYfvV7yzllp4m9PJldERERERNbA5MpG3U7PxdRNp/F4iSsIAKZt+ge303MNF9BOxc5ugUREREREVsHkykZduZcNjaC/TS0IuHovp/jOglBozBUntCAiIiIisgYmVzYqzM8dUon+NqkECPVzK75zfgagyhNvc8wVEREREZFVMLmyUTW8XTF3QNNCCZYG/+1RGzW8XYvvrJ2G3cULcDaQfBERERERkdnZRHK1ePFihIaGQqFQIDIyEkeOHClxX6VSidmzZyMiIgIKhQLNmzdHfHx8ift/9NFHkEgkmDRpkhkiN6/BbWpj87gmaF5zD9qFbccLzf0M76jrEshWKyIiIiIia7F6crV+/XrExcVhxowZOHHiBJo3b47o6GikpaUZ3H/69OlYtmwZFi1a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RERERFSmvn374siRIxg7dqzeGmLmxuTKDnhrW67cmFwREREREZXFEtOuG8IOpXbAm90CiYiIiIhsHpMrO6Adc6V297NyJEREREREVBImV3ZAO+aKLVdERERERLaLyZUd0K5zxQktiIiIiIhsF5MrW6dRF5rQgt0CiYiIiIhsFZMrGyfNfQgpAA0AjVt1a4dDREREREQlYHJl46TZdwEAmVIXQMqZ84mIiIiIbBWTKxsny7kHAEiXKawcCREREREZSyKRlPozc+bMSh17y5Yt5d5/zJgxkMlk2LBhQ4XPSaVjU4iNk92/CADI/v/27j0uqjr9A/hnZmAYQGe4ykUUFFE0FVCE0BVMSMhLRbmaLzfxsmwmbLqU11LCUqxV8pJZWYJtFmmb5ibaGqTmtSRQCaVWrVwTzSsiCQzz/P7wx1lHLmoODurn/XqdV8z3POd7vufMw8TjOec7als4WXcoRERERHePC8eBs4cBF3/A0LrJdnPixAnl548++gizZs1CSUmJ0taiRYsm2/fVKioqkJ2djSlTpmDFihX44x//eFv225CqqipotVqrjqEp8MpVc/bte9B/9XcAQGDladgXfWzlARERERE1IyJA1aWbX75eDizsCqwccuW/Xy+/0l5dceN9iNzQED09PZXFYDBApVKZtWVnZ6Nz587Q6XQIDAzEG2+8oWxbVVWF5ORkeHl5QafTwdfXF+np6QAAPz8/AEB8fDxUKpXyuiFr1qxBly5dMG3aNGzbtg3Hjh0zW19ZWYmpU6eiTZs2sLOzQ4cOHfDuu+8q67/77jsMHjwYer0eLVu2RN++fXH48GEAQL9+/TBp0iSz/h599FGMHj1aee3n54eXXnoJo0aNgl6vx1/+8hcAwNSpU9GxY0c4ODigffv2mDlzJqqrq836+te//oVevXpBp9PBzc0N8fHxAIDZs2eja9eudY41ODgYM2fObPR8NBVeuWquLhwH/jURKlz5xVUBMOTOAro91qT/ukJERER0x6iuAOZ631ofYgJynoM657mbu0toxi+A1vGWdr1q1SrMmjULr7/+OkJCQlBQUIDExEQ4OjoiISEBixcvxvr167F69Wq0bdsWx44dU4qib775Bq1atUJmZibi4uKg0Wga3de7776LP/3pTzAYDHjooYeQlZVlVoCMGjUKu3btwuLFixEUFISjR4/i9Okrj6cc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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Make sure to update step in plotting before running this cell\n",
"model = MultinomialNB(alpha = 0.01)\n",
"plot_accuracies(X_train, X_test, y_train, y_test, model, k_end = 47000, step=1000)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train Accuracy: 0.9962962962962963\n",
"Test Accuracy: 0.9708333333333333\n",
"Difference: 0.02546296296296302\n",
"+---------------------------------+--------------------+--------------------+------------+-----------+\n",
"| Class | Precision | Recall | F1-score | Support |\n",
"|---------------------------------+--------------------+--------------------+------------+-----------|\n",
"| Acne | 1.0 | 1.0 | 1 | 21.0 |\n",
"| Arthritis | 1.0 | 1.0 | 1 | 20.0 |\n",
"| Bronchial Asthma | 1.0 | 0.9473684210526315 | 0.972973 | 19.0 |\n",
"| Cervical spondylosis | 0.9545454545454546 | 1.0 | 0.976744 | 21.0 |\n",
"| Chicken pox | 0.7142857142857143 | 1.0 | 0.833333 | 15.0 |\n",
"| Common Cold | 1.0 | 1.0 | 1 | 21.0 |\n",
"| Dengue | 1.0 | 0.7727272727272727 | 0.871795 | 22.0 |\n",
"| Dimorphic Hemorrhoids | 1.0 | 1.0 | 1 | 19.0 |\n",
"| Fungal infection | 1.0 | 1.0 | 1 | 26.0 |\n",
"| Hypertension | 1.0 | 1.0 | 1 | 18.0 |\n",
"| Impetigo | 1.0 | 1.0 | 1 | 23.0 |\n",
"| Jaundice | 1.0 | 1.0 | 1 | 22.0 |\n",
"| Malaria | 1.0 | 1.0 | 1 | 17.0 |\n",
"| Migraine | 1.0 | 1.0 | 1 | 24.0 |\n",
"| Pneumonia | 1.0 | 1.0 | 1 | 22.0 |\n",
"| Psoriasis | 1.0 | 0.8235294117647058 | 0.903226 | 17.0 |\n",
"| Typhoid | 1.0 | 1.0 | 1 | 18.0 |\n",
"| Varicose Veins | 1.0 | 0.96 | 0.979592 | 25.0 |\n",
"| allergy | 0.7894736842105263 | 1.0 | 0.882353 | 15.0 |\n",
"| diabetes | 1.0 | 0.9411764705882353 | 0.969697 | 17.0 |\n",
"| drug reaction | 1.0 | 1.0 | 1 | 16.0 |\n",
"| gastroesophageal reflux disease | 0.95 | 0.9047619047619048 | 0.926829 | 21.0 |\n",
"| peptic ulcer disease | 0.9444444444444444 | 0.9444444444444444 | 0.944444 | 18.0 |\n",
"| urinary tract infection | 0.9583333333333334 | 1.0 | 0.978723 | 23.0 |\n",
"| accuracy | | | 0.970833 | |\n",
"| macro avg | 0.9712951096174781 | 0.9705836635557997 | 0.968321 | |\n",
"| weighted avg | 0.9762364837282601 | 0.9708333333333333 | 0.971284 | |\n",
"+---------------------------------+--------------------+--------------------+------------+-----------+\n"
]
}
],
"source": [
"model = MultinomialNB(alpha=0.01)\n",
"evaluate_model(X_train, X_test, y_train, y_test, chi2, 5500, model)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "NLP",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.20"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
\ No newline at end of file
...@@ -108,26 +108,28 @@ ...@@ -108,26 +108,28 @@
> ***Using augmented dataset*** > ***Using augmented dataset***
| Case\\Criterion | Accuracy(Train) | Accuracy(Test) | Difference(%) | Precision(Test-Average) | Recall(Test-Average) | F1-Score(Test-Average) | Notes | | Case\\Criterion | Accuracy(Train) | Accuracy(Test) | Difference(%) | Precision(Test-Average) | Recall(Test-Average) | F1-Score(Test-Average) | Notes |
| -------------------------------------------------- | --------------- | -------------- | ------------- | ----------------------- | -------------------- | ---------------------- | ------------------------- | | ------------------------------------------------------------ | --------------- | -------------- | ------------- | ----------------------- | -------------------- | ---------------------- | ------------------------- |
| nltk stemmer | 0.9852 | 0.9604 | 2.5 | 0.9593 | 0.9587 | 0.9574 | alpha=0.1, 450features | | nltk stemmer | 0.9852 | 0.9604 | 2.5 | 0.9593 | 0.9587 | 0.9574 | alpha=0.1, 450features |
| nltk lemmatizer | 0.9891 | 0.9625 | 2.7 | 0.9635 | 0.9626 | 0.9608 | alpha=0.1, 700features | | nltk lemmatizer | 0.9891 | 0.9625 | 2.7 | 0.9635 | 0.9626 | 0.9608 | alpha=0.1, 700features |
| Stanza lemmatizer | 0.9843 | 0.9646 | 2.0 | 0.9652 | 0.9642 | 0.9623 | alpha=0.1, 550features | | Stanza lemmatizer | 0.9843 | 0.9646 | 2.0 | 0.9652 | 0.9642 | 0.9623 | alpha=0.1, 550features |
| SpaCy lemmatizer | 0.9657 | 0.9563 | 0.9 | 0.9582 | 0.9550 | 0.9526 | alpha=0.1, 300features | | SpaCy lemmatizer | 0.9657 | 0.9563 | 0.9 | 0.9582 | 0.9550 | 0.9526 | alpha=0.1, 300features |
| Lemma + Verbs only | 0.7229 | 0.6438 | 7.9 | 0.6675 | 0.6400 | 0.6341 | alpha=0.1, 350features | | Lemma + Verbs only | 0.7229 | 0.6438 | 7.9 | 0.6675 | 0.6400 | 0.6341 | alpha=0.1, 350features |
| Lemma + Adjectives only | 0.8037 | 0.6250 | 17.9 | 0.6531 | 0.6128 | 0.6057 | alpha=0.1, 450features | | Lemma + Adjectives only | 0.8037 | 0.6250 | 17.9 | 0.6531 | 0.6128 | 0.6057 | alpha=0.1, 450features |
| Lemma + Nouns only | 0.9766 | 0.9229 | 5.4 | 0.9230 | 0.9204 | 0.9175 | alpha=0.1, 850features | | Lemma + Nouns only | 0.9766 | 0.9229 | 5.4 | 0.9230 | 0.9204 | 0.9175 | alpha=0.1, 850features |
| Text + (1,2)Gram | 0.9958 | 0.9688 | 2.7 | 0.9679 | 0.9681 | 0.9662 | alpha=0.01, 3100features | | Text + (1,2)Gram | 0.9958 | 0.9688 | 2.7 | 0.9679 | 0.9681 | 0.9662 | alpha=0.01, 3100features |
| Text + (1,3)Gram | 0.9977 | 0.9708 | 2.7 | 0.9709 | 0.9704 | 0.9677 | alpha=0.01, 9600features | | Text + (1,3)Gram | 0.9977 | 0.9708 | 2.7 | 0.9709 | 0.9704 | 0.9677 | alpha=0.01, 9600features |
| Text + (1,4)Gram | 0.9956 | 0.9667 | 2.9 | 0.9671 | 0.9660 | 0.9631 | alpha=0.01, 8600features | | Text + (1,4)Gram | 0.9956 | 0.9667 | 2.9 | 0.9671 | 0.9660 | 0.9631 | alpha=0.01, 8600features |
| Text + (2,3)Gram | 0.9970 | 0.9500 | 4.7 | 0.9505 | 0.9467 | 0.9452 | alpha=0.01, 10100features | | Text + (2,3)Gram | 0.9970 | 0.9500 | 4.7 | 0.9505 | 0.9467 | 0.9452 | alpha=0.01, 10100features |
| Text + (2,4)Gram | 0.9975 | 0.9375 | 6.0 | 0.9366 | 0.9334 | 0.9311 | alpha=0.01, 16600features | | Text + (2,4)Gram | 0.9975 | 0.9375 | 6.0 | 0.9366 | 0.9334 | 0.9311 | alpha=0.01, 16600features |
| Stanza Dep. Relation tuples | 0.9995 | 0.9521 | 4.7 | 0.9513 | 0.9503 | 0.9484 | alpha=0.01, 8000features | | Stanza Dep. Relation tuples | 0.9995 | 0.9521 | 4.7 | 0.9513 | 0.9503 | 0.9484 | alpha=0.01, 8000features |
| Stanza Dep.Relation+POS Relations+Headwords tuples | 0.9986 | 0.9479 | 5.1 | 0.9481 | 0.9471 | 0.9440 | alpha=0.01, 7500features | | Stanza Dep.Relation+POS Relations+Headwords tuples | 0.9986 | 0.9479 | 5.1 | 0.9481 | 0.9471 | 0.9440 | alpha=0.01, 7500features |
| Stanza Dep. Relation tuples + (1,3) Grams | 1.0000 | 0.9750 | 2.5 | 0.9758 | 0.9747 | 0.9734 | alpha=0.01, 66000features | | Stanza Dep. Relation tuples + (1,3) Grams | 1.0000 | 0.9750 | 2.5 | 0.9758 | 0.9747 | 0.9734 | alpha=0.01, 66000features |
| BO synsets | 0.9782 | 0.9333 | 4.5 | 0.9325 | 0.9308 | 0.9272 | alpha=0.01, 1500features | | BO synsets | 0.9782 | 0.9333 | 4.5 | 0.9325 | 0.9308 | 0.9272 | alpha=0.01, 1500features |
| BO synsets + POS filtering | 0.9810 | 0.9271 | 5.4 | 0.9287 | 0.9256 | 0.9224 | alpha=0.01, 1500features | | BO synsets + POS filtering | 0.9810 | 0.9271 | 5.4 | 0.9287 | 0.9256 | 0.9224 | alpha=0.01, 1500features |
| BO synsets + WSD | 0.9961 | 0.9563 | 4.0 | 0.9594 | 0.9564 | 0.9542 | alpha=0.01,1750features | | BO synsets + WSD | 0.9961 | 0.9563 | 4.0 | 0.9594 | 0.9564 | 0.9542 | alpha=0.01,1750features |
| BO synsets + WSD + Stanza Dep. Relation tuples + (1,3) Grams | 0.9963 | 0.9708 | 2.5 | 0.9713 | 0.9706 | 0.9683 | alpha=0.01,5500features |
| | | | | | | | |
--- ---
> ***Applied features selection and model's hyperparameters tuning*** > ***Applied features selection and model's hyperparameters tuning***
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment